Set up your endpoint
Your subscriber endpoint must be publicly reachable over HTTPS and handle bothHEAD and POST requests. Circle issues HEAD requests as a connectivity
warmup; webhook deliveries arrive as POST requests with the AWS SNS payload in
the request body.
Subscribe your endpoint
Register the endpoint URL with Circle through the Mint
console or by calling
POST /v1/notifications/subscriptions.Receive the subscription confirmation
Circle sends a
POST with Type: SubscriptionConfirmation to your
endpoint. The body includes a SubscribeURL that you must visit to finish
the handshake.Example SubscriptionConfirmation payload
Example SubscriptionConfirmation payload
Subscribe to webhooks
You can register a subscription through the Circle Mint console or by calling the Subscriptions API directly.Via the Mint console
- In the Circle Mint console, navigate to Developer → Subscriptions.
- Click Add Subscription.
- Paste your HTTPS endpoint URL.
- Click Save to submit the subscription. Circle delivers a
SubscriptionConfirmationto the endpoint; confirm it as described in Set up your endpoint.
Via the API
CallPOST /v1/notifications/subscriptions
with the endpoint URL:
id, the registered endpoint, and a
subscriptionDetails[] array. Each element carries the SNS topic url, the
topic arn, and a status of confirmed, pending, or deleted.
Manage subscriptions
List active subscriptions withGET /v1/notifications/subscriptions
and remove one with
DELETE /v1/notifications/subscriptions/{id}.
A subscription can be deleted only when every entry in subscriptionDetails[]
is confirmed, deleted, or a mix of the two. A subscription with any
pending entry cannot be deleted; resolve the pending state first.
| Environment | Active subscription cap | PENDING auto-removal |
|---|---|---|
| Sandbox | 3 | After 30 days |
| Production | 1 | After 72 hours |
Notification envelope
Every Mint webhook arrives as an AWS SNS HTTPS notification. The SNS envelope wraps a Circle-shaped message in itsMessage field, which is delivered as a
JSON string. Parse Message to access the Circle envelope and the
topic-specific resource it carries.
The outer SNS envelope has the following shape:
Message, has the following shape:
| Name | Type | Description |
|---|---|---|
clientId | string (UUIDv4) | Identifier for the Circle Mint account that owns the resource. |
notificationType | string | The webhook topic. Matches one of the topics in Event types. |
version | int | Schema version for the notification payload. |
customAttributes | object | Echoes selected envelope attributes. The clientId field mirrors the top-level clientId value. |
deposit,
payout, transfer, or paymentIntent—and carry the resource the topic
describes.
Event types
The table below lists every Circle Mint webhook topic and the resource each notification carries. The subsections that follow describe each topic, document its status values when applicable, and show a single example payload.| Topic | Resource | What it reports |
|---|---|---|
wire | Wire bank account | Lifecycle of a linked wire bank account: pending, complete, or failed. |
deposits | Deposit | Settlement of a fiat deposit (mint) to your Circle Mint balance. |
payouts | Payout | Lifecycle of a fiat redemption (burn) or stablecoin payout. |
transfers | Transfer | Onchain transfer status transitions in either direction. |
paymentIntents | Payment intent | Stablecoin Payins intent lifecycle, including deposit-address assignment and timeline events. |
payments | Payment | Settled Stablecoin Payins payment, or a Stablecoin Payouts refund. |
addressBookRecipients | Address book recipient | Recipient review outcome and Travel Rule decision for Stablecoin Payouts. |
externalEntities | External entity | Core API for Institutions compliance outcome for an onboarded entity. |
creditTransfers | Credit transfer | Status transitions for a Settlement Advance or Line of Credit draw. |
creditFees | Credit fee | Fee accruals against a credit line. |
creditRepayments | Credit repayment | Matched fiat repayment or completed crypto repayment against a credit line. |
approvalWorkflowTransferApproved | Approval workflow event | A pending transfer was approved through the recipient approval workflow. |
approvalWorkflowTransferRejected | Approval workflow event | A pending transfer was rejected through the recipient approval workflow. |
wire
Lifecycle notifications for a linked wire bank account. Use these events to
track the status of bank-account creation requests submitted through
POST /v1/businessAccount/banks/wires.
| Status | Meaning |
|---|---|
pending | Circle is reviewing the bank account. |
complete | The bank account is linked and can be used for deposits and payouts. |
failed | The bank account could not be linked. |
Example payload
Example payload
deposits
Fires when a fiat deposit (mint) settles to your Circle Mint balance. The
notification carries the deposit id, the settled amount, the source (the
linked wire bank account), and the destination wallet.
| Status | Meaning |
|---|---|
pending | Circle has received the wire and is processing the mint. |
complete | USDC or EURC has been credited to the destination wallet. |
failed | The deposit could not be completed and funds were not credited. |
customerExternalRef matching the
EXT... format (used by the Core API for Institutions), Circle echoes that
value on the deposit so you can reconcile the credit to the originating client.
Example payload
Example payload
payouts
Fires for fiat redemptions (burns) and stablecoin payouts. The payout resource
carries the destination (a wire bank account or an address_book recipient),
the gross amount, fees, and any error information.
The most important fields to consume:
id: Unique payout identifier.destination: Either awiredestination (fiat redemption) or anaddress_bookdestination (stablecoin payout).amount: Gross amount of the payout, as a money object.toAmount: Net amount delivered to the destination. Present only on stablecoin payouts.trackingRef: Reference that appears on the bank statement. Present on fiat redemption (burn) payouts.sourceWalletId: Identifier of the wallet funding the payout.fees: Fees deducted from the source wallet, as a money object.networkFees: Onchain network fees. Present only on stablecoin payouts.status:pending,complete, orfailed.errorCode: Populated whenstatusisfailed. See Stablecoin Payouts errors for the catalog.riskEvaluation: Risk decision and reason, populated for compliance-driven denials.
| Status | Meaning |
|---|---|
pending | The payout is in progress. |
complete | Funds have been delivered to the destination. |
failed | The payout could not be completed. See errorCode for the reason. |
Example payload
Example payload
transfers
Fires on every status transition for an onchain transfer, in either direction
(Circle wallet to blockchain address, blockchain address to Circle wallet, or
wallet to wallet). You receive one notification per transition, so a transfer
that runs to completion produces multiple events.
| Status | Meaning |
|---|---|
pending | The transfer has been submitted and is awaiting onchain broadcast. |
running | The transfer is broadcast and waiting for confirmations. |
complete | The transfer is confirmed onchain and settled. |
failed | The transfer could not be completed. See errorCode for the reason. |
status is failed, the transfer carries an errorCode; see
Transfer entity errors
for the catalog.
Example payload
Example payload
paymentIntents
Fires on lifecycle changes for a Stablecoin Payins payment intent, including
deposit-address assignment, settlement, expiry, refund, and failure. The payload
includes the intent’s full state—paymentMethods[] (the assigned deposit
addresses), timeline[] (an ordered history of status and context
transitions with timestamps), amountPaid, amountRefunded,
settlementCurrency, and fees[].
The intent’s lifecycle depends on type:
continuousintents stay atactiveafter Circle assigns the deposit address and never advance tocomplete. To reconcile settled transfers against a continuous intent, listen to thepaymentstopic or callGET /v1/paymentswithpaymentIntentId={id}.transientintents move throughcreated→pending→complete, where the latesttimeline[]entry carries acontextofpaid,underpaid, oroverpaid. Terminal states areexpired,failed, andrefunded.
Example payload
Example payload
payments
Fires for inbound Stablecoin Payins settlements and for Stablecoin Payouts
refunds. Both flows use the same payments resource; the type field
discriminates between them: payment for an inbound settlement and refund for
an outbound refund.
| Status | Meaning |
|---|---|
pending | The payment has been observed and is awaiting confirmations. |
confirmed | The payment has reached the required number of onchain confirmations. |
paid | The payment has settled to your Circle Mint balance. |
failed | The payment could not be settled. |
action_required | Manual intervention is required, such as a refund decision on an underpayment. |
Example payment payload
Example payment payload
Example refund payload
Example refund payload
addressBookRecipients
Fires on lifecycle transitions for a Stablecoin Payouts recipient registered
through the Address Book API. Use this topic to learn when a recipient is ready
to receive payouts and to handle Travel Rule decisions on counterparties.
| Status | Meaning |
|---|---|
pending | Circle is reviewing the recipient. |
inactive | The recipient is in the delayed-withdrawals holding period. |
active | The recipient is ready to receive payouts. |
denied | The recipient failed review and cannot receive payouts. |
Example payload
Example payload
externalEntities
Fires when Circle finishes its compliance review for an external entity
onboarded through the Institutional API. The webhook carries the final
complianceState decision; walletId is present only when the decision is
ACCEPTED.
complianceState | Meaning |
|---|---|
PENDING | The entity is under review. The accompanying walletId is unusable. |
ACCEPTED | The entity passed review. The accompanying walletId is provisioned and usable. |
REJECTED | The entity failed review and cannot operate through Circle Mint. |
walletId,
see Institutional API and
Manage Institutional Subaccounts.
Example payload
Example payload
creditTransfers
Fires when a credit draw changes status. The two Credit API products follow
different lifecycles, so the meaningful status values depend on which product
the credit line is scoped to.
Settlement Advance status values:
| Status | Meaning |
|---|---|
funds_reserved | Capacity is reserved against the credit line; the reservation expires in 30 minutes. |
requested | Wire proof has been submitted and Treasury is reviewing the request. |
disbursed | Treasury approved the advance and funds have landed. |
paid | The disbursed amount is fully repaid. |
past_due | The disbursed amount has not been fully repaid by its due date. |
expired | The reservation timed out before progressing to requested. |
canceled | You canceled the reservation before submitting wire proof. |
rejected | Treasury declined the request. |
| Status | Meaning |
|---|---|
requested | The draw was created and is being processed for disbursement. |
disbursed | Funds have landed in your Mint wallet or at the verified Credit Express destination. |
paid | The disbursed amount is fully repaid. |
past_due | The disbursed amount has not been fully repaid by its due date. |
rejected | Circle declined the request. |
| Credit Express destination status | Meaning |
|---|---|
pending | The onchain delivery has not started. |
initiated | The onchain transaction has been broadcast. |
complete | The onchain delivery is confirmed. |
failed | The onchain delivery failed. |
Example payload
Example payload
creditFees
Fires when a fee accrues against a credit line. Cadence matches the credit
line’s feeCadence: daily lines emit a fee notification every 24 hours and
hourly Line of Credit lines emit one every hour. Each notification carries the
accrued amount, the credit line it applies to, and the period it covers.
Example payload
Example payload
creditRepayments
Fires when Circle matches an incoming fiat wire to a credit line or records a
completed crypto repayment. The payload identifies the credit line, the
repayment method (fiat or crypto), the matched amount, and the resulting
outstanding balance.
Example payload
Example payload
approvalWorkflowTransferApproved and approvalWorkflowTransferRejected
Recipient approval workflow events. Some regions require a separate approval
step before a transfer can proceed; France and Singapore are two examples.
Pending transfers are routed to an approver. The decision is delivered on
approvalWorkflowTransferApproved when the proposal is approved or on
approvalWorkflowTransferRejected when it is rejected. The payload carries the
proposal’s transferStatus, proposalStatus, the originating idempotencyKey,
and the transferId of the affected transfer.
Example payload
Example payload