SettleMint
Developer guidesAPI integration

Request headers

Select participant, executor, and retry-safety headers for DALP API requests.

DALP API requests separate who acts from which wallet executes. X-Participant selects the acting participant for the request. X-Executor selects whether the request uses the participant's direct signing wallet, a smart wallet, or the organization's default routing policy. DALP validates the participant, executor value, and account-abstraction availability before it queues a blockchain operation.

Header summary

HeaderRequiredAccepted valuesDefault when omitted
X-ParticipantNoCanonical participant ID in pp_<uuid> formatThe authenticated session participant
X-ExecutorNoeoa or smart-walletThe active organization's executor routing policy
Idempotency-KeyNoClient-generated retry keyDALP treats each request as a new instruction

Send participant and executor headers only when the request needs explicit identity or wallet selection. Omit them for the normal path where DALP uses the authenticated participant and the organization's configured executor routing. Send an idempotency key on mutating requests when the client may retry after a timeout, dropped connection, or uncertain response.

Participant selection

X-Participant makes the acting participant explicit. The value must be the authenticated participant's canonical person participant ID, formatted as pp_<uuid> with lowercase UUID characters. It does not let an API key act for another participant.

curl "https://your-platform.example.com/api/v2/tokens/0x1234567890AbcdEF1234567890aBcdef12345678/holders" \
  -H "X-Api-Key: YOUR_DALP_API_KEY" \
  -H "X-Participant: pp_018f6d3e-89ab-7cde-8123-abcdefabcdef"

If X-Participant is absent, DALP acts as the participant from the authenticated session. If the header is present but malformed, DALP rejects the request as input validation. If the header names any participant other than the authenticated participant, DALP returns the same not-found shaped error whether the requested participant exists in the same tenant, exists in another tenant, or does not exist.

Executor selection

X-Executor chooses the wallet that executes a blockchain operation for the selected participant.

Header valueEffectWhen to use it
OmittedUses the active organization's default executor routing. If account-abstraction routing is enabled, the executor resolves to the participant's smart wallet. If it is not enabled, the executor resolves to the participant's signing wallet.Most integrations
eoaForces raw execution through a personal participant's externally owned account.Use only when the workflow must execute from the direct signer account. DALP rejects this value for non-person participants.
smart-walletForces smart-wallet execution after DALP confirms account abstraction is enabled for the platform and the active organization.Use when the workflow must execute through a smart wallet. For person participants, DALP can provision the participant smart wallet during the request.

The executor selected for the request becomes the effective wallet address that the smart contract sees as the caller. Route handlers use that resolved executor for role checks and user operation submission.

Use both headers together

The participant header answers who acts. The executor header answers which wallet acts for that participant. A request can set both when the caller wants the identity and executor choice to be explicit.

curl -X POST "https://your-platform.example.com/api/v2/tokens/0x1234567890AbcdEF1234567890aBcdef12345678/mints" \
  -H "X-Api-Key: YOUR_DALP_API_KEY" \
  -H "Idempotency-Key: mint-2026-05-17-001" \
  -H "X-Participant: pp_018f6d3e-89ab-7cde-8123-abcdefabcdef" \
  -H "X-Executor: smart-wallet" \
  -H "Content-Type: application/json" \
  -d '{
    "recipients": ["0x1111111111111111111111111111111111111111"],
    "amounts": ["1000"]
  }'

This request says: act as participant pp_018f6d3e-89ab-7cde-8123-abcdefabcdef, execute through that participant's smart wallet, and submit the mint operation once for the supplied idempotency key.

Idempotency-Key

Idempotency-Key makes a mutating request safer to retry when the first response is uncertain. Use one unique key for one client-side instruction. Store that key next to your own instruction or job ID. Reuse it only for retries of the same request. If the payload, route, or method changes, create a new key.

DALP uses the header in two ways:

  • Response-cached mutations store the key per tenant with a stable hash of the request method, route, and body. A retry with the same key and the same request can return the cached response instead of running the instruction again.
  • Transaction-writing APIs use the key as part of transaction queue retry identity. Queue identity can also include the operation kind, wallet route, chain, or route-specific scope. Treat the returned transaction request, status URL, events, and indexed state as the durable record after DALP accepts the request.

