---
title: "Process payment intent after client-side confirmation"
method: POST
path: "/v1/sdk/payment-intents/{processorPaymentId}/process"
tags: ["Payment Intents"]
---

# Process payment intent after client-side confirmation

`POST /v1/sdk/payment-intents/{processorPaymentId}/process`

Processes a payment intent that has been confirmed on the client side. Polls the database for payment intent status to become succeeded. Returns the current status of the payment intent; on success, the response is enriched with the Purchase row created by the webhook handler.

## Path parameters

- `processorPaymentId` string, required

## Request body

- ProcessPaymentIntentDto
  - `customerRef` string, required
  - `planRef` string
  - `productRef` string

## Response `200`

Payment intent status with optional purchase enrichment on success

- union
  - ProcessPaymentSucceededRecurring
    - `purchase` PurchaseInfo, required
      - `amount` number, required — Amount in USD cents (normalised for aggregation)
      - `cancellationReason` string — Reason for cancellation
      - `cancelledAt` string — When purchase was cancelled
      - `currency` string, required — ISO 4217 currency code of the customer-facing charge
      - `endDate` string — End date of purchase
      - `exchangeRate` number — Exchange rate from original currency to USD
      - `originalAmount` number — Original amount in the payment currency (minor units)
      - `planRef` string — Plan reference from the plan snapshot, for reliable plan matching
      - `planSnapshot` object — Snapshot of the plan at time of purchase
      - `productName` string, required — Product name
      - `productRef` string — Product reference
      - `reference` string, required — Purchase reference
      - `startDate` string, required — Start date
      - `status` string, required — Purchase status
    - `status` 'succeeded', required
    - `type` 'recurring', required
  - ProcessPaymentSucceededOneTime
    - `oneTimePurchase` OneTimePurchaseInfo, required
      - `amount` number, required — Amount in USD cents (normalised for aggregation)
      - `completedAt` string, required — When the one-time purchase was completed
      - `currency` string, required — ISO 4217 currency code of the customer-facing charge
      - `productRef` string — Product reference
      - `reference` string, required — Purchase reference
    - `status` 'succeeded', required
    - `type` 'one-time', required
  - ProcessPaymentSucceededBare
    - `status` 'succeeded', required
  - ProcessPaymentProcessing
    - `status` 'processing', required
  - ProcessPaymentTimeout
    - `message` string — Detail message describing the timeout
    - `status` 'timeout', required
  - ProcessPaymentFailed
    - `status` 'failed', required
  - ProcessPaymentCancelled
    - `status` 'cancelled', required

## Other responses

- `400` — Payment not succeeded, invalid request, or forbidden

## Changes

- **2026-07-17** `bbc2ff2bc849` — 1 breaking, 3 warning
  - added `#/components/schemas/ProcessPaymentProcessing` to the response body `oneOf` list for the response status `200`
  - the `customerRef` request property's maxLength was set to `20`
  - the `planRef` request property's maxLength was set to `20`
  - the `productRef` request property's maxLength was set to `20`
- **2026-07-04** `a30b6aef464d` — 2 breaking, 2 warning, 2 info
  - added `#/components/schemas/ProcessPaymentSucceededRecurring, #/components/schemas/ProcessPaymentSucceededOneTime, #/components/schemas/ProcessPaymentSucceededBare, #/components/schemas/ProcessPaymentTimeout, #/components/schemas/ProcessPaymentFailed, #/components/schemas/ProcessPaymentCancelled` to the response body `oneOf` list for the response status `200`
  - the response's body type changed from `object` to no type for status `200`
  - removed the optional property `message` from the response with the `200` status
  - removed the optional property `status` from the response with the `200` status
  - …2 more
- **2026-04-26** `60c2cd1caf83` — 1 breaking
  - the response's body type changed from `object` to no type for status `400`
- **2026-04-10** `c6f97c4a5492` — 1 breaking
  - the response's body type changed from no type to `object` for status `400`

[Change history](https://skmtc.dev/solvapay/apis/solvapay-rest-api/changes/v1/sdk/payment-intents/:processorPaymentId/process/post.md)

---

[API](https://skmtc.dev/solvapay/apis/solvapay-rest-api.md) · [All operations](https://skmtc.dev/solvapay/apis/solvapay-rest-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/solvapay/solvapay-rest-api/revisions/d29ab7373802/schema)
