Broadcast one drop to many fans
Send the same drop to many fans with one checkout link each, and match every payment back to the fan who paid.
One drop can be sold to any number of fans. Give each fan a personal checkout link that carries a reference of your choice, such as your id for the fan or the conversation. When the fan pays, the order comes back with that reference, so you know who paid and where to deliver the content.
One drop has one price. If fans should pay different amounts, create one drop per price.
1. Create the drop once#
curl -X POST "https://www.dropfans.io/api/external/drops" \
-H "Authorization: Bearer $DROPFANS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Friday set","price":25,"vaultItemIds":["clxv1a2b30001item","clxv1a2b30002item"]}'Keep the productId.
2. One link per fan#
Pick a reference per recipient: your own id for the conversation, 1–32 characters of A-Z a-z 0-9 _ -. On the web it goes in the short m parameter; in Telegram it follows the product id. Fill it into the templates from GET /links:
| Where | Link |
|---|---|
| Web | https://www.dropfans.io/buy/{productId}?m={externalRef} |
| Telegram Mini App | https://t.me/<bot>/app?startapp=b_{productId}_{externalRef} |
Telegram limits the whole start parameter to 64 characters, so with a 25-character product id the 32-character reference always fits. The reference survives the whole checkout: card, saved card, 3-D Secure and wallet credits.
3. Match the payment#
Each paid order carries the reference as externalRef:
- Push: set a webhook and handle
drop.paid.data.externalReftells you which fan paid. Usedata.orderIdas your idempotency key. - Poll: GET /api/external/orders?externalRef=… answers "did this fan pay?", and
?productId=…&since=…sweeps a whole broadcast.
// drop.paid handler (after verifying the signature)
const { orderId, externalRef, productId, buyer } = event.data;
if (await alreadyDelivered(orderId)) return;
const chat = await findConversationByRef(externalRef); // your lookup
await deliverMedia(chat, productId);
await markDelivered(orderId);Good to know#
- A fan who already owns the drop gets it unlocked without paying again, so no new order is created. Keep showing them the content.
- The reference is not proof of identity. A fan can edit the link, and would then pay to deliver to someone else's chat. For extra safety, compare
buyer.telegramUserId(set when they paid inside Telegram) with the chat you expect. - Refunds and chargebacks arrive as
drop.refundedwith the sameorderIdandexternalRef.
Next: Webhooks & polling or Creator sign-up from your platform.
Questions? [email protected]
