SettleMint
API referenceEvents

xvp.settlement-created.final

A settlement was created through an XvP settlement factory with its cutoff, hashlock and legs; leg indexes match those on xvp.settlement-executed.final. Never carries the hashlock secret; sent once the chain finality watermark reaches its source block, and only to endpoints on the System that owns the settlement's factory.

Delivery contract

FieldValue
Event typexvp.settlement-created.final
Version1
Lifecycle statefinal
Counter-signed receiptsNo event-specific advice
SDK typeWebhook.XvpSettlementCreatedFinalV1

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_xvp_settlement

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
    },
    "settlementAddress": {
      "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"]
    },
    "occurredAt": {
      "type": "string"
    },
    "transactionHash": {
      "type": "string",
      "pattern": "^0x[a-fA-F0-9]{64}$"
    },
    "blockNumber": {
      "type": "integer",
      "minimum": 0
    },
    "logIndex": {
      "type": "integer",
      "minimum": 0
    },
    "factoryAddress": {
      "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"]
    },
    "creatorAddress": {
      "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"]
    },
    "name": {
      "type": "string"
    },
    "cutoffAt": {
      "type": "string"
    },
    "autoExecute": {
      "type": "boolean"
    },
    "hashlock": {
      "type": "string",
      "pattern": "^0x[a-fA-F0-9]{64}$"
    },
    "hasExternalFlows": {
      "type": "boolean"
    },
    "flows": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "legIndex": {
            "type": "integer",
            "minimum": 0
          },
          "assetAddress": {
            "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"]
          },
          "fromAddress": {
            "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"]
          },
          "toAddress": {
            "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"]
          },
          "amount": {
            "type": "string",
            "pattern": "^(?:0|[1-9]\\d*)$",
            "maxLength": 78
          },
          "externalChainId": {
            "type": "integer",
            "minimum": 0
          },
          "externalAssetDecimals": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "legIndex",
          "assetAddress",
          "fromAddress",
          "toAddress",
          "amount",
          "externalChainId",
          "externalAssetDecimals"
        ],
        "additionalProperties": true
      }
    }
  },
  "required": [
    "chainId",
    "settlementAddress",
    "occurredAt",
    "transactionHash",
    "blockNumber",
    "logIndex",
    "factoryAddress",
    "creatorAddress",
    "name",
    "cutoffAt",
    "autoExecute",
    "hashlock",
    "hasExternalFlows",
    "flows"
  ],
  "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 === "xvp.settlement-created.final") {
  const event: Webhook.Event<"xvp.settlement-created.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_cc2e00981ea66df527345ad95215e59d" \
  -H "webhook-timestamp: 1778112000" \
  -H "webhook-signature: v1,docs-example-signature" \
  --data '{"evt_id":"evt_cc2e00981ea66df527345ad95215e59d","source_id":"example:xvp.settlement-created.final@1:0","lifecycle_state":"final","payload":{"chainId":537001,"settlementAddress":"0x9999999999999999999999999999999999999999","occurredAt":"2026-09-28T09:15:00.000Z","transactionHash":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","blockNumber":18445260,"logIndex":4,"factoryAddress":"0x4444444444444444444444444444444444444444","creatorAddress":"0x6666666666666666666666666666666666666666","name":"Bond against cash","cutoffAt":"2026-10-05T09:15:00.000Z","autoExecute":true,"hashlock":"0x0000000000000000000000000000000000000000000000000000000000000000","hasExternalFlows":false,"flows":[{"legIndex":0,"assetAddress":"0x5555555555555555555555555555555555555555","fromAddress":"0x6666666666666666666666666666666666666666","toAddress":"0x7777777777777777777777777777777777777777","amount":"250000000000000000000","externalChainId":0,"externalAssetDecimals":null},{"legIndex":1,"assetAddress":"0x8888888888888888888888888888888888888888","fromAddress":"0x7777777777777777777777777777777777777777","toAddress":"0x6666666666666666666666666666666666666666","amount":"1000000000","externalChainId":0,"externalAssetDecimals":null}]},"related":{"idxr_xvp_settlement":"idxr_xvp_settlement_example"},"type":"xvp.settlement-created.final","version":1,"request":{"idempotency_key":"idem_01JZP7R5W8M9N0P1Q2R3S4T5"}}'

Version and manifest

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

On this page