---
title: "Expire a payment page"
method: POST
path: "/v1/payment_pages/{pageId}/expire"
tags: ["Payment Pages"]
---

# Expire a payment page

`POST /v1/payment_pages/{pageId}/expire`

Marks an open payment page as expired so it can no longer accept payments.

## Path parameters

- `pageId` string, required

## Response `200`

Success

- object — The expired payment page
  - `status` 'SUCCEEDED', required
  - `data` ExpirePaymentPageResponse, required
    - `id` string, required
    - `merchant` object, required
      - `merchantId` string, required
      - `name` string, required
      - `wallet` object
        - `evmAddress` string, required
        - `solanaAddress` string, required
      - `livemode` boolean, required
      - `regionCode` 'US' | 'CA' | 'EU'
      - `checkoutSettings` object
        - `processingChannelIdLivemode` 'pc_jlkqbuuu2svulf7jkiyw5m6w44' | 'pc_cjd2au72ozrelgqc2oi4pjpaoi' | 'pc_jplm2l7q77eunak5ngtyb7yqt4' | 'pc_nddjkfedyxienabgww2d7yqkwa'
        - `processingChannelIdTestmode` string, required
      - `isGiftCardPayinEffective` boolean
      - `gcWalletAddress` string
      - `gcWalletNetwork` 'ETHEREUM' | 'OPTIMISM' | 'BINANCE' | 'POLYGON' | 'ARBITRUM' | 'AVALANCHE' | 'SOLANA' | 'TRON' | 'BASE' | 'BITCOIN'
    - `currency` 'USD' | 'AUD' | 'CAD' | 'CHF' | 'DKK' | 'EUR' | 'GBP' | 'HKD' | 'JPY' | 'NOK' | 'NZD' | 'PLN' | 'SEK' | 'SGD' | 'TWD' | 'KRW' | 'SOL' | 'USDC' | 'USDT' | 'HONEY' | 'EURC', required — Presentment currency — the currency the user sees and pays with.
    - `amount` number, required — Total amount the user sees and pays with, in presentment currency, minor units format (e.g. 10000 for $10.00)
    - `source` 'direct' | 'iap' | 'subscription' | 'card-verification' | 'consumer-onramp', required
    - `lineItems` object[]
      - `productId` string
      - `name` string, required
      - `currency` 'USD' | 'AUD' | 'CAD' | 'CHF' | 'DKK' | 'EUR' | 'GBP' | 'HKD' | 'JPY' | 'NOK' | 'NZD' | 'PLN' | 'SEK' | 'SGD' | 'TWD' | 'KRW' | 'SOL' | 'USDC' | 'USDT' | 'HONEY' | 'EURC', required
      - `amount` number, required
      - `price` number, required
      - `quantity` number, required
      - `description` string
      - `images` string[]
    - `clientReferenceId` string
    - `successReturnUrl` string
    - `failReturnUrl` string
    - `fromChannel` string
    - `createdAt` number, required
    - `url` string, required
    - `clientSecret` string, required
    - `status` 'UNPAID' | 'PAID' | 'EXPIRED' | 'CANCELED', required
    - `isRecurring` boolean, required
    - `billingEmail` string
    - `location` object
      - `country` string, required
      - `zipcode` string
      - `state` string
      - `latitude` number
      - `longitude` number
    - `description` string
    - `expireAtSeconds` number
    - `disputeId` string — Identifies the specific dispute whose state is mirrored onto this page. First-wins binding (mirrors refundId semantics): once set, subsequent disputes against the same page do NOT overwrite — only the dispute matching this id can update disputeStatus. Absent on pages that have never been disputed.
    - `disputeStatus` 'new' | 'actionRequired' | 'ongoing' | 'partialWon' | 'won' | 'lost' | 'canceled' | 'manuallyCanceled' — Mirrors the status of the dispute identified by disputeId. Only updated when the upstream dispute's id matches page.disputeId. Absent on pages that have never been disputed.
    - `displayStatus` 'UNPAID' | 'SUCCESSFUL' | 'REFUNDING' | 'REFUNDED' | 'DISPUTED' | 'EXPIRED' | 'CANCELED' — Derived, user-facing status. Computed from (status, refundStatus, disputeStatus) via computeDisplayStatus(). Written on every state change to those inputs. Absent only on legacy pages predating the backfill.
    - `customer` object
      - `id` string, required
      - `referenceId` string, required
      - `email` string
    - `integrationType` 'HOSTED' | 'SERVER_TO_SERVER' — Integration method: HOSTED (default for all existing pages) or SERVER_TO_SERVER. Absent on legacy documents — treat as HOSTED.
    - `threeDsMode` 'MERCHANT_PROVIDED' | 'BREEZE_HOSTED' — 3DS mode for S2S payments: "MERCHANT_PROVIDED" or "BREEZE_HOSTED". Absent for hosted flows.

## Other responses

- `400` — Bad request
- `401` — Unauthorized

---

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