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

# Checkout Pages API — List and Retrieve Checkout Pages

> REST API endpoints for Nova.Pay checkout pages. List all pages, retrieve a single page, and query payments associated with a checkout page.

Checkout pages are the hosted payment forms you create in Nova.Pay. Each page can carry one or more products, accept multiple payment methods, and be customised with your brand colours and logo. The endpoints below let you programmatically list your pages, fetch their full configuration, and inspect the payments that have been made through them.

**Base URL:** `https://pay.nova.money/api/v1`

***

## List checkout pages

<Note>
  Authentication is required for all checkout-page endpoints. Pass your API key in the `Authorization` header as a Bearer token.
</Note>

Retrieve a paginated list of your checkout pages. You can narrow the results with the optional query parameters below.

```http theme={null}
GET /checkout_pages
```

### Query parameters

<ParamField query="q" type="string">
  Free-text search string. Matches against the page title and other indexed fields.
</ParamField>

<ParamField query="has_products" type="boolean">
  When `true`, only returns pages that have at least one product attached. When `false`, returns pages with no products.
</ParamField>

<ParamField query="product_ids" type="array of integers">
  Filter pages to only those that include any of the specified product IDs. Pass multiple values as repeated query params: `product_ids[]=1&product_ids[]=2`.
</ParamField>

### Response

Returns an array of **CheckoutPageSummary** objects.

<CodeGroup>
  ```bash cURL theme={null}
  curl --request GET \
    --url "https://pay.nova.money/api/v1/checkout_pages?has_products=true" \
    --header "Authorization: Bearer YOUR_API_KEY"
  ```
</CodeGroup>

```json Example response theme={null}
[
  {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "page_title": "Summer Sale Checkout",
    "main_color": "#6366f1",
    "currency": "BRL",
    "gateway": "stripe",
    "public_key": "pk_live_xxxxxxxxxxxx",
    "subscription": false,
    "enable_coupons": true,
    "company_id": 42
  }
]
```

***

## Retrieve a checkout page

Fetch the full configuration for a single checkout page by its UUID.

```http theme={null}
GET /checkout_pages/{id}
```

### Path parameters

<ParamField path="id" type="string" required>
  The UUID of the checkout page.
</ParamField>

### Response

Returns a **CheckoutPageShow** object, which extends CheckoutPageSummary with the full set of fields listed below.

<ResponseField name="id" type="string (uuid)">
  Unique identifier for the checkout page.
</ResponseField>

<ResponseField name="customer_data_at" type="string">
  Specifies at which step of the checkout flow customer data is collected. Typical values are `"start"` or `"end"`.
</ResponseField>

<ResponseField name="gateway" type="string">
  The payment gateway configured for this page (e.g. `"stripe"`, `"pagarme"`).
</ResponseField>

<ResponseField name="main_color" type="string">
  Hex colour code used as the primary brand colour on the hosted page.
</ResponseField>

<ResponseField name="page_title" type="string">
  The display title shown to customers on the checkout page.
</ResponseField>

<ResponseField name="logo" type="string">
  URL of the logo image displayed on the checkout page.
</ResponseField>

<ResponseField name="currency" type="string">
  ISO 4217 currency code (e.g. `"BRL"`, `"USD"`).
</ResponseField>

<ResponseField name="menus" type="array">
  Navigation menu items configured for the page.
</ResponseField>

<ResponseField name="public_key" type="string">
  The gateway public key used to tokenise card data on the client side.
</ResponseField>

<ResponseField name="subscription" type="boolean">
  Whether the checkout page is configured for recurring / subscription billing.
</ResponseField>

<ResponseField name="enable_coupons" type="boolean">
  Whether coupon code entry is enabled on this page.
</ResponseField>

<ResponseField name="index_on_search_engines" type="boolean">
  When `true`, the hosted page allows indexing by search engine crawlers.
</ResponseField>

<ResponseField name="require_scheduling" type="boolean">
  When `true`, the customer must select a scheduled date before completing checkout.
</ResponseField>

<ResponseField name="enable_two_cards" type="boolean">
  When `true`, the customer may split the payment across two credit cards.
</ResponseField>

