Set your webhook endpoint
API reference

Set your webhook endpoint

Sets the https endpoint that receives your app’s events. The first call also creates the signing secret and returns it **once** as `secret`. Store it; later calls don’t return it (use rotate-webhook-secret).

View as MarkdownUpdated Oct 17, 2026
PUT/api/external/webhooksNew

Sets the https endpoint that receives your app’s events. The first call also creates the signing secret and returns it once as secret. Store it; later calls don’t return it (use rotate-webhook-secret).

Leave events out to get every event, including ones added later.

Authentication

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

Request body

Content type: application/json

NameTypeRequiredDescription
urlstringRequiredPublic https URL (no IPs, no localhost, no credentials).
Format: uri
eventsstring[]OptionalSubset of events to receive. Omit for all.
All events
{
  "url": "https://crm.example.com/hooks/dropfans"
}

Responses

200Saved.
NameTypeDescription
urlstringThe saved endpoint.
Format: uri
eventsstring[]Events delivered.
secretstringSigning secret (whsec_…) — only on the first save.
Example response
{
  "url": "https://crm.example.com/hooks/dropfans",
  "events": [
    "drop.paid",
    "drop.refunded",
    "account.kyc_updated"
  ],
  "secret": "whsec_8d1e…"
}

Errors

StatusBodyWhen
400{"error":"url must use https"}Not a public https URL, or unknown events.
401{"error":"Unauthorized","code":"unauthorized"}Missing or invalid API key.
403{"error":"This endpoint needs a key bound to an approved app.","code":"app_key_required"}A Personal key was used.
403{"error":"Use the app owner's key for this endpoint.","code":"owner_key_required"}The key was minted by a creator for themselves. App-level calls need a key held by your app owner: their own, or one their agency minted for its personas or managed creators.

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 -X PUT "https://www.dropfans.io/api/external/webhooks" \
  -H "Authorization: Bearer $DROPFANS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "url": "https://crm.example.com/hooks/dropfans"
}'

Questions? [email protected]