For response-cached mutations, retry behavior is:

Retry situationDALP behaviorCaller action
Same key, same request, completed inside the windowDALP returns the cached response for that request.Treat the response as the result of the original instruction.
Same key while the original request is still runningDALP reports that the key is in flight.Wait before retrying with the same key. Do not switch to a new key unless starting new work.
Same key with a different method, route, or bodyDALP rejects the retry because the key was reused for a different request.Keep the original key for the original request, or create a new key for the changed instruction.
Same key after the cache window expiresDALP can no longer attach the retry to the earlier cached response.Confirm the earlier outcome before starting a new instruction with a new key.
Webhook endpoint creation or secret rotation retryDALP returns the cached response with the cleartext signing secret removed.Capture the secret from the first successful response and store it securely. If the first response was lost and the retry returns no secret, rotate or create again with a new key after confirming the endpoint state.

DALP keeps the response cache for 24 hours. Treat that window as retry protection, not as a permanent transaction ledger. Use transaction status and event APIs to track long-running blockchain operations after DALP accepts the request.

Validation and failure modes

DALP validates participant and executor selection before queueing a blockchain operation.

ConditionResultCaller action
X-Participant is malformedThe request fails input validation.Use a canonical pp_<uuid> participant ID.
X-Participant names a participant other than the authenticated participantThe request returns a not-found shaped participant error.Remove the header or send the authenticated participant ID.
X-Executor is not eoa or smart-walletThe request fails input validation.Omit the header or send one of the supported values.
X-Executor: eoa is sent for a non-person participantThe request fails because EOA execution is not supported for that participant type.Omit the header or use smart-wallet when the participant has an available smart wallet.
X-Executor: smart-wallet is sent while platform account abstraction is disabledThe request fails before submission.Omit the override or enable account abstraction before retrying.
X-Executor: smart-wallet is sent while the active organization's account abstraction is disabledThe request fails before submission.Omit the override, use eoa when the participant supports it, or enable account abstraction for the organization.
X-Executor: smart-wallet cannot resolve a usable smart walletThe request fails before submission.Retry after wallet availability is restored, or omit the override.

Route applicability

DALP exposes X-Participant and X-Executor in the OpenAPI specification on routes that can use participant or executor selection. Check /api/v2/spec.json for the operation you call before adding the headers.

Route typeHeader behavior
Transaction routes that queue blockchain operationsDALP validates the selected participant and executor before queueing the operation.
Token indexer reads that use participant contextDALP can use the selected participant to scope the read.
Smart wallet approval routesDALP can use explicit executor selection when creating or signing approvals.
Routes that do not list these headers in OpenAPITreat the headers as not applicable. Omit them instead of relying on them.

Error codes

Error codePublic errorWhen it happens
DALP-0524X_PARTICIPANT_FORBIDDENX-Participant is well formed but does not match the authenticated participant.
DALP-0530X_EXECUTOR_UNSUPPORTED_FOR_PARTICIPANT_TYPEX-Executor: eoa is used for a participant type that cannot execute through an EOA.
DALP-0531X_EXECUTOR_NO_SMART_WALLETX-Executor: smart-wallet is used when no smart wallet is available for the selected participant.
DALP-0616X_EXECUTOR_AA_DISABLED_GLOBALLYX-Executor: smart-wallet is used while platform account abstraction is disabled.
DALP-0621X_EXECUTOR_AA_DISABLED_FOR_ORGX-Executor: smart-wallet is used while account abstraction is disabled for the active organization.

Malformed participant IDs and unsupported executor values return input validation errors before DALP queues the operation.

Use Prefer when a transaction route supports response timing preferences. X-Transaction-Speed is a parsed request header on routes that expose it; leave it unset unless route documentation or your integration contract tells you to send an explicit speed preference. X-User-Id and X-Organization-Id are internal response headers used by the API layer and are not request headers for integrations.

On this page