<ResponseField name="company_id" type="integer">
  ID of the Nova.Pay company that owns this checkout page.
</ResponseField>

<ResponseField name="upsell_product" type="object">
  An optional product offered as an upsell after the main purchase.

  <Expandable title="upsell_product fields">
    <ResponseField name="id" type="integer">Product ID.</ResponseField>
    <ResponseField name="name" type="string">Product name.</ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="custom_code" type="string">
  Arbitrary HTML/JS snippet injected into the hosted page (e.g. tracking pixels).
</ResponseField>

<ResponseField name="default_payment_plan" type="object">
  The pre-selected payment plan shown to the customer on page load.

  <Expandable title="default_payment_plan fields">
    <ResponseField name="id" type="string">Payment plan ID (e.g. `"42-1"`).</ResponseField>
    <ResponseField name="name" type="string">Human-readable label.</ResponseField>
    <ResponseField name="payment_method" type="string">Payment method for this plan.</ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="integrations" type="object">
  Third-party integration configuration (webhooks, analytics, CRM connections, etc.).
</ResponseField>

<ResponseField name="products" type="array">
  The products attached to this checkout page.

  <Expandable title="Product fields">
    <ResponseField name="id" type="integer">Internal product ID.</ResponseField>
    <ResponseField name="uid" type="string">Public-facing unique identifier for the product.</ResponseField>
    <ResponseField name="name" type="string">Product name.</ResponseField>
    <ResponseField name="description" type="string">Product description shown to customers.</ResponseField>
    <ResponseField name="product_type" type="string">Category of the product (e.g. `"digital"`, `"physical"`).</ResponseField>
    <ResponseField name="subscription" type="boolean">Whether the product is sold as a subscription.</ResponseField>
    <ResponseField name="type" type="string">Product billing type.</ResponseField>
    <ResponseField name="interval" type="string">Recurrence interval for subscriptions (e.g. `"monthly"`).</ResponseField>
    <ResponseField name="max_quantity" type="integer">Maximum number of units a customer can purchase.</ResponseField>
    <ResponseField name="value" type="number">Unit price of the product.</ResponseField>
    <ResponseField name="image" type="string">URL of the product image.</ResponseField>
    <ResponseField name="allow_quantity" type="boolean">Whether the customer can choose a quantity greater than one.</ResponseField>
    <ResponseField name="recommended" type="boolean">Whether this product is highlighted as recommended.</ResponseField>
  </Expandable>
</ResponseField>

***

## List payments for a checkout page

Returns all payments submitted through a given checkout page.

```http theme={null}
GET /checkout_pages/{id}/payments
```

### Path parameters

<ParamField path="id" type="string" required>
  The UUID of the checkout page.
</ParamField>

### Query parameters

<ParamField query="ids" type="array">
  Filter the results to specific payments. Each value may be either a `gateway_id` (e.g. `"pay_abc123"`) or an internal payment ID. Pass multiple values as repeated query params: `ids[]=pay_abc123&ids[]=pay_def456`.
</ParamField>

### Response

Returns an **array of PaymentStatus** objects, or HTTP **204 No Content** if no payments have been made through this page yet.

```json Example response theme={null}
[
  {
    "gateway_id": "pay_abc123",
    "status": "paid"
  },
  {
    "gateway_id": "pay_def456",
    "status": "waiting_payment"
  }
]
```

<ResponseField name="gateway_id" type="string">
  The payment identifier issued by the gateway (e.g. a Stripe PaymentIntent ID).
</ResponseField>

<ResponseField name="status" type="string">
  Current status of the payment. Common values: `paid`, `waiting_payment`, `failed`, `cancelled`.
</ResponseField>


## Related topics

- [Nova.Pay Checkout Flow: Pages, Carts, and Charge Links](/concepts/checkout-flow.md)
- [Payment Plans API — List and Retrieve Installment Options](/api-reference/payment-plans.md)
- [Products API — List, Create, and Retrieve Products](/api-reference/products.md)
- [Carts API — Create, Retrieve, and Pay Nova.Pay Carts](/api-reference/carts.md)
- [Nova.Pay API: Payments, Checkout & Order Management](/introduction.md)
