> ## Documentation Index
> Fetch the complete documentation index at: https://www.dropfans.io/developers/llms.txt
> Use this file to discover all available pages before exploring further.

# 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.

- Source: https://www.dropfans.io/developers/guides/broadcast-one-drop
- Section: Guides
- OpenAPI: https://www.dropfans.io/developers/openapi.json

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.

> [!NOTE] Same price only
> One drop has one price. If fans should pay different amounts, create one drop per price.

## 1. Create the drop once

```bash
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](https://www.dropfans.io/developers/reference/get-links.md):

| 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](https://www.dropfans.io/developers/webhooks/overview.md) and handle `drop.paid`. `data.externalRef` tells you which fan paid. Use `data.orderId` as your idempotency key.
- **Poll:** [GET /api/external/orders?externalRef=…](https://www.dropfans.io/developers/reference/list-orders.md) answers "did this fan pay?", and `?productId=…&since=…` sweeps a whole broadcast.

```javascript tab="Node"
// 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.refunded` with the same `orderId` and `externalRef`.

Next: [Webhooks & polling](https://www.dropfans.io/developers/webhooks/overview.md) or [Creator sign-up from your platform](https://www.dropfans.io/developers/guides/creator-signup.md).

---

Previous: [Earnings & balance](https://www.dropfans.io/developers/guides/earnings-and-balance.md) · Next: [Creator sign-up from your platform](https://www.dropfans.io/developers/guides/creator-signup.md) · All pages: [llms.txt](https://www.dropfans.io/developers/llms.txt)
