---
title: "Manually capture a payment session"
method: POST
path: "/payment-sessions/{paymentSessionId}/captures"
tags: ["Payments"]
---

# Manually capture a payment session

`POST /payment-sessions/{paymentSessionId}/captures`

Call this endpoint to capture funds you have previously authorized on a payment session.
You can only call this endpoint when the payment session is in status `Approved` and its `captureFlow` value is `Manual`.

## Path parameters

- `paymentSessionId` string, required

## Headers

- `Account` string

## Request body

- CapturePaymentRequestBody
  - `amount` integer, nullable — The amount to capture in minor digits. This must be <= to the amount already authorised on the payment. If you don't supply this then we will capture the full amount. **Note:** typically any remainder will be reversed/refunded to the customer on the same day, however not all acquirers support this and will instead return the remainder once the initial authorization has expired (e.g. after 7 days).
  - `captureType` 'Final' | 'NotFinal', nullable — The type of capture. Typically only used for payments that support multi-capture. Once `Final`, any remaining uncaptured amount will be marked as void within 7 days. **Note** that if your account or the chosen payment does not support multi-capture then this field will be ignored.
  - `platformFee` integer, nullable — The amount (if any) that will be taken and applied to the platform account. This cannot be greater than the `amount` to capture. Supply this if you also are supplying the "Account" header and want to take a fee from that account as part of this capture. If not supplied this defaults to the `platformFee` used when creating the payment session (if any) but still cannot be greater than the `amount` to capture here.
  - `splits` SplitPaymentRequestDetail, nullable — Use this field to facilitate split-payments. This will divide up the `amount` as specified in the forms of split-payments to each sub account once payment is successfully captured. The total of all items must be <= to the `amount` on the payment session. **Cannot** be used in conjunction with `platformFee` or `passThroughProcessingFee`. You must also **not** specify a sub account ID in the `Account` header. **Note** that any splits provided as part of a capture request will overwrite those that were given during authorization. Howver, if you are using multi-capture (i.e. `NotFinal`) then any subsequent splits will not be written to the PaymentSession. Instead you need to store the Id of the capture transaction and refer to that to track each capture.
    - `items` SplitPaymentRequestItem[]
      - `accountId` string, required — The ID of the sub account who will receive this split payment amount in the form of a `SplitPayment`.
      - `amount` integer, required
      - `description` string — A short description of this split that will be displayed to the account.
      - `fee` object
        - `amount` integer
      - `metadata` object, nullable — The metadata to attach to this part of the split. This will be used to populate `metadata` on the `SplitPayment` once it is subsequently created. You can have a maximum of 3 pieces of metadata.
  - `settings` PaymentTransactionSettingsRequest — Allows for customisation of various settings for this particular transaction.
    - `platform` PaymentPlatformSettingsRequest, nullable — Only applicable to payments under the platform model. Use this field to control various settings relating to payments done under as a platform.
      - `paymentFees` object, nullable — Use this field to control the Ryft account subject to paying a particular fee. Note that this is only permitted for platform payments, i.e. those using the platform fee or split payment transaction models.
        - `interchange` object, nullable — The ID of the Ryft account to deduct any interchange fees from. **Only** applicable for accounts on the `ICC++` pricing model. Specifying this when on `Blended` pricing is not permitted.
          - `bookTo` string — The ID of the Ryft account to book the fee to.
        - `network` object, nullable — The ID of the Ryft account to deduct any network (scheme) fees from. **Only** applicable for accounts on the `ICC++` pricing model. Specifying this when on `Blended` pricing is not permitted.
          - `bookTo` string — The ID of the Ryft account to book the fee to.
        - `miscPassThrough` object, nullable — The ID of the Ryft account to deduct any miscellanous pass-through fees from. **Only** applicable for accounts on the `ICC++` pricing model. Specifying this when on `Blended` pricing is not permitted.
          - `bookTo` string — The ID of the Ryft account to book the fee to.
        - `processor` object, nullable — The ID of the Ryft account to deduct the Ryft processing fee from. **Note** that: - when on `Blended` pricing, this refers to the full blended fee - when on `ICC++` pricing, this refers to the final `+`, i.e. Ryft's markup
          - `bookTo` string — The ID of the Ryft account to book the fee to.
        - `gateway` object, nullable — The ID of the Ryft account to deduct any gateway fees from.
          - `bookTo` string — The ID of the Ryft account to book the fee to.
        - `combined` object, nullable — The ID of the Ryft account to deduct all of the above fees from. Specifying this will take precedence over any of the more granular fields. **Note** that: - when on `Blended` pricing, this will book all of: `processor` & `gateway` fees - when on `ICC++` pricing, this will book all of: `interchange`, `network`, `processor` & `gateway` fees
          - `bookTo` string — The ID of the Ryft account to book the fee to.

## Response `202`

Capture request successfully accepted (Pending / Succeeded / Failed). If the status is `Pending` then the transaction will be completed asynchronously. Listen to the `PaymentSession.captured` event on your webhook to be notified of the outcome.

