# DALP-9500 to DALP-9999

Source: https://docs.settlemint.com/docs/api-reference/errors/platform-api-error-reference/dalp-9500-9999
Cause, fix, HTTP status and retry flag for every Platform API error with a code from DALP-9500 to DALP-9999.

This page lists the 56 errors the Platform API can return with a code from DALP-9500 to DALP-9999. Match the `id` in the error envelope to the DALP Code column, then read Retryable and Suggested Fix. The [Platform API error reference](https://docs.settlemint.com/docs/api-reference/errors/platform-api-error-reference#how-to-use-this-reference) explains each column, including Severity, and the [DALP error index](https://docs.settlemint.com/docs/api-reference/errors) lists the page for every code range.

| DALP Code | Machine name | Category | Message | Why | Suggested Fix | Severity | Retryable | HTTP Status |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| DALP-9500 | `TOKEN_PERMIT_NONCE_CONFLICT` | domain | The permit nonce changed. | Another permit reserved the next nonce for this owner before this request could store its signature. | Retry the signing request so the platform can allocate the next available permit nonce. | info | Yes | 409 |
| DALP-9501 | `TOKEN_PERMIT_FEATURE_UNAVAILABLE` | operational | The permit feature is unavailable. | The permit feature state has not finished indexing, or its declared signing domain does not match the indexed one. | Wait for the permit feature state to finish indexing, then retry. | info | Yes | 503 |
| DALP-9502 | `TOKEN_PERMIT_SIGNING_FAILED` | dependency | The permit signature could not be produced. | The configured custody signer did not complete the permit signing request, or a chain read the signing needs failed. | Restore the custody signer, then retry. | error | Yes | 503 |
| DALP-9505 | `TOKEN_PERMIT_PERSISTENCE_FAILED` | dependency | Permit storage is unavailable. | The platform could not read or save the permit state required by this operation. | Restore permit storage, then retry without changing the request scope. | error | Yes | 503 |
| DALP-9506 | `TOKEN_AMOUNT_DENOMINATION_UNAVAILABLE` | dependency | The token denomination is not indexed. | The symbol and decimals needed to encode the submitted amount are not indexed for the token yet. | Wait for the token symbol and decimals to be indexed, then retry with the same idempotency key. | error | Yes | 503 |
| DALP-9510 | `CLAIM_TOPIC_ALREADY_EXISTS` | domain | A claim topic with this name already exists. | A claim topic with this name is already registered in the active system. | Use the existing topic, or choose a different name. | info | No | 409 |
| DALP-9518 | `FEED_TOPIC_CONFLICT` | client | Topic name `{topicName}` does not match topic id `{topicId}`. | The request supplied both a topic name and a topic id, and the id computed from the name differs from the id given. | Use the computed topic id or submit only one topic identifier. | info | No | 409 |
| DALP-9519 | `FEED_CONTRACT_INVALID` | client | Contract `{feedAddress}` does not expose the feed interface. | The contract at the given address did not answer the required feed interface on the selected chain. | Verify the feed address and confirm the contract is deployed on the selected chain. | info | No | 422 |
| DALP-9523 | `ADMINISTRATOR_REQUIRED` | permission | A global platform administrator is required. | The authenticated user is not a global platform administrator. | Authenticate as a global platform administrator and retry the request. | info | No | 403 |
| DALP-9524 | `REQUEST_CHAIN_SYSTEM_REQUIRED` | domain | The organization has no deployed system on chain `{chainId}`. | The active organisation has no deployed system on the network the request selected: the `X-Chain-Id` network, or the organisation's default network. | Deploy the organization system before using system-scoped APIs. | info | No | 404 |
| DALP-9525 | `FINANCIAL_YIELD_OPERATION_REJECTED` | domain | The dividend operation for `{dividendId}` could not be completed. | `data.reason` names the dividend state that refused the operation: the dividend or its snapshot is not indexed, computed or final yet, the snapshot is already recorded, or the confirmation does not match the computed snapshot. | Read `data.reason`. For `dividend-not-indexed`, `snapshot-not-computed` or `snapshot-awaiting-finality`, wait and send the same request again. For `snapshot-already-recorded`, nothing is left to do. For `snapshot-confirmation-mismatch`, preview the current snapshot and confirm or approve it again. | error | Yes | 503 |
| DALP-9526 | `TRANSACTION_QUEUE_DEAD_LETTER` | dependency | The transaction queue stopped work on this transaction before it settled. | The transaction queue moved the transaction to `DEAD_LETTER`: its retries ran out, or the chain or the custody provider gave no answer, before the transaction settled. A call that was broadcast, or filed with a custody provider, can still land on the chain after this answer. | Do not submit the transaction again until it settles. Read the transaction request with its transaction id. Submit again with a new idempotency key only when that read shows `mayStillLand: false`; a read without that key gives no permission. If the transaction never settles, give the transaction id to an Organisation owner, an Organisation admin or a Platform admin. Any of them can force-fail it with `POST /api/v2/transaction-requests/{transactionId}/transitions` 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-9531 | `ASSET_SORT_FAMILY_MISMATCH` | client | Sort names a column the asset's chain family cannot order on. | The holdings collection under one asset advertises both chain families' sort keys, and the asset decides which family answers. The sort names a column that family cannot order on. The refusal names the field, the family, and the columns that family can be ordered on. | Sort the holdings on a column the named family can be ordered on, omit `sort` to take that family's own ordering, or read the asset in the family whose column you are sorting on. | info | No | 400 |
| DALP-9532 | `REQUEST_DEADLINE_EXCEEDED` | operational | The request deadline expired. | The request ran past the deadline the platform gives one request, so the platform stopped the work. The operation that request started may still be running. | Check the status of the operation before you submit the request again, and let the Retry-After interval pass first. | warning | No | 504 |
| DALP-9534 | `SYSTEM_TRUSTED_ISSUER_ID_INVALID` | client | The issuer identifier and the request body name different chain families. | A trusted issuer is named by an address on one family and by a party id on the other, and this request mixed them: the `issuerId` segment and the body must describe the same family. The platform submitted no command and changed nothing. | Send the identifier that matches the body, or send the body that matches the identifier, then retry. | info | No | 400 |
| DALP-9540 | `APPROVAL_NOT_FOUND` | client | Approval request was not found. | No approval request exists under this identifier in the calling organization. | Read the approvals list for the current identifier and state, then decide again. | info | No | 404 |
| DALP-9541 | `APPROVAL_REFUSED` | domain | The approval decision was refused. | The platform's maker-checker rules and the policy version the request was raised under decide who may approve and whether the decision is still valid. The maker cannot approve their own request. A role the pinned policy does not name cannot approve. A signature that leaves the policy's approver floor short is recorded against the request rather than admitting it. A borrowed session cannot approve when the pinned policy sets `operatorMayApprove` to false. A payload that moved invalidates the approval. An expired request accepts no decision. A policy that names no approving role admits any role the platform has already admitted as an approver. A request already decided accepts no second decision. A decision that lost a race to another writer is refused. | Read the request again for its current state and row version, and have a distinct operator decide it. | info | No | 409 |
| DALP-9542 | `OPERATIONS_CASE_NOT_FOUND` | client | Operations case was not found. | No operations case exists under this identifier in the calling organization. | List the cases with `GET /api/v2/operations/cases`, then acknowledge the case with the `caseId` from the list. | info | No | 404 |
| DALP-9543 | `OPERATIONS_CASE_REFUSED` | domain | The operations case refused this acknowledgement or resolution. | A case that lapsed, that somebody already resolved or acknowledged, or whose row version moved under the caller accepts no acknowledgement or resolution. The `reason` field names which: `already-resolved`, `already-acknowledged`, `expired` or `row-version-moved`. | Read the cases list again for the current state and row version. Repeat the call only when `reason` is `row-version-moved`; a case in any other state accepts no further acknowledgement or resolution. | info | No | 409 |
| DALP-9546 | `ADMIN_MUTATION_POLICY_GROUP_UNKNOWN` | client | The administrative mutation policy names an unknown protection group. | Every routeGroups entry must be one of the published protection groups, because a name that matches no route would silently protect nothing. | Send only the protection groups the policy field lists, or use the standard preset. | info | No | 422 |
| DALP-9547 | `ADMIN_MUTATION_ALREADY_HELD` | domain | An identical change is already held for approval. | Another user already submitted exactly this administrative change and it waits for a second user. Holding a second copy would let two requests run the same change. | Read the held approval named in the organisation's approvals inbox and have a second user decide it, or submit a different change. | info | No | 409 |
| DALP-9561 | `WEBHOOK_SYSTEM_SCOPE_REQUIRED` | permission | Webhook request has no deployed system. | The request resolved no deployed system for the endpoint to subscribe to. | Reissue the request under a system the active tenant has deployed. | info | No | 404 |
| DALP-9563 | `TOKEN_CREATE_COMPLIANCE_MODULE_INCOMPATIBLE` | client | V1 compliance modules cannot be installed on a v2 asset: `{modules}`. `{remedies}`. | A DALP asset is a v2 token. A v1 compliance module looks for the older token interface, which a v2 token does not report, so it would reject every mint. `data.typeIds` lists the v1 modules in the request, and `data.remedies` names the v2 module that replaces each one. | Replace each module in `data.typeIds` with its `-v2` module, for example `collateral-v2` instead of `collateral`. A module without a v2 version cannot be used on a DALP asset yet; remove it from `initialModulePairs`. | info | No | 400 |
| DALP-9564 | `TOKEN_COMPLIANCE_MODULE_GENERATION_INCOMPATIBLE` | client | V1 compliance modules cannot be installed on a v2 asset: `{modules}`. `{remedies}`. | A DALP asset is a v2 token. A v1 compliance module looks for the older token interface, which a v2 token does not report, so once installed it would reject every mint. `data.typeIds` lists the v1 module in the request, and `data.remedies` names the v2 module that replaces it. | Install the `-v2` module instead, for example `collateral-v2` instead of `collateral`. A module without a v2 version cannot be installed on a DALP asset yet. | info | No | 400 |
| DALP-9565 | `COLLECTION_PAGE_CURSOR_MISMATCH` | client | The page cursor does not belong to this query. | A page cursor is only valid for the sort and filters of the request that returned it. This cursor was issued for a different sort or filter, or it was altered. | Send the `meta.nextCursor` from the previous page together with the same `sort` and filters, or start again without `page[cursor]`. | info | No | 400 |
| DALP-9590 | `TOKEN_ADDRESS_RESTRICTION_ACTIVE` | domain | An active wallet restriction holds this address frozen. | Wallet restriction `{{restrictionId}}` froze `{{holderAddress}}` on `{{tokenAddress}}` and is still active, so unblocking the address on this one token would undo the restriction's freeze. | Lift the wallet restriction instead. That unblocks the address on every token the restriction covers and records who lifted it. | info | No | 409 |
| DALP-9701 | `ESCROW_NOT_FOUND` | client | The escrow was not found. | The address names no escrow created by your organisation's escrow factory, or your role cannot read escrows. | Use an escrow address from the escrows list, signed in as an organisation owner or platform administrator. | info | No | 404 |
| DALP-9702 | `ESCROW_FORCED_TRANSFER_REFUSED` | client | The forced transfer was refused. | The forced transfer breaks a lock rule, or the escrow or the transaction queue refused it. A listed lock must be an open lock of the owner, and the amount must be greater than zero and within the owner's free balance and listed locks. The amount draws on the owner's free balance first, and only the remainder draws on the listed locks. Paid units go only to the rail wallet, and unpaid units go only back to their owner. A lock whose cash-out the bank may still pay cannot move. A lock that backs an unpaid cash-out cannot move while its rail wallet has no open compromised rotation. | Check the listed locks and the amount against the owner's escrow balance. Return unpaid units to their owner, send paid units to the rail wallet, and retry a cash-out still at the bank once the bank reports. | info | No | 409 |
| DALP-9703 | `ESCROW_CUSTODIAN_REQUIRED` | client | Only a token custodian can force a transfer out of an escrow. | Your wallet does not hold the custodian role on the token, or the token is not one of this organisation's. | Ask a token administrator to grant your wallet the custodian role, then retry. | info | No | 403 |
| DALP-9810 | `REQUEST_CHAIN_SCOPE_CONFLICT` | client | The request names one chain family and reads another. | A shared asset route answers for an EVM token or a Canton instrument, and the request settles which one in more than one place: the X-Chain-Id or X-Network-Id header, `filter[family]`, `instrumentAdmin`, or the route itself. Two of them disagree, or the route serves only the other family, so there is no single family to answer from. The message names the conflict. | Send one family consistently: drop the header or filter that names the other family, or read a Canton instrument with its `instrumentAdmin` on a route that serves Canton instruments. | info | No | 400 |
| DALP-9813 | `GATEWAY_ADDON_NOT_DEPLOYED` | client | The custody gateway add-on is not deployed. | The organisation's system on this network has no custody gateway add-on, or its access manager is not indexed yet. | Deploy the custody gateway add-on on this network, then read it again. | info | No | 404 |
| DALP-9814 | `GATEWAY_NOT_FOUND` | client | The custody gateway was not found. | No gateway of this add-on is indexed at this address, or none serves the wallet you act with. | List the gateways of the add-on and use one of their addresses. | info | No | 404 |
| DALP-9815 | `GATEWAY_TOKEN_ALREADY_ENABLED` | client | The coin is already enabled. | The coin is already enabled on the custody gateway add-on. | List the enabled coins; to change a coin's behaviour, change its defaults. | info | No | 409 |
| DALP-9816 | `GATEWAY_PROFILE_NOT_FOUND` | client | The gateway profile was not found. | No profile with this id exists on the add-on. | List the profiles of the add-on and use one of their ids. | info | No | 404 |
| DALP-9817 | `GATEWAY_PROFILE_IN_USE` | client | The gateway profile is in use. | At least one gateway is assigned to this profile. | Move or retire the gateways of this profile before removing it. | info | No | 409 |
| DALP-9818 | `GATEWAY_ALREADY_EXISTS` | client | The client already has a gateway. | A gateway already exists for this client identity. | Read the existing gateway instead of creating another. | info | No | 409 |
| DALP-9819 | `GATEWAY_SETTING_REFUSED` | client | The gateway setting was refused. | A setting name is unknown or repeated, or its value does not fit the setting or is not greater than zero. The coin's `defaults` omit a required setting, or name a setting the coin cannot take when it is enabled. | Use a setting name the add-on knows once per request, with a value of the type the setting takes. | info | No | 422 |
| DALP-9820 | `GATEWAY_SIGNER_REFUSED` | client | The selected wallet cannot sign this gateway write. | The selected wallet is not an active signer that can send add-on writes on this network. | Select a wallet of the organisation that can sign on this network, then retry. | info | No | 409 |
| DALP-9821 | `GATEWAY_APPROVAL_REQUIRED` | client | The gateway change needs checker approval. | The add-on's checkers must approve this change before it can be sent. | Propose each listed call to the add-on's access manager, collect the approvals, then send the same request again. | info | No | 422 |
| DALP-9822 | `GATEWAY_CANNOT_WAIT_FOR_CUSTODY` | client | The coin cannot wait for custody. | The coin's custody receipt cannot hold deposits while the custodian confirms them. | Give the custody receipt the Hold feature with the gateway add-on as reserver, or leave waiting for custody off. | info | No | 422 |
| DALP-9823 | `GATEWAY_CUSTODY_DESTINATION_REFUSED` | client | Coins must go to a Fireblocks wallet to wait for custody. | Waiting for custody needs coins to go to a wallet of one of the organisation's Fireblocks custody providers. | Set coins-go-to to a Fireblocks wallet of the organisation, or turn waiting for custody off. | info | No | 422 |
| DALP-9824 | `GATEWAY_WRITE_REFUSED` | client | The gateway refused the change. | The add-on refuses this change in its current state, the gateway is closed, or the withdrawal leaves nothing after the fee. | Read `data.revert`, correct the request or the add-on's state, then send it again. | info | No | 422 |
| DALP-9825 | `GATEWAY_SIGNER_NOT_SET_UP` | client | The gateway signer is not set up. | The organisation has no keeper or screener wallet of this kind on this network. | Set up the signer first, then retry. | info | No | 404 |
| DALP-9826 | `GATEWAY_SIGNER_SET_UP_REFUSED` | client | The gateway signer could not be set up with this custody provider. | The custody provider configuration cannot hold a signing wallet for this organisation on this network. | Choose a custody provider configuration of the organisation that can sign on this network, then retry. | info | No | 422 |
| DALP-9827 | `GATEWAY_PAYOUT_NOT_APPROVED` | client | The payout address is not approved. | The payout address is not on the gateway's approved list, or it is suspended. | Ask a gateway manager to approve the address, or name an address that is approved. | info | No | 422 |
| DALP-9828 | `GATEWAY_RECEIPTS_UNAVAILABLE` | client | The wallet holds too few available receipts. | The wallet holds fewer receipts than requested once the receipts held for custody are set aside. | Request no more than the available receipts, or wait for the custodian to answer the held deposits. | info | No | 422 |
| DALP-9829 | `GATEWAY_RECORD_NOT_FOUND` | client | The gateway record was not found. | No deposit, withdrawal request or unsupported record of this gateway is indexed under this id. A receipt token that no coin of the add-on uses answers the same way. | List the gateway's records and use one of their ids. | info | No | 404 |
| DALP-9830 | `GATEWAY_PERMISSION_MANAGER_REQUIRED` | client | The wallet cannot change gateway roles. | Only a holder of the custody gateway permission manager role on the system grants or revokes gateway roles. | Act from a wallet that holds the custody gateway permission manager role, or ask a system administrator to grant it. | info | No | 422 |
| DALP-9831 | `GATEWAY_SIGNER_IN_USE` | client | DALP still signs gateway calls with this wallet. | DALP signs gateway calls with this wallet, so revoking its role here would leave the keeper or screener sending calls the gateway refuses. | Rotate the keeper or screener to a new signer wallet first, then revoke the role from this wallet. | info | No | 409 |
| DALP-9832 | `REGISTRY_UNAVAILABLE` | dependency | The custody provider's destination registry could not complete this step. | The custody provider that keeps its own withdrawal allow list did not register, read or remove this destination, so the platform cannot tell whether the destination is approved there. | Retry the step. The entry keeps the state it already had, and a withdrawal to a destination that is not active is refused in the meantime. | error | Yes | 503 |
| DALP-9833 | `GATEWAY_DEPOSIT_STATE_REFUSED` | client | The deposit is not in a stage that allows this transition. | The deposit is not in a stage that allows this transition. | Read the deposit's stage, then send a transition that stage allows. | info | No | 409 |
| DALP-9834 | `GATEWAY_WITHDRAWAL_STATE_REFUSED` | client | The withdrawal request is not in a stage that allows this transition. | The withdrawal request is not in a stage that allows this transition, or it no longer owes the review step this transition gives. | Read the request's stage, needsScreening and needsApproval, then send a transition they allow. | info | No | 409 |
| DALP-9835 | `GATEWAY_ROLE_REQUIRED` | client | Your wallet does not hold the role this transition needs. | This transition is signed by your own wallet, which does not hold the role the add-on requires for it. | Ask a gateway manager to grant your wallet the named role, then send the transition again. | info | No | 403 |
| DALP-9836 | `EXTERNAL_TOKEN_METADATA_TOO_LONG` | client | The token's name or symbol is longer than DALP registers. | DALP registers a token's name and symbol exactly as the chain reports them and never shortens them, so a token whose name exceeds 50 characters or whose symbol exceeds 24 is not registered. | Register a token whose name and symbol are within the limit. | info | No | 422 |
| DALP-9837 | `REGISTRY_REFUSED` | client | The custody provider's destination registry refused this step. | The custody provider that holds this destination's own allow list refused the request, or the provider configuration that registered the destination is no longer available, so the platform cannot confirm the destination there. | Check the destination and the custody provider configuration, then clear or revoke the entry once the provider reports it. Retrying the same step cannot succeed. | info | No | 409 |
| DALP-9838 | `ASSISTANT_PLAN_NOT_FOUND` | client | Plan not found. | No plan with that identifier was built by the caller in the active organisation. A plan another member built answers the same way, so the reply never confirms that it exists. A step index the plan does not have also answers with this error. | List the plans and use the identifier of a plan the caller built. | info | No | 404 |

The previous page is [DALP-9400 to DALP-9499](https://docs.settlemint.com/docs/api-reference/errors/platform-api-error-reference/dalp-9400-9499). The next page is [DALP-12000 to DALP-12099](https://docs.settlemint.com/docs/api-reference/errors/platform-api-error-reference/dalp-12000-12099).
