---
title: "Create an order from the cart and start the payment"
method: POST
path: "/v1/checkout"
tags: ["checkout"]
---

# Create an order from the cart and start the payment

`POST /v1/checkout`

## Request

- Base URL: `https://api.portproof.org`
- URL: `https://api.portproof.org/v1/checkout`
- Auth: one of:
  - API key in cookie `pp_session`
  - HTTP bearer

`accept_terms: true` is required: it records that the customer accepts the terms and the acceptable-use policy and asks for the service to start at once (optional `terms_version` names the version shown). While `LAUNCH_MODE=waitlist` every cart (traffic or ports) is refused with 409 `launch_waitlist` and stays intact. Response shape depends on `payment_method`: `stripe` / `coingate` / `nowpayments` / `mock` return `redirect_url`; `wallet` debits the balance in a transaction and returns the order as `paid` (or `awaiting_kyb` for port orders at KYB t0); `bank_transfer` returns `bank` instructions. When the provider refuses the checkout (502 `payment_provider_error`) the order is cancelled and the cart restored. Traffic limits count unpaid orders too (cancel an abandoned one under Orders). VAT: none while the seller is not registered for VAT (`SELLER_VAT_ID` empty; `GET /v1/launch` reports `seller.vat_registered`); otherwise 21 % for Lithuania and EU customers without a validated VAT id, reverse charge (0 %) for validated EU VAT ids outside LT, 0 % outside the EU. An `Idempotency-Key` header makes the call replay-safe; the same key with a different payment method or coupon is 409 `idempotency_conflict`.

## Request body

- object
  - `payment_method` 'stripe' | 'coingate' | 'nowpayments' | 'wallet' | 'bank_transfer' | 'mock', required
  - `coupon_code` string
  - `org_billing` object
    - `legal_name` string
    - `country` string
    - `vat_id` string, nullable
    - `billing_address` object, nullable
      - `line1` string, required
      - `line2` string, nullable
      - `city` string, required
      - `postal_code` string, required
      - `country` string, required
  - `accept_terms` true, required
  - `terms_version` string

## Response `201`

Default Response

