SettleMint
Developer guidesAPI integration

API reference

Access the OpenAPI specification and generate type-safe clients for integrating with the DALP platform programmatically.

DALP serves versioned OpenAPI 3.x specifications for the REST API. Use /api/v2/spec.json for new integrations, SDK generation, Postman, Insomnia, and read-only API documentation. Use /api/v1/spec.json only when you maintain an existing integration on that route family.

REST API documentation with full endpoint reference

OpenAPI specification endpoints

DALP exposes a versioned interactive API explorer and a versioned OpenAPI JSON file. Use the JSON endpoint when you generate clients, import the API into Postman or Insomnia, or preview the contract with tools such as Redoc.

API versionInteractive explorerOpenAPI JSONUse it for
v2/api/v2/api/v2/spec.jsonNew integrations and generated clients.
v1/api/v1/api/v1/spec.jsonExisting integrations that still use v1 routes.

Choose /api/v2/spec.json for new integrations. Use /api/v1/spec.json only when you maintain a v1 client.

The JSON endpoint returns a document conforming to the OpenAPI 3.x specification. The spec includes:

  • endpoint definitions for the selected API version
  • request schemas with parameter types, validation rules, and required fields
  • response schemas for successful responses and error codes
  • authentication through the X-Api-Key header
  • shared headers such as Idempotency-Key, Prefer, X-Transaction-Speed, X-Participant, and X-Executor

DALP serves the explorer HTML separately from the OpenAPI JSON. The explorer at /api/v2 loads a local Scalar bundle, then fetches /api/v2/spec.json asynchronously. The JSON endpoint can also return cached and precompressed responses when the client sends Accept-Encoding: br or Accept-Encoding: gzip; use the same /api/v2/spec.json URL in tools, and the server selects the response encoding.

Viewing the specification

Open the current explorer in your browser:

Open DALP API explorer

Fetch the JSON specification for code generators and API tools:

curl https://your-platform.example.com/api/v2/spec.json | jq '.info.title, .info.version'

Import the versioned OpenAPI JSON URL to auto-generate a collection with all endpoints configured.


Authentication

All API requests require authentication, either via an API key in the X-Api-Key header or a session cookie. When using session-based (cookie) authentication, sensitive operations that trigger blockchain transactions also require wallet verification. When using API key authentication, wallet verification is skipped automatically, so the walletVerification field can be omitted.

Use the optional X-Participant and X-Executor headers only when a request must select the acting participant or execution wallet explicitly. For values, defaults, route applicability, and validation errors, see Request headers.

DALP validates request-header participant and executor selection before queueing a blockchain operation. Remove the headers to fall back to automatic selection, or retry after the selected wallet configuration is available and indexed.

See Getting started for API key creation and client configuration. See Request headers for participant and executor selection. See Smart wallet API overview for smart wallet discovery, signer management, and multisig approvals. See Events when an integration needs webhook payload schemas, lifecycle states, or replay-safe reconciliation after a write request. See UserOperations for the smart-account request model behind account abstraction execution.


Response headers

Transaction hash header

Mutation operations that submit blockchain transactions return the transaction hash in the X-Transaction-Hash response header.

The API automatically waits for transaction confirmation, so you typically don't need this header. However, if you receive a CONFIRMATION_TIMEOUT error, use the hash to check whether the transaction eventually succeeded before retrying.

See Transaction tracking for timeout recovery patterns.


API namespaces

The API is organized into logical namespaces, each containing related procedures:

NamespaceDescriptionExample operations
tokenToken CRUD, supply management, compliance, statstoken.create, token.mint, token.burn, token.transfer, token.freezeAddress
transactionBlockchain transaction status trackingtransaction.read
systemPlatform infrastructure (access control, identity, claims)system.accessManager.grantRole, system.identity.register, system.trustedIssuers.create
userUser profile and organization membershipuser.me, user.update
accountBlockchain wallet and identity managementaccount.identity, account.claims
actionsScheduled tasks and executable operationsactions.list, actions.read
addonsOptional features such as token sales and fixed yieldaddons.tokenSale.create, addons.fixedYield.create, addons.fixedYield.claim
contactsContacts for frequent wallet recipientscontacts.list, contacts.create
exchangeRatesForeign exchange rates for multi-currency assetsexchangeRates.list, exchangeRates.supportedCurrencies
searchGlobal search across tokens, contacts, transactionssearch.query
settingsPlatform configuration and preferencessettings.get, settings.update
externalTokenImport and track tokens from other systemsexternalToken.register, externalToken.list
bundlerERC-4337 JSON-RPC discovery for account abstractioneth_chainId, eth_supportedEntryPoints
authBetter Auth endpoints (sign-in, sessions, passkeys)/auth/sign-in, /auth/session, /auth/passkey/create

Each namespace maps to versioned HTTP routes. For example, v2 token operations use routes under /api/v2/tokens.

Bundler JSON-RPC endpoint

