Telegram Ads API & Integrations: Automate Your Workflow
Telegram publishes no API for advertisers: its developer site lists a Bot API, a client API, TDLib, a Gateway API and a Payments API, and none of them creates or reports on ad campaigns. ADSLY connects to your ad accounts through an authorised session and puts three integration surfaces on top — a REST API that reads your statistics and, if you allow it, manages your campaigns; signed webhooks; and an endpoint that takes conversions from your tracker.
How the Telegram Ads API Works
Telegram’s ad platform lives at ads.telegram.org and is operated through its web interface. We checked Telegram’s developer documentation in October 2026: core.telegram.org presents the Bot API (with a Payments API for bots), TDLib, the Gateway API and the Telegram API for building client apps. Its two ad-related articles are Sponsored Messages, which tells client apps how to display ads, and one on ad revenue for channel and bot owners; neither is for an advertiser managing campaigns. The platform’s own getting-started guide mentions no API either.
ADSLY therefore works through a session of the Telegram account that owns the ad account. You connect an account in one of three ways: enter your phone number and confirm the request in Telegram, use our browser extension while you are logged in to ads.telegram.org, or paste the session token yourself. The request connects the ad account only, not your personal Telegram. Adstat-sourced accounts connect with your Adstat login. Once connected, Euro, TON and Stars accounts are handled the same way.
What ADSLY Does Once an Account Is Connected
Everything you would click through in the web interface becomes an action in the panel:
Campaign creation — one campaign with full settings, or a bulk build: several texts × several links × a list of channels, with an optional split into one campaign per country, topic or device.
CPM and budget changes — set, raise or lower the bid on every selected campaign, by an amount or by a percent; add budget, decrease it, or withdraw what is left.
Pause, resume and delete — for a selection, a group, or every campaign that matches the current filter.
Statistics sync — views, clicks, actions, spend, CTR and CPM are stored once an hour for every campaign.
Text, title and media edits — changed in bulk without recreating the campaigns.
Balance monitoring — the dashboard lists every account with its balance and its count of active, in-review, declined and stopped campaigns, refreshed with each sync.
Data Export & Reporting
The panel keeps more history than a single statistics tab shows and lets you take it out:
Excel, CSV and PDF export — a data file with the columns you choose, or a PDF report, for a whole account, one group or selected campaigns. Available on Pro and Agency.
Hourly performance data — one snapshot per campaign per hour, kept for 30 days; longer periods use daily totals. We have no hour-of-day benchmark across accounts, so use the hourly chart of your own campaigns to find your hours.
All-accounts analytics — the Analytics page adds up views, clicks and actions across every account you can access. Spend stays split by currency: euros, TON and Stars are never added together.
Change history — every status, bid and budget change on a campaign is logged with who or what made it, including rules and Auto CPM.
Automation Hooks
Rules and automatic actions run after each hourly sync, with no one watching the dashboard:
IF/THEN rules — conditions on views, clicks, actions, CTR, CVR, spend, CPC, CPA, CPM and budget, each measured over all time or over the last 1–168 hours. Actions: pause, activate, set CPM, raise or lower CPM by an amount or a percent, add or decrease budget, or only notify. Example: IF CPM is above €2.50 over the last 6 hours, THEN lower the bid by 15%. A rule can sit on one campaign, a group, a selection or the whole account.
Rules on your own conversions — once your tracker sends postbacks, the same engine can act on leads, conversions, purchases, revenue, ROAS, cost per lead and cost per sale. An account that sends no postbacks is never paused by such a rule: no data is treated as unknown, not as zero.
Rule drafts across accounts — a saved draft lives on your ADSLY login, and Apply to cabinets copies it into every account you tick.
Auto CPM — once an hour the panel checks whether the ad is actually shown in the channels and bots it targets. Shown in most of them: the bid goes down 10%. Not shown in most: up 10%. It needs two checks in a row that agree, waits three hours between changes and makes at most six a day per campaign.
Recreate and AI Recreate — a declined ad is re-submitted automatically; with AI Recreate each attempt gets reworded text. We publish no recovery percentage for it.
Integration Use Cases for Agencies
Four set-ups these pieces make possible:
Client reporting — export a PDF or Excel file per client account or per group, or pull /v1/stats into the reporting tool you already use.
Alerts — a rule with the notify action reports in the hourly digest, delivered to Telegram, email or in-app. For your own systems, the status_change webhook fires when a campaign moves to Declined, Active or any other status.
Custom dashboards — /v1/stats/total returns totals and chart points per account; a typical sync is three or four requests, well inside the 60 requests per minute a key allows.
Closing the loop with a tracker — send leads and sales to the postback endpoint and the campaign table shows cost per lead and per sale next to Telegram’s own columns. The panel has ready-to-paste postback templates for Keitaro, RedTrack, Binom and Voluum.
ADSLY REST API and Webhooks
The API is live for Pro and Agency accounts. Open API in the menu, press + New key, and choose which accounts the key reaches — one, several, or all of them — and whether it may also manage campaigns. Up to five keys can be active at a time.
Base URL: https://app.adsly.pro/api/v1 · Auth: header X-API-Key · Rate limit: 60 requests per minute per key
Every key reads:
-
GET /v1/account/info— the accounts this key can see -
GET /v1/campaigns— campaigns with their metrics; filters by status, title, bot or channel username, landing-page domain and ad type; cursor pagination -
GET /v1/stats— per-campaign statistics for a period, grouped by account -
GET /v1/stats/total— totals and chart points per account -
GET /v1/stats/analytics— period analytics with top campaigns -
GET /v1/campaigns/:adId/history— one campaign over a period -
GET /v1/conversions— conversions received by postback, per campaign
Manage campaigns. A key stays read-only until you switch this on for it. Then it can also create campaigns (up to 100 per call), edit the text, link, CPM and daily cap, pause and resume, add or withdraw budget, copy, run bulk actions on up to 1,000 campaigns at once, delete, and upload media. No key can take money out of an account: budget only moves between the account balance and its campaigns. Every change made through the API shows in the campaign’s history in the panel, and create, budget, copy and bulk calls accept an Idempotency-Key, so a retry after a timeout does not run twice.
The full reference lives at adsly.pro/docs/api, with a Markdown copy of each page and an llms.txt index for AI assistants.
Two things trip up first integrations. Money fields (spent, budget, cpm, cpc, cpa, ctr) arrive as strings to keep precision, so parse them before doing arithmetic. And ad_id is unique only inside one account — Telegram reuses ids — so always store it together with account_id.
Webhooks. Put a Postback URL on a key and ADSLY sends signed JSON to it: status_change when a campaign’s status changes at sync, and hourly_digest five minutes past each hour with views, clicks, spend and actions per campaign for the hour that just closed. Each request carries an HMAC-SHA256 signature in X-Adsly-Signature, a timestamp and a unique delivery id. The endpoint must be public HTTPS; a failed delivery is retried once.
Conversions in. Switch on Receive postbacks for a key, then either POST /v1/postback from your backend with the key in the header, or give your tracker the write-only URL from Generate tracker URL. Events are lead, conversion and purchase, with an optional amount and currency; up to 1,000 events fit in one request, and a key accepts 20 events per second. An event is matched to its campaign by the value carried in the ad’s link — the ?start= payload for bot ads, your tracker’s parameter for website ads.
Security & Access
These accounts hold real budgets, so each surface is deliberately narrow:
Session, not password — a Telegram Ads account connects by confirming a request in Telegram, through the browser extension or with a session token. The connection covers the ad account, not your personal Telegram.
Read-only by default, stored hashed — a key only reads until its owner turns on Manage campaigns, and even then it cannot take money out of an account. Keys are kept as SHA-256 hashes, so a lost key cannot be recovered, only revoked and replaced.
Signed webhooks — verify the HMAC signature and reject requests whose timestamp is more than five minutes old. ADSLY refuses to deliver to non-HTTPS, loopback or private addresses.
Per-account team access — on the Agency plan each teammate gets Viewer, Manager or no access to each account. Teammates create their own API keys, and a key reaches only the accounts shared with them: read-only where they are Viewer, changeable where they are Manager.
Automate your Telegram Ads workflow. ADSLY manages 500,000+ campaigns — and a Euro account opens for any country. All three account types (TON, Euro, Stars). IF/THEN rules, bulk operations, an API for stats and campaign management, webhooks and export. Start free — 3-day Pro trial →
Frequently Asked Questions
Is there a public Telegram Ads API?
Not for advertisers. Telegram’s developer site lists the Bot API, the client API, TDLib, a Gateway API and a Payments API (checked in October 2026); none of them manages ad campaigns, and the Sponsored Messages section is for apps that display ads. The ad platform at ads.telegram.org is operated through its web interface. ADSLY works on top of it through an authorised session.
How does ADSLY connect to my Telegram Ads account?
Through a session of the Telegram account that owns the ad account. You confirm a request in Telegram after entering your phone number, use the browser extension, or paste the session token. The request connects the ad account only. Euro, TON and Stars accounts all connect this way; Adstat-sourced accounts connect with an Adstat login.
Is my Telegram Ads data secure with ADSLY?
The integration surfaces are narrow by design. API keys are read-only unless you turn on Manage campaigns, can never take money out of an account and are stored as hashes; every API change is logged in the campaign’s history; webhooks are signed with a per-key secret and go only to public HTTPS endpoints; the write-only tracker URL can post conversions but cannot read anything; and on the Agency plan access is granted per account and per person.
Can I export Telegram Ads data to Google Sheets?
There is no direct Google Sheets connector. Export a CSV or Excel file from the panel and import it, or read the API from a script — /v1/stats returns per-campaign numbers for any period.
Does ADSLY support webhooks for Telegram Ads?
Yes. A key with a Postback URL receives status_change whenever a campaign’s status changes and hourly_digest once an hour with per-campaign views, clicks, spend and actions. Both are signed with HMAC-SHA256, and a Test button on the key sends a ping so you can check your receiver.
Is the ADSLY REST API available now?
Yes, on the Pro and Agency plans, and you create keys yourself in the panel. Every key reads the account list, campaigns, statistics, analytics, per-campaign history and received conversions, at 60 requests per minute per key. A key with Manage campaigns switched on can also create, edit, pause, resume, fund, copy and delete campaigns and upload media. Documentation: adsly.pro/docs/api.