- union
  - object
    - `order` object, required
      - `id` string, required
      - `number` string, required
      - `customer_id` string, required
      - `org_id` string, required
      - `status` 'draft' | 'awaiting_payment' | 'awaiting_kyb' | 'paid' | 'provisioning' | 'fulfilled' | 'partially_fulfilled' | 'failed_refunded' | 'cancelled' | 'refunded', required
      - `subtotal_cents` integer, required
      - `discount_cents` integer, required
      - `vat_rate_bps` integer, required
      - `vat_cents` integer, required
      - `total_cents` integer, required
      - `currency` 'EUR' | 'USD', required
      - `payment_method` 'stripe' | 'coingate' | 'nowpayments' | 'wallet' | 'bank_transfer' | 'mock', required
      - `coupon_code` string, nullable, required
      - `items` object[], required
        - `id` string, required
        - `product_id` string, required
        - `sku_snapshot` object, required
          - `sku` string, required
          - `kind` 'port' | 'bandwidth' | 'topup' | 'sms' | 'esim', required
          - `title` string, required
          - `country` string, nullable, required
          - `carrier_hint` string, nullable, required
          - `term` 'monthly' | 'weekly' | 'daily' | 'gb' | 'none', required
          - `sell_cents` integer, required
          - `currency` 'EUR' | 'USD', required
          - `evidence` 'signed' | 'observed', required
          - `operator_label` string, required
          - `supply_kind` 'owned' | 'generic_pool' | 'mock', required
        - `quantity` integer, required
        - `unit_cents` integer, required
        - `total_cents` integer, required
        - `status` 'pending' | 'provisioning' | 'fulfilled' | 'failed' | 'refunded' | 'held', required
        - `fulfilment_ref` string, nullable, required
        - `attempts` integer, required
        - `last_error` string, nullable
        - `customer_reason` string, nullable
        - `resource_url` string, nullable, required
        - `credentials` object, nullable, required
          - `host` string, required
          - `http_port` integer, nullable, required
          - `socks_port` integer, nullable, required
          - `username` string, required
          - `password` string, required
          - `expires_at` string, date-time, nullable, required
          - `http` object
            - `host` string, required
            - `port` integer, required
            - `username` string, required
            - `password` string, required
          - `socks5` object
            - `host` string, required
            - `port` integer, required
            - `username` string, required
            - `password` string, required
        - `units` object[]
          - `unit` integer, required
          - `port_id` string, required
          - `resource_url` string, nullable, required
          - `credentials` object, nullable, required
            - `host` string, required
            - `http_port` integer, nullable, required
            - `socks_port` integer, nullable, required
            - `username` string, required
            - `password` string, required
            - `expires_at` string, date-time, nullable, required
            - `http` object
              - …
            - `socks5` object
              - …
        - `updated_at` string, date-time, required
      - `paid_at` string, date-time, nullable, required
      - `notes` string, nullable, required
      - `invoice_url` string, nullable, required
      - `payment_url` string, uri, nullable
      - `analytics_ref` string, nullable
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, required
    - `payment_id` string, required
    - `redirect_url` string, uri, required
    - `method` 'stripe', required
  - object
    - `order` object, required
      - `id` string, required
      - `number` string, required
      - `customer_id` string, required
      - `org_id` string, required
      - `status` 'draft' | 'awaiting_payment' | 'awaiting_kyb' | 'paid' | 'provisioning' | 'fulfilled' | 'partially_fulfilled' | 'failed_refunded' | 'cancelled' | 'refunded', required
      - `subtotal_cents` integer, required
      - `discount_cents` integer, required
      - `vat_rate_bps` integer, required
      - `vat_cents` integer, required
      - `total_cents` integer, required
      - `currency` 'EUR' | 'USD', required
      - `payment_method` 'stripe' | 'coingate' | 'nowpayments' | 'wallet' | 'bank_transfer' | 'mock', required
      - `coupon_code` string, nullable, required
      - `items` object[], required
        - `id` string, required
        - `product_id` string, required
        - `sku_snapshot` object, required
          - `sku` string, required
          - `kind` 'port' | 'bandwidth' | 'topup' | 'sms' | 'esim', required
          - `title` string, required
          - `country` string, nullable, required
          - `carrier_hint` string, nullable, required
          - `term` 'monthly' | 'weekly' | 'daily' | 'gb' | 'none', required
          - `sell_cents` integer, required
          - `currency` 'EUR' | 'USD', required
          - `evidence` 'signed' | 'observed', required
          - `operator_label` string, required
          - `supply_kind` 'owned' | 'generic_pool' | 'mock', required
        - `quantity` integer, required
        - `unit_cents` integer, required
        - `total_cents` integer, required
        - `status` 'pending' | 'provisioning' | 'fulfilled' | 'failed' | 'refunded' | 'held', required
        - `fulfilment_ref` string, nullable, required
        - `attempts` integer, required
        - `last_error` string, nullable
        - `customer_reason` string, nullable
        - `resource_url` string, nullable, required
        - `credentials` object, nullable, required
          - `host` string, required
          - `http_port` integer, nullable, required
          - `socks_port` integer, nullable, required
          - `username` string, required
          - `password` string, required
          - `expires_at` string, date-time, nullable, required
          - `http` object
            - `host` string, required
            - `port` integer, required
            - `username` string, required
            - `password` string, required
          - `socks5` object
            - `host` string, required
            - `port` integer, required
            - `username` string, required
            - `password` string, required
        - `units` object[]
          - `unit` integer, required
          - `port_id` string, required
          - `resource_url` string, nullable, required
          - `credentials` object, nullable, required
            - `host` string, required
            - `http_port` integer, nullable, required
            - `socks_port` integer, nullable, required
            - `username` string, required
            - `password` string, required
            - `expires_at` string, date-time, nullable, required
            - `http` object
              - …
            - `socks5` object
              - …
        - `updated_at` string, date-time, required
      - `paid_at` string, date-time, nullable, required
      - `notes` string, nullable, required
      - `invoice_url` string, nullable, required
      - `payment_url` string, uri, nullable
      - `analytics_ref` string, nullable
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, required
    - `payment_id` string, required
    - `redirect_url` string, uri, required
    - `method` 'coingate', required
  - object
    - `order` object, required
      - `id` string, required
      - `number` string, required
      - `customer_id` string, required
      - `org_id` string, required
      - `status` 'draft' | 'awaiting_payment' | 'awaiting_kyb' | 'paid' | 'provisioning' | 'fulfilled' | 'partially_fulfilled' | 'failed_refunded' | 'cancelled' | 'refunded', required
      - `subtotal_cents` integer, required
      - `discount_cents` integer, required
      - `vat_rate_bps` integer, required
      - `vat_cents` integer, required
      - `total_cents` integer, required
      - `currency` 'EUR' | 'USD', required
      - `payment_method` 'stripe' | 'coingate' | 'nowpayments' | 'wallet' | 'bank_transfer' | 'mock', required
      - `coupon_code` string, nullable, required
      - `items` object[], required
        - `id` string, required
        - `product_id` string, required
        - `sku_snapshot` object, required
          - `sku` string, required
          - `kind` 'port' | 'bandwidth' | 'topup' | 'sms' | 'esim', required
          - `title` string, required
          - `country` string, nullable, required
          - `carrier_hint` string, nullable, required
          - `term` 'monthly' | 'weekly' | 'daily' | 'gb' | 'none', required
          - `sell_cents` integer, required
          - `currency` 'EUR' | 'USD', required
          - `evidence` 'signed' | 'observed', required
          - `operator_label` string, required
          - `supply_kind` 'owned' | 'generic_pool' | 'mock', required
        - `quantity` integer, required
        - `unit_cents` integer, required
        - `total_cents` integer, required
        - `status` 'pending' | 'provisioning' | 'fulfilled' | 'failed' | 'refunded' | 'held', required
        - `fulfilment_ref` string, nullable, required
        - `attempts` integer, required
        - `last_error` string, nullable
        - `customer_reason` string, nullable
        - `resource_url` string, nullable, required
        - `credentials` object, nullable, required
          - `host` string, required
          - `http_port` integer, nullable, required
          - `socks_port` integer, nullable, required
          - `username` string, required
          - `password` string, required
          - `expires_at` string, date-time, nullable, required
          - `http` object
            - `host` string, required
            - `port` integer, required
            - `username` string, required
            - `password` string, required
          - `socks5` object
            - `host` string, required
            - `port` integer, required
            - `username` string, required
            - `password` string, required
        - `units` object[]
          - `unit` integer, required
          - `port_id` string, required
          - `resource_url` string, nullable, required
          - `credentials` object, nullable, required
            - `host` string, required
            - `http_port` integer, nullable, required
            - `socks_port` integer, nullable, required
            - `username` string, required
            - `password` string, required
            - `expires_at` string, date-time, nullable, required
            - `http` object
              - …
            - `socks5` object
              - …
        - `updated_at` string, date-time, required
      - `paid_at` string, date-time, nullable, required
      - `notes` string, nullable, required
      - `invoice_url` string, nullable, required
      - `payment_url` string, uri, nullable
      - `analytics_ref` string, nullable
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, required
    - `payment_id` string, required
    - `redirect_url` string, uri, required
    - `method` 'nowpayments', required
  - object
    - `order` object, required
      - `id` string, required
      - `number` string, required
      - `customer_id` string, required
      - `org_id` string, required
      - `status` 'draft' | 'awaiting_payment' | 'awaiting_kyb' | 'paid' | 'provisioning' | 'fulfilled' | 'partially_fulfilled' | 'failed_refunded' | 'cancelled' | 'refunded', required
      - `subtotal_cents` integer, required
      - `discount_cents` integer, required
      - `vat_rate_bps` integer, required
      - `vat_cents` integer, required
      - `total_cents` integer, required
      - `currency` 'EUR' | 'USD', required
      - `payment_method` 'stripe' | 'coingate' | 'nowpayments' | 'wallet' | 'bank_transfer' | 'mock', required
      - `coupon_code` string, nullable, required
      - `items` object[], required
        - `id` string, required
        - `product_id` string, required
        - `sku_snapshot` object, required
          - `sku` string, required
          - `kind` 'port' | 'bandwidth' | 'topup' | 'sms' | 'esim', required
          - `title` string, required
          - `country` string, nullable, required
          - `carrier_hint` string, nullable, required
          - `term` 'monthly' | 'weekly' | 'daily' | 'gb' | 'none', required
          - `sell_cents` integer, required
          - `currency` 'EUR' | 'USD', required
          - `evidence` 'signed' | 'observed', required
          - `operator_label` string, required
          - `supply_kind` 'owned' | 'generic_pool' | 'mock', required
        - `quantity` integer, required
        - `unit_cents` integer, required
        - `total_cents` integer, required
        - `status` 'pending' | 'provisioning' | 'fulfilled' | 'failed' | 'refunded' | 'held', required
        - `fulfilment_ref` string, nullable, required
        - `attempts` integer, required
        - `last_error` string, nullable
        - `customer_reason` string, nullable
        - `resource_url` string, nullable, required
        - `credentials` object, nullable, required
          - `host` string, required
          - `http_port` integer, nullable, required
          - `socks_port` integer, nullable, required
          - `username` string, required
          - `password` string, required
          - `expires_at` string, date-time, nullable, required
          - `http` object
            - `host` string, required
            - `port` integer, required
            - `username` string, required
            - `password` string, required
          - `socks5` object
            - `host` string, required
            - `port` integer, required
            - `username` string, required
            - `password` string, required
        - `units` object[]
          - `unit` integer, required
          - `port_id` string, required
          - `resource_url` string, nullable, required
          - `credentials` object, nullable, required
            - `host` string, required
            - `http_port` integer, nullable, required
            - `socks_port` integer, nullable, required
            - `username` string, required
            - `password` string, required
            - `expires_at` string, date-time, nullable, required
            - `http` object
              - …
            - `socks5` object
              - …
        - `updated_at` string, date-time, required
      - `paid_at` string, date-time, nullable, required
      - `notes` string, nullable, required
      - `invoice_url` string, nullable, required
      - `payment_url` string, uri, nullable
      - `analytics_ref` string, nullable
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, required
    - `payment_id` string, required
    - `redirect_url` string, uri, required
    - `method` 'mock', required
  - object
    - `order` object, required
      - `id` string, required
      - `number` string, required
      - `customer_id` string, required
      - `org_id` string, required
      - `status` 'draft' | 'awaiting_payment' | 'awaiting_kyb' | 'paid' | 'provisioning' | 'fulfilled' | 'partially_fulfilled' | 'failed_refunded' | 'cancelled' | 'refunded', required
      - `subtotal_cents` integer, required
      - `discount_cents` integer, required
      - `vat_rate_bps` integer, required
      - `vat_cents` integer, required
      - `total_cents` integer, required
      - `currency` 'EUR' | 'USD', required
      - `payment_method` 'stripe' | 'coingate' | 'nowpayments' | 'wallet' | 'bank_transfer' | 'mock', required
      - `coupon_code` string, nullable, required
      - `items` object[], required
        - `id` string, required
        - `product_id` string, required
        - `sku_snapshot` object, required
          - `sku` string, required
          - `kind` 'port' | 'bandwidth' | 'topup' | 'sms' | 'esim', required
          - `title` string, required
          - `country` string, nullable, required
          - `carrier_hint` string, nullable, required
          - `term` 'monthly' | 'weekly' | 'daily' | 'gb' | 'none', required
          - `sell_cents` integer, required
          - `currency` 'EUR' | 'USD', required
          - `evidence` 'signed' | 'observed', required
          - `operator_label` string, required
          - `supply_kind` 'owned' | 'generic_pool' | 'mock', required
        - `quantity` integer, required
        - `unit_cents` integer, required
        - `total_cents` integer, required
        - `status` 'pending' | 'provisioning' | 'fulfilled' | 'failed' | 'refunded' | 'held', required
        - `fulfilment_ref` string, nullable, required
        - `attempts` integer, required
        - `last_error` string, nullable
        - `customer_reason` string, nullable
        - `resource_url` string, nullable, required
        - `credentials` object, nullable, required
          - `host` string, required
          - `http_port` integer, nullable, required
          - `socks_port` integer, nullable, required
          - `username` string, required
          - `password` string, required
          - `expires_at` string, date-time, nullable, required
          - `http` object
            - `host` string, required
            - `port` integer, required
            - `username` string, required
            - `password` string, required
          - `socks5` object
            - `host` string, required
            - `port` integer, required
            - `username` string, required
            - `password` string, required
        - `units` object[]
          - `unit` integer, required
          - `port_id` string, required
          - `resource_url` string, nullable, required
          - `credentials` object, nullable, required
            - `host` string, required
            - `http_port` integer, nullable, required
            - `socks_port` integer, nullable, required
            - `username` string, required
            - `password` string, required
            - `expires_at` string, date-time, nullable, required
            - `http` object
              - …
            - `socks5` object
              - …
        - `updated_at` string, date-time, required
      - `paid_at` string, date-time, nullable, required
      - `notes` string, nullable, required
      - `invoice_url` string, nullable, required
      - `payment_url` string, uri, nullable
      - `analytics_ref` string, nullable
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, required
    - `payment_id` string, required
    - `method` 'wallet', required
  - object
    - `order` object, required
      - `id` string, required
      - `number` string, required
      - `customer_id` string, required
      - `org_id` string, required
      - `status` 'draft' | 'awaiting_payment' | 'awaiting_kyb' | 'paid' | 'provisioning' | 'fulfilled' | 'partially_fulfilled' | 'failed_refunded' | 'cancelled' | 'refunded', required
      - `subtotal_cents` integer, required
      - `discount_cents` integer, required
      - `vat_rate_bps` integer, required
      - `vat_cents` integer, required
      - `total_cents` integer, required
      - `currency` 'EUR' | 'USD', required
      - `payment_method` 'stripe' | 'coingate' | 'nowpayments' | 'wallet' | 'bank_transfer' | 'mock', required
      - `coupon_code` string, nullable, required
      - `items` object[], required
        - `id` string, required
        - `product_id` string, required
        - `sku_snapshot` object, required
          - `sku` string, required
          - `kind` 'port' | 'bandwidth' | 'topup' | 'sms' | 'esim', required
          - `title` string, required
          - `country` string, nullable, required
          - `carrier_hint` string, nullable, required
          - `term` 'monthly' | 'weekly' | 'daily' | 'gb' | 'none', required
          - `sell_cents` integer, required
          - `currency` 'EUR' | 'USD', required
          - `evidence` 'signed' | 'observed', required
          - `operator_label` string, required
          - `supply_kind` 'owned' | 'generic_pool' | 'mock', required
        - `quantity` integer, required
        - `unit_cents` integer, required
        - `total_cents` integer, required
        - `status` 'pending' | 'provisioning' | 'fulfilled' | 'failed' | 'refunded' | 'held', required
        - `fulfilment_ref` string, nullable, required
        - `attempts` integer, required
        - `last_error` string, nullable
        - `customer_reason` string, nullable
        - `resource_url` string, nullable, required
        - `credentials` object, nullable, required
          - `host` string, required
          - `http_port` integer, nullable, required
          - `socks_port` integer, nullable, required
          - `username` string, required
          - `password` string, required
          - `expires_at` string, date-time, nullable, required
          - `http` object
            - `host` string, required
            - `port` integer, required
            - `username` string, required
            - `password` string, required
          - `socks5` object
            - `host` string, required
            - `port` integer, required
            - `username` string, required
            - `password` string, required
        - `units` object[]
          - `unit` integer, required
          - `port_id` string, required
          - `resource_url` string, nullable, required
          - `credentials` object, nullable, required
            - `host` string, required
            - `http_port` integer, nullable, required
            - `socks_port` integer, nullable, required
            - `username` string, required
            - `password` string, required
            - `expires_at` string, date-time, nullable, required
            - `http` object
              - …
            - `socks5` object
              - …
        - `updated_at` string, date-time, required
      - `paid_at` string, date-time, nullable, required
      - `notes` string, nullable, required
      - `invoice_url` string, nullable, required
      - `payment_url` string, uri, nullable
      - `analytics_ref` string, nullable
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, required
    - `payment_id` string, required
    - `bank` object, required
      - `iban` string, required
      - `bic` string, required
      - `beneficiary` string, required
      - `reference` string, required
      - `amount_cents` integer, required
      - `currency` 'EUR' | 'USD', required
      - `amount` string, required
    - `method` 'bank_transfer', required

## Other responses

- `400`: Default Response
- `401`: Default Response
- `402`: Default Response
- `403`: Default Response
- `409`: Default Response

---

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