Payment Statuses
Integrators can retrieve the current status of a payment at any time using the trackingId returned when the payment is created. Use this endpoint to verify completion, support customer issues, and keep internal records accurate.
Payment status checks complement webhooks, Reporting, and Settlement. Webhooks notify you when something changes, this endpoint lets you query on demand, and Reporting and Settlement provide historical and settlement views across many payments.
Overview
Use the payment status endpoint when you want to:
Retrieve near real time payment status with a simple GET request
Confirm final outcomes such as
completed,expired,underpaid, orinvalidTroubleshoot or support a single payment without pulling a full history
For ongoing monitoring and reconciliation, prefer webhooks plus Reporting and Settlement instead of frequent polling.
Requesting payment status
Payment status is retrieved by trackingId.
Endpoint
GET /payments/tracking/{trackingId}
Path parameters
trackingId
string
Yes
Tracking identifier returned by the Create Payment response
Required headers (preferred)
Payments endpoints use header based authentication with a terminal API key.
X-Api-Key
{apiKey}
Accept
application/json
Notes:
apiKeyis the secret credentialmaskedApiKeyis not usableSend the full
apiKeyvalue in theX-Api-Keyheader on every Payments request
Example request
Example response
The full response in your environment may include additional fields such as conversion details, settlement amounts, and metadata. Treat statusCode as the primary state indicator and use other fields as needed.
Status values
Statuses are returned in the statusCode field and use the PaymentStatus enum.
Statuses marked as reserved are not currently returned by the API but are documented for future compatibility.
How crypto amount mismatch happens
In most wallet based crypto payments, the customer scans the QR code to set the destination and then manually enters the amount to send in their wallet app. If the customer mistypes the amount, the payment can end as:
underpaidwhen less than the requested amount is sentoverpaidwhen more than the requested amount is sent
Status codes
created
Payment record created, waiting for customer funds.
processing
Funds detected and conversion or settlement processing in progress.
completed
Customer sent the requested amount. Crypto, if any, has been converted and credited.
underpaid
Customer sent less than requested. The payment should be treated as not completed. Funds remain unconverted and will be returned to the payer through the reclaim process.
overpaid
Customer sent more than requested. The requested amount will be processed and settled. The overage remains unconverted and will be returned to the payer through the reclaim process.
expired
No funds received before the payment window expired. Any funds sent later remain unconverted and must be reclaimed.
invalid
Irregular event such as multiple transactions, unsupported asset, compliance block, or extreme market movement. Funds remain unconverted and must be reclaimed.
cancelled
Customer or merchant cancelled the payment. Any funds remain unconverted and may be reclaimed.
fullyRefunded (reserved)
Will indicate that the entire payment has been refunded.
partiallyRefunded (reserved)
Will indicate that a portion of the payment has been refunded.
Integrator handling guidance
Use these rules when mapping payment statuses to your internal order or invoice state.
completed
Treat as successful payment.
Proceed with fulfillment after you have confirmed the final state via webhooks or this endpoint.
underpaid
Treat as not successful payment.
Assume the transaction is not going through.
Prompt the customer to attempt payment again with a new hosted payment session, based on your normal retry or tender selection flow.
Do not fulfill the order based on an
underpaidstatus.
overpaid
Treat as successful payment for the requested amount.
Proceed with fulfillment once you have confirmed the final state, even though the customer sent more than requested.
The customer does not need to take additional action to receive the overage back, other than completing the reclaim steps when prompted.
expired, invalid, cancelled
Treat as not successful payment.
Do not fulfill the order.
If funds were sent, they remain unconverted and are handled through reclaim.
For how these states behave in full flows, see the Payment Scenarios pages, which walk through underpaid, overpaid, and reclaim flows in more detail.
Reclaiming unconverted crypto
When a payment ends in one of the following states:
underpaid
overpaid
expired
invalid
cancelled
any unconverted crypto associated with that payment is handled through Bead’s reclaim process.
Email capture behavior
Bead uses an email based reclaim flow to return unconverted crypto.
If an email address is included in the original payment request (common in digital and virtual flows), Bead will email instructions to the payer when reclaim is required.
If an email address is not included in the request (common in physical or terminal based flows), the hosted payment page will prompt the customer to enter an email address when one of these outcomes occurs, then Bead emails the reclaim instructions.
Your integration does not need to implement the reclaim process directly, but you should:
Display clear messaging in your UI when these statuses occur
Add internal flags or notes so support and finance teams can recognize reclaim scenarios
Avoid automatically retrying or recreating payments without clear customer intention
Error responses
Common error responses
401
Missing or invalid API key. Confirm the X-Api-Key header is present and the key is valid for this environment.
403
Authenticated, but not permitted to view this payment in the current context. Confirm you are using the correct apiKey for the terminal and merchant relationship tied to this payment.
404
No payment exists for this trackingId, or it is not visible in the current context.
Log the response body and headers for debugging, but avoid exposing raw error text directly to end users.
Best practices
Recommended patterns when using the payment status endpoint:
Prefer webhooks for real time changes Configure Payment webhooks so your system receives status updates automatically. Use this endpoint for ad hoc checks and support workflows, not as your primary real time mechanism.
Store and use trackingId as the lookup key Save the
trackingIdfrom the Create Payment response alongside your order or invoice. Use it to correlate status checks, webhooks, and Reporting records.Map status codes to internal order states Translate
completed,underpaid,overpaid,expired,invalid, andcancelledinto internal states that your business and support team understand.Avoid tight polling loops If you must poll, use reasonable intervals and a backoff strategy. For anything beyond small scale, move to webhooks together with Reporting and Settlement.
Combine with Reporting and Settlement for reconciliation Use this endpoint for single payment checks. For daily reconciliation and accounting, rely on the Reporting payment history endpoints and the Settlement APIs to see payments, batches, and payment settlement lines together.
Next steps
Configure Payment Webhooks for real time payment events.
Review Payment Scenarios for practical examples of handling non happy path statuses such as underpaid and overpaid.
Use Reporting and Settlement to build dashboards and reconciliation jobs that operate over many payments at once.
Legacy authentication (supported for existing integrators)
Some existing Payments integrations authenticate using OAuth password grant and send an access token as:
Authorization: Bearer {access_token}
New Payments integrations should use the terminal API key method described above. If you are on the legacy model, see Authentication for token endpoint details and refresh token usage.
Last updated