Skip to main content
Make a Canton call and Answer an offer are not yet available in production. The request and response shapes below are the committed contract, so you can build your integration against them now, but calls will fail until Fireblocks announces general availability.
There are two ways to write to Canton: make a call to act on your own wallet or a contract, or answer an offer to respond to one. Both are POST requests that return 201 with the outgoing transaction that carries the action — never the on-chain result. Track that transaction with the Canton Transaction Webhooks or by reading it directly to see how it resolved.

Idempotency

Both endpoints accept the optional Idempotency-Key header. Resending a request with the same key returns the original response instead of submitting a second time. See API Idempotency.
Set an idempotency key on every write. A network timeout does not tell you whether the request landed, and neither endpoint is safe to blindly retry without one.

Make a Canton call

See the full generated reference at Make a Canton call.
type selects the call and the shape of payload. An unknown or missing type, or a payload missing a required field, is a 400.
ALLOCATION_WITHDRAW is the only call implemented in v1. Every other type is a documented 501 today — the request shape below is the committed contract, not a preview of working behavior.

ParticipantOnboardingPayload

EndInvestorPayload

Shared by invite, invite-cancel, and offboard — identical wire shape, different verb.

AllowListPayload

AllocationWithdrawPayload

Only accepted while that transaction sits at status CONFIRMING / subStatus ALLOCATED. See The ALLOCATED lifecycle.
A 201 returns the outgoing withdrawal transaction:
status here is always SUBMITTED — it is the transaction’s status at the moment of this response, not its outcome. Its resolution to COMPLETED or CANCELLED arrives later, by webhook or by re-reading the transaction.

Responses

Answer an offer

See the full generated reference at Answer an offer.
offerId is the Fireblocks transaction id of the incoming offer — the same id you read from cantonDetails.offerResponse or from the webhook’s data.id. See Decide whether an offer can be responded to before calling this. The body nests two layers of discrimination: domain selects response, and inside response, responseType selects the variant. Both layers are closed — sending an onboarding responseType under domain: ALLOCATION is a 400, regardless of what the offer’s own domain is.
domain: TRANSFER exists so the endpoint’s contract covers every offer domain, not because transfer responses work today. Both TRANSFER_ACCEPT and TRANSFER_REJECT return 501 in v1.
reason on a DTCC onboarding rejection is recorded on-chain, where the counterparty can read it. The Tradeweb rejection carries no reason — its DAR has nowhere on-ledger to record one, so the field does not exist on that variant.
A 201 echoes the responseType back so you can correlate the response without re-reading it:
This endpoint is the authority on answerability, not availableResponses. availableResponses states what the offer type accepts and does not change once the offer arrives — it does not tell you whether the offer is still open. This endpoint re-checks state and expiry on every call and answers 409 when either has moved.

Responses