# compliance.freeze.recalled

Source: https://docs.settlemint.com/docs/events/compliance-freeze-recalled
A compliance officer recalled an earlier compliance freeze event.



A compliance officer recalled an earlier compliance freeze event.

## Delivery contract [#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_status`
* `idxr_token`

## When to consume this event [#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](/docs/events/idempotency-and-on-chain-outcome) for retry, replay, and lifecycle handling across pending, final, retracted, and recalled events.

## Payload schema [#payload-schema]

```json
{
  "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 [#typescript-sdk-example]

```typescript
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-example]

```bash
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 [#version-history]

* `v1`: Initial registry entry for `compliance.freeze.recalled`.

## Deprecation [#deprecation]

This event type is not deprecated.

## Manifest [#manifest]

The machine-readable AsyncAPI entry is published in the [DALP events manifest](/.well-known/dalp-events.json).
