The creator’s profile, tip and subscribe links
API reference

The creator’s profile, tip and subscribe links

The creator's shareable links in one call. Never build Dropfans URLs by hand.

View as MarkdownUpdated Aug 19, 2026
GET/api/external/v1/linksalso served at /api/external/linksNew

The creator's shareable links in one call. Never build Dropfans URLs by hand.

Link ids (links). Every link is just https://www.dropfans.io/buy/{id} on the web and https://t.me/<bot>/app?startapp={id} in Telegram. There are no parameters on the link. What it opens, the account and your app are stored with the id. links.profile, links.tip (the fan picks the amount) and links.subscribe (opens the subscribe sheet) are created on the first call and returned unchanged after that. For a drop, a fixed tip amount or a per-fan reference, create a link with POST /api/external/v1/links.

Commission. With a key that belongs to an app, a drop bought, a tip sent or a subscription started through your app's links earns your app owner commission for life, including every renewal of that subscription, at your app's commission rate. Every call also makes your app the account's connected CRM.

Templates (web, telegram), deprecated. These are unchanged and keep working. Fields ending in Template have placeholders to fill in: {usd} (whole dollars, web tip), {cents} (Telegram tip), {productId} and {externalRef}. A sale through a template link keeps its externalRef. One with an externalRef counts for a CRM only if it is the only app that has ever generated links for the account, its own key works the account (directly or through its agency), and the account has no personal key. Use link ids for anything new. The telegram block is null when the shared Dropfans bot is not configured, and so is each link's telegram URL. Web tip prefill: ?tip=<usd> between $5 and $750; other amounts open the sheet unfilled.

Authentication

Send the creator's API key as a bearer token: Authorization: Bearer dpfn_…. See Authentication & API keys.

For a creator you manage or onboarded

GET /api/external/v1/creators/{creatorId}/links — an agency's own key for a creator or AI persona it manages, or your app owner's own key for an account your app onboarded. The X-Dropfans-Account header still works but is deprecated. See Acting for a creator.

Responses

