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.
| Parameter | Description |
|---|---|
token | The 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.
| Error | Meaning |
|---|---|
notfound | No 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.
| Parameter | Description |
|---|---|
bot | Bot id (you must own it) |
token | Recipient’s transfer token |
leads | 1 to re-attribute leads to recipient; 0 to permanently delete them |
{ "status": "ok" }| Error | Meaning |
|---|---|
notfound | Transfer token did not match any account |
unpaid | Recipient’s subscription is not active |
limit | Recipient 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.
| Parameter | Description |
|---|---|
camp | Campaign id (you must own it) |
token | Recipient’s transfer token |
leads | 1 to re-attribute leads; 0 to permanently delete them |
{ "status": "ok" }| Error | Meaning |
|---|---|
notfound | Transfer token did not match any account |
unpaid | Recipient’s subscription is not active |
limit | Recipient does not have a free campaign slot |
nobot | Recipient has no bot that is admin of this campaign’s chat |