Adsly.pro
Documentation pages All documentation

Stats

GET /v1/stats per campaign, /v1/stats/total for cabinet totals and charts, /v1/stats/analytics for currency split and top campaigns — periods, custom date and hour ranges.

View as Markdown

Three endpoints, from detailed to summary. All return data per cabinet, for every cabinet the key reaches.

EndpointReturns
GET /v1/statsevery campaign’s numbers for the period
GET /v1/stats/totaleach cabinet’s totals plus chart points
GET /v1/stats/analyticstotals split by currency, chart, top campaigns

One campaign over a period: GET /v1/campaigns/{ad_id}/history.

Periods

periodWindow
1dlast 24 hours (default for /stats and /stats/total)
7dlast 7 days
30dlast 30 days (default for /stats/analytics)
allall time
customstartDate and endDate (YYYY-MM-DD), optionally startHour and endHour (0–23)

Any <N>h or <N>d also works (6h, 14d, up to 365 days). An unrecognised value is read as the last 24 hours — it doesn’t return an error, so check your spelling. All times are UTC.

# 14:00–15:59 UTC on 8 October
curl -s "https://app.adsly.pro/api/v1/stats?period=custom&startDate=2026-10-08&endDate=2026-10-08&startHour=14&endHour=15" \
  -H "X-API-Key: $ADSLY_API_KEY"

GET /v1/stats

Per campaign, nested by cabinet: data[account_id][ad_id].

{
  "success": true,
  "data": {
    "53": {
      "90412": { "views": 640, "clicks": 7, "actions": 3, "spent": 0.96, "ctr": 1.09, "cpm": 1.5, "cpa": 0.32, "group_id": 7 }
    }
  },
  "meta": { "period": "7d" }
}

Keys are strings; values here are numbers (unlike the campaign object). cpa is spend per action; ctr is a percentage.

GET /v1/stats/total

The dashboard endpoint: totals and a chart for each cabinet.

{
  "success": true,
  "data": {
    "accounts": {
      "53": {
        "chart": [
          { "label": "2026-10-08 12:00", "views": 52, "clicks": 1, "spent": 0.83, "budget": 4.95, "ctr": 1.92, "cpc": 0.83, "cpm": 16 }
        ],
        "totals": {
          "views": 121, "clicks": 3, "spent": 1.81, "ctr": 2.48, "cpc": 0.6, "cpm": 14.95,
          "campaigns": 4, "active": 2, "stopped": 2, "declined": 0,
          "totalBudget": 5.21, "totalSpentAllTime": 2.79
        },
        "cabinetType": "euro"
      }
    },
    "period": "1d",
    "lastUpdated": "2026-10-08T10:02:54.016Z"
  },
  "meta": { "period": "1d" }
}

chart points are hourly or daily depending on the period. cabinetType gives the currency (euro → EUR, ton → TON, stars → Stars).

GET /v1/stats/analytics

Like /stats/total, plus spend split by currency and the top campaigns.

{
  "success": true,
  "data": {
    "accounts": {
      "53": {
        "chart": [ { "label": "2026-10-08 12:00", "views": 52, "clicks": 1, "spent": 0.83,
                     "spent_ton": 0, "spent_euro": 0.83, "spent_stars": 0, "ctr": 1.92, "cpc": 0.83, "cpm": 16 } ],
        "totals": { "views": 121, "clicks": 3, "spent": 1.81,
                    "spentByCurrency": { "ton": 0, "euro": 1.81, "stars": 0 },
                    "ctr": 2.48, "cpc": 0.6, "cpm": 14.95 },
        "topCampaigns": [ { "ad_id": 90412, "account_id": 53, "title": "API test", "status": "Active",
                            "views": 58, "clicks": 1, "spent": 0.85, "ctr": 1.72, "cpc": 0.85 } ]
      }
    }
  },
  "meta": { "period": "30d" }
}

Notes

  • Stats follow Telegram’s own counters, synced to Adsly regularly; the newest hour fills in as syncs arrive.
  • Never add up spent across cabinets with different currencies.
  • For conversions you track yourself (leads, deposits, sales) see Conversions — Telegram’s actions are joins and bot starts, not your conversions.
  • Prefer the hourly digest webhook over polling stats every few minutes.

Updated 2026-10-08

Discuss your project