SettleMint
Events

compliance.freeze.recalled

A compliance officer recalled an earlier compliance freeze event.

A compliance officer recalled an earlier compliance freeze event.

Delivery contract

FieldValue
Event typecompliance.freeze.recalled
Version1
Lifecycle staterecalled
Counter-signed receipt requiredtrue
SDK typeWebhook.ComplianceFreezeRecalledV1

Related references:

  • idxr_compliance_status
  • idxr_token

When to consume this event

Consume compliance.freeze.recalled when your integration previously acted on a compliance freeze and needs to clear, replace, or audit that local hold state. Treat the recalled event as the authoritative replacement for the event named by supersedes.

Use both envelope and payload identifiers during processing. Store evt_id to deduplicate delivery retries. Store request.idempotency_key when present, and store supersedes so replayed recalls update the same downstream record instead of creating a second release action.

The default thin payload shape strips subjectAddress and reasonCode from this event. Use the fat payload shape only for endpoints that are allowed to receive those fields. Protect the address and recall reason as sensitive compliance data.

The schema and examples below show the full payload shape. A default thin delivery omits subjectAddress and reasonCode.

See webhook idempotency and on-chain outcome for retry, replay, and lifecycle handling across pending, final, retracted, and recalled events.

Payload schema

{
  "type": "object",
  "properties": {
    "tokenAddress": {
      "type": "string",
      "pattern": "^0x[a-fA-F0-9]{40}$"
    },
    "chainId": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "subjectAddress": {
      "type": "string",
      "pattern": "^0x[a-fA-F0-9]{40}$"
    },
    "recalledBy": {
      "type": "string"
    },
    "reasonCode": {
      "type": "string"
    },
    "supersedes": {
      "type": "string",
      "pattern": "^evt_[a-zA-Z0-9]+$"
    }
  },
  "required": [
    "tokenAddress",
    "chainId",
    "subjectAddress",
    "recalledBy",
    "reasonCode",
    "supersedes"
  ],
  "additionalProperties": false
}

TypeScript SDK example

import { verifyWebhook, type Webhook } from "@settlemint/dalp-sdk";

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

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

if (result.event.type === "compliance.freeze.recalled") {
  const event: Webhook.Event<"compliance.freeze.recalled"> = result.event;
  console.log(event.payload);
}

curl example

curl -X POST https://consumer.example.com/dalp/webhooks \
  -H "content-type: application/json" \
  -H "webhook-id: evt_docs_compliance_freeze_recalled_001" \
  -H "webhook-timestamp: 1778112000" \
  -H "webhook-signature: v1,docs-example-signature" \
  --data '{"evt_id":"evt_docs_compliance_freeze_recalled_001","type":"compliance.freeze.recalled","version":1,"lifecycle_state":"recalled","supersedes":"evt_docs_original_001","request":{"idempotency_key":"idem_01JZP7R5W8M9N0P1Q2R3S4T5"},"related":{"idxr_compliance_status":"idxr_compliance_status_example","idxr_token":"idxr_token_example"},"payload":{"tokenAddress":"0x3333333333333333333333333333333333333333","chainId":537001,"subjectAddress":"0x4444444444444444444444444444444444444444","recalledBy":"compliance-ops","reasonCode":"manual-review-overturned","supersedes":"evt_recalledFreeze001"}}'

Version history

  • v1: Initial registry entry for compliance.freeze.recalled.

Deprecation

This event type is not deprecated.

Manifest

The machine-readable AsyncAPI entry is published in the DALP events manifest.

On this page