---
title: "Prepare a purchase for a person: quote, contract versions, steps and the confirmation URL"
method: POST
path: "/api/agents/prepare-checkout"
---

# Prepare a purchase for a person: quote, contract versions, steps and the confirmation URL

`POST /api/agents/prepare-checkout`

## Request

- Base URL: `https://smartwebchat.eu`
- URL: `https://smartwebchat.eu/api/agents/prepare-checkout`
- Auth: HTTP bearer

Open, no API key. Creates nothing: no order, no account, no trial. Only a person can place the order, locale follows the same rule as assessFit: any well-formed tag, fallback 'de' for languages without a published website; the response field locale is the language used for the checkout link. by opening human_confirmation_url in a browser. human_confirmation_url is null for white_label (no self-service) and when checkout is not live for the language; use registration_url then. The confirmation link covers the plan; additional assistants and seats are bought after sign-up. Rate limit 60 requests per minute per IP.

## Request body

- object
  - `plan` 'business' | 'agency' | 'white_label', required: Plan to quote. 'white_label' returns price 'custom' without a calculation.
  - `additional_assistants` integer: Additional assistants beyond the plan's included number (integer, 0 or more).
  - `additional_seats` integer: Additional team seats beyond the plan's included number (integer, 0 or more).
  - `expected_messages_per_month` integer: Expected messages per month; overage above the included quota is priced per 1,000 messages.
  - `locale` string: Language tag, e.g. 'en', 'fr-CA', 'it'. Any well-formed tag is accepted; languages without a published website fall back to 'de'. The response field locale names the language actually used.

## Response `200`

The preparation

- CheckoutPreparation: Result of prepareCheckout. Creates nothing; only a person can place the order via human_confirmation_url.
  - `schema_version` '1.0'
  - `kind` 'self_service' | 'not_self_service'
  - `plan` 'business' | 'agency' | 'white_label'
  - `locale` string: Language actually used for the links (fallback de)
  - `prepared_at` string, date-time
  - `quote` object: Same contract as quotePlan
  - `contract` object
    - `terms_version` string
    - `privacy_version` string
    - `dpa_version` string
  - `steps` string[]
  - `human_confirmation_url` string, uri, nullable
  - `confirmation_unavailable_reason` 'checkout_not_live' | 'no_self_service' | 'null', nullable
  - `registration_url` string, uri
  - `order_note` string, nullable

## Other responses

- `400`: invalid_json or invalid_input
- `429`: rate_limited; see Retry-After
- `503`: quote_unavailable: a price fact is not published

---

[API](https://skmtc.dev/smartwebchat/apis/smartwebchat-api.md) · [All operations](https://skmtc.dev/smartwebchat/apis/smartwebchat-api/llms.txt) · [OpenAPI document](https://skmtc.dev/smartwebchat/apis/smartwebchat-api/revisions/1b052502dacb?raw)
