Skip to main content
POST
cURL

Authorizations

Authorization
string
header
required

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

Idempotency-Key
string
required

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.

Required string length: 1 - 128
Example:

"retry-0001-2026-10-22"

Body

application/json
target_url
string<uri>
required

Public HTTPS URL. DNS and dial-time SSRF validation reject private targets.

Maximum string length: 2048
name
string

Label for the endpoint, at most 256 bytes.

Maximum string length: 256
account
string

Checksum-valid G/M/C/B/L StrKey.

asset
string

native or CODE:ISSUER. Balance events also accept a C… token contract (a SAC selects its classic asset) or pool:<64 hex>.

contract_addr
string

Checksum-valid C StrKey.

event_types
string[]

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.

Maximum array length: 64
Required string length: 1 - 128

Callbacks

POST
{$request.body#/target_url}delivery

Body

application/json
id
string
required

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.

kind
enum<string>
required
Available options:
token_transfer,
contract_event
type
string
required

transfer, mint, burn, clawback, fee, or a custom contract event name.

network
enum<string>
required

Canonical payload vocabulary: pubnet is Mainnet.

Available options:
pubnet,
testnet
ledger
integer
required
Required range: x >= 3
closed_at
string<date-time>
required
tx_hash
string
required
Pattern: ^[0-9a-fA-F]{64}$
tx_index
integer
required

One-based position within the ledger.

operation_index
integer

One-based operation index; absent for transaction-level fee events.

asset
string

native or CODE:ISSUER. May be absent for custom contract tokens.

contract_address
string
from
string
to
string
issuer
string
to_muxed_id
string

Unsigned integer string, never a JavaScript number.

to_muxed_address
string
to_muxed_text
string
to_muxed_hash
string
memo_type
string
memo
string
memo_xdr
string
amount
string

Decimal string; seven decimal places for Classic/SAC assets.

amount_raw
string

Exact signed integer string.

topics
any[]
data
any
topics_xdr
string[]

Base64 ScVal XDR.

data_xdr
string

Base64 ScVal XDR; authoritative typed representation.

paging_token
string

Activity collections only; opaque keyset cursor.

Response

200

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.

id
string<uuid>
required
target_url
string
required

HTTPS URL that receives the signed POSTs.

active
boolean
required

True while the endpoint receives events.

created_at
string<date-time>
required
admission_protocol
integer
required

Delivery protocol version (2: deliveries carry a signed context).

version
integer
required

Endpoint version, also in the ETag header. Every change increments it.

desired_state
string
required

What you asked for: active, paused or deleted.

effective_state
string
required

What applies now: active, activating, paused_by_user, paused_by_funding (for example the free daily cap was reached) or deleted.

slot_state
string
required

metered for paid-plan endpoints, sponsored for the free Testnet endpoint, held for prepaid funded endpoints.

sponsored
boolean
required

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.

metered
boolean
required

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.

signing_version
integer
required

Version of the current signing secret; rotation increments it.

name
string

Endpoint label.

hmac_secret
string

Returned only by the first successful creation; retries do not reveal it.

account
string

Account filter, when set.

asset
string

Asset filter, when set.

contract_addr
string

Contract filter, when set.

event_types
string[]

Event type filter; absent or empty means every decoded event type.

generation
string

Event index generation the endpoint reads.

activation_checkpoint
integer

The endpoint receives events from the ledger after this one. Read earlier history from the Activity API.

effective_checkpoint
integer

Last ledger the endpoint's state applies to.

last_scanned_ledger
integer

Last ledger scanned for matching events.

last_fully_admitted_ledger
integer

Last ledger whose matching events were all queued for delivery.

free_quota
object

Free Testnet endpoints only, on GET /v1/subscriptions/{id}: the organization's admitted and delivered deliveries today (UTC) against its daily cap.

paid
object

Paid endpoints only, on GET /v1/subscriptions/{id}.

warnings
string[]

Create and update responses only: non-fatal filter warnings, such as a probable event type typo.