Skip to main content
Every webhook body, and the payload of every item of GET /webhook-events, is the same envelope:
In data, a field with no value is left out, never sent as null: uetr on a deposit with no wire reference, tokenIssuanceId on a transfer. The endpoints, by contrast, always return every field, with null when there is no value.

Event types

The names follow investor.<resource>.<action>. New types are added as the API covers more of your activity: store an eventType you do not know and keep going. The request body of each event, with examples, is in the API reference under Webhooks.

The order of a subscription

Each cash movement sends its own investor.deposit.processed: one for your deposit, and one for its liquidation. A subscription funded by several deposits sends a pair per deposit and one minting for all of them. The issuance transaction and the minting are recorded independently: either can arrive first. See Reconcile a subscription.

The order of a redemption

See Reconcile a redemption.

A reinvested distribution

A distribution you reinvest sends investor.payout.completed with paymentMethod reinvest and the cash value of the distribution, then investor.minting.completed with source reinvest and no deposits, and investor.transaction.processed with processType reinvest. The minting and the transaction share tokenIssuanceId; the payout carries no id that links it to them, so match it by tokenId and time.

Delivery guarantees

  • At least once. The same event can arrive more than once, with the same eventId.
  • Possibly out of order. Steps recorded by different parts of Securitize arrive independently.
  • No failure events. A step that does not complete sends nothing. When an expected webhook does not arrive, check the deposit or transaction, and GET /webhook-events.
  • Retried for about a day on anything but a 2xx within 15 seconds, then marked failed. Every webhook sent stays readable through GET /webhook-events.