Skip to main content

GET /v1/deposit-requests/{request_id}

Returns the current status of a deposit request (created via POST /v1/deposit-addresses) along with every on-chain transaction observed against the allocated address. Integrators poll this endpoint to follow a deposit from detected through confirmed.

Method & pathGET /v1/deposit-requests/{request_id}
Required permissionread_deposit_status
AuthHMAC — see Authentication

Path parameters

NameTypeRequiredDescription
request_idintegerrequiredThe request_id returned by POST /v1/deposit-addresses.

Cross-account requests return 404 — another integrator's request_id simply doesn't resolve.

Response

{
"success": true,
"message": "OK",
"data": {
"request_id": 42,
"address": "0xabc...def",
"network": "ETH",
"currency": "USDT",
"user_identifier": "user_8721",
"status": "active",
"display_expires_at": "2026-05-16T22:00:00+00:00",
"created_at": "2026-05-16T19:00:00+00:00",
"transactions": [
{
"tx_hash": "0x9a8...",
"amount_decimal": "100.000000",
"confirmations": 12,
"status": "confirmed",
"block_number": 21345678,
"detected_at": "2026-05-16T19:30:00+00:00",
"confirmed_at": "2026-05-16T19:35:30+00:00"
}
]
}
}

Top-level fields

FieldTypeDescription
request_idintegerEchoes the path parameter.
addressstringThe on-chain address the user / payer should send funds to.
networkstringNetwork code (e.g. ETH).
currencystringCurrency symbol (e.g. USDT).
user_identifierstring | nullThe sticky identifier you passed on allocation, or null for pool-allocated addresses.
statusstringLifecycle state — see table below.
display_expires_atISO-8601 UTCWhen you should stop showing this address to the end user. The gateway keeps monitoring the address after this, so late deposits still credit.
created_atISO-8601 UTCWhen the request was allocated.
transactionsarrayEvery on-chain transaction observed against address for currency. May be empty.

status values

ValueMeaning
activeAddress is being actively listened to; funds will be detected and credited.
expired_for_displayPast the display window; the gateway is still monitoring the address. Stop showing the address in your UI but keep polling for late confirmations.
settledAt least one deposit has confirmed and been credited to your balance.

transactions[] fields

FieldTypeDescription
tx_hashstringOn-chain transaction hash.
amount_decimalstringAmount in human units (decimal string, e.g. "100.000000").
confirmationsintegerCurrent confirmation count.
statusstringdetectedconfirmedsweep_pendingswept, or failed at any step.
block_numberintegerThe block in which this tx was first seen.
detected_atISO-8601 UTCWhen the transaction was first detected on-chain.
confirmed_atISO-8601 UTC | nullWhen confirmations crossed network.min_confirmations. null while still pending.

Errors

StatusCause
401 / 403 / 429Standard middleware — see Errors page.
404request_id doesn't exist, or belongs to another account.

Code samples

Examples assume sign_request(...) from the Authentication page.

REQUEST_ID="42"
METHOD="GET"
ENDPOINT="/v1/deposit-requests/${REQUEST_ID}"
QUERY=""
BODY=""

# ... sign as on the Authentication page ...

curl -sS "${BASE_URL}${ENDPOINT}" \
-H "X-CPG-Key: ${API_KEY}" \
-H "X-CPG-Timestamp: ${TS}" \
-H "X-CPG-Signature: ${SIG}"

Notes

  • Prefer webhooks over polling. Subscribe to deposit.detected / deposit.confirmed (covered in the Webhooks section) and only poll this endpoint as a fallback if a webhook delivery is missed.
  • Sticky addresses surface their identifier here. If you allocated with user_identifier="user_8721", that string appears in user_identifier on every poll — convenient for your UI to associate the deposit with the right user without keeping an internal mapping.
  • The transactions array can grow. If multiple deposits hit the same address (common for sticky addresses or pool-allocated addresses reused within their monitoring window), each one shows up as a separate entry.