> ## Documentation Index
> Fetch the complete documentation index at: https://docs.stateset.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Complete Checkout

> Complete the checkout process by processing payment and creating an order

<Note>
  This endpoint finalizes the checkout session by processing the payment and converting it into an order. The checkout status will be updated to `completed` upon successful payment.
</Note>

## Authentication

This endpoint requires a valid API key with `checkouts:write` and `payments:write` permissions.

```bash theme={null}
Authorization: Bearer YOUR_API_KEY
```

## Path Parameters

<ParamField path="id" type="string" required>
  Unique identifier for the checkout session
</ParamField>

## Request Body

<ParamField body="payment_data" type="object" required>
  Payment method details for processing the transaction

  <Expandable title="Payment data properties">
    <ParamField body="token" type="string" required>
      Secure reference to a payment credential (tokenized payment method)
    </ParamField>

    <ParamField body="provider" type="string" required>
      Payment provider: `stripe`, `paypal`, `square`
    </ParamField>

    <ParamField body="billing_address" type="object">
      Billing address for the payment method

      <Expandable title="Address properties">
        <ParamField body="name" type="string">
          Billing name
        </ParamField>

        <ParamField body="line_one" type="string">
          Street address line 1
        </ParamField>

        <ParamField body="line_two" type="string">
          Street address line 2
        </ParamField>

        <ParamField body="city" type="string">
          City name
        </ParamField>

        <ParamField body="state" type="string">
          State or province code
        </ParamField>

        <ParamField body="country" type="string">
          ISO 3166-1 alpha-2 country code
        </ParamField>

        <ParamField body="postal_code" type="string">
          Postal or ZIP code
        </ParamField>
      </Expandable>
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="buyer" type="object">
  Additional buyer information if needed

  <Expandable title="Buyer properties">
    <ParamField body="first_name" type="string">
      First name of the buyer
    </ParamField>

    <ParamField body="last_name" type="string">
      Last name of the buyer
    </ParamField>

    <ParamField body="email" type="string">
      Email address of the buyer
    </ParamField>

    <ParamField body="phone_number" type="string">
      Phone number of the buyer
    </ParamField>
  </Expandable>
</ParamField>

### Response

<ResponseField name="id" type="string">
  Unique identifier for the Checkout Session
</ResponseField>

<ResponseField name="status" type="string">
  Status will be `completed` after successful payment
</ResponseField>

<ResponseField name="order_id" type="string">
  ID of the created order
</ResponseField>

<ResponseField name="payment" type="object">
  Payment processing details and status
</ResponseField>

<ResponseField name="line_items" type="array">
  Final line items with calculated amounts
</ResponseField>

<ResponseField name="totals" type="array">
  Final breakdown of all charges
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST https://api.stateset.com/v1/checkouts/checkout_abc123/complete \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "payment_data": {
        "token": "spt_123",
        "provider": "stripe",
        "billing_address": {
          "name": "John Doe",
          "line_one": "123 Main St",
          "line_two": "Apt 4B",
          "city": "San Francisco",
          "state": "CA",
          "country": "US",
          "postal_code": "94105"
        }
      }
    }'
  ```

  ```javascript Node.js theme={null}
  const checkout = await stateset.checkouts.complete('checkout_abc123', {
    payment_data: {
      token: "spt_123",
      provider: "stripe",
      billing_address: {
        name: "John Doe",
        line_one: "123 Main St",
        line_two: "Apt 4B",
        city: "San Francisco",
        state: "CA",
        country: "US",
        postal_code: "94105"
      }
    }
  });
  ```

  ```python Python theme={null}
  checkout = stateset.checkouts.complete(
      'checkout_abc123',
      payment_data={
          "token": "spt_123",
          "provider": "stripe",
          "billing_address": {
              "name": "John Doe",
              "line_one": "123 Main St",
              "line_two": "Apt 4B",
              "city": "San Francisco",
              "state": "CA",
              "country": "US",
              "postal_code": "94105"
          }
      }
  )
  ```
</RequestExample>

<ResponseExample>
  ```json Success Response theme={null}
  {
    "id": "checkout_abc123",
    "buyer": {
      "first_name": "John",
      "last_name": "Doe",
      "email": "john.doe@example.com",
      "phone_number": "+1234567890"
    },
    "status": "completed",
    "currency": "usd",
    "order_id": "order_xyz789",
    "payment": {
      "id": "pay_456",
      "status": "succeeded",
      "amount": 3750,
      "provider": "stripe"
    },
    "line_items": [
      {
        "id": "item_123",
        "item": {
          "id": "item_123",
          "quantity": 3
        },
        "base_amount": 3000,
        "discount": 0,
        "total": 3000,
        "subtotal": 3000,
        "tax": 0
      },
      {
        "id": "item_456",
        "item": {
          "id": "item_456",
          "quantity": 1
        },
        "base_amount": 500,
        "discount": 0,
        "total": 500,
        "subtotal": 500,
        "tax": 0
      }
    ],
    "fulfillment_address": {
      "name": "John Doe",
      "line_one": "456 Oak Ave",
      "city": "Los Angeles",
      "state": "CA",
      "country": "US",
      "postal_code": "90210"
    },
    "fulfillment_options": [
      {
        "type": "shipping",
        "id": "shipping_fast",
        "title": "Express Shipping",
        "subtitle": "2-3 business days",
        "carrier": "Shipping Co",
        "subtotal": 150,
        "tax": 0,
        "total": 150
      }
    ],
    "fulfillment_option_id": "shipping_fast",
    "totals": [
      {
        "type": "subtotal",
        "display_text": "Subtotal",
        "amount": 3500
      },
      {
        "type": "fulfillment",
        "display_text": "Shipping",
        "amount": 150
      },
      {
        "type": "tax",
        "display_text": "Tax",
        "amount": 100
      },
      {
        "type": "total",
        "display_text": "Total",
        "amount": 3750
      }
    ],
    "messages": [],
    "links": []
  }
  ```

  ```json Error Response - Payment Declined theme={null}
  {
    "success": false,
    "error": {
      "type": "processing_error",
      "code": "PAYMENT_DECLINED",
      "message": "Payment was declined by the payment processor",
      "details": {
        "decline_code": "insufficient_funds",
        "provider_message": "Card has insufficient funds"
      }
    }
  }
  ```

  ```json Error Response - Invalid Status theme={null}
  {
    "success": false,
    "error": {
      "type": "invalid_request",
      "code": "INVALID_STATUS",
      "message": "Checkout must be in ready_for_payment status to complete",
      "param": "status"
    }
  }
  ```
</ResponseExample>
