Troubleshooting Guide
Last updated: 2026-07-30
Use this checklist to quickly diagnose common DCE API integration issues.
1) Authentication problems
Symptom: 401 Unauthorized
401 UnauthorizedChecks:
- Confirm
Authorizationheader is present. - Confirm API key is valid and not revoked.
- Confirm you are using the correct environment host for that key.
Quick test:
curl -i "${DCE_BASE_URL}/api/balance?currency=USDT&network=TRX" \
-H "Authorization: ${DCE_API_KEY}"Symptom: 403 Forbidden
403 ForbiddenChecks:
- Key is valid but permission scope does not allow the route.
- Ensure the integration user/merchant role has required access.
Merchant account is not active: the merchant is suspended/inactive — withdrawals and deposit-URL creation are blocked until reactivated.
2) Validation and request errors (400, 409)
400, 409)Checks:
- Required fields exist (withdrawals require
network). - Enum values are valid (
currency:USDT/USDC; supportednetworkvalues). - The (currency, network) pair is enabled — only USDT on TRX today; disabled pairs return errors like
Withdrawals of USDT on ETH are not supported. - Data types are correct (amounts as decimal strings where required).
Insufficient balanceis per-chain: funds on other networks cannot cover a withdrawal on this one.409 Duplicate referenceId: the withdrawalreferenceIdwas already used by your merchant account — use a new one (reuse never creates a second payout).
3) Webhook issues
Symptom: signature verification fails
Checks:
- Verify against raw request body bytes.
- Use the merchant
webhookSecretexactly. - Compare lowercase hex digest.
DCE webhook headers:
X-Webhook-EventX-Webhook-Signature
Symptom: duplicate webhook events
Checks:
- Delivery is at-least-once (durable outbox with retries) — duplicates are expected behavior, not a bug.
- Implement idempotency keyed by
eventId(X-Webhook-Id) or event + reference identifiers. - Always return
2xxonce processed successfully.
Symptom: retries continue
Checks:
- Your endpoint returns non-2xx, times out, or network fails.
- Respond quickly; move heavy work to async queue.
- Returning JSON
{ "ok": true }can stop retries for that attempt path.
4) Deposit page token errors
400 Missing token
400 Missing token- Add
tokenquery parameter.
404 Invalid token
404 Invalid token- Verify token source and freshness.
410 Token expired/used
410 Token expired/used- Generate a new deposit session token (sessions expire 15 minutes after creation).
These apply to both GET /api/deposit-page and the live status endpoint GET /api/deposit-page/status.
5) Withdrawal temporarily unavailable (503)
503){"error": "Withdrawal temporarily unavailable"} means the platform's liquidity guard rejected the payout up-front. Nothing was created and your referenceId was not consumed — retry shortly or contact support.
6) Timeout or intermittent failures
Checks:
- Verify DNS/firewall and TLS setup.
- Add retry with exponential backoff for transient errors.
- Monitor latency and keep webhook handler response time low.
7) Before contacting support
Gather:
- environment (
staging/production) - endpoint + method
- UTC timestamp
- request payload sample (sanitized)
- response body + status
- correlation/request ID if available
Contact: [email protected]
Updated 14 days ago
Did this page help you?

