---
title: "Create a checkout to buy credits (Stripe or crypto)"
method: POST
path: "/api/v1/billing"
tags: ["Billing"]
---

# Create a checkout to buy credits (Stripe or crypto)

`POST /api/v1/billing`

## Request

- Base URL: `https://verifly.email`
- URL: `https://verifly.email/api/v1/billing`
- Auth: HTTP bearer

Create a payment to buy a credit package. method 'stripe' (default) returns a hosted Stripe checkout_url. method 'crypto' returns a Plisio invoice; when a 'currency' (BTC/ETH/LTC/USDT/USDC) is supplied the response also includes a RAW wallet address + amount + qr_code so an autonomous agent can pay from a wallet with no browser. This is the documented purchase path.

## Request body

- CheckoutRequest
  - `package_id` 'starter' | 'basic' | 'pro' | 'business' | 'enterprise', required
  - `packageId` string: Accepted alias of package_id.
  - `method` 'stripe' | 'crypto'
  - `currency` 'BTC' | 'ETH' | 'LTC' | 'USDT' | 'USDC': Only for method=crypto. When set, the response returns a raw wallet address + amount + qr_code.

## Response `200`

Checkout created.

- union
  - StripeCheckoutResult
    - `success` boolean, required
    - `method` 'stripe'
    - `checkout_url` string, uri, required
    - `session_id` string
    - `expires_at` string, date-time
    - `package` PackageRef
      - `id` string
      - `name` string
      - `credits` integer
      - `price_usd` string
  - CryptoCheckoutResult
    - `success` boolean, required
    - `method` 'crypto'
    - `checkout_url` string, uri, required: Plisio invoice page.
    - `invoice_id` string, required
    - `address` string: Raw wallet address (present when a currency was supplied).
    - `amount` string: Crypto amount to send.
    - `currency` 'BTC' | 'ETH' | 'LTC' | 'USDT' | 'USDC'
    - `qr_code` string: QR code (data URL or URL) for the payment address.
    - `expires_at` string, date-time
    - `package` PackageRef
      - `id` string
      - `name` string
      - `credits` integer
      - `price_usd` string

## Other responses

- `400`: Invalid request or invalid input.
- `401`: Missing or invalid API key.
- `500`: Internal server error. Credits are refunded on failed verification exceptions where possible.

---

[API](https://skmtc.dev/verifly/apis/verifly-email-verification-api.md) · [All operations](https://skmtc.dev/verifly/apis/verifly-email-verification-api/llms.txt) · [OpenAPI document](https://skmtc.dev/verifly/apis/verifly-email-verification-api/revisions/9b2787c04363?raw)
