Create a stream subscription

Creates a subscription that delivers transactions to you in real time. Each subscription supports two delivery modes — you can use one or both:

Webhook (push delivery)

Set webhookUrl to your HTTPS endpoint. The system will POST each update to your URL as it occurs. Deliveries are retried with exponential backoff (1m, 5m, 30m, 2h, 12h) for up to 5 attempts. Each delivery includes an X-Noves-Signature header containing an HMAC-SHA256 hex digest of the request body, computed with the secret returned when you create the subscription. Use this to verify that payloads are authentic.

WebSocket (pull delivery)

Set websocketEnabled to true. The response will include a websocketUrl you can connect to. The generated URL includes the subscription secret; clients should use that URL as-is. In practice the connection URL is wss://.../streams/{id}/ws?secret=.... Updates are pushed to all connected clients in real time. If no client is connected, messages are queued for up to 1 hour and replayed automatically when a client reconnects.

Filters

Use the filters object to control which updates are delivered. It contains three categories of filters (OR'd — a match in any category delivers the update):

partyFilter (top-level) — Only deliver updates involving this Canton party address. Each filter category applies the party check in its own way.

filters.txTypeFilters

Match by classification type. Pass an array of one or more values:

CategoryTypes
Transferstransfer, mergeSplit, unlock, failedTransfer
RewardsvalidatorRewards, appRewards, svRewards
Feesfee
TrafficbuyTraffic
CouponsissueCoupon, redeemCoupon, convertToCoupon
SubscriptionspaySubscription
PreapprovalscreateTransferPreapproval, acceptTransferPreapproval, createAndAcceptTransferPreapproval
ActivitycreateActivityMarker
Token opsmintToken
AdmincreateValidatorLicense, provisionWallet, createFeaturedAppRight
Otherunclassified

filters.rawEventFilters

Required when the filters object is supplied. Pass an empty array when unused. Match by the presence of specific raw DAML events. Each entry specifies a template module (required), entity (optional), and event type: "created", "archived", or omit for any. Example: [{ "templateModule": "Splice.Amulet", "templateEntity": "Amulet", "eventType": "created" }]

filters.utilityFilters

Required when the filters object is supplied. Pass an empty array when unused. Composite filters that inspect the transaction payload. Supported values:

  • allCCMovements — matches any transaction where Canton Coin moves for the party (checks classificationData.transfers for CC token transfers where the party is sender or receiver). Invalid filter values are rejected with HTTP 400.

Raw data

Set includeRawData to true to receive the original unprocessed transaction alongside the classified data. When enabled, each message includes a rawData field with the full raw payload.

Payload format

Each delivered message (webhook POST body or WebSocket message) is a JSON object: { "subscriptionId": "uuid", "updateId": "...", "effectiveAt": "ISO-8601", "timestamp": "ISO-8601", "data": { /* classified transaction */ }, "rawData": { /* optional, if includeRawData is true */ } } The data field contains the full classified transaction with parties, values, and transaction data.

Language
Response
Click Try It! to start a request and see the response here!