compliance.freeze.recalled
A compliance officer recalled an earlier compliance freeze event.
A compliance officer recalled an earlier compliance freeze event.
Delivery contract
| Field | Value |
|---|---|
| Event type | compliance.freeze.recalled |
| Version | 1 |
| Lifecycle state | recalled |
| Counter-signed receipt required | true |
| SDK type | Webhook.ComplianceFreezeRecalledV1 |
Related references:
idxr_compliance_statusidxr_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 forcompliance.freeze.recalled.
Deprecation
This event type is not deprecated.
Manifest
The machine-readable AsyncAPI entry is published in the DALP events manifest.