Skip to main content

Troubleshooting

Quick reference for every error code across all Onmeta APIs, plus solutions for common integration problems.


Error Code Reference

Authentication

CodeMessageCauseFix
401UnauthorizedMissing, expired, or invalid Authorization: Bearer tokenRe-authenticate the user with POST /v1/users/login. Access tokens expire after 15 min.

On-Ramp — Create Order (POST /v1/orders/create)

CodeMessageCauseFix
404Token not supportedThe requested token is not enabled for your API keyUse the Fetch Tokens API to get the list of supported tokens
403blocked profileINR only. User has been flagged by the risk engineDo not retry. Show the user a support message.
430Wallet Address already used with another EmailA wallet address can only be linked to one user accountUse a different wallet address
429Daily limit exceeded. Available is Amount={remaining}INR only. User's daily transaction limit reachedUse the Fetch User Limit API to show the remaining limit before order creation
400Income not verifiedINR only. User has not submitted income verificationRedirect user to the KYC Widget — they are auto-redirected to income verification after login

Off-Ramp — Create Order (POST /v1/offramp/orders/create)

CodeMessageCauseFix
400unsupported fiat currency: {currency}Only INR is supportedAlways pass fiatCurrency: "inr"
400fiat amount less than min amount, {amount}Order amount is below the minimumCheck minimums using the Chain-wise Limits API before order creation
400Sender wallet address is requiredsenderWalletAddress is missingInclude senderWalletAddress in the request (not required for merchant wallet flow)
404Bank details are not found for the userNo bank account is linked to the userLink a bank account first using Link Bank Account
400Insufficient merchant wallet balanceMerchant wallet does not have enough fundsTop up the merchant wallet using Load Merchant Wallet
400Income not verifiedUser has not submitted income verificationRedirect user to the KYC Widget

Bank Linking (POST /v1/users/account-link)

CodeMessageCauseFix
406Account already verifiedThis bank account is already linked and verifiedNo action needed — account is ready to use
423Bank account verification is pendingVerification services failed to verify accountRetry account linking

UPI Linking (POST /v1/users/upi-link)

CodeMessageCauseFix
400invalid upiId formatUPI ID does not match VPA format (handle@bank)Validate the UPI ID format before submitting
400Invalid VPAupiId field is empty in the requestInclude a non-empty upiId in the request body
400KYC not verifiedUser has not completed KYCComplete KYC first via the KYC Widget or POST /v1/users/upload/kyc
400Maximum limit of adding UPI IDs reached...User already has 50 UPI IDs linkedContact support@onmeta.in

Transaction Hash (POST /v1/offramp/orders/txnhash · POST /v1/merchant/wallet/transactions/hash)

CodeMessageCauseFix
400invalid hash (...)The submitted txnHash is not a valid blockchain transaction hashVerify the hash format — it must be a real on-chain transaction hash
404Order not foundorderId does not exist or belongs to a different userCheck the orderId value
409Duplicate transaction hashThis hash is already linked to another orderEach on-chain transaction can only be submitted once
409Order not in valid statusOrder is not in a pending stateA hash can only be submitted once per order
409Invalid addressThe on-chain sender address does not match the address registered on the orderEnsure funds are sent from the wallet address specified in the order
409Sender address missing in transaction datasenderWalletAddress was missing when the off-ramp order was createdRe-create the order with senderWalletAddress included (off-ramp only — not applicable to merchant wallet flow)
409Invalid token received. Refund process initiatedToken or amount received on-chain does not match the orderOnmeta will automatically refund the tokens — no action needed

Common Integration Problems

Order stuck at fiatPending after user submitted payment

The UTR (Unique Transaction Reference) was not submitted. After a user completes a bank transfer or UPI payment, you must call POST /v1/orders/utr with the UTR number. Without this, Onmeta cannot match the payment to the order.

If the user already submitted the UTR manually but the order is still stuck, contact support with the orderId and utr.

Webhook signature verification failing

Common causes:

  • Using the Client ID as the HMAC secret instead of the Client Secret. Use the Client Secret from Dashboard → Setup → API's Setup.
  • Computing the HMAC over a stringified request body that has been parsed and re-serialized — key ordering may differ. Always compute HMAC on the raw incoming body string before JSON parsing.
  • Whitespace or encoding differences in the body. Some frameworks silently modify the body before your handler sees it. Read the raw bytes.

Bank verification always returns PENDING

PENDING means the verification partner could not confirm the account automatically. Retry linking — most accounts resolve to SUCCESS or FAILED within a few attempts. If it stays PENDING after retries, the account may move to MANUAL status, which requires the user to submit a bank passbook or statement.

Order moved to fiatRefundInitiated

Payment was received from a bank account or UPI ID that is not linked to the user's Onmeta profile. Onmeta cannot process this payment and initiates a fiat refund automatically. The refund reaches the user's bank within 24 hours.

To prevent this: display a clear instruction before payment — "Pay only from your registered bank account or UPI ID."

Getting 401 on every API call even with a fresh token

Verify that your request includes both authentication credentials where required:

  • Header: Authorization: Bearer <accessToken> — the user's JWT from login
  • Header or body field: x-api-key or apikey — your merchant Client ID

Some endpoints require only the API key; user-specific endpoints require both. Check the request schema for each endpoint.


Rate Limits

Onmeta enforces a global rate limit across all API endpoints. If you exceed the limit your requests receive 429 responses. Contact support@onmeta.in or your integration contact for your account's specific limit and to request an increase.