Get the webhook endpoint for your app
API reference

Get the webhook endpoint for your app

Your app’s webhook endpoint, its events and the last 20 deliveries (with status codes and errors) — the first place to look when an event seems missing.

View as MarkdownUpdated Oct 17, 2026
GET/api/external/v1/webhooksalso served at /api/external/webhooksNew

Your app’s webhook endpoint, its events and the last 20 deliveries (with status codes and errors) — the first place to look when an event seems missing.

Authentication

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

Responses

200The configuration.
NameTypeDescription
urlstring | nullYour https endpoint, or null when none is set.
Format: uri
eventsstring[]Events delivered to the endpoint.
hasSecretbooleanWhether a signing secret exists.
availableEventsstring[]Every event you can subscribe to.
recentDeliveriesobject[]The last 20 deliveries, newest first.
Show child attributes
idstringEvent id (also the DropFans-Event-Id header).
eventstringEvent type.
statusstringPENDING = retrying.
One of: PENDING, DELIVERED, FAILED
attemptsintegerAttempts so far.
lastStatusCodeinteger | nullYour endpoint’s last HTTP status.
lastErrorstring | nullLast failure reason.
createdAtstringWhen the event was created.
Format: date-time
deliveredAtstring | nullWhen your endpoint accepted it.
Format: date-time
nextAttemptAtstring | nullNext retry, while PENDING.
Format: date-time
Example response
{
  "url": "https://crm.example.com/hooks/dropfans",
  "events": [
    "drop.paid",
    "drop.refunded",
    "account.kyc_updated"
  ],
  "hasSecret": true,
  "availableEvents": [
    "drop.paid",
    "drop.refunded",
    "tip.paid",
    "tip.refunded",
    "subscription.paid",
    "subscription.canceled",
    "subscription.ended",
    "account.kyc_updated",
    "payout.requested",
    "payout.processing",
    "payout.paid",
    "payout.failed"
  ],
  "recentDeliveries": [
    {
      "id": "evt_2b7c…",
      "event": "drop.paid",
      "status": "DELIVERED",
      "attempts": 1,
      "lastStatusCode": 200,
      "lastError": null,
      "createdAt": "2026-10-17T16:20:01.000Z",
      "deliveredAt": "2026-10-17T16:20:01.000Z",
      "nextAttemptAt": null
    }
  ]
}

Errors

StatusBodyWhen
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.
400{"error":"This endpoint acts as the key’s own account or app — call it without /creators/{creatorId}.","code":"creator_scope_not_allowed"}Called under /api/external/v1/creators/{creatorId}/ — this endpoint always acts as the key’s own account, agency or app.
403{"error":"This app does not have the webhooks API category enabled. Contact support to enable it.","code":"api_category_disabled","category":"webhooks"}Your app has the App webhooks [API category](/developers/concepts/api-categories) switched off.

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 "https://www.dropfans.io/api/external/v1/webhooks" \
  -H "Authorization: Bearer $DROPFANS_API_KEY"

Questions? support@dropfans.io