Get Payment Status
GET
/api/v1/payments/{id}/statusCoreConfirmation-only projection of a payment: seven fields selected directly in the query, with no invoice join and no chain or address metadata. This is the cheap endpoint to poll while a transaction confirms โ compare confirmations against requiredConfirmations, which is fixed per chain when the payment is created. Prefer the payment.completed webhook where you can; poll this only as a reconciliation backstop.
Authentication
Signature Pattern
HMAC-SHA256(apiSecret, "{t}\nGET\n/api/v1/payments/{id}/status\n{sha256(\"\")}")| Header | Value | Description |
|---|---|---|
X-API-Key | 7f3b9c1e4a26d508bf71ac93e2d64f08 | Merchant point API key, issued in the merchant dashboard. Treat it as opaque โ depending on how the point was created it is 32 or 64 hex characters, so never validate on length. Identifies the point whose payments you can reach. |
X-Signature | t=1787739243,v1=9c4f2ab7e1d6538042bfa9c7e31d685f0a2c94b7e6d813fa50c9b2e74a1d6f38 | Literal form t={unix_seconds},v1={hex_hmac_sha256}; t must sit within ยฑ300s of server time or the guard raises SIGNATURE_EXPIRED |
Content-Type | application/json | Always application/json. These reads carry no body, so the body hash in the canonical string is sha256 of the empty string. |
Request Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Required | Path parameter โ the payment CUID. Scoped to the merchant point behind the API key; an id outside that scope yields 404 PAYMENT_NOT_FOUND. |
Response Parameters
| Field | Type | Example |
|---|---|---|
id | string | "clx7k4m2s0007qz8fd5v3n8q1" |
referenceId | string | "PAY-260826-052D" |
status | string | "CONFIRMING" |
confirmations | integer | 46 |
requiredConfirmations | integer | 128 |
expiresAt | string | "2026-08-26T11:02:18.000Z" |
completedAt | null | null |
Response Example
JSONResponse
{
"success": true,
"data": {
"id": "clx7k4m2s0007qz8fd5v3n8q1",
"referenceId": "PAY-260826-052D",
"status": "CONFIRMING",
"confirmations": 46,
"requiredConfirmations": 128,
"expiresAt": "2026-08-26T11:02:18.000Z",
"completedAt": null
},
"timestamp": "2026-08-26T13:41:02.477Z",
"requestId": "req_V1StGXR8_Z5j"
}Error shape
JSONError
{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "Resource not found"
},
"timestamp": "2026-08-26T13:41:02.477Z",
"requestId": "req_V1StGXR8_Z5j"
}Status Codes
200Success
201Created
400Bad Request
401Unauthorized
404Not Found
429Rate Limited
Try itMockapi2.havala.io
GEThttps://api2.havala.io