SettleMint
API referenceEvents

identity.registration.provisional

An identity was registered as active or pending in an identity registry; the linkage is provisional until the indexer reaches the configured reorg depth.

Delivery contract

FieldValue
Event typeidentity.registration.provisional
Version1
Lifecycle stateprovisional
Counter-signed receiptsNo event-specific advice
SDK typeWebhook.IdentityRegistrationProvisionalV1

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:

  • idxr_identity

When to consume this event

Consume identity.registration.provisional when your integration needs early notice that an account address has been joined to an identity registry, but can tolerate the result still being within the configured reorg depth.

Use the event to stage downstream identity, account, or compliance synchronization. Do not treat it as final proof of registry membership while the observation is provisional.

Your consumer must handle any later retraction or final state for the same on-chain observation.

The payload carries the account address, identity address, registry address, country code, status, chain ID, block number, and transaction hash. Treat accountAddress and country as personal-data-bearing fields for webhook privacy reviews. If your endpoint is configured for thin payload delivery, do not depend on those fields in the first delivery.

See webhook idempotency and on-chain outcome for retry, replay, payload-shape, and provisional-event handling.

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": {
    "accountAddress": {
      "type": "string",
      "minLength": 42,
      "maxLength": 42,
      "pattern": "^0x[a-fA-F0-9]{40}$",
      "description": "A valid Ethereum address (42 characters, starting with 0x)",
      "examples": ["0x71C7656EC7ab88b098defB751B7401B5f6d8976F"]
    },
    "blockNumber": {
      "type": "string"
    },
    "chainId": {
      "type": "integer",
      "exclusiveMinimum": 0
    },
    "country": {
      "anyOf": [
        {
          "type": "integer",
          "minimum": 0
        },
        {
          "type": "null"
        }
      ]
    },
    "identityAddress": {
      "type": "string",
      "minLength": 42,
      "maxLength": 42,
      "pattern": "^0x[a-fA-F0-9]{40}$",
      "description": "A valid Ethereum address (42 characters, starting with 0x)",
      "examples": ["0x71C7656EC7ab88b098defB751B7401B5f6d8976F"]
    },
    "registryAddress": {
      "type": "string",
      "minLength": 42,
      "maxLength": 42,
      "pattern": "^0x[a-fA-F0-9]{40}$",
      "description": "A valid Ethereum address (42 characters, starting with 0x)",
      "examples": ["0x71C7656EC7ab88b098defB751B7401B5f6d8976F"]
    },
    "status": {
      "type": "string"
    },
    "transactionHash": {
      "type": "string",
      "pattern": "^0x[a-fA-F0-9]{64}$"
    }
  },
  "required": [
    "accountAddress",
    "blockNumber",
    "chainId",
    "country",
    "identityAddress",
    "registryAddress",
    "status",
    "transactionHash"
  ],
  "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 === "identity.registration.provisional") {
  const event: Webhook.Event<"identity.registration.provisional"> = 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_12891b2c83d427ba8c84b969cbbf5af5" \
  -H "webhook-timestamp: 1778112000" \
  -H "webhook-signature: v1,docs-example-signature" \
  --data '{"evt_id":"evt_12891b2c83d427ba8c84b969cbbf5af5","source_id":"example:identity.registration.provisional@1:0","lifecycle_state":"provisional","payload":{"accountAddress":"0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","blockNumber":"18445201","chainId":537001,"country":56,"identityAddress":"0xcccccccccccccccccccccccccccccccccccccccc","registryAddress":"0xdddddddddddddddddddddddddddddddddddddddd","status":"ACTIVE","transactionHash":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"},"related":{"idxr_identity":"idxr_identity_example"},"type":"identity.registration.provisional","version":1,"request":{"idempotency_key":"idem_01JZP7R5W8M9N0P1Q2R3S4T5"}}'

Version and manifest

This page documents version 1 of identity.registration.provisional. This event type is not deprecated. The DALP events manifest contains the machine-readable AsyncAPI entry.

On this page