Create a subscription
Creates a webhook endpoint that receives a signed POST for every event its filters match, and returns it with its hmac_secret. Save the secret: only this response shows it, and you need it to verify signatures. The endpoint is active at once and receives events from the ledger after activation_checkpoint.
- Free plan: one Testnet endpoint; deliveries cost no credits and are capped at 1,000 per organization per UTC day (later matches become free_quota_exhausted coverage gaps). Mainnet needs a paid plan.
- Paid plans: 10 (Starter), 50 (Growth), 250 (Scale) or 1,000 (Enterprise) endpoints per network. Testnet deliveries are free; each delivered Mainnet event costs 1 credit.
- Retries: resend the same Idempotency-Key and body to get the existing endpoint (200, without the secret); the same key with another body returns 409.
- Payloads: token_transfer, contract_event, balance.changed and webhook.test bodies and the signed headers are in the
deliverycallback of this operation and on Receive webhooks.
Authorizations
Send Authorization: Bearer whk_…, a webhook key from the dashboard. Webhook keys belong to one network, so pick the server that matches the key. lum_ API keys are not accepted here (401).
Headers
Required, 1 to 128 characters. Resending the same key with the same body returns the existing endpoint (200, without hmac_secret) instead of creating a second one; the same key with a different body returns 409.
1 - 128"retry-0001-2026-10-22"
Body
Public HTTPS URL. DNS and dial-time SSRF validation reject private targets.
2048Label for the endpoint, at most 256 bytes.
256Checksum-valid G/M/C/B/L StrKey.
native or CODE:ISSUER. Balance events also accept a C… token contract (a SAC selects its classic asset) or pool:<64 hex>.
Checksum-valid C StrKey.
Empty means every decoded event type. Token-transfer types: transfer, mint, burn, clawback, fee. Balance events are opt-in: list balance.changed, or balance.changed.fees to include fee-only XLM changes. Any other value selects contract events by their first topic symbol and must be a Soroban symbol (1-32 characters of A-Z, a-z, 0-9 and _); anything else is a 400. A symbol that looks like a misspelled token-transfer type (for example transfers) is accepted with a warnings entry in the response.
641 - 128Callbacks
POST{$request.body#/target_url}delivery
Body
- Option 1
- Option 2
- Option 3
Deterministic event identity: {network}:{ledger}:{n} for token_transfer, {network}:{ledger}:ce:{tx}:{op}:{event} for contract_event. Activity and Webhooks give the same on-chain event the same id (same decoder release), so deduplicate on (network, id); after a Testnet reset ledger numbers repeat, so start a new store.
token_transfer, contract_event transfer, mint, burn, clawback, fee, or a custom contract event name.
Canonical payload vocabulary: pubnet is Mainnet.
pubnet, testnet x >= 3^[0-9a-fA-F]{64}$One-based position within the ledger.
One-based operation index; absent for transaction-level fee events.
native or CODE:ISSUER. May be absent for custom contract tokens.
Unsigned integer string, never a JavaScript number.
Decimal string; seven decimal places for Classic/SAC assets.
Exact signed integer string.
Base64 ScVal XDR.
Base64 ScVal XDR; authoritative typed representation.
Activity collections only; opaque keyset cursor.
Response
Delivered: any 2xx answer within 10 seconds counts.
Response
Created and active (effective_state active). hmac_secret is shown only in this response. A retry with the same Idempotency-Key and body answers 200 with the same endpoint, without hmac_secret.
HTTPS URL that receives the signed POSTs.
True while the endpoint receives events.
Delivery protocol version (2: deliveries carry a signed context).
Endpoint version, also in the ETag header. Every change increments it.
What you asked for: active, paused or deleted.
What applies now: active, activating, paused_by_user, paused_by_funding (for example the free daily cap was reached) or deleted.
metered for paid-plan endpoints, sponsored for the free Testnet endpoint, held for prepaid funded endpoints.
True for the one free Testnet endpoint of a Free organization: deliveries are not charged credits but are capped per UTC day, and replays are not available.
True for a paid-plan endpoint: every delivered Mainnet event costs the catalog webhook credit weight (1 credit) from the organization's monthly balance, with overage billed on paid plans. Testnet deliveries, and failed, cancelled and expired deliveries, cost nothing. Replays are not yet available for paid endpoints.
Version of the current signing secret; rotation increments it.
Endpoint label.
Returned only by the first successful creation; retries do not reveal it.
Account filter, when set.
Asset filter, when set.
Contract filter, when set.
Event type filter; absent or empty means every decoded event type.
Event index generation the endpoint reads.
The endpoint receives events from the ledger after this one. Read earlier history from the Activity API.
Last ledger the endpoint's state applies to.
Last ledger scanned for matching events.
Last ledger whose matching events were all queued for delivery.
Free Testnet endpoints only, on GET /v1/subscriptions/{id}: the organization's admitted and delivered deliveries today (UTC) against its daily cap.
Paid endpoints only, on GET /v1/subscriptions/{id}.
Create and update responses only: non-fatal filter warnings, such as a probable event type typo.