Transfer endpoints

Hand a bot (with all its campaigns) or a single campaign to another account — in one atomic operation. See also: Transfer guide.


How transfer works

Transfer uses a transfer token — a short alphanumeric code each user has, separate from their API key. It identifies a recipient without exposing their Telegram ID or username. The sender obtains the recipient’s transfer token out-of-band (e.g. they share it in chat), resolves it to confirm eligibility, then calls the transfer endpoint.

Eligibility rules are checked before any data is moved:

  • The recipient must be on an active paid plan.
  • The recipient must have enough free campaign slots for the campaigns being transferred.

Lead disposition — each transfer write endpoint requires a leads flag:

  • leads=1 — all leads, stats, and history are re-attributed to the recipient. History stays intact under the new owner.
  • leads=0 — all leads belonging to the transferred campaign(s) are permanently deleted. Use this only when the recipient should start fresh.

All writes happen in a single database transaction.


Get your transfer token

GET /api/transfer/token.json

Returns your current transfer token. Share this with whoever wants to send you a bot or campaign.

{ "status": "ok", "data": { "token": "xyz789abc…" } }

Regenerate transfer token

POST /api/transfer/token.json

Generates a new transfer token. The old token stops working immediately — any transfer the sender was about to initiate with the old token will fail.

{ "status": "ok", "data": { "token": "new_token_value…" } }

Look up a recipient

GET /api/transfer/resolve.json

Resolves a transfer token to a display name and a readiness check. Call this before transfer/bot or transfer/camp to confirm the recipient can accept.

ParameterDescription
tokenThe recipient’s transfer token
{
  "status": "ok",
  "data": {
    "name": "Jane Doe",
    "paid": true,
    "slots": 12
  }
}

slots is the number of free campaign slots the recipient has (-1 = unlimited). paid is false if the recipient’s subscription is expired or they are on the free plan.

ErrorMeaning
notfoundNo account matched this transfer token

Transfer a bot

POST /api/transfer/bot.json

Transfers a bot and all of its non-deleted campaigns to the recipient.

ParameterDescription
botBot id (you must own it)
tokenRecipient’s transfer token
leads1 to re-attribute leads to recipient; 0 to permanently delete them
{ "status": "ok" }
ErrorMeaning
notfoundTransfer token did not match any account
unpaidRecipient’s subscription is not active
limitRecipient does not have enough free campaign slots

Transfer a campaign

POST /api/transfer/camp.json

Transfers a single campaign to the recipient. The recipient must have a bot that is currently admin of the campaign’s chat — one qualifying bot is selected automatically.

ParameterDescription
campCampaign id (you must own it)
tokenRecipient’s transfer token
leads1 to re-attribute leads; 0 to permanently delete them
{ "status": "ok" }
ErrorMeaning
notfoundTransfer token did not match any account
unpaidRecipient’s subscription is not active
limitRecipient does not have a free campaign slot
nobotRecipient has no bot that is admin of this campaign’s chat