Get Payment
GET
/api/v1/payments/{id}CoreRead one payment in full, together with a four-field stub of the invoice it settles. The lookup is keyed on id AND merchantPointId, so a payment owned by another merchant point returns 404 PAYMENT_NOT_FOUND rather than 403. The body is the same shape the list endpoint emits per item โ the extra invoice columns loaded by the query are dropped before serialisation.
Authentication
Signature Pattern
HMAC-SHA256(apiSecret, "{t}\nGET\n/api/v1/payments/{id}\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 returned by checkout or carried on the payment.completed webhook. The human referenceId (PAY-260826-041C) is not accepted here. |
Response Parameters
| Field | Type | Example |
|---|---|---|
id | string | "clx7k2p9a0001qz8fh3n2v4m6" |
referenceId | string | "PAY-260826-041C" |
status | string | "COMPLETED" |
blockchain | string | "ethereum" |
network | string | "MAINNET" |
isTestnet | boolean | false |
cryptoCurrency | string | "USDT" |
amount | string | "149.50" |
expectedAmount | string | "149.50" |
receivedAmount | string | "149.50" |
address | string | "0x5c9E7A1fD2B84c0d3aE617F9b8cB2fA0d431ecB7" |
confirmations | integer | 12 |
requiredConfirmations | integer | 12 |
transactionHash | string | "0x3f7d1c9a48b2e05f6d1a7c94e2b83f05c1d6a9โฆ |
expiresAt | string | "2026-08-26T10:44:03.000Z" |
createdAt | string | "2026-08-26T10:14:03.000Z" |
completedAt | string | "2026-08-26T10:21:47.000Z" |
invoice | object | {โฆ} |
invoice.id | string | "clx7k2p8v0000qz8f2r6b1w9d" |
invoice.referenceId | string | "INV-260826-039C" |
invoice.orderId | string | "ORDER-2026-04417" |
invoice.status | string | "PAID" |
Response Example
JSONResponse
{
"success": true,
"data": {
"id": "clx7k2p9a0001qz8fh3n2v4m6",
"referenceId": "PAY-260826-041C",
"status": "COMPLETED",
"blockchain": "ethereum",
"network": "MAINNET",
"isTestnet": false,
"cryptoCurrency": "USDT",
"amount": "149.50",
"expectedAmount": "149.50",
"receivedAmount": "149.50",
"address": "0x5c9E7A1fD2B84c0d3aE617F9b8cB2fA0d431ecB7",
"confirmations": 12,
"requiredConfirmations": 12,
"transactionHash": "0x3f7d1c9a48b2e05f6d1a7c94e2b83f05c1d6a94b72e83f01c5a9d6b47e2f08a1",
"expiresAt": "2026-08-26T10:44:03.000Z",
"createdAt": "2026-08-26T10:14:03.000Z",
"completedAt": "2026-08-26T10:21:47.000Z",
"invoice": {
"id": "clx7k2p8v0000qz8f2r6b1w9d",
"referenceId": "INV-260826-039C",
"orderId": "ORDER-2026-04417",
"status": "PAID"
}
},
"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