> ## Documentation Index
> Fetch the complete documentation index at: https://docs.anchorage.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Overview

> Receive event-driven notifications for operations and transactions across crypto and USD.

The Anchorage Digital Webhooks API delivers event-driven notifications for operations and transactions across both crypto and USD. Event notifications are configurable by endpoint and by event type.

For details on retry behavior, delivery guarantees, and consumer requirements, see [Delivery and reliability](/knowledge-base/platform/developers/webhooks/webhooks-delivery).

## Supported events

Not all webhook events appear in every account, some are restricted to specific use cases.

### transfer

**`transfer.initiated`**\
Payload: `transactionId`, [`details`](#transaction-lifecycle-transfers-and-withdrawals)

Transfer initiated. Fires multiple times as the transfer advances — see [Transaction lifecycle](#transaction-lifecycle-transfers-and-withdrawals).

<hr className="webhook-event-divider" />

**`transfer.completed`**\
Payload: `transactionId`, [`details`](#transaction-lifecycle-transfers-and-withdrawals)

Transfer successfully completed.

<hr className="webhook-event-divider" />

**`transfer.failed`**\
Payload: `transactionId`, [`details`](#failure-reasons)

Transfer failed. See [Failure reasons](#failure-reasons).

### withdrawal

**`withdrawal.initiated`**\
Payload: `transactionId`, [`details`](#transaction-lifecycle-transfers-and-withdrawals)

Withdrawal initiated. Fires multiple times as the withdrawal advances — see [Transaction lifecycle](#transaction-lifecycle-transfers-and-withdrawals).

<hr className="webhook-event-divider" />

**`withdrawal.completed`**\
Payload: `transactionId`, [`details`](#transaction-lifecycle-transfers-and-withdrawals)

Withdrawal successfully completed.

<hr className="webhook-event-divider" />

**`withdrawal.failed`**\
Payload: `transactionId`, [`details`](#failure-reasons)

Withdrawal failed. See [Failure reasons](#failure-reasons).

### deposit

**`deposit.attributed`**\
Payload: `transactionId`

Deposit attribution completed. Also fires when a USD deposit settles, since fiat deposits don't require attribution.

<hr className="webhook-event-divider" />

**`deposit.pending-attribution`**\
Payload: `transactionId`

New deposit pending attribution. Crypto only; fiat deposits don't require attribution.

### program-customer-onboard

Wealth manager only.

**`program-customer-onboard.completed`**\
Payload: `customerId`, `applicationType`

New RIA program customer passed onboarding KYC. Subaccount creation is now available.

<hr className="webhook-event-divider" />

**`program-customer-onboard.rfi`**\
Payload: `customerId`

Request for more information on program customer onboarding.

### subaccount

Wealth manager only.

**`subaccount.opened`**\
Payload: `subaccountId`

New RIA program customer subaccount opened.

<hr className="webhook-event-divider" />

**`subaccount.subaccount-withdrawal-request-status-change`**\
Payload: `transactionId` (subaccount tx)

Subaccount withdrawal request status changed.

<hr className="webhook-event-divider" />

**`subaccount.low-balance`**\
Payload: `subaccountId`

Subaccount balance is low.

### collateral-package-state-change

Collateral management only.

**`collateral-package-state-change.margin-return`**\
Payload: `collateralPackageId`, `state`, `pledgorName`, `securedPartyName`, `exposureId`, `amountReturned`, `currentLTV`, `marginReturnThresholdLTV`, `marginReturnReturnToLTV`

Package LTV fell below the defined MarginReturn LTV.

<hr className="webhook-event-divider" />

**`collateral-package-state-change.margin-call`**\
Payload: `collateralPackageId`, `state`, `pledgorName`, `securedPartyName`, `exposureId`, `currentLTV`, `amountRequired`, `marginCallThresholdLTV`, `actionRequired`, `cureDeadline`

Package LTV exceeded the defined MarginCall LTV.

<hr className="webhook-event-divider" />

**`collateral-package-state-change.healthy`**\
Payload: `collateralPackageId`, `state`, `pledgorName`, `securedPartyName`, `exposureId`, `currentLTV`

Package LTV returned to the healthy range.

<hr className="webhook-event-divider" />

**`collateral-package-state-change.critical`**\
Payload: `collateralPackageId`, `state`, `pledgorName`, `securedPartyName`, `exposureId`, `currentLTV`, `criticalThresholdLTV`

Package LTV exceeded the defined Critical LTV.

<hr className="webhook-event-divider" />

**`collateral-package-state-change.cure-period-expired`**\
Payload: `collateralPackageId`, `state`, `pledgorName`, `securedPartyName`, `exposureId`, `curePeriod`, `action`

Margin call cure deadline passed.

<hr className="webhook-event-divider" />

**`collateral-package-state-change.accelerated-margin-call`**\
Payload: `collateralPackageId`, `state`, `pledgorName`, `securedPartyName`, `exposureId`, `currentLTV`, `amountRequired`, `actionRequired`, `cureDeadline`

Accelerated margin call issued.

<hr className="webhook-event-divider" />

**`collateral-package-state-change.cm-operation-created`**\
Payload: `collateralPackageId`, `state`, `pledgorName`, `securedPartyName`, `exposureId`

New collateral management operation created.

<hr className="webhook-event-divider" />

**`collateral-package-state-change.package-defaulted`**\
Payload: `collateralPackageId`, `state`, `pledgorName`, `securedPartyName`, `exposureId`, `currentLTV`, `defaultNoticeWarning`

Package entered the defaulted state.

### trade-order

**`trade-order.execution-report`**\
Payload: *(varies)*

Trade order execution report received.

### tax

**`tax.transaction-tagged`**\
Payload: `transactionId`, `state`, `warnings`

Tax lot tagging applied to a transaction.

<hr className="webhook-event-divider" />

**`tax.transaction-untagged`**\
Payload: `transactionId`, `state`

Tax lot tagging removed from a transaction.

## Transaction lifecycle (transfers and withdrawals)

For `transfer` and `withdrawal`, the three events, `initiated`, `completed`, and `failed`, track an operation across its whole lifecycle. Unlike other topics, `initiated` fires more than once: each time the operation reaches a new phase, a fresh `initiated` event arrives with a different `details` value. Read `details` to know where the operation is. `completed` fires once on success, and `failed` fires once on a terminal failure, each with its own `details` value.

<Note>
  Expanded lifecycle `details` are rolling out per organization. If you don't yet see a `details` field on your `transfer` and `withdrawal` events, notify your integration point of contact.
</Note>

<Frame>
  <img src="https://mintcdn.com/deployment-4/bSO_CWn8q41fjx44/knowledge-base/images/diagrams/withdrawal_state_machine.svg?fit=max&auto=format&n=bSO_CWn8q41fjx44&q=85&s=bb5f0cf2094c63b66e7316d8be8a23b2" alt="Transfer and withdrawal request lifecycle: initiated queued, quorum-met (withdrawal only), and signing are cancelable and can fail; initiated broadcasting is not cancelable; then completed. Failures are rejected, expired, or canceled." width="1100" height="420" data-path="knowledge-base/images/diagrams/withdrawal_state_machine.svg" />
</Frame>

Each `initiated` event carries one of these `details` values:

| `details`                           | Fires when                                                         | Still cancelable? |
| :---------------------------------- | :----------------------------------------------------------------- | :---------------- |
| `queued`                            | Operation created, waiting on quorum approval and/or risk review   | Yes               |
| `quorum-met` (withdrawals only)     | Quorum approvals gathered, handed to Anchorage Digital risk review | Yes               |
| `signing`                           | Risk review passed, transaction signing begins                     | Yes               |
| `broadcasting` (committed on-chain) | Transaction broadcast to the network                               | No                |

The `completed` event carries a single `details` value, `completed`, once the operation settles successfully.

### Failure reasons

A `failed` event fires once if the operation ends unsuccessfully, carrying one of these `details` values:

| `details`  | Meaning                                                             |
| :--------- | :------------------------------------------------------------------ |
| `rejected` | An approver or Anchorage Digital risk review rejected the operation |
| `expired`  | The operation timed out before completion                           |
| `canceled` | The operation was canceled                                          |

Some `failed` events arrive with no `details` field. Treat a missing `details` as an unspecified failure.

Because `initiated` now fires multiple times, order matters. Webhook delivery is at-least-once and events may arrive out of order, so use `details` rather than arrival order to track progress. See [Delivery and reliability](/knowledge-base/platform/developers/webhooks/webhooks-delivery) for handling duplicates and out-of-order events.
