Skip to content
Merxian

checkout.completed

The buyer paid on the hosted page.

On this page
Typecheckout.completed
CauseThe payment of the session succeeded. This can happen after the session expiry time.
PayloadThe checkout_session object in data.object
SubscriptionOn by default for a new endpoint.

When to use it

Show the buyer a confirmation. To release goods or access, use payment.succeeded or transaction.completed, which report the money.

Notes

  • The status value is completed. The API reports the same state as complete.

Payload

The fields of data.object. The envelope is the same for every event.

  • idstring

    The checkout session ID, cs_….

  • objectstring

    Always checkout_session.

  • statusstring

    The state of the session.

    One of: open, payment_pending, completed, expired, cancelled

  • currencystring

    The ISO 4217 currency code. An empty string when the session has no transaction yet.

  • amountsobject

    Amounts in minor units. All 0 when the session has no transaction yet.

    Child attributes of amounts
    • subtotalinteger

      The sum of the line subtotals.

    • discountinteger

      The discount.

    • netinteger

      The amount before tax, after the discount.

    • taxinteger

      The tax.

    • totalinteger

      The amount to pay.

    • refundedinteger

      The amount refunded so far.

  • customerobjectCan be absentCan be null

    The buyer, when the session has one.

    Child attributes of customer
    • idstring

      The customer ID, cus_….

    • emailstringCan be absentCan be null

      The buyer email.

    • namestringCan be absentCan be null

      The buyer name.

  • transaction_idstringCan be absentCan be null

    The transaction of the session, txn_….

  • client_reference_idstringCan be absentCan be null

    The clientReferenceId that you set on the session.

  • created_atstring (date-time)

    When the session was created.

  • completed_atstring (date-time)Can be absentCan be null

    When the buyer completed payment.

Example

checkout.completed · request body
{
  "id": "whevt_7Kd2VpXn4TqB9mLzR",
  "object": "event",
  "type": "checkout.completed",
  "created_at": "2026-09-14T09:24:53Z",
  "api_version": "2026-08-01",
  "account_id": "acct_5Rn8bQ2xW7mK4tLzP",
  "data": {
    "object": {
      "id": "cs_6HvB2nQx9LmT4kWpR",
      "object": "checkout_session",
      "status": "completed",
      "currency": "EUR",
      "amounts": {
        "subtotal": 12000,
        "discount": 0,
        "net": 12000,
        "tax": 2280,
        "total": 14280,
        "refunded": 0
      },
      "customer": {
        "id": "cus_2Lp7XcN4vB8mQ1tKd",
        "email": "ada@example.com",
        "name": "Ada Example"
      },
      "transaction_id": "txn_0F8mQ2rXbT4kL9pZa",
      "client_reference_id": "A-1042",
      "created_at": "2026-09-14T09:21:07Z",
      "completed_at": "2026-09-14T09:24:52Z"
    }
  }
}

Other checkout events: checkout.created, checkout.expired.

Try refund, payment.succeeded,POST /v1/transactions, orIdempotency-Key.