- PaymentTransaction
  - `id` string — The unique identifier for the transaction
  - `paymentSessionId` string — The unique paymentSessionId that this transaction relates to
  - `amount` integer — The amount of the transaction in minor digits
  - `currency` string — The ISO currency code
  - `type` 'Authorization' | 'Void' | 'Capture' | 'Refund' | 'Chargeback' | 'ChargebackReversal'
  - `status` 'Pending' | 'Failed' | 'Succeeded'
  - `refundedAmount` integer, nullable — The amount of the transaction that has been refunded, in minor digits.
  - `platformFee` integer, nullable — Only supplied for 'capture' transactions. The amount of the capture that will be taken and applied to the platform account, in minor digits.
  - `platformFeeRefundedAmount` integer, nullable — Only supplied for 'capture' transactions. The amount of the capture that has been refunded to the platform account, in minor digits.
  - `processingFee` integer, nullable — This field is now deprecated. Please use the /balance-transactions endpoint to see the fees paid on these transactions. The processing fee that was taken for this transaction.
  - `reason` string, nullable — An optional reason to describe this transaction. Typically used for refunds whereby the reason for the refund is recorded.
  - `captureType` 'Final' | 'NotFinal', nullable — Only supplied for 'capture' transactions. The type of capture. Typically only used for payments that support multi-capture. Once `Final`, any remaining uncaptured amount will be marked as void within 7 days.
  - `paymentMethod` PaymentSessionPaymentMethod, nullable
    - `type` 'Card'
    - `tokenizedDetails` PaymentSessionPaymentMethodTokenizedDetails, nullable — The details of any tokenized payment method used
      - `id` string — The Id of the tokenized payment method
      - `stored` boolean — Flag to indicate whether or not the tokenized payment method was stored (against the customer)
    - `card` object, nullable — Details of the card used
      - `scheme` 'Visa' | 'Mastercard' | 'Amex'
      - `last4` string — The last 4 digits of the card used
      - `binDetails` CardBinDetails, nullable — The specific details obtained from the BIN/IIN of the card. Note that this is not always available.
        - `issuer` string, nullable — Name of the card issuer
        - `issuerCountry` string, nullable — The two-character ISO 3166 country code of the card issuer
        - `fundingType` 'Debit' | 'Credit' | 'Prepaid' | 'DeferredDebit' | 'Charge', nullable — Refers to how money for purchases comes to the card.
        - `productType` 'Consumer' | 'Corporate', nullable — The category the issuer assigns to the particular card
    - `wallet` object, nullable — Details of the wallet used (Google Pay / Apple Pay)
      - `type` 'GooglePay' | 'ApplePay'
    - `billingAddress` CustomerAddress, nullable
      - `firstName` string — The first name of the customer
      - `lastName` string — The last name of the customer
      - `lineOne` string — First line of the address
      - `lineTwo` string — Second line of the address
      - `city` string — The address city/town
      - `country` string, required — The two-character ISO country code
      - `postalCode` string, required — The postal code/zip of the address
      - `region` string, nullable — The state/county/province/region Required if the address is in the US/Canada and must be a 2-character ISO state/province code
    - `checks` PaymentMethodChecks, nullable
      - `avsResponseCode` string, nullable — The response from Address Verification Service (AVS) that determines the match or partial match of the customer's billing address. Possible values: - A - Partial Match (street address matches, postal/zip code does not match) - B - Partial Match (street address matches, postal/zip code not verified) - C - No Match (street address and postal/zip code not verified) - D - Full Match (street address and postal/zip code match) - F - Full Match (street address and postal/zip code match) - G - Not Supported (address information not verified) - I - No Match (address information not verified) - M - Full Match (street address and postal/zip code match) - N - No Match (neither street address not postal/zip code match) - P - Partial Match (postal/zip code matches, street address not verified) - R - System Unavailable (unable to perform verification) - S - Not Supported (AVS currently not supported by issuer) - U - System Unavailable (address information not verified due to no data from issuer) - W - Partial Match (postal/zip code matches, street address does not match) - X - Full Match (street address and postal/zip code match) - Y - Full Match (street address and postal/zip code match) - Z - Partial Match (postal/zip code matches, street address does not match)
      - `cvvResponseCode` string, nullable — The response from the check on the Card Verification Value (CVV/CVV2/CVC) Possible values: - M - Match (Visa and MC) - Y - Match (Amex) - N - No Match - P - Not Processed - S - Should be on card - U - Issuer does not participate
  - `splitPaymentDetail` SplitPaymentDetail, nullable
    - `items` SplitPaymentItem[]
      - `id` string — The unique identifier for this split payment item. Note that this will be the id of the `SplitPayment` created once payment is captured.
      - `accountId` string — The ID of the sub account who will receive this split payment amount in the form of a `SplitPayment`. **Must** be unique, i.e. you cannot have > 1 splits to the same account in your request.
      - `amount` integer
      - `fee` object
        - `amount` integer
      - `description` string — A short description of this split that will be displayed to the account.
      - `metadata` object, nullable — The metadata to attach to this part of the split. This will be used to populate `metadata` on the `SplitPayment` once it is subsequently created.
  - `processingDetail` PaymentTransactionProcessingDetail, nullable
    - `issuerResponseCode` string, nullable — The response code returned by the issuer.
    - `authorizationCode` string, nullable — The authorization code returned by the issuer.
    - `acquirerReferenceNumber` string, nullable — The Acquirer Reference Number (ARN) for the transaction.
  - `inPersonDetail` InPersonPaymentDetail, nullable
    - `terminalDetail` InPersonPaymentTerminalDetail
      - `id` string — The ID of the in-person terminal the payment was processed through
  - `createdTimestamp` integer — The epoch timestamp (seconds) when the transaction was initiated
  - `lastUpdatedTimestamp` integer — The epoch timestamp (seconds) when the transaction was last updated

## Other responses

- `400` — One or more inputs are invalid
- `500` — An unexpected error occurred when executing this request

---

[API](https://skmtc.net/ryftpay/apis/ryft-payment-api.md) · [All operations](https://skmtc.net/ryftpay/apis/ryft-payment-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/ryftpay/ryft-payment-api/versions/a042f64d4305/schema)
