Skip to main content

Post buttons and links

Every ad you compose on Onflow Ads goes through the same editor, whichever product you are in: the Subscriber Exchange, Paid Promotions and Cross-Promotion all use it. Three of its capabilities sit on the plan ladder, a fourth is sold separately for $1, and one line is added under the post by the platform itself.

This page is the whole rulebook for what you may put under and inside a post — and for what we put there.

Before you start​

  • Know your tier. The composer reads it live; the numbers below are what it will enforce.
  • Have wallet balance if you want the add-on. The External Links add-on is $1, charged from your Onflow Ads wallet.
  • Compose on the website. The button and link rules are applied when the post is created, here; the Telegram bot does not re-check them when it sends. The one thing decided at send is the attribution line, and it does not read your plan at all.

The ladder​

FreeLitePlusEliteMasterUltimate
Inline buttons per post—12344
Coloured inline buttons——✓✓✓✓
Public Telegram links✓✓✓✓✓✓
Private Telegram links—✓✓✓✓✓
Non-Telegram links$1 add-on$1 add-on$1 add-on$1 add-on$1 add-on$1 add-on
Ads in your channels carry the attribution lineYesYes————

Four buttons is the ceiling — no rung goes above it, and Ultimate matches Master here. The last row is the odd one out and the one people misread: it is not about the ads you write, it is about the ads other people's campaigns put into your channels. The attribution line explains it.

A legacy status composes as Free

A small number of accounts carry an earned Referral Premium status (🌟) from the retired referral tier. It grants premium styling on the Telegram bot's messages and nothing that costs money, so for everything on this page it behaves exactly like Free: no buttons, no colours, no private Telegram links. Today's Referral Programme pays boost credit and never grants a status at all.

Inline buttons​

A button is a tappable row under the post, carrying a label and a URL. You add them in the composer's button rows.

What each rung unlocks. The rows unlock one at a time, and each locked row names the rung that would open it: button one on Lite, button two on Plus, button three on Elite, button four on Master.

What you see on Free. A single locked Inline buttons row with a Locked button; pressing it says, in a notice, that buttons come with Lite, with a See plans action. Buttons are not reduced on Free — they are off.

The rules on a button.

RuleValue
Maximum buttons per postYour tier's cap, never more than 4
Button label1–48 characters
Line breaks in a labelNot allowed
Button URLMust pass the link rules below
Button colourOne per button — Default, Blue, Green or Red — from Plus up
Buttons on an albumNot possible. A marketplace creative with more than one photo cannot carry buttons

In Paid Promotions, where the platform publishes the ad for you, buttons go out one per row — stacked vertically under the post rather than sitting side by side.

Buttons and multi-photo creatives do not mix

Telegram cannot attach buttons to an album — its own send for two or more photos has nowhere to put an inline keyboard. A Paid Promotions creative that carries more than one photo and a button is marked as a hard failure in the composer, kept out of the cart, and refused again at checkout: "Telegram cannot show buttons under an album. Keep the buttons with a single photo, a video or a text-only post — or drop to one photo." One photo (with a caption of up to 1,024 characters), a video, or a text-only post of up to 4,096 characters — any of those carries buttons.

What you see if you break one.

What you seeWhat it means
"Inline buttons are not available on this account."You are on Free, where the feature is off
"Your plan allows up to N button(s) per post."You sent more buttons than your cap
"Button text must be 1–48 characters."An empty or over-long label
"Button text cannot contain line breaks."A newline inside a label
"Each button needs a text and a url."A row was submitted with one half missing
A locked row that still holds content stays visible

If you drop to a lower tier, or reopen an old draft, a button beyond your current cap does not vanish. The composer keeps the row visible, marked locked, with an ✕ to clear it — and the server refuses to save the post until you do. That is deliberate: silently deleting a button you wrote is worse than making you delete it yourself.

Button colours​

From Plus up, each button can carry a colour. The composer shows a small labelled swatch row — Colour, then four swatches — beside every unlocked button row.

SwatchWhat Telegram draws
DefaultThe app's ordinary button. This is what you get if you pick nothing
BlueA blue button
GreenA green button
RedA red button

The rules are short:

  • One colour per button, and every button you are allowed may carry its own. Four buttons can be four different colours.
  • Plus and above only. Off on Free and Lite; on at Plus, Elite, Master and Ultimate — no rung above Plus buys anything more here.
  • Colour is decoration, never a gate. Nothing about a colour changes where a button goes, how it is tracked, or whether the post sends.
Below Plus the colour is dropped, not refused

This is the one composer rule with no error message. An over-cap button blocks the save and tells you so; an un-entitled colour is simply discarded and the button saves as an ordinary one. On Free and Lite the swatch row is not drawn at all — there is no locked control naming Plus, so nothing on screen tells you what you are missing.

