funding.requirement.raised
A gas wallet ran dry and a write paused: the platform opened a funding requirement naming the wallet, the chain, the amount that settles it, and the execution now parked on it. It is sent once per requirement; later refusals against the same open ask send nothing.
Delivery contract
| Field | Value |
|---|---|
| Event type | funding.requirement.raised |
| Version | 1 |
| Lifecycle state | final |
| Counter-signed receipts | No event-specific advice |
| SDK type | Webhook.FundingRequirementRaisedV1 |
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.raised") {
const event: Webhook.Event<"funding.requirement.raised"> = 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_30eeb0801ced816a398e8a02f5f91d48" \
-H "webhook-timestamp: 1778112000" \
-H "webhook-signature: v1,docs-example-signature" \
--data '{"evt_id":"evt_30eeb0801ced816a398e8a02f5f91d48","source_id":"example:funding.requirement.raised@1:0","lifecycle_state":"final","payload":{"requirementId":"01a00691-0c1b-7412-929d-4c01886207eb","chainId":11155111,"subjectAddress":"0xBD7B005c1A2B3C4d5E6f708192A3b4C5d6E7F809","subjectKind":"eoa","requiredWei":"8830580880000000","status":"active","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"},"related":{"funding_requirements":"funding_requirements_example"},"type":"funding.requirement.raised","version":1,"request":{"idempotency_key":"idem_01JZP7R5W8M9N0P1Q2R3S4T5"}}'Version and manifest
This page documents version 1 of funding.requirement.raised. This event type is not deprecated. The DALP events manifest contains the machine-readable AsyncAPI entry.
funding.requirement.expired
A funding requirement expired unpaid: its deadline passed before the wallet held the amount asked, and the executions parked on it are released to fail after this event.
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.