The account abstraction bundler endpoint is exposed separately from the OpenAPI procedure namespaces because ERC-4337 wallets call it as JSON-RPC 2.0. See Bundlers for the concept model.

EndpointProtocolSupported methodsUse it for
POST /api/v2/bundlerJSON-RPC 2.0eth_chainId, eth_supportedEntryPointsDiscover the active chain and EntryPoint.

Send the method name in the JSON-RPC method field. eth_chainId returns the active chain ID as a hexadecimal string. eth_supportedEntryPoints returns an array containing the EntryPoint address registered for the active network after directory and indexer resolution.

curl -X POST "$DALP_API_URL/api/v2/bundler" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_supportedEntryPoints","params":[]}'

Requests without an id are treated as JSON-RPC notifications and return 204 No Content, including unsupported ERC-4337 method names. Unsupported methods return a JSON-RPC method not found response only when the request includes an id.

For paymaster funding, sponsorship settings, and signer-key rotation, use System paymasters and Paymasters and gas sponsorship.

Exchange-rate operations

Use the exchangeRates namespace when an integration needs current or historical fiat rates for multi-currency assets.

OperationHTTP routePermissionUse it for
exchangeRates.listGET /api/v2/exchange-ratesexchangeRates:listList feed-backed rates with pagination, sorting, and filters.
exchangeRates.readGET /api/v2/exchange-rates/{baseCurrency}/{quoteCurrency}exchangeRates:readRead one current currency pair.
exchangeRates.updatePUT /api/v2/exchange-rates/{baseCurrency}/{quoteCurrency}exchangeRates:updateSet a manual rate override for one pair.
exchangeRates.deleteDELETE /api/v2/exchange-rates/{baseCurrency}/{quoteCurrency}exchangeRates:removeDelete a manual rate override.
exchangeRates.syncPOST /api/v2/exchange-rates/syncexchangeRates:syncRefresh rates from the configured provider.
exchangeRates.historyGET /api/v2/exchange-rates/{baseCurrency}/{quoteCurrency}/historyexchangeRates:listRead historical values for one pair.
exchangeRates.supportedCurrenciesGET /api/v2/exchange-rates/supported-currenciesauthenticated read routeRead the provider's supported ISO 4217 currency-code snapshot.

baseCurrency and quoteCurrency use ISO 4217 alpha-3 currency codes such as USD and EUR. The list response includes baseCurrency, quoteCurrency, rate, effectiveAt, updatedAt, and feedAddress; rate and timestamps can be null when a feed exists but has not observed a value yet.

Use GET /api/v2/exchange-rates/supported-currencies before presenting currency choices for onboarding, platform settings, or payment-currency configuration.

The response returns the configured exchange-rate provider key and a sorted list of supported currency codes:

{
  "data": {
    "providerKey": "open-er-api",
    "currencies": ["AED", "EUR", "USD"]
  },
  "links": {
    "self": "/v2/exchange-rates/supported-currencies"
  }
}

The list reflects the provider's current supported-currency snapshot. DALP caches the response for fast reads.

If a later configuration request rejects a currency as unsupported, refresh choices from this endpoint before retrying.

For the product workflow behind these choices, see Exchange-rate target currencies. For CLI equivalents, see Exchange rate commands. For the feed architecture behind the API, see Feeds system.

Organization deployment stream

The organization.deployStream operation exposes deployment progress as a server-sent event stream for the active organization.

OperationHTTP routeUse it for
organization.deployStreamGET /api/v2/organizations/deploy/{deploymentId}/streamWatch organization deployment progress until it ends.

The deploymentId is scoped to the caller's active organization. A caller can subscribe only to the deployment stream for that organization. A missing organization context or a deploymentId from another organization returns a not-found shaped error before the stream starts, so clients should treat it the same way as an unavailable deployment.

The stream emits events in this order:

Event typeMeaningClient handling
treeFull deployment tree. Sent when the workflow state is available and whenever node shape changes.Replace the local deployment tree with the received nodes.
updateStatus change for an existing deployment node.Patch the matching node by nodeId.
completeTerminal deployment result. success: true means the deployment finished successfully. success: false can include failedSteps.Stop listening and show the final result.
errorStream or polling failure encoded as a public DAPI error payload.Stop listening, inspect error.id, error.retryable, and the request ID.

A successful or failed complete event closes the stream. A terminal stream error also yields one error event and closes the stream. For failed deployments, read complete.failedSteps[].wireError when present; it uses the same public contract-error fields documented in Error handling.

Reconnect only when the terminal payload is retryable or when the user restarts the deployment workflow. Do not keep polling after complete or error.

Fixed yield schedule operations

The addons.fixedYield namespace exposes the fixed yield schedule lifecycle:

OperationHTTP routeUse it for
addons.fixedYield.createPOST /api/v2/addons/fixed-yield-schedulesCreate a fixed yield schedule for a token.
addons.fixedYield.readGET /api/v2/addons/fixed-yield-schedules/{scheduleAddress}Read one schedule by contract address.
addons.fixedYield.topUpPOST /api/v2/addons/fixed-yield-schedules/{scheduleAddress}/top-upsDeposit denomination asset into the schedule.
addons.fixedYield.withdrawPOST /api/v2/addons/fixed-yield-schedules/{scheduleAddress}/withdrawalsWithdraw unused denomination asset.
addons.fixedYield.claimPOST /api/v2/addons/fixed-yield-schedules/{scheduleAddress}/claimsClaim available yield from the schedule.

Create requests include the token address, yield rate in basis points, payment interval, future start and end times, and the ISO 3166-1 numeric country code. topUp and withdraw also include the amount and linked token address; withdraw includes the recipient address.

For CLI examples and funding notes, see Fixed yield schedule commands and Configure yield schedules.

User statistics data sources

User statistics endpoints (user.stats, user.statsUserCount, user.statsGrowthOverTime) report counts based on organization membership data in the DALP database. Recent activity is derived from each member's most recent login timestamp, falling back to their created date when login history is unavailable.


TypeScript SDK

Use @settlemint/dalp-sdk for TypeScript services that call DALP directly. The packaged SDK provides typed route namespaces, SDK-managed x-api-key headers, and serializers for DALP numeric and timestamp values.

See Getting started for SDK setup and client configuration.


Using with API tools

Interactive explorer

The interactive explorer serves the selected API version:

  1. Open /api/v2 in your browser, for example https://your-platform.example.com/api/v2.
  2. Expand endpoint groups to inspect request schemas and response examples.
  3. Use the explorer for quick checks, then build production clients from /api/v2/spec.json.

The explorer is useful for manual inspection. For automated checks, CI imports, generated clients, and large-spec troubleshooting, fetch /api/v2/spec.json directly. Use a tool that sends Accept-Encoding: br or Accept-Encoding: gzip. If a browser tab fails while rendering the explorer, verify the JSON endpoint first:

curl -L --compressed https://your-platform.example.com/api/v2/spec.json \
  | jq '.openapi, .info.title, (.paths | length)'

A successful JSON response means the route contract is available even if the browser renderer needs a refresh or another viewing tool. Use Redoc, Postman, Insomnia, or a local file preview when you need a read-only contract view outside the live explorer.

Redoc

For a cleaner, read-only documentation view:

  1. Download the OpenAPI spec: curl https://your-platform.example.com/api/v2/spec.json > openapi.json.
  2. Serve with Redoc:
    npx @redocly/cli preview-docs openapi.json
  3. Open http://localhost:8080 in your browser.

Postman

Import the OpenAPI spec into Postman:

  1. Click Import in Postman.
  2. Select the Link tab.
  3. Paste https://your-platform.example.com/api/v2/spec.json.
  4. Click Continue and then Import.
  5. Configure the collection's authorization with your API key:
    • Auth Type: API Key
    • Key: X-Api-Key
    • Value: sm_dalp_xxxxxxxxxxxxxxxx
    • Add to: Header

Insomnia

Import the OpenAPI spec into Insomnia:

  1. Click Create and then Import.
  2. Paste https://your-platform.example.com/api/v2/spec.json.
  3. Click Scan and then Import.
  4. Add an environment variable for the X-Api-Key header.

curl examples

Use the OpenAPI specification as the route contract before copying curl examples into integration code:

curl https://your-platform.example.com/api/v2/spec.json \
  | jq '.paths | keys[]' \
  | head

For authenticated calls, send the API key in the X-Api-Key header and the request body defined by the operation schema:

curl -X GET https://your-platform.example.com/api/v2/exchange-rates/supported-currencies \
  -H "X-Api-Key: sm_dalp_xxxxxxxxxxxxxxxx" \
  -H "Accept: application/json"

For mutation routes that submit blockchain transactions, API-key authentication does not require a walletVerification field. Session-cookie authentication requires wallet verification on sensitive operations.


Generating client SDKs

Use the OpenAPI spec to generate clients for languages beyond TypeScript.

Python (openapi-generator)

openapi-generator-cli generate \
  -i https://your-platform.example.com/api/v2/spec.json \
  -g python \
  -o ./dalp-python-client

Go

openapi-generator-cli generate \
  -i https://your-platform.example.com/api/v2/spec.json \
  -g go \
  -o ./dalp-go-client

C# / .NET

openapi-generator-cli generate \
  -i https://your-platform.example.com/api/v2/spec.json \
  -g csharp-netcore \
  -o ./dalp-csharp-client

Java

openapi-generator-cli generate \
  -i https://your-platform.example.com/api/v2/spec.json \
  -g java \
  -o ./dalp-java-client

Generated clients can require manual adjustments for BigInt and BigDecimal serialization. The TypeScript SDK includes toBigDecimal() and fromBigDecimal() helpers for this purpose.


Error handling

The API returns standardized HTTP status codes and machine-readable error codes. Errors include detailed messages and contextual data to help diagnose issues.

See Error handling for the complete error reference, retry strategies, and blockchain revert reasons.


Next steps

On this page