200The creator’s links.
NameTypeDescription
usernamestringThe creator’s @handle the links are built for.
linksobjectLink ids for the account — the same ids on every call. Create buy links and fixed-amount tip links with POST /api/external/v1/links.
Show child attributes
profileLinkOpens the profile.
Show child attributes
idstringThe link id (10 of a-z 0-9). Comes back as linkId on sales through the link.
typestringWhat the link opens.
One of: buy, tip, subscribe, profile
urlstringThe web link — /buy/{id}, no parameters.
Format: uri
telegramstring | nullThe Telegram Mini App link (startapp={id}). Null when the shared Dropfans bot is not configured.
Format: uri
productIdstring | nullThe drop of a buy link.
amountUsdnumber | nullFixed amount of a tip link; null = the fan picks.
externalRefstring | nullYour per-fan reference, returned on the sale.
createdAtstringWhen the link was created.
Format: date-time
tipLinkOpens the tip sheet; the fan picks the amount.
Show child attributes
idstringThe link id (10 of a-z 0-9). Comes back as linkId on sales through the link.
typestringWhat the link opens.
One of: buy, tip, subscribe, profile
urlstringThe web link — /buy/{id}, no parameters.
Format: uri
telegramstring | nullThe Telegram Mini App link (startapp={id}). Null when the shared Dropfans bot is not configured.
Format: uri
productIdstring | nullThe drop of a buy link.
amountUsdnumber | nullFixed amount of a tip link; null = the fan picks.
externalRefstring | nullYour per-fan reference, returned on the sale.
createdAtstringWhen the link was created.
Format: date-time
subscribeLinkOpens the subscribe sheet.
Show child attributes
idstringThe link id (10 of a-z 0-9). Comes back as linkId on sales through the link.
typestringWhat the link opens.
One of: buy, tip, subscribe, profile
urlstringThe web link — /buy/{id}, no parameters.
Format: uri
telegramstring | nullThe Telegram Mini App link (startapp={id}). Null when the shared Dropfans bot is not configured.
Format: uri
productIdstring | nullThe drop of a buy link.
amountUsdnumber | nullFixed amount of a tip link; null = the fan picks.
externalRefstring | nullYour per-fan reference, returned on the sale.
createdAtstringWhen the link was created.
Format: date-time
webobjectDeprecated, still served: web links built from templates with literal placeholders. Prefer links / POST /api/external/v1/links.
Show child attributes
profilestringThe creator’s public profile.
Format: uri
tipstringOpens the profile with the tip sheet open.
Format: uri
tipTemplatestringTip link with the amount prefilled — replace {usd} with whole US dollars. Amounts outside the allowed range open the sheet unfilled.
tipWithRefTemplatestringTip link with a per-fan reference — replace {usd} (use 1 to let the fan pick the amount) and {externalRef} (1–32 of A-Z a-z 0-9 _ -). It comes back on the tip (tip.paid webhook, GET /api/external/v1/tips).
subscribestringOpens the profile with the subscribe sheet already on screen.
Format: uri
buyTemplatestringCheckout link for any drop — replace {productId} with the id from create-drop.
buyWithRefTemplatestringThe same with a per-fan reference — replace {externalRef} (1–32 of A-Z a-z 0-9 _ -). It comes back on the order (drop.paid webhook, GET /api/external/v1/orders).
telegramobject | nullDeprecated, still served: Telegram Mini App deep links built from templates. **Null when the shared Dropfans bot is not configured.** Prefer links / POST /api/external/v1/links.
Show child attributes
botstringThe shared bot username, without @.
profilestringOpens the creator’s Mini App profile.
Format: uri
tipstringOpens the Mini App tip sheet.
Format: uri
tipTemplatestringTip prefilled — replace {cents} with the amount in **cents** (the web template takes dollars; this one takes cents).
tipWithRefTemplatestringMini App tip with a per-fan reference — replace {cents} (0 lets the fan pick the amount) and {externalRef}. **Here the reference is 1–20 of A-Z a-z 0-9 - (no underscore)**: it sits in front of the username, which may contain underscores, and Telegram caps the start parameter at 64 characters.
subscribestringOpens the Mini App subscribe flow.
Format: uri
buyTemplatestringMini App checkout for any drop — replace {productId}.
buyWithRefTemplatestringMini App checkout with a per-fan reference — replace {productId} and {externalRef} (1–32 of A-Z a-z 0-9 _ -).
Example response
{
  "username": "valeria",
  "links": {
    "profile": {
      "id": "k3x9m2qa7d",
      "type": "profile",
      "url": "https://www.dropfans.io/buy/k3x9m2qa7d",
      "telegram": "https://t.me/DropfansBot/app?startapp=k3x9m2qa7d",
      "productId": null,
      "amountUsd": null,
      "externalRef": null,
      "createdAt": "2026-10-29T12:00:00.000Z"
    },
    "tip": {
      "id": "p0w8n4rt2c",
      "type": "tip",
      "url": "https://www.dropfans.io/buy/p0w8n4rt2c",
      "telegram": "https://t.me/DropfansBot/app?startapp=p0w8n4rt2c",
      "productId": null,
      "amountUsd": null,
      "externalRef": null,
      "createdAt": "2026-10-29T12:00:00.000Z"
    },
    "subscribe": {
      "id": "h5j1v9xs3e",
      "type": "subscribe",
      "url": "https://www.dropfans.io/buy/h5j1v9xs3e",
      "telegram": "https://t.me/DropfansBot/app?startapp=h5j1v9xs3e",
      "productId": null,
      "amountUsd": null,
      "externalRef": null,
      "createdAt": "2026-10-29T12:00:00.000Z"
    }
  },
  "web": {
    "profile": "https://www.dropfans.io/u/valeria",
    "tip": "https://www.dropfans.io/u/valeria?tip=1",
    "tipTemplate": "https://www.dropfans.io/u/valeria?tip={usd}",
    "tipWithRefTemplate": "https://www.dropfans.io/u/valeria?tip={usd}&m={externalRef}",
    "subscribe": "https://www.dropfans.io/u/valeria?subscribe=1",
    "buyTemplate": "https://www.dropfans.io/buy/{productId}",
    "buyWithRefTemplate": "https://www.dropfans.io/buy/{productId}?m={externalRef}"
  },
  "telegram": {
    "bot": "DropfansBot",
    "profile": "https://t.me/DropfansBot/app?startapp=p_valeria",
    "tip": "https://t.me/DropfansBot/app?startapp=t_valeria",
    "tipTemplate": "https://t.me/DropfansBot/app?startapp=pt_{cents}_valeria",
    "tipWithRefTemplate": "https://t.me/DropfansBot/app?startapp=tm_{cents}_{externalRef}_valeria",
    "subscribe": "https://t.me/DropfansBot/app?startapp=s_valeria",
    "buyTemplate": "https://t.me/DropfansBot/app?startapp=b_{productId}",
    "buyWithRefTemplate": "https://t.me/DropfansBot/app?startapp=b_{productId}_{externalRef}"
  }
}

Errors

StatusBodyWhen
401{"error":"Unauthorized","code":"unauthorized"}Missing or invalid API key.
409{"error":"Set a username first","code":"username_required"}The creator has no username yet. Have the creator pick a handle in their Dropfans settings, then retry.
400{"error":"X-Dropfans-Account must be an account id (from GET /api/external/agency/creators), not a username.","code":"invalid_account_header"}`X-Dropfans-Account` is not an account id.
400{"error":"X-Dropfans-Account names a different account than the path — send one or the other.","code":"account_mismatch"}Called under /v1/creators/{creatorId}/ with an `X-Dropfans-Account` naming another account.
403{"error":"This key cannot act for that account.","code":"account_not_managed"}The creator in the path (or `X-Dropfans-Account`) is one this key cannot act for: no ACCEPTED management by your agency and not an account your app onboarded (or it no longer holds a key bound to your app), a key minted for one creator, or someone is suspended, banned or deleted. An unknown id gets the same answer.
403{"error":"This app does not have the links API category enabled. Contact support to enable it.","code":"api_category_disabled","category":"links"}Your app has the Links [API category](/developers/concepts/api-categories) switched off.

Rate limiting

Every response carries the X-RateLimit-Tier header and, on limited tiers, the per-minute and per-day trios — read X-RateLimit-Remaining and X-RateLimit-Reset instead of hardcoding limits. Details in Rate limits.

Code samples

curl "https://www.dropfans.io/api/external/v1/links" \
  -H "Authorization: Bearer $DROPFANS_API_KEY"

Questions? support@dropfans.io