SettleMint
API referenceEvents

custody.deposit.final

A custodial deposit reached a participant's free balance, so the participant can spend it. Sent when the deposit credits the free balance directly, or when screening and finality clear a held deposit. A deposit held for screening or finality sends nothing until it clears. amount is in the asset's base units and assetKey names the custody asset. A later custody.deposit.retracted names a deposit a chain reorg undid.

Delivery contract

FieldValue
Event typecustody.deposit.final
Version1
Lifecycle statefinal
Counter-signed receiptsNo event-specific advice
SDK typeWebhook.CustodyDepositFinalV1

The receipt recommendation does not change delivery behavior. DALP waits for a counter-signed receipt only if the webhook endpoint's counterSignedReceipts value is true when DALP queues the delivery. When the value is false, a normal 2xx response completes the delivery.

Related references:

  • depositId
  • journalEntryId

Payload schema

The schema and examples describe the full payload. Thin delivery omits personal data fields. Use the payload-shape guidance to choose the endpoint configuration.

{
  "type": "object",
  "properties": {
    "chainId": {
      "type": "integer",
      "exclusiveMinimum": 0
    },
    "depositId": {
      "type": "string",
      "minLength": 1
    },
    "transactionHash": {
      "type": "string",
      "pattern": "^0x[a-fA-F0-9]{64}$"
    },
    "logIndex": {
      "type": "integer",
      "minimum": 0
    },
    "assetKey": {
      "type": "string",
      "minLength": 1
    },
    "walletId": {
      "type": "string",
      "minLength": 1
    },
    "participantId": {
      "type": "string",
      "minLength": 1
    },
    "amount": {
      "type": "string",
      "pattern": "^(?:0|[1-9]\\d{0,77})$"
    },
    "journalEntryId": {
      "type": "string",
      "minLength": 1
    },
    "occurredAt": {
      "type": "string"
    }
  },
  "required": [
    "chainId",
    "depositId",
    "transactionHash",
    "logIndex",
    "assetKey",
    "walletId",
    "participantId",
    "amount",
    "journalEntryId",
    "occurredAt"
  ],
  "additionalProperties": true
}

TypeScript SDK example

Use the request's raw body and headers with your endpoint's webhook secret. This handler illustrates verification and event selection. Before writing downstream state, deduplicate deliveries by evt_id and recognize replayed outcomes by their domain identifiers.

const result = await verifyWebhook({
  rawBody,
  headers,
  secret: process.env.DALP_WEBHOOK_SECRET!,
});

if (!result.ok) {
  throw new Error(`Webhook verification failed: ${result.code}`);
}

if (result.event.type === "custody.deposit.final") {
  const event: Webhook.Event<"custody.deposit.final"> = result.event;
  console.log(event.payload);
}

HTTP delivery example

This illustrative request shows the delivery shape. Its timestamp and signature are placeholders; a verifier rejects them. Use a signed platform delivery to verify your endpoint.

curl -X POST https://consumer.example.com/dalp/webhooks \
  -H "content-type: application/json" \
  -H "webhook-id: evt_bbe68c0c337ff48cd2bebe940543c305" \
  -H "webhook-timestamp: 1778112000" \
  -H "webhook-signature: v1,docs-example-signature" \
  --data '{"evt_id":"evt_bbe68c0c337ff48cd2bebe940543c305","source_id":"example:custody.deposit.final@1:0","lifecycle_state":"final","payload":{"chainId":537001,"depositId":"537001:0xcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc:4","transactionHash":"0xcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","logIndex":4,"assetKey":"usdc","walletId":"wal_01J9ZQ8D1F3H5K7M9P1R3T5V7X","participantId":"ptc_01J9ZQ8E2G4J6L8N0Q2S4U6W8Y","amount":"2500000000","journalEntryId":"jrn_01J9ZQ8F3H5K7M9P1R3T5V7X9Z","occurredAt":"2026-09-28T09:18:27.634Z"},"related":{"depositId":"depositId_example","journalEntryId":"journalEntryId_example"},"type":"custody.deposit.final","version":1,"request":{"idempotency_key":"idem_01JZP7R5W8M9N0P1Q2R3S4T5"}}'

Version and manifest

This page documents version 1 of custody.deposit.final. This event type is not deprecated. The DALP events manifest contains the machine-readable AsyncAPI entry.

On this page