SettleMint
API referenceEvents

funding.requirement.resolved

A funding requirement settled: the wallet held at least the amount asked, and the executions parked on it resume after this event.

Delivery contract

FieldValue
Event typefunding.requirement.resolved
Version1
Lifecycle statefinal
Counter-signed receiptsNo event-specific advice
SDK typeWebhook.FundingRequirementResolvedV1

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:

  • funding_requirements

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": {
    "requirementId": {
      "type": "string"
    },
    "chainId": {
      "type": "integer",
      "exclusiveMinimum": 0
    },
    "subjectAddress": {
      "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"]
    },
    "subjectKind": {
      "type": "string",
      "enum": ["eoa", "smart-account", "paymaster-deposit"]
    },
    "requiredWei": {
      "type": "string",
      "pattern": "^\\d+$"
    },
    "status": {
      "type": "string",
      "enum": ["active", "resolved", "expired"]
    },
    "expiresAt": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z$"
    },
    "lastRefusalAt": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z$"
    },
    "role": {
      "type": "string"
    },
    "subjectOwner": {
      "type": "string"
    },
    "advisoryTotalWei": {
      "type": "string",
      "pattern": "^\\d+$"
    },
    "observedWei": {
      "type": "string",
      "pattern": "^\\d+$"
    },
    "entryPointAddress": {
      "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"]
    },
    "workflowExecutionId": {
      "type": "string"
    },
    "resolvedAt": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z$"
    }
  },
  "required": [
    "requirementId",
    "chainId",
    "subjectAddress",
    "subjectKind",
    "requiredWei",
    "status",
    "expiresAt",
    "lastRefusalAt"
  ],
  "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 === "funding.requirement.resolved") {
  const event: Webhook.Event<"funding.requirement.resolved"> = 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_b95ac77140ad1a12c2e4da45bd19f92e" \
  -H "webhook-timestamp: 1778112000" \
  -H "webhook-signature: v1,docs-example-signature" \
  --data '{"evt_id":"evt_b95ac77140ad1a12c2e4da45bd19f92e","source_id":"example:funding.requirement.resolved@1:0","lifecycle_state":"final","payload":{"requirementId":"01a00691-0c1b-7412-929d-4c01886207eb","chainId":11155111,"subjectAddress":"0xBD7B005c1A2B3C4d5E6f708192A3b4C5d6E7F809","subjectKind":"eoa","requiredWei":"8830580880000000","status":"resolved","expiresAt":"2026-08-17T11:30:00.000Z","lastRefusalAt":"2026-08-17T11:00:00.000Z","role":"queued-write-eoa","subjectOwner":"caller","advisoryTotalWei":"12000000000000000","workflowExecutionId":"exec_01JZP7R5W8M9N0P1Q2R3S4T5V6","observedWei":"12000000000000000","resolvedAt":"2026-08-17T11:12:00.000Z"},"related":{"funding_requirements":"funding_requirements_example"},"type":"funding.requirement.resolved","version":1,"request":{"idempotency_key":"idem_01JZP7R5W8M9N0P1Q2R3S4T5"}}'

Version and manifest

This page documents version 1 of funding.requirement.resolved. This event type is not deprecated. The DALP events manifest contains the machine-readable AsyncAPI entry.

On this page