Payment Statuses Reference
Complete reference of all order, payment, and payment link statuses.
Complete reference of all statuses used in Paysera Checkout. There are three distinct status types that track different aspects of the payment flow.
Do not confuse these status types - they track different entities:
- Order Status - Tracks the overall order state
- Payment Status - Tracks individual payment attempts
- Payment Link Status - Tracks the payment link availability
Order Statuses​
Orders track the overall transaction state. An order can have multiple payment attempts.
| Status | Code | Description | Terminal |
|---|---|---|---|
| Pending Payment | pending_payment | Order created, awaiting payment completion | No |
| Paid | paid | Order total amount equals amount paid (fully paid) | No |
| Canceled | canceled | Order was manually canceled* | Yes |
| Closed | closed | No further operations allowed on order* | Yes |
*Note: canceled and closed statuses are defined in the system but not yet fully implemented.
Order Status Transitions​
Key Transition: pending_payment → paid​
An order transitions from pending_payment to paid when:
- Order Amount Paid equals Order Total Amount to Pay
This happens when one or more payments settle and their total reaches the order amount.
Payment Statuses​
Payments track individual payment attempts through the payment provider flow.
| # | Status | Code | Description | Terminal |
|---|---|---|---|---|
| 1 | Initiated | initiated | Payment request created after payer clicks "Pay" | No |
| 2 | Awaiting Authorization | awaiting_authorization | Requires Strong Customer Authentication (SCA/3DS) | No |
| 3 | Authorized | authorized | Bank authorized the payment, funds not yet moved | No |
| 4 | Processing | processing | Moving through internal processing steps | No |
| 5 | Pending Settlement | pending_settlement | In clearing/batch processing stage | No |
| 6 | On Hold | on_hold | Paused for compliance or fraud review | No |
| 7 | Settled | settled | Funds reached merchant account | No* |
| 8 | Failed | failed | Technical failure occurred | Yes |
| 9 | Rejected | rejected | Bank explicitly refused the payment | Yes |
| 10 | Canceled | canceled | Payment canceled before settlement | Yes |
| 11 | Expired | expired | Authorization or session expired | Yes |
| 12 | Refunded | refunded | Payment partially or fully returned to payer | Yes |
| 13 | Chargeback | chargeback | Dispute/chargeback initiated by cardholder | Yes |
*settled can transition to refunded or chargeback
Payment Status Flow​
Payment Link Statuses​
Payment links control access to the payment flow. They have their own lifecycle independent of payment status.
| Status | Code | Description | Terminal |
|---|---|---|---|
| Active | active | Link is valid and can initiate a payment session | No |
| Completed | completed | Payment settled successfully via this link | Yes |
| Expired | expired | Link lifetime (TTL) passed | Quasi* |
| Canceled | canceled | Link was invalidated by order update or manual cancel | Yes |
*expired is quasi-terminal: it can still transition to completed if a payment that was started before expiration settles during the bank flow.
Payment Link Status Flow​
Important Notes​
-
No
failedstatus for payment links - Payment links do not have afailedstatus. If a payment attempt fails, the link remainsactive(unless expired or canceled), allowing the customer to retry. -
Expired links can complete - If a customer starts a payment flow before the link expires, and that payment settles after expiration, the link transitions from
expiredtocompleted.
Status Mapping Between Entities​
| Order Status | Typical Payment Status | Payment Link Status |
|---|---|---|
pending_payment | initiated, processing, failed | active |
paid | settled | completed |
| - | refunded, chargeback | - |
API Response Examples​
Order Response​
{
"id": "a6f2b8e3-5e5f-47d9-b13f-87ed2db2938a",
"projectId": "b7c3d4e5-6f7a-8b9c-0d1e-2f3a4b5c6d7e",
"amount": 2500,
"currency": "EUR",
"status": "pending_payment",
"reference": "ORDER-12345",
"createdAt": 1736433270,
"updatedAt": 1736433270,
"amountPaid": 0,
"balanceDue": 2500
}
Payment Link Response​
{
"id": "c8d9e0f1-2a3b-4c5d-6e7f-8a9b0c1d2e3f",
"orderId": "a6f2b8e3-5e5f-47d9-b13f-87ed2db2938a",
"status": "active",
"amount": 2500,
"currency": "EUR",
"expiredAt": 1736436870,
"createdAt": 1736433270,
"updatedAt": 1736433270
}
Status Handling Examples​
PHP​
<?php
class OrderStatusHandler
{
public function handleOrderStatus(string $status, string $reference): void
{
match ($status) {
'pending_payment' => $this->awaitPayment($reference),
'paid' => $this->fulfillOrder($reference),
'canceled' => $this->handleCancellation($reference),
'closed' => $this->handleClosure($reference),
default => $this->logUnknownStatus($status, $reference),
};
}
}
class PaymentLinkStatusHandler
{
public function handleLinkStatus(string $status, string $linkId): void
{
match ($status) {
'active' => $this->trackActiveLink($linkId),
'completed' => $this->confirmPayment($linkId),
'expired' => $this->handleExpiredLink($linkId),
'canceled' => $this->handleCanceledLink($linkId),
default => $this->logUnknownStatus($status, $linkId),
};
}
}
JavaScript​
const orderStatusHandlers = {
pending_payment: (reference) => awaitPayment(reference),
paid: (reference) => fulfillOrder(reference),
canceled: (reference) => handleCancellation(reference),
closed: (reference) => handleClosure(reference),
};
const paymentLinkStatusHandlers = {
active: (linkId) => trackActiveLink(linkId),
completed: (linkId) => confirmPayment(linkId),
expired: (linkId) => handleExpiredLink(linkId),
canceled: (linkId) => handleCanceledLink(linkId),
};
function handleOrderStatus(status, reference) {
const handler = orderStatusHandlers[status];
if (handler) {
handler(reference);
} else {
console.warn(`Unknown order status: ${status}`);
}
}
Related Documentation​
- Payment Flow - Understand the complete payment lifecycle
- Webhook Events - Events triggered by status changes
- Error Codes - Error handling reference