This page lists the 69 errors the Platform API can return with a code from DALP-12000 to DALP-12099. Match the id in the error envelope to the DALP Code column, then read Retryable and Suggested Fix. The Platform API error reference explains each column, including Severity, and the DALP error index lists the page for every code range.
DALP Code | Machine name | Category | Message | Why | Suggested Fix | Severity | Retryable | HTTP Status |
|---|---|---|---|---|---|---|---|---|
DALP-12012 | TRANSACTION_ | domain | The transaction preparation has expired. | The authorization window ended before the prepared operation was finalized. | Prepare the operation again and authorize the new preparation. | info | No | 410 |
DALP-12018 | CUSTODY_ | permission | The caller's custody account lives on a different network. | This read is scoped to network {{chainId}}, the network the request resolved to, and the signed-in participant holds no custody account there. Custody accounts are registered one network at a time, so an account created on another network owns nothing here and no role grant changes that. | Switch the active network to the one that holds the caller's custody account, or send X-Chain-Id with that network's chain id. Ask an administrator to provision a custody account on network {{chainId}} when the caller needs access there. | info | No | 403 |
DALP-12019 | REQUEST_ | client | The selected custody account cannot sign for this request. | Signing this request needs a custody account that is active, eligible on the network the request resolved to, and bound to a live provider signer. The account in data.custodyAccountId misses at least one of those: it is still provisioning, its account or organisation context left the active state, its provider reports an unhealthy signer, or its managed key binding is gone. When data.custodyAccountId is absent, the request named no account and the signed-in participant holds no eligible primary account on this network. When data.reason is present, this organisation cannot drive the account's wallet and the value names the capability it lacks, the same reason the custody-account list reports for that account. On a network where the participant is not set up yet, the identity, wallet binding and smart wallet that signing needs are still being created, failed to be created, or wait for the wallet that pays for them to be funded. | Read the custody-account list for the network this request targets, pick an account it reports as active and eligible, and send that identifier. Ask an administrator to provision or repair an account on that network when the list offers none. | info | No | 409 |
DALP-12020 | TOKEN_ | client | The token claim request does not match the token's indexed identity state. | Before it signs a claim, the platform checks the requested topic against the token's topic registry chain, the claim data against the topic scheme, and the claim it is asked to revoke against the indexed claims; one of those checks refused the request. data.reason names which. | Read data.reason, then correct the topic, the claim data, or the claim selection to match the token's topic scheme and indexed claims. | info | No | 422 |
DALP-12021 | TOKEN_ | client | The token is not in a state that accepts this lifecycle change. | The platform checked the indexed token before it queued the transaction, and one lifecycle check failed. data.reason names it, for example no redeemable amount, not a bond, maturity not confirmed, solvency still unknown, a bond contract without its denomination balance, or schedule terms the factory refused. | Read the token, then send the request that matches its current state: a positive redeemable amount, a bond that is not mature yet, or a bond contract funded with its denomination asset. | info | No | 422 |
DALP-12022 | TOKEN_ | client | The transfer-approval request does not match the token's indexed identity state. | The platform resolves the wallet in the token identity registry and checks that the acting executor identity is an approval authority; one of those lookups found no indexed match. data.reason names which one. | Register the wallet in the token identity registry, or select an executor whose identity is an approval authority, wait for indexing, then retry. | info | No | 422 |
DALP-12023 | TOKEN_ | client | The forced-transfer request has no complete transfer item. | A forced transfer moves tokens from an owner to a recipient. The request left out the owner, the recipient or the amount of at least one item, or an item names a DALP escrow as the owner, which a forced transfer cannot draw from. | Send each item with an owner, a recipient and an amount, and do not name a DALP escrow as the owner. Then resubmit. | info | No | 422 |
DALP-12024 | TOKEN_ | client | This token does not support a batch transferFrom. | The token contract exposes a single-item transferFrom only. The platform refuses the batch before it signs anything, so no partial batch reaches the chain. | Submit each transferFrom as its own request. | info | No | 422 |
DALP-12025 | TOKEN_ | domain | The token does not implement the interface this operation needs. | data.requiredInterfaces names the interface the token contract lacks: PAUSABLE, CUSTODIAN or IRecoverable. data.tokenAddress names the token. | Run this operation on a token that implements the named interface. | info | No | 422 |
DALP-12026 | TOKEN_ | client | Prices cannot be set on this token. | Setting a price needs the token's access-control interface to confirm the administrator; the indexed token reports neither ERC-3643 nor the supported SMART interface. data.tokenAddress names the token. | Use a supported token contract, or correct the indexed token interface metadata, then retry. | info | No | 422 |
DALP-12027 | LEGACY_ | domain | This bond funds redemptions from its maturity-redemption feature treasury. | The bond has an attached maturity-redemption feature, and that feature's configured treasury pays redemptions. The legacy top-up route writes to the bond contract instead, so the deposit would never fund a redemption. | Use the maturity-redemption treasury top-up endpoint for this bond. | info | No | 422 |
DALP-12028 | STRICT_ | client | The compliance parameters do not match the selected module schema. | The platform decodes each module's parameters against that module's own schema before it encodes them for the chain; data.issues lists every field that failed. | Correct each field listed in data.issues, then submit the request again. | info | No | 422 |
DALP-12029 | ORGANIZATION_ | domain | The organization signing wallet holds no claim-signer key on the issuer identity. | Signing a claim needs the organization submission wallet to hold a key with the claim-signer purpose on the issuer identity. The indexed identity data. holds no such key for data.walletAddress. | Add the claim-signer purpose key for the wallet on the organization identity, wait for indexing, then retry the submission. | info | Yes | 422 |
DALP-12030 | FEATURE_CONFIG_INVALID | client | The token feature configuration is not accepted. | The token create workflow validates every feature configuration against the feature catalog before it deploys; at least one feature configuration failed that validation. | Correct the feature configuration named in the message, then submit the token creation again. | info | No | 422 |
DALP-12031 | UNPROCESSABLE_ENTITY | client | The request is well formed but cannot be applied to the current state. | The route understood the request and refused it against the current domain state. The refusing check publishes no error entry of its own, so this general 422 stands in for it. | Correct the request or the state it depends on, then retry. If you contact support, send the X-Request-Id response header. | info | No | 422 |
DALP-12032 | TOKEN_ | dependency | The indexed state this claim needs is not recorded yet. | The platform authorizes a token claim against indexed state: the token's on-chain identity, the claim registries of the active system, and the acting wallet's active registration in the identity registry. The indexer has not recorded one of them yet. data.reason names which. | Wait for the indexer to catch up, then retry. If it does not clear, check that the token identity and the issuer registration exist on chain. | error | Yes | 503 |
DALP-12033 | WALLET_ | client | This operation needs wallet verification. | The operation signs with the caller's wallet, and the request carried no walletVerification block, so the platform stored nothing. | Add walletVerification with the method this account has enrolled, a PIN, an authenticator code, a recovery code, or an identity-provider code, then send the request again. | info | No | 400 |
DALP-12034 | WALLET_ | auth | The requested wallet verification method is not enrolled. | The request named a wallet verification method this account has not enabled, so no credential exists to check it against. | Enroll the method in wallet security settings, or send a method this account already holds. | info | No | 401 |
DALP-12035 | WALLET_ | permission | The wallet verification credential was not accepted. | The supplied credential does not match the enrolled one, or it was already used. data.remainingAttempts reports how many attempts remain before verification locks. | Enter the current code or PIN and send the request again. A recovery code works once, so use a fresh one. | info | No | 403 |
DALP-12036 | WALLET_ | permission | Wallet verification is locked after repeated failures. | Wallet verification failed too many times in a row for this account, so the platform locked it and stored nothing. | Wait the number of seconds in data.retryAfterSeconds, then verify again. | info | No | 429 |
DALP-12037 | WALLET_ | operational | Wallet verification is at capacity. | Wallet verification admission is full, so the platform stored nothing. The same request can succeed later without any change. | Wait the number of seconds in data.retryAfterSeconds, then send the request again. | error | Yes | 503 |
DALP-12038 | WALLET_ | dependency | Wallet verification could not complete. | A step wallet verification depends on did not complete, such as reading the wallet credential or the last wallet security change, storing or redeeming the step-up challenge, or settling the proof within its window. The platform stored nothing. | Retry after a short backoff. If it continues, contact support with the request id. | error | Yes | 503 |
DALP-12048 | CORPORATE_ | domain | No Corporate Action with this identifier exists on the token. | The identifier does not name a Corporate Action on this token, or it belongs to another token. | List the token's Corporate Actions and use an identifier from that list. | info | No | 404 |
DALP-12049 | CORPORATE_ | domain | The Corporate Action is not in a status that accepts this operation. | Preview, approval, and confirm follow the drafted, previewed, approved, executing lifecycle, and this run has moved past the status the operation needs. | Read the record, then send the operation its current status accepts. | info | No | 409 |
DALP-12050 | CORPORATE_ | domain | This Corporate Action needs a linked dividendId. | The declared dividend has not indexed onto this Corporate Action yet, so the dividend-backed operation cannot resolve its target. | Wait for the declare to index, then retry. | info | Yes | 409 |
DALP-12051 | CORPORATE_ | domain | The cash-dividend snapshot is not ready. | The record date has not passed yet, or its block has not reached finality, or a class's holder amounts are still indexing, so there is no final snapshot to preview or confirm. | Preview again after the record date has passed and its block is final, then confirm. | info | Yes | 409 |
DALP-12052 | CORPORATE_ | domain | Confirm requires a stored preview. | Confirm applies the allocations a preview computed, and this Corporate Action has none stored. | Request preview first, then confirm the previewed allocations. | info | No | 409 |
DALP-12053 | CORPORATE_ | domain | The confirm does not match the stored dividend-yield snapshot preview. | The merkle root, totalEntitled, or totalRequired differs from the stored preview, or an indexed holder balance no longer converts to token base units. | Preview again and confirm with the exact values that preview returns. | info | No | 409 |
DALP-12054 | CORPORATE_ | domain | Corporate Actions of this type complete on create. | bondCoupon, maturityRedemption, and conversion name an attached feature program and settle when created, so there is no drafted run to preview or confirm. | Operate the linked program through its own feature routes. | info | No | 409 |
DALP-12055 | CORPORATE_ | domain | Confirm failed because the token is paused. | Pause blocks mint and burn, and this Corporate Action applies its allocations through them. | Unpause the token, then confirm again. | info | No | 409 |
DALP-12056 | CORPORATE_ | domain | Confirm refused because the holder book changed after preview. | Holder balances, rights exercises or the rights that holders still hold moved after preview, or a funded coordinated distribution no longer matches its approved split or class snapshot, so the stored allocations no longer apply. A confirm refused before execution applies nothing. A rights-issue close whose new shares are already minted, or a coordinated distribution whose pool is already funded, keeps what already landed. The Corporate Action stays open until you abort it. | Abort this Corporate Action, then create a new one and preview it against the current holder book. For a rights-issue close whose new shares are already minted, raise the next close as a follow-up of the aborted one, which mints no share again. | info | No | 409 |
DALP-12057 | CORPORATE_ | domain | A spin-off or tradable rights issue requires an empty child token. | The child token already has holders, gained holders after the preview, or is the parent token itself, so the allocations cannot define its initial distribution. | Use an existing empty child token, or preview again with one. | info | No | 409 |
DALP-12058 | CORPORATE_ | domain | A spin-off or tradable rights issue requires supply management on the child token. | Minting the allocations onto the child token needs the supply management role, and the caller does not hold it there. The action is refused when it is created, previewed or confirmed. | Grant supply management on the child token to the caller, or choose a child token the caller manages, then retry. | info | No | 409 |
DALP-12059 | CORPORATE_ | domain | Holder balances for this record date are not available yet. | The indexer has not covered the record date, a past record date needs the attached historical-balances feature, or the record date is before the token existed. | Use a record date on or after the token was created, wait for indexing to catch up, or attach historical-balances, then retry. | info | Yes | 409 |
DALP-12060 | CORPORATE_ | domain | A rights-issue tokenSale path requires an existing tokenSaleId. | The rights issue was created without a token sale, so sale-backed operations have no sale to act on. | Create the rights issue with a tokenSaleId, or use the allotment path. | info | No | 409 |
DALP-12061 | CORPORATE_ | domain | The token-sale feature is off in this deployment. | Sale-backed rights-issue operations need the token-sale feature, and this deployment does not enable it. | Use the allotment path. | info | No | 409 |
DALP-12062 | CORPORATE_ | domain | No indexed token sale exists at the given address. | The sale contract has not been indexed yet, or the address does not hold a token sale. | Wait for indexing to catch up, verify the address, then retry. | info | Yes | 409 |
DALP-12063 | CORPORATE_ | domain | The token sale sells a different token, not this Corporate Action's token. | Rights-issue sale operations must target a sale whose sale token is the Corporate Action's token. | Point the Corporate Action at a sale that sells this token. | info | No | 409 |
DALP-12065 | CORPORATE_ | domain | This idempotency key was already used for a different request. | The key already recorded a Corporate Action, declaration or rights exercise with different terms or from another executing wallet, so replaying it would change what the first request recorded. A declaration or rights exercise under this key can also still be in progress. | Send a new key for a new request, or repeat the identical original request from the original wallet. When the message says the first request is still in progress, send the same request again later to read the outcome. | info | No | 409 |
DALP-12066 | CORPORATE_ | domain | The indexer carries no decimals for the token yet. | Allocation math needs the token's decimals from the indexer, and the token has not indexed. | Wait for the token to index, then retry. | info | Yes | 409 |
DALP-12067 | CORPORATE_ | domain | Another Corporate Action is in flight for this token. | One composition Corporate Action runs at a time per token; a run that has not completed or been aborted blocks a second one and blocks primitive mint and burn. | Wait for the in-flight run to complete or abort it, then retry. | info | Yes | 409 |
DALP-12069 | CORPORATE_ | domain | The Corporate Action this run follows up on is not on this token. | followsUpOn fails when no such run exists on this token, when the follow-up changes the followed stock split's terms, or when that run still has an execution to reconcile. | Send the identifier of a Corporate Action on this token, or omit followsUpOn to start a fresh run. | info | No | 409 |
DALP-12071 | CORPORATE_ | domain | This Corporate Action needs a feature the token does not have attached. | A dividend, coupon, redemption or conversion Corporate Action dispatches to the token's own feature contract, and this token carries no attached one for it. The message names the token or class whose feature is missing or does not match, such as a class without dividend yield or a denomination that differs. | Attach the feature this Corporate Action type runs on, then retry. | info | No | 409 |
DALP-12073 | WORKFLOW_ | dependency | Stored workflow progress is malformed. | The saved workflow progress does not match a supported version, so Corporate Action recovery cannot determine which chunks completed. | Contact support with the X-Request-Id response header. The stored workflow progress needs an operator repair before the Corporate Action operation can continue. | error | No | 500 |
DALP-12074 | INDEXER_BARRIER_TIMEOUT | dependency | The transaction succeeded on-chain, but its indexed data is not ready. | The indexer did not finish projecting the transaction's block before the request deadline. The write has already succeeded and must not be submitted again. | Do not resubmit the mutation. Read the transaction request with data.transactionId at GET /api/, then repeat the read after a short wait. If the read keeps timing out, ask an operator to check indexer errors for data.chainId at or before data.blockNumber. | error | No | 504 |
DALP-12075 | TOKEN_ | client | This deployment does not create new assets of that legacy family. | The requested asset family stays supported for deployments that already issue it, but the platform creates no new assets of that family. The deployment has not opted in with features., so the creation is refused before any contract is deployed. | Create the asset from a DALP asset template instead. Set FEATURE_ on this deployment when it still issues legacy assets. | info | No | 422 |
DALP-12076 | TOKEN_ | client | The token operation cannot be built from the fields supplied. | A field the operation needs is missing, or the combination requested has no on-chain form: a bond without a maturity date, a role change whose target shape does not parse, a compliance module change without the address that identifies the module, or a batch transfer variant the token does not implement. | Correct the field named in the message and submit the operation again. | info | No | 422 |
DALP-12077 | TOKEN_ | domain | The compliance module named cannot be resolved to a single binding. | Configuring a compliance module addresses one bound module instance on the token. The token has no binding for the module type requested, or it has more than one and the single-instance request cannot say which. | Bind the module to the token first, or address the instance directly with instanceAddress when the token holds several of that type. | info | No | 422 |
DALP-12078 | TOKEN_CREATE_DUPLICATE | domain | An asset with the same name, symbol, and decimals already exists. | The factory refuses a second deployment of an asset whose name, symbol, and decimals match one it already deployed, so the address it would produce is the address of the existing asset. | Use the existing asset, or change the name, symbol, or decimals before creating a new one. | info | No | 422 |
DALP-12079 | TOKEN_ | operational | The asset was already deployed, but the platform could not recover its address. | The creation reverted because the access manager for this asset exists already, which means an earlier attempt deployed it. Recovery reads that earlier asset back so the request can answer with it, and that read found nothing to return. | Look the asset up by name and symbol in the asset list. Contact support with the request id if it is not there. | error | No | 422 |
DALP-12080 | TOKEN_ | domain | The initial price cannot be recorded as supplied. | An initial price is stored against the denomination asset at a fixed precision. The price supplied is not well-formed, or it cannot be represented at that precision without losing value. | Supply a price with fewer decimal places, or omit the initial price and set it after creation. | info | No | 422 |
DALP-12081 | TOKEN_ | domain | The denomination asset cannot back a price feed. | A price feed quotes the asset in its denomination asset, and reads that asset's ERC-20 symbol() and decimals() to name and scale the quote. The denomination asset does not answer both, or its symbol is not one a feed can quote. | Denominate the asset in an ERC-20 that reports a readable symbol and decimals, or create it without an initial price. | info | No | 422 |
DALP-12082 | TOKEN_ | domain | The organization has no signer for price feed submissions. | A price feed update is signed by the organization's own feed signer, and the active organization has none provisioned. | Provision the organization's feed signer, then submit the price again. | info | No | 422 |
DALP-12083 | TOKEN_ | domain | This deployment has no price feed factory. | Creating a price feed calls the feeds factory of the active system, and no feeds factory address is configured for it. | Install the feeds factory on this system, or create the asset without an initial price and set the price later. | error | No | 422 |
DALP-12084 | TOKEN_ | operational | The price update did not complete. | The workflow that writes the new price to the asset's feed stopped before the feed was updated. The recorded price is the one that was there before the request. | Read the asset's current price, then submit the update again. | error | No | 422 |
DALP-12085 | TOKEN_CHAIN_UNAVAILABLE | operational | The chain this operation targets could not be reached. | The operation needs the chain the token lives on, and the network is not configured on the platform, or the chain did not answer the reads the next step needs. | Check that the network is configured and reachable, then submit the operation again. | error | No | 422 |
DALP-12086 | TOKEN_ | operational | The transaction landed but its receipt does not describe the result. | The platform reads the outcome of a token write out of the transaction receipt: the hash, the block, and the event the step emits. One of them is absent, so the platform cannot say what the write produced. | Check the asset's current on-chain state before submitting the operation again, and send the request id to support if the state does not explain the outcome. | error | No | 422 |
DALP-12087 | TOKEN_WRITE_REVERTED | domain | The contract rejected this token write. | The write reached the contract and the contract refused it. The on-chain state is unchanged, and the message names the condition the contract enforced. | Correct the operation against the asset's current on-chain state, then submit it again. | info | No | 422 |
DALP-12088 | TOKEN_ | operational | Whether this token write completed could not be established. | The platform accepted the write but could not confirm its outcome, for example because the write still awaits approval. The write may still complete, or it may already have completed. | Do not resubmit this write until you know its outcome. When the response includes a transactionId, read the transaction request with that ID until it settles. Otherwise read the asset's on-chain state, such as the held roles after a role change. If the outcome stays unknown, give support the X-Request-Id value from the response. If the transaction request stays in DEAD_LETTER, give its transaction id to an Organisation owner, an Organisation admin or a Platform admin. Any of them can force-fail it with POST /api/ and action: "fail"; an Organisation owner or a Platform admin can also force-fail it in the Console under Organisation settings, Platform status. | error | No | 422 |
DALP-12089 | TOKEN_ | operational | The operation could not pause for the wallet to be funded. | When a wallet cannot pay for its next transaction the operation pauses and records a funding requirement against the organization. Recording that requirement failed, so the operation stopped instead of waiting. | Fund the wallet named in the message, then submit the operation again. | error | No | 422 |
DALP-12090 | TOKEN_CLAIM_ISSUE_FAILED | operational | A claim this asset needs could not be issued. | A new asset is issued the identity claims its configuration implies, each as its own step. One of those steps stopped for good, so the asset exists without that claim. | Issue the missing claim on the asset's identity, then continue. Send the request id to support if issuing it fails the same way. | error | No | 422 |
DALP-12091 | TOKEN_WORKFLOW_FAILED | operational | The token workflow stopped for good. | A step in the workflow failed in a way none of the named terminal conditions covers, so the operation cannot continue and will not be retried. | When the response includes data.transactionId, read that transaction request to see which calls landed. Otherwise read the asset's current state to see how far the operation got. Then send the request id to support. | error | No | 422 |
DALP-12092 | TOKEN_ | domain | This token write ended without completing. | The write did not complete. The platform stopped it before it reached the contract because it breaks a queue rule, such as a role change that plans more calls than one user operation holds, or an idempotency key reused from a failed attempt. Or the queue ended it: it was cancelled, the contract reverted it, or the sending wallet cannot pay for it. In a role change from an EOA executor wallet, the platform undoes every earlier call when a later call fails for a reason other than gas, or when it cannot read the held roles before a call. A write stopped before the contract, or reverted by it, leaves the token unchanged. | When the response includes data.transactionId, read that transaction request before retrying. Read the message for the condition the queue named, correct it, then submit the write with a new idempotency key. When the message says a role-change call could still land, read the held roles before you submit again. When it says the held roles could not be read, check that the chain is reachable, then submit with a new idempotency key. When it says the wallet needs funding, fund it, then submit the write again. | info | No | 422 |
DALP-12094 | TOKEN_ | domain | The contract at {erc20Address} is not an ERC-20 token. | Recovering an ERC-20 balance needs the token's live symbol() and decimals(), and the address has no contract code or does not answer those reads. | Send the address of an ERC-20 contract held by this token, then retry. | info | No | 422 |
DALP-12095 | TOKEN_ | client | Off-chain metadata values for token {tokenAddress} do not match its template. | The token's asset-type template declares a type, allowed options, or bounds for each off-chain metadata key, and at least one submitted value falls outside them. Every rejected key is listed with its reason. | Correct the listed keys against the template's field definitions, then submit the metadata again. | info | No | 400 |
DALP-12096 | TOKEN_ | client | Off-chain metadata key {key} on token {tokenAddress} is immutable and already set. | The token's asset-type template marks this off-chain key immutable, and a value for it is already stored, so it can neither change nor be removed. | Leave the stored value in place, or resubmit it unchanged alongside the other keys. | info | No | 400 |
DALP-12097 | CORPORATE_ | domain | The paying treasury cannot cover this redemption's cash leg. | The treasury holds less of the denomination asset than the announced burns are priced at, and nothing reserves the cash, so a run started now would stop part-paid with tokens already burned. | Fund the paying treasury with the denomination asset, then confirm again. | info | Yes | 409 |
DALP-12098 | CORPORATE_ | domain | This confirm does not execute from the redemption's paying treasury. | The cash leg leaves the wallet that executes the confirm, so a confirm from any other wallet would measure a balance nobody spends and pay from a treasury the terms did not name. | Confirm from the wallet the terms name as the paying treasury. | info | No | 409 |
DALP-12099 | MARK_REFRESH_COOLDOWN | client | Mark refreshed less than ten minutes ago. | The mark of this subject was refreshed inside the ten-minute cooldown, so the platform fetched nothing and the stored mark is unchanged. | Wait for the window the Retry-After header reports, then refresh the mark again. | info | Yes | 429 |
The previous page is DALP-9500 to DALP-9999. The next page is DALP-12100 to DALP-12199.