The practical consequence is on the way down: if you drop to Lite, or your membership lapses, re-saving a coloured creative silently strips its colours. The buttons survive; the colours do not, and nothing warns you.

Old Telegram apps just draw a plain button

Button colours use a Telegram feature added in February 2026. An app older than that ignores the colour and draws an ordinary working button. Nothing degrades except the colour, which is why the composer offers it without any version warning.

Every URL is judged once, at creation time, and sorted into one of four classes.

ClassExamplesWho may use it
Public Telegramhttps://t.me/yourchannel, https://t.me/yourchannel/42Every tier, including Free
Private Telegramhttps://t.me/+AbCdEf, https://t.me/joinchat/AbCdEf, https://t.me/c/1234567890/5Lite and above
Non-TelegramAnything else — your website, a shop, a landing pageAnyone who has bought the $1 External Links add-on for their current tier
InvalidMalformed URLs, or anything over 512 charactersNobody

A host counts as Telegram if it is t.me, telegram.me, telegram.dog, t.dog or telegram.org, or a subdomain of one. A look-alike such as t.me.example.com does not count and is treated as an external link.

What you see if a link is refused.

What you seeWhat it meansWhat to do
"Private Telegram links are not available on this account."You pasted an invite link, a joinchat link or a t.me/c/ link on FreeUse the channel's public t.me handle, or move to Lite
"External links need the External Links add-on ($1)."The URL is not a Telegram host and you have not bought the add-on for this tierBuy the add-on from the same dialog, or use a Telegram link
"That link doesn't look valid. Use a full https:// URL."The URL is malformed, has no scheme, or is longer than 512 charactersPaste the full https://… address

The same rules apply to links inside the post body and to button URLs. There is no rung where one is stricter than the other.

Non-Telegram URLs are deliberately not a rung. They are a one-off unlock that any tier can buy — including Free.

How to buy it​

  1. Open the link dialog in any composer and paste the non-Telegram URL you want to use.
  2. Read the refusal. The dialog says "External links need the External Links add-on ($1)." and reveals a button reading Enable external links — $1.
  3. Press it. The $1 is charged from your wallet and the unlock applies immediately — the dialog re-checks your URL and turns green without you retyping it.
  4. Note the reference. The confirmation reads "External links enabled." and shows the purchase's own OFXA- reference. That is the receipt for the charge; it also appears on your wallet transaction, described as "External Links add-on".

Pressing the button when you already hold the add-on for your tier answers "Already enabled for your tier." and charges nothing.

What it costs and how it is charged​

Price$1.00, one-off
Charged fromYour Onflow Ads wallet balance
Boost credit acceptedNo — Boost credit is a separate pot
RecurringNo. There is nothing to renew and nothing to cancel
RefundableNo
The add-on belongs to one tier, not to your account

The purchase is recorded against the tier you were on when you bought it. Change rung and it stops applying: buy it on Lite, upgrade to Plus, and non-Telegram links are refused again until you buy it a second time for Plus. Letting a membership lapse has the same effect, because your effective tier becomes Free.

Nothing is refunded when this happens, and the earlier purchase is not lost — it reactivates by itself if you return to that same tier.

Buy it after you upgrade, not before

If you are already planning to move up a rung, wait. A dollar is small, but so is the effort of doing it in the right order — buy the add-on once, on the tier you intend to stay on.

If something goes wrong​

What you seeWhat it meansWhat to do
"Not enough wallet balance. Top up your wallet and try again."The $1 debit would overdraw. The unlock rolled back with it — you were not charged and nothing was grantedTop up on the wallet page and press the button again
"Already enabled for your tier."You already hold it for this rungNothing to do. The reference shown is the original purchase's
The add-on stopped working after a tier changeIt is scoped to the tier it was bought onBuy it again for your current tier, or return to the tier you bought it on
"Sign in to continue."Your session expiredSign in and retry
"Cross-origin request blocked."The request did not come from the Onflow Ads siteBuy it from the composer's own link dialog
Repeated attempts stop being acceptedThe purchase endpoint is rate-limited to a modest number of attempts an hourWait, then try once more. If it keeps failing, use the contact page

The attribution line​

Under every ad the platform delivers into somebody's channel, one blank line below the advertiser's own copy, sits a single clickable line:

advertisement via onflowads.com

It links back to onflowads.com. It is the same wording in all three products — Paid Promotions, Cross-Promotion and the Subscriber Exchange — and it replaced the #ad hashtag the product used to ask advertisers to type, which was a disclosure that depended on the advertiser remembering it.

