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

# Initialize a Checkout

> Start a one-time dynamic-account payment session

`POST /v1/checkout/initialize`

Callable with either a secret key (server-side) or a public key + `X-Business-ID` header (client-side widgets) — see [Authentication](/authentication).

<ParamField body="amount" type="number" required>
  Amount in Naira, minimum ₦5
</ParamField>

<ParamField body="email" type="string">
  Payer's email address
</ParamField>

<ParamField body="title" type="string">
  Payment title shown on the checkout page. Defaults to "Payment"
</ParamField>

<ParamField body="description" type="string">
  Payment description shown on the checkout page
</ParamField>

<ParamField body="reference" type="string">
  Your own unique reference for this payment. Auto-generated (`PAY-XXXXXXXXXX`) if omitted
</ParamField>

<ParamField body="amount_control" type="string" default="Fixed">
  `Fixed`, `UnderPayment`, or `OverPayment` — whether the customer must pay exactly this amount
</ParamField>

<ParamField body="valid_for" type="number" default="900">
  Seconds until the dynamic account expires, between 60 and 86400 (24h)
</ParamField>

```bash theme={null}
curl -X POST "https://api.payracle.com/api/v1/checkout/initialize" \
  -H "Authorization: Bearer sk_live_YOUR_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 1500,
    "email": "customer@example.com",
    "title": "Order #9928",
    "description": "Payment for running shoes"
  }'
```

```json Response theme={null}
{
  "status": true,
  "message": "Checkout initialized.",
  "data": {
    "mode": "live",
    "reference": "PAY-A1B2C3D4E5",
    "checkout_url": "https://payracle.com/pay/PAY-A1B2C3D4E5",
    "amount": 1500,
    "account_number": "9012345678",
    "account_name": "Payracle-Order #9928",
    "bank_name": "Safe Haven MFB",
    "expires_at": "2026-08-28T15:20:00.000000Z",
    "status": "active"
  }
}
```

Redirect the customer to `checkout_url`, or embed it directly — that's exactly what the [JS widget](/sdks/javascript) and mobile SDKs do under the hood (load it in an iframe/WebView instead of a full redirect).
