Hosted Checkout

Check Status Manually

Check a payment's outcome when you can't wait for the webhook, and which status to trust.

While we recommend using webhooks for real-time updates, you can also check the status of a payment at any time by polling the API. This is useful in several cases:

  • When a customer returns to your success_url and you need to confirm the final status before showing an order confirmation.
  • For reconciliation scripts that check the status of pending orders.
  • As a fallback if your webhook endpoint fails.

Option 1: session status

This is the most common method. Use the session_id to retrieve the full session object, which includes the latest status and transaction_status.

GET
/checkout/v1/sessions/{id}

Authorization

Authorization
Authorization<token>

Tu API key con prefijo Token , p. ej. Token <API_KEY>

In: header

Path Parameters

id*string

The Session ID (e.g., sess_a1b2c3d4e5f6)

Response Body

application/json

curl -X GET "https://example.com/checkout/v1/sessions/sess_a1b2c3d4e5f6"
{
  "id": "cs_97_41521_d11ba771527b4056c7f85786cfbb980bc105efaf42af113d",
  "url": "https://stage-payflow.tonder.io/checkout/cs_97_41521_d11ba771527b4056c7f85786cfbb980bc105efaf42af113d",
  "status": "completed",
  "payment_id": 41521,
  "amount_total": 350,
  "currency": "MXN",
  "expires_at": 1751564943,
  "external_id": "ORD-12345",
  "session_type": "payment",
  "checkout_type": "hosted",
  "return_url": "https://my-store.com/checkout/complete",
  "metadata": {},
  "payment_method_types": [
    "card"
  ],
  "ui_config": {},
  "ui_config_version": "V1",
  "created_at": 1751478543567,
  "modified_at": 1751478550234,
  "paid_at": 1751478550234,
  "customer": {
    "first_name": "John",
    "last_name": "Doe",
    "email": "john.doe@example.com"
  },
  "line_items": [
    {
      "name": "Product 1",
      "quantity": 1,
      "unit_price": 350,
      "product_id": "prod-001"
    }
  ],
  "transaction_status": "Success",
  "provider": "tonder"
}

Option 2: transaction details

If you have a payment_id (from the session object or a webhook), you can retrieve details for that specific transaction.

GET
/checkout/v1/payments/{payment_id}

Authorization

Authorization
Authorization<token>

Tu API key con prefijo Token , p. ej. Token <API_KEY>

In: header

Path Parameters

payment_id*string

The Payment ID (e.g., pay_x1y2z3a4b5)

Response Body

application/json

curl -X GET "https://example.com/checkout/v1/payments/pay_x1y2z3a4b5"
{
  "payment_id": "pay_x1y2z3a4b5",
  "session_id": "sess_a1b2c3d4e5f6",
  "status": "Success",
  "amount": 350,
  "currency": "MXN",
  "payment_method_type": "card",
  "created_at": "2025-10-20T14:30:00Z",
  "card_details": {
    "brand": "visa",
    "last4": "4242"
  },
  "customer": {
    "name": "John Doe",
    "email": "john.doe@example.com"
  }
}

For order fulfillment, base your logic on the transaction status (transaction_status, or the status returned by GET /checkout/v1/payments/{payment_id}), not on the session status. The session status may not reflect the final payment result. See the meaning of each value in the Reference.

Next steps

Was this page helpful?

On this page