Whose plan decides — the host's, not the advertiser's​

This is the part that surprises people. The line is a mark on somebody's feed, so the person who earns its removal is the person whose feed carries it: the owner of the channel the ad is posted into.

From Plus up, ads carried by your channels run without the line. On Free and Lite they carry it. Your own plan has no effect on the ads you place in other people's channels.

The advertiser is onThe host channel's owner is onThe line appears
FreeFree or LiteYes
FreePlus, Elite, Master or UltimateNo
UltimateFree or LiteYes
UltimatePlus, Elite, Master or UltimateNo

There is no toggle, no setting and no add-on — at any rung, on either side. If you have seen "watermark control" described as a feature you can switch, that copy is out of date.

When the decision is made​

ProductWhen your plan is read
Paid PromotionsAt the moment the ad is published. A host whose membership lapses between the booking and the publication gets the line back on that post
Cross-PromotionWhen the campaign is handed over for scheduling. Both sides' plans are frozen in at that point
Subscriber ExchangeAt delivery. The matcher chooses the host after the ad is written, so it cannot be known while you compose

The 33 characters your counter holds back​

Telegram counts the visible characters in a caption, and a caption that fits before the line is appended would overflow after it. So every composer reserves the line's space in advance: 33 characters — the 31-character line plus the blank line above it. That is why the character counter stops short of Telegram's own ceiling.

  • In the Subscriber Exchange and Cross-Promotion, the 33 characters are always held back, because the host is not known while you write.
  • In Paid Promotions the reserve follows the listing you are booking: on a channel whose owner is Plus or above there is nothing to reserve, and the counter gives the characters back.

If an older creative — written before the reserve existed — would overflow with the line attached, the line is dropped rather than the send failed. Your ad is what was paid for and approved; losing a placement to make room for our own label would be the wrong trade.

Where the line cannot be added​

A Paid Promotions owner may publish an ad by hand instead of letting our bot post it, then paste the link to their own post as proof. Nothing on our side can append the line to a post we did not send, and nothing re-checks it afterwards. On manually delivered placements the line is therefore not guaranteed, whatever plan either side is on.

Where the rules are enforced​

The link and button policy is applied once, when the post is created, on the website. That has two consequences worth knowing:

  • A post that was already approved keeps working. If you drop to a lower tier after scheduling a post, its links and buttons are not re-checked and the post goes out as composed. A downgrade cannot silently break something already in flight.
  • A new post is judged on your tier right now. The composer reads your live entitlements each time it loads, so the moment an upgrade completes the extra button rows unlock without a reload of anything but the page.

The Telegram bot mirrors the structural half of these rules — it will still refuse a malformed URL — but it never re-applies the tier policy at send time. The website is where the decision is made.

The attribution line is the exception to that

It is not part of the creative and is not judged at creation time. In Paid Promotions it is decided from the host's live plan at the moment of publishing, so a post composed while the host was on Plus can still go out carrying the line if that membership lapsed in between. Nothing about your tier changes it either way.

Frequently asked​

A shortener's domain is not a Telegram host, so it is classified as an external link and refused exactly like the destination would be.

Do links inside the post body count differently from button URLs?​

No. Both are judged by the same rules at the same moment.

Does a button count against any other limit?​

No. Buttons are not metered per month or per campaign — the only limit is how many one post may carry.

Can I have four buttons on Ultimate?​

Four is the ceiling for both Master and Ultimate. No rung offers more.

Why is Free allowed no buttons at all?​

Buttons are one of the small number of things the ladder switches off rather than reduces. Public Telegram links in the post body still work on Free, so a Free ad can still point at your channel.

I picked a colour and the button came out plain.​

Two possibilities. Either you are below Plus, in which case the colour was dropped when the post saved and no error was shown; or the person looking at the post has a Telegram app older than February 2026, which ignores colours and draws every button normally.

Why does my ad have "advertisement via onflowads.com" under it?​

Because the channel it landed in belongs to an owner on Free or Lite. Your own plan does not decide this — see The attribution line.

I am on Plus. Why does my ad still carry the line?​

Same reason: it is the host's plan that removes it, not yours. A Plus advertiser's ad in a Free owner's channel carries the line; a Free advertiser's ad in a Plus owner's channel does not.

I am on Plus and ads in my channel still carry it.​

Check that the membership is actually active — an expired paid tier reads as Free everywhere, immediately. In Paid Promotions the host's plan is read at the moment of publishing, so a lapse between booking and publication brings the line back on that placement. If your membership is live and the ad was delivered by our bot, that is worth reporting through the contact page.

Can I pay to remove the attribution line from one ad?​

No. It is not sold separately at any tier, on either side of a booking, and there is no control to switch it off.