Skip to content

Ryft Payment API (1.1.0)

Ryft provides a collection of APIs that you can use to accept and process payments + marketplace functionality (payouts). We have a testing environment called sandbox, which you can sign up for to test API calls without affecting live data.

Authentication

When you sign up for an account, you are given a secret and public API key pair. You authenticate with our API by providing the appropriate key in the request Authorization header. Never share your secret keys. Keep them guarded and secure.

Public API key

Public keys should only be used in JavaScript or native applications. This key is solely used to identify the partner making requests. Supply this key in the Authorization header.

Secret API key

Your secret key should always be supplied in the Authorization header. Make sure this key is stored securely on your backend and never surfaced client-side.

Rate Limiting

We use rate limiting on a per-user basis to protect our APIs against abuse. Our Sandbox environment is limited to 5 requests per second. Our production environment is limited to 50 requests per second.

We also allow a brief burst above this limit to accommodate a sudden increase in traffic.

If you exceed the above quota then the API will respond with a 429 status code and you will need to retry the API call (we recommend implementing a retry policy with an exponential back-off).

Download OpenAPI description
Languages
Servers
Sandbox environmment
https://sandbox-api.ryftpay.com/v1/
Production environment
https://api.ryftpay.com/v1/

Payments

Process payments with Ryft: authorizations, voids, captures, refunds etc.

Operations

Create a new payment session

Request

The start of the payment flow. Call this request once the customer has proceeded to checkout. Payment Sessions will auto-expire after several days if you don't take payment via the attempt-payment endpoint.

Security
secretApiKeyAuth
Headers
Accountstring^ac_[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a...

The linked accountId (use this when operating on payments related to a linked account)

Examples:
ac_3fe8398f-8cdb-43a3-9be2-806c4f84c327
Bodyapplication/json
amountinteger(int32)[ 30 .. 2000000 ]required

The amount of the sale/purchase in minor digits

Example: 500
currencystringrequired

The ISO currency code

Example: "GBP"
customerEmailstring or null

The email address of the customer This is required for a payment to be taken and must be provided either here or when attempting payment. We recommend providing the email here when payment is being taken via your checkout page or the user is logged in, otherwise request it when attempting payment. This can be omitted if you supply a customerId instead, in which case we will use the email stored against the customer. If you don't supply a 'customerId' we will implicitly create a customer using this email

Example: "example@mail.com"
customerDetailsobject
platformFeeinteger or null(int32)[ 0 .. 2000000 ]

The amount (if any) that will be taken and applied to the platform account. This cannot be greater than the "amount" property Supply this if you also are supplying the "Account" header and want to take a fee from that account

Example: 50
splitsobject or null(SplitPaymentRequestDetail)

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.

captureFlowstring or null

By default we will automatically capture payment once the customer authorizes the payment. If you want to manually capture a payment yourself then set this to Manual. Typically this is recommended if you wish to authorize a particular amount from a customer for up to 7 days and then capture the funds once you can fulfil the order.

Enum"Automatic""Manual"
Example: "Automatic"
paymentTypestring or null

The type of the payment. Use this to control whether the payment is classified as a Customer-Initiated Transaction (CIT) or Merchant-Initiated Transaction (MIT). (MIT) - customer is not actively participating in the transaction and has instead given consent for you to charge their stored card off session. (CIT) - customer is actively in your checkout flow and is on hand to react to and complete any supplementary steps to complete the payment (e.g. 3DS). CIT values:

  • Standard - A regular one-off e-commerce payment, made by a customer on your website/app

MIT values:

  • Unscheduled (subsequent) - Uses an already stored card on file for a fixed or variable amount that does not occur on a scheduled or regular basis such as recurring payments/subcriptions.

Recurring or Unscheduled are classified as CIT if it is the initial payment in the series and MIT if it is a subsequent (follow up) payment in the series.

MOTO has now been deprecated in favour of the entryMode (MOTO) field.

Default "Standard"
Enum"Standard""Unscheduled""MOTO""Recurring"
Example: "Standard"
entryModestring or null(EntryModeRequest)

Indicates how the payment method details were (or will be) obtained by the merchant for this payment.

  • Online - when the payment method is collected with the customer present (e.g. an e-commerce payment within a browser)
  • MOTO - when the payment method is collected via mail order (not e-email) or over the phone

MOTO is subject to additional approval, contact us if you require this functionality.

Enum"Online""MOTO"
previousPaymentobject or null

For recurring/unscheduled payments - details of the initial payment in the series. Required for:

  • partners who want to externally schedule Recurring payments.
  • partners who process Unscheduled payments
rebillingDetail(RebillingDetailRequest (object or null))
(RebillingDetailRequest (object or null))
verifyAccountboolean or null

Set this field to true and amount: 0 to perform an account verification payment (no financial impact on the customer). In this flow, you should have the customer complete the payment on the client. We recommend always using our iOS/Android/Web SDKs to handle any required actions (e.g. 3DS). Note that:

  • CaptureFlow will default to Manual, do not pass Automatic otherwise the request will be rejected.
  • platformFee cannot be provided in your request - sub accounts cannot be charged for these payments.
  • splits cannot be provided in your request - there is no amount to split.
Example: null
shippingDetails(ShippingDetailsRequest (object or null))
(ShippingDetailsRequest (object or null))
orderDetails(OrderDetails (object or null))
(OrderDetails (object or null))
metadataobject or null

Use this parameter to attach key-value data to the payment. These will be sent with any associated payment events on your webhooks. You can have a maximum of 10 pieces of metadata.

Keys must be between 1 and 30 characters in length.

Values must be between 1 and 250 characters in length.

Example: {"orderId":"1","customerId":"123"}
statementDescriptorobject or null
Example: {"descriptor":"Ryft Ltd","city":"London"}
returnUrlstring or null

URL to send the customer back to after a redirection (e.g. 3DS). This field is optional and if not specified we will use the URL setup against your account. For Web The URL should use protocol https:// We recommend you include your own query parameters on this URL so you can identify the transaction that the payment relates too, e.g. ?orderId=123. We will append the payment session id onto the URL under param ps.

Example: "https://ryftpay.com/checkout?orderId=123"
attemptPaymentobject or null(CreatePaymentSessionAttemptPaymentRequest)

Use to immediately attempt payment at the time of creating the PaymentSession.

paymentSettingsobject or null(PaymentSettingsRequest)

Allows for customisation of various payment settings.

passThroughProcessingFeeboolean or nullDeprecated

Use this flag to control which account pays our processing fee. Use of this feature is disabled by default, please contact our support team if you wish to use it.

This field is no longer supported. Please refer to the platformSettings.paymentFees field instead.

Example: false
curl -i -X POST \
  https://sandbox-api.ryftpay.com/v1/payment-sessions \
  -H 'Authorization: YOUR_API_KEY_HERE' \
  -H 'Content-Type: application/json' \
  -d '{
    "amount": 150,
    "currency": "GBP",
    "customerEmail": "test@ryftpay.com"
  }'

Responses

payment session successfully created

Bodyapplication/json
idstring^ps_[0-7][0-9A-HJKMNP-TV-Z]{25}

The unique identifier for the payment

Example: "ps_01FCTS1XMKH9FF43CAFA4CXT3P"
amountinteger(int32)>= 30

The amount of the sale/purchase in minor digits

Example: 500
currencystring

The ISO currency code

Example: "GBP"
paymentTypestring or null

The type of the payment. Use this to control whether the payment is classified as a Customer-Initiated Transaction (CIT) or Merchant-Initiated Transaction (MIT). (MIT) - customer is not actively participating in the transaction and has instead given consent for you to charge their stored card off session. (CIT) - customer is actively in your checkout flow and is on hand to react to and complete any supplementary steps to complete the payment (e.g. 3DS). CIT values:

  • Standard - A regular one-off e-commerce payment, made by a customer on your website/app

MIT values:

  • Unscheduled - Uses an already stored card on file for a fixed or variable amount that does not occur on a scheduled or regular basis such as recurring payments/subcriptions.

Recurring is classified as CIT if it is the initial payment in the series and MIT if it is a subsequent (follow up) payment in the series. MOTO has now been deprecated in favour of the entryMode (MOTO) field.

Default "Standard"
Enum"Standard""Unscheduled""MOTO""Recurring"
Example: "Standard"
entryModestring or null(EntryMode)

Indicates how the payment method details were (or will be) obtained by the merchant for this payment.

  • Online - when the payment method is collected with the customer present (e.g. an e-commerce payment within a browser)
  • MOTO - when the payment method is collected via mail order (not e-email) or over the phone
  • InPerson - when the payment is collected in-person over a physical medium (such as card terminal)

MOTO is subject to additional approval, contact us if you require this functionality.

Enum"Online""MOTO""InPerson"
Example: "Online"
customerEmailstring or null

The email address of the customer

Example: "example@mail.com"
customerDetailsobject or null

The details of the customer that this payment belongs to

credentialOnFileUsage(CredentialOnFileUsage (object or null))
(CredentialOnFileUsage (object or null))
previousPaymentobject or null

For recurring/unscheduled payments - details of the initial payment in the series. Required for:

  • partners who want to externally schedule recurring payments.
  • partners who process Unscheduled payments
rebillingDetail(RebillingDetail (object or null))
(RebillingDetail (object or null))
enabledPaymentMethodsArray of strings

List of payment method types that can be used to complete payment for this PaymentSession. Card is the default and will allow all card schemes configured on your account (Visa, Mastercard etc.). Apple Pay & Google Pay are classified as Card types and will be displayed provided you have confogured them properly.

Default ["Card"]
Items Value"Card"
paymentMethodobject or null(PaymentSessionPaymentMethod)
platformFeeinteger or null(int32)>= 0

The amount (if any) that will be taken and applied to the platform account. This cannot be greater than the "amount" property

Example: 50
splitPaymentDetailobject or null(SplitPaymentDetail)
statusstring
Enum"PendingPayment""PendingAction""Processing""Approved""Captured""Voided"
Example: "PendingPayment"
metadataobject or null

use this parameter to attach key-value data to the payment. These will be sent with any associated payment events on your webhook.

Example: {"orderNumber":"123"}
clientSecretstring or null

The client secret is used to complete a payment from your frontend. Do NOT store/log/embed anywhere and ensure it is only surfaced on pages served over TSL

Example: "ps_01FCTS1XMKH9FF43CAFA4CXT3P_secret_b83f2653-06d7-44a9-a548-5825e8186004"
lastErrorstring or null(LastPaymentError)

The most recent error when attempting to Pay.

Note that we may add further values without notice.

Enum"insufficient_funds""declined_do_not_honour""invalid_card_number""cvv2_failure""restricted_card""blacklisted_card""blacklisted_bin""blacklisted_country""blacklisted_ip""risk_declined"
Example: "insufficient_funds"
refundedAmountinteger(int32)>= 0

The total amount refunded thus far against the payment-session. Refunds can only be actioned once the payment-session is Captured. You can only have one refund in-flight at a time.

Example: 120
statementDescriptorobject(StatementDescriptor)
requiredActionobject or null(RequiredAction)

The action to take (if any) in order to authorise the payment. This will be non-null if the customer's bank challenge the payment (i.e. 3DS)

Example: {"type":"Redirect","url":"https://ryftpay.com/3ds-auth"}
returnUrlstring

URL to send the customer back to after a redirection (e.g. 3DS). We will always append the paymentSessionId under query param ps.

Example: "https://ryftpay.com/checkout?orderId=123&ps=ps_01FCTS1XMKH9FF43CAFA4CXT3P"
authorizationTypestring or null

Specifies the type of authorization. PreAuth - Used to authorize a non-final amount, where you may want to later capture a different amount or adjust the initial authorized amount. FinalAuth - When the amount authorized is final and identical to the amount later captured. By default we will always use FinalAuth. Note that PreAuth is restricted to particular MCC values for Visa, contact us to verify and enable PreAuth if you believe your business is eligible.

Enum"PreAuth""FinalAuth"
Example: "FinalAuth"
captureFlowstring or null

Whether the payment is automatically/manually captured. Defaults to Automatic.

Enum"Automatic""Manual"
Example: "Automatic"
verifyAccountboolean or null

Whether the PaymentSession was used to facilitate an account verification check.

Example: null
shippingDetails(ShippingDetails (object or null))
(ShippingDetails (object or null))
orderDetailsobject or null(OrderDetails)

The details of the order

paymentSettingsobject or null(PaymentSessionPaymentSettings)

Allows for customisation of various payment settings.

createdTimestampinteger(int64)

The epoch timestamp (seconds) when the payment was created

Example: 1470989538
lastUpdatedTimestampinteger(int64)

The epoch timestamp (seconds) when the payment was last updated

Example: 1470989538
Response
application/json
{ "id": "ps_01JW95YEAEFGVVGHXT04D0C8B8", "amount": 150, "currency": "GBP", "paymentType": "Standard", "entryMode": "Online", "customerEmail": "test@ryftpay.com", "enabledPaymentMethods": [ "Card" ], "returnUrl": "https://ryftpay.com", "status": "PendingPayment", "refundedAmount": 0, "clientSecret": "ps_01JW95YEAEFGVVGHXT04D0C8B8_secret_0e24c997-7076-4b01-bb22-729864329c2c", "statementDescriptor": { "descriptor": "Ryft Ltd", "city": "Manchester" }, "authorizationType": "FinalAuth", "captureFlow": "Automatic", "createdTimestamp": 1748359919, "lastUpdatedTimestamp": 1748359919 }

Retrieve payment sessions between timestamps

Request

This is used to fetch payment sessions within a timestamp range, paginated

Security
secretApiKeyAuth
Query
startTimestampinteger(int64)

The timestamp when to return payment sessions from (inclusive), it must be before the endTimestamp. If not provided it will default to midnight on the current date (UTC).

Example: startTimestamp=1641859200
endTimestampinteger(int64)

The timestamp when to return payment sessions up to (inclusive), it must be after the startTimestamp. If not provided it will default to the current time (UTC).

Example: endTimestamp=1641945599
ascendingboolean(boolean)

Control the order (newest or oldest) in which the payment sessions are returned. false will arrange the results with newest first, whereas true shows oldest first. The default is false.

Example: ascending=false
limitinteger(int32)

Control how many items are return in a given page The max limit we allow is 50. The default is 10.

Example: limit=10
startsAfterstring

A token to identify the payment session to start querying after. This is most commonly used to get the next page of results after a previous response did not return all payment sessions, due to the imposed limit. The value of the paginationToken field from that response should be supplied here, to retrieve the next page of results for that timestamp range.

Example: startsAfter=ps_01FCTS1XMKH9FF43CAFA4CXT3P_1641912473
Headers
Accountstring^ac_[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a...

The linked accountId (use this when operating on payments related to a linked account)

Example: ac_3fe8398f-8cdb-43a3-9be2-806c4f84c327
curl -i -X GET \
  https://sandbox-api.ryftpay.com/v1/payment-sessions \
  -H 'Authorization: YOUR_API_KEY_HERE'

Responses

Successfully retrieved the payment sessions

Bodyapplication/json
itemsArray of objects(PaymentSession)
paginationTokenstring or null

A token to use for getting the next page of results - send the same request with this value in the 'paginationToken' query parameter. This field is null when there are no further items to return

Example: "ps_01FCTS1XMKH9FF43CAFA4CXT3P_1641912473"
Response
application/json
{ "items": [ { … } ], "paginationToken": "ps_01FCTS1XMKH9FF43CAFA4CXT3P_1641912473" }

Retrieve a payment session by Id

Request

This is used to fetch a payment session by its paymentSessionId

Security
secretApiKeyAuth
Path
paymentSessionIdstring^ps_[0-7][0-9A-HJKMNP-TV-Z]{25}required

Payment Id to retrieve

Example: ps_01FCTS1XMKH9FF43CAFA4CXT3P
Headers
Accountstring^ac_[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a...

The linked accountId (use this when operating on payments related to a linked account)

Example: ac_3fe8398f-8cdb-43a3-9be2-806c4f84c327
curl -i -X GET \
  https://sandbox-api.ryftpay.com/v1/payment-sessions/ps_01FCTS1XMKH9FF43CAFA4CXT3P \
  -H 'Authorization: YOUR_API_KEY_HERE'

Responses

Successfully retrieved the given paymentSessionId

Bodyapplication/json
idstring^ps_[0-7][0-9A-HJKMNP-TV-Z]{25}

The unique identifier for the payment

Example: "ps_01FCTS1XMKH9FF43CAFA4CXT3P"
amountinteger(int32)>= 30

The amount of the sale/purchase in minor digits

Example: 500
currencystring

The ISO currency code

Example: "GBP"
paymentTypestring or null

The type of the payment. Use this to control whether the payment is classified as a Customer-Initiated Transaction (CIT) or Merchant-Initiated Transaction (MIT). (MIT) - customer is not actively participating in the transaction and has instead given consent for you to charge their stored card off session. (CIT) - customer is actively in your checkout flow and is on hand to react to and complete any supplementary steps to complete the payment (e.g. 3DS). CIT values:

  • Standard - A regular one-off e-commerce payment, made by a customer on your website/app

MIT values:

  • Unscheduled - Uses an already stored card on file for a fixed or variable amount that does not occur on a scheduled or regular basis such as recurring payments/subcriptions.

Recurring is classified as CIT if it is the initial payment in the series and MIT if it is a subsequent (follow up) payment in the series. MOTO has now been deprecated in favour of the entryMode (MOTO) field.

Default "Standard"
Enum"Standard""Unscheduled""MOTO""Recurring"
Example: "Standard"
entryModestring or null(EntryMode)

Indicates how the payment method details were (or will be) obtained by the merchant for this payment.

  • Online - when the payment method is collected with the customer present (e.g. an e-commerce payment within a browser)
  • MOTO - when the payment method is collected via mail order (not e-email) or over the phone
  • InPerson - when the payment is collected in-person over a physical medium (such as card terminal)

MOTO is subject to additional approval, contact us if you require this functionality.

Enum"Online""MOTO""InPerson"
Example: "Online"
customerEmailstring or null

The email address of the customer

Example: "example@mail.com"
customerDetailsobject or null

The details of the customer that this payment belongs to

credentialOnFileUsage(CredentialOnFileUsage (object or null))
(CredentialOnFileUsage (object or null))
previousPaymentobject or null

For recurring/unscheduled payments - details of the initial payment in the series. Required for:

  • partners who want to externally schedule recurring payments.
  • partners who process Unscheduled payments
rebillingDetail(RebillingDetail (object or null))
(RebillingDetail (object or null))
enabledPaymentMethodsArray of strings

List of payment method types that can be used to complete payment for this PaymentSession. Card is the default and will allow all card schemes configured on your account (Visa, Mastercard etc.). Apple Pay & Google Pay are classified as Card types and will be displayed provided you have confogured them properly.

Default ["Card"]
Items Value"Card"
paymentMethodobject or null(PaymentSessionPaymentMethod)
platformFeeinteger or null(int32)>= 0

The amount (if any) that will be taken and applied to the platform account. This cannot be greater than the "amount" property

Example: 50
splitPaymentDetailobject or null(SplitPaymentDetail)
statusstring
Enum"PendingPayment""PendingAction""Processing""Approved""Captured""Voided"
Example: "PendingPayment"
metadataobject or null

use this parameter to attach key-value data to the payment. These will be sent with any associated payment events on your webhook.

Example: {"orderNumber":"123"}
clientSecretstring or null

The client secret is used to complete a payment from your frontend. Do NOT store/log/embed anywhere and ensure it is only surfaced on pages served over TSL

Example: "ps_01FCTS1XMKH9FF43CAFA4CXT3P_secret_b83f2653-06d7-44a9-a548-5825e8186004"
lastErrorstring or null(LastPaymentError)

The most recent error when attempting to Pay.

Note that we may add further values without notice.

Enum"insufficient_funds""declined_do_not_honour""invalid_card_number""cvv2_failure""restricted_card""blacklisted_card""blacklisted_bin""blacklisted_country""blacklisted_ip""risk_declined"
Example: "insufficient_funds"
refundedAmountinteger(int32)>= 0

The total amount refunded thus far against the payment-session. Refunds can only be actioned once the payment-session is Captured. You can only have one refund in-flight at a time.

Example: 120
statementDescriptorobject(StatementDescriptor)
requiredActionobject or null(RequiredAction)

The action to take (if any) in order to authorise the payment. This will be non-null if the customer's bank challenge the payment (i.e. 3DS)

Example: {"type":"Redirect","url":"https://ryftpay.com/3ds-auth"}
returnUrlstring

URL to send the customer back to after a redirection (e.g. 3DS). We will always append the paymentSessionId under query param ps.

Example: "https://ryftpay.com/checkout?orderId=123&ps=ps_01FCTS1XMKH9FF43CAFA4CXT3P"
authorizationTypestring or null

Specifies the type of authorization. PreAuth - Used to authorize a non-final amount, where you may want to later capture a different amount or adjust the initial authorized amount. FinalAuth - When the amount authorized is final and identical to the amount later captured. By default we will always use FinalAuth. Note that PreAuth is restricted to particular MCC values for Visa, contact us to verify and enable PreAuth if you believe your business is eligible.

Enum"PreAuth""FinalAuth"
Example: "FinalAuth"
captureFlowstring or null

Whether the payment is automatically/manually captured. Defaults to Automatic.

Enum"Automatic""Manual"
Example: "Automatic"
verifyAccountboolean or null

Whether the PaymentSession was used to facilitate an account verification check.

Example: null
shippingDetails(ShippingDetails (object or null))
(ShippingDetails (object or null))
orderDetailsobject or null(OrderDetails)

The details of the order

paymentSettingsobject or null(PaymentSessionPaymentSettings)

Allows for customisation of various payment settings.

createdTimestampinteger(int64)

The epoch timestamp (seconds) when the payment was created

Example: 1470989538
lastUpdatedTimestampinteger(int64)

The epoch timestamp (seconds) when the payment was last updated

Example: 1470989538
Response
application/json
{ "id": "ps_01FCTS1XMKH9FF43CAFA4CXT3P", "amount": 500, "currency": "GBP", "paymentType": "Standard", "entryMode": "Online", "customerEmail": "example@mail.com", "customerDetails": { "id": "cus_01G0EYVFR02KBBVE2YWQ8AKMGJ", "firstName": "Fred", "lastName": "Jones", "homePhoneNumber": "+447900000000", "mobilePhoneNumber": "+447900000000", "metadata": { … } }, "credentialOnFileUsage": { "initiator": "Customer", "sequence": "Initial" }, "previousPayment": { "id": "ps_01G0EYVFR02KBBVE2YWQ8AKMGJ" }, "rebillingDetail": { "amountVariance": "Fixed", "numberOfDaysBetweenPayments": 30, "totalNumberOfPayments": 12, "currentPaymentNumber": 1, "expiry": 1776988800 }, "enabledPaymentMethods": [ "Card" ], "paymentMethod": { "type": "Card", "tokenizedDetails": { … }, "card": { … }, "wallet": { … }, "billingAddress": { … }, "checks": { … } }, "platformFee": 50, "splitPaymentDetail": { "items": [ … ] }, "status": "PendingPayment", "metadata": { "orderNumber": "123" }, "clientSecret": "ps_01FCTS1XMKH9FF43CAFA4CXT3P_secret_b83f2653-06d7-44a9-a548-5825e8186004", "lastError": "insufficient_funds", "refundedAmount": 120, "statementDescriptor": { "descriptor": "Ryft Ltd", "city": "London" }, "requiredAction": { "type": "Redirect", "url": "https://ryftpay.com/3ds-auth" }, "returnUrl": "https://ryftpay.com/checkout?orderId=123&ps=ps_01FCTS1XMKH9FF43CAFA4CXT3P", "authorizationType": "FinalAuth", "captureFlow": "Automatic", "verifyAccount": null, "shippingDetails": { "address": { … } }, "orderDetails": { "reference": "fffd1682-f82b-43e3-a89b-48d9ad7d55d9", "items": [ … ] }, "paymentSettings": { "paymentMethodOptions": { … }, "platform": { … } }, "createdTimestamp": 1470989538, "lastUpdatedTimestamp": 1470989538 }

Update a payment session by Id

Request

This is used to update a payment session by its Id. Note that this can only be used prior to a successful payment. Once payment has been approved, you cannot update a PaymentSession.

Security
secretApiKeyAuth
Path
paymentSessionIdstring^ps_[0-7][0-9A-HJKMNP-TV-Z]{25}required

Payment Id to update

Example: ps_01FCTS1XMKH9FF43CAFA4CXT3P
Headers
Accountstring^ac_[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a...

The linked accountId (use this when operating on payments related to a linked account)

Example: ac_3fe8398f-8cdb-43a3-9be2-806c4f84c327
Bodyapplication/jsonrequired

A request to update a payment session

amountinteger(int32)[ 30 .. 2000000 ]

The amount of the sale/purchase in minor digits

Example: 500
customerEmailstring

The email address of the customer

Example: "example@mail.com"
platformFeeinteger or null(int32)[ 0 .. 2000000 ]

The amount (if any) that will be taken and applied to the platform account. This cannot be greater than the "amount" property

Example: 50
splitsobject or null(SplitPaymentRequestDetail)

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.

metadataobject or null

Use this parameter to attach key-value data to the payment. These will be sent with any associated payment events on your webhook. You can have a maximum of 10 pieces of metadata.

Keys must be between 1 and 30 characters in length.

Values must be between 1 and 250 characters in length.

Example: {"orderId":"2"}
captureFlowstring or null

By default we will automatically capture payment once the customer authorizes the payment. If you want to manually capture a payment yourself then set this to Manual. Typically this is recommended if you wish to authorize a particular amount from a customer for up to 7 days and then capture the funds once you can fulfil the order.

Enum"Automatic""Manual"
Example: "Automatic"
shippingDetails(ShippingDetails (object or null))
(ShippingDetails (object or null))
orderDetails(OrderDetails (object or null))
(OrderDetails (object or null))
paymentSettingsobject(PaymentSettingsUpdateRequest)

Allows for customisation of various payment settings.

curl -i -X PATCH \
  https://sandbox-api.ryftpay.com/v1/payment-sessions/ps_01FCTS1XMKH9FF43CAFA4CXT3P \
  -H 'Authorization: YOUR_API_KEY_HERE' \
  -H 'Content-Type: application/json' \
  -d '{
    "amount": 500,
    "customerEmail": "example@mail.com",
    "platformFee": 50,
    "splits": {
      "items": [
        {
          "accountId": "ac_b83f2653-06d7-44a9-a548-5825e8186004",
          "amount": 50,
          "description": "2 x The Selfish Gene",
          "fee": {
            "amount": 50
          },
          "metadata": {
            "productId": "123",
            "productTitle": "The Selfish Gene"
          }
        }
      ]
    },
    "metadata": {
      "orderId": "2"
    },
    "captureFlow": "Automatic",
    "shippingDetails": {
      "address": {
        "firstName": "Fox",
        "lastName": "Mulder",
        "lineOne": "Stonehenge",
        "postalCode": "SP4 7DE",
        "city": "Salisbury",
        "country": "GB"
      }
    },
    "orderDetails": {
      "reference": "fffd1682-f82b-43e3-a89b-48d9ad7d55d9",
      "items": [
        {
          "reference": "product123",
          "name": "The Big Gundown (Blu-ray)",
          "quantity": 2,
          "unitPrice": 250,
          "taxAmount": 50,
          "totalAmount": 540,
          "discountAmount": 10,
          "productUrl": null,
          "imageUrl": null
        }
      ]
    },
    "paymentSettings": {
      "paymentMethodOptions": {
        "disabled": [
          "Amex"
        ]
      }
    }
  }'

Responses

Successfully retrieved the given paymentSessionId

Bodyapplication/json
idstring^ps_[0-7][0-9A-HJKMNP-TV-Z]{25}

The unique identifier for the payment

Example: "ps_01FCTS1XMKH9FF43CAFA4CXT3P"
amountinteger(int32)>= 30

The amount of the sale/purchase in minor digits

Example: 500
currencystring

The ISO currency code

Example: "GBP"
paymentTypestring or null

The type of the payment. Use this to control whether the payment is classified as a Customer-Initiated Transaction (CIT) or Merchant-Initiated Transaction (MIT). (MIT) - customer is not actively participating in the transaction and has instead given consent for you to charge their stored card off session. (CIT) - customer is actively in your checkout flow and is on hand to react to and complete any supplementary steps to complete the payment (e.g. 3DS). CIT values:

  • Standard - A regular one-off e-commerce payment, made by a customer on your website/app

MIT values:

  • Unscheduled - Uses an already stored card on file for a fixed or variable amount that does not occur on a scheduled or regular basis such as recurring payments/subcriptions.

Recurring is classified as CIT if it is the initial payment in the series and MIT if it is a subsequent (follow up) payment in the series. MOTO has now been deprecated in favour of the entryMode (MOTO) field.

Default "Standard"
Enum"Standard""Unscheduled""MOTO""Recurring"
Example: "Standard"
entryModestring or null(EntryMode)

Indicates how the payment method details were (or will be) obtained by the merchant for this payment.

  • Online - when the payment method is collected with the customer present (e.g. an e-commerce payment within a browser)
  • MOTO - when the payment method is collected via mail order (not e-email) or over the phone
  • InPerson - when the payment is collected in-person over a physical medium (such as card terminal)

MOTO is subject to additional approval, contact us if you require this functionality.

Enum"Online""MOTO""InPerson"
Example: "Online"
customerEmailstring or null

The email address of the customer

Example: "example@mail.com"
customerDetailsobject or null

The details of the customer that this payment belongs to

credentialOnFileUsage(CredentialOnFileUsage (object or null))
(CredentialOnFileUsage (object or null))
previousPaymentobject or null

For recurring/unscheduled payments - details of the initial payment in the series. Required for:

  • partners who want to externally schedule recurring payments.
  • partners who process Unscheduled payments
rebillingDetail(RebillingDetail (object or null))
(RebillingDetail (object or null))
enabledPaymentMethodsArray of strings

List of payment method types that can be used to complete payment for this PaymentSession. Card is the default and will allow all card schemes configured on your account (Visa, Mastercard etc.). Apple Pay & Google Pay are classified as Card types and will be displayed provided you have confogured them properly.

Default ["Card"]
Items Value"Card"
paymentMethodobject or null(PaymentSessionPaymentMethod)
platformFeeinteger or null(int32)>= 0

The amount (if any) that will be taken and applied to the platform account. This cannot be greater than the "amount" property

Example: 50
splitPaymentDetailobject or null(SplitPaymentDetail)
statusstring
Enum"PendingPayment""PendingAction""Processing""Approved""Captured""Voided"
Example: "PendingPayment"
metadataobject or null

use this parameter to attach key-value data to the payment. These will be sent with any associated payment events on your webhook.

Example: {"orderNumber":"123"}
clientSecretstring or null

The client secret is used to complete a payment from your frontend. Do NOT store/log/embed anywhere and ensure it is only surfaced on pages served over TSL

Example: "ps_01FCTS1XMKH9FF43CAFA4CXT3P_secret_b83f2653-06d7-44a9-a548-5825e8186004"
lastErrorstring or null(LastPaymentError)

The most recent error when attempting to Pay.

Note that we may add further values without notice.

Enum"insufficient_funds""declined_do_not_honour""invalid_card_number""cvv2_failure""restricted_card""blacklisted_card""blacklisted_bin""blacklisted_country""blacklisted_ip""risk_declined"
Example: "insufficient_funds"
refundedAmountinteger(int32)>= 0

The total amount refunded thus far against the payment-session. Refunds can only be actioned once the payment-session is Captured. You can only have one refund in-flight at a time.

Example: 120
statementDescriptorobject(StatementDescriptor)
requiredActionobject or null(RequiredAction)

The action to take (if any) in order to authorise the payment. This will be non-null if the customer's bank challenge the payment (i.e. 3DS)

Example: {"type":"Redirect","url":"https://ryftpay.com/3ds-auth"}
returnUrlstring

URL to send the customer back to after a redirection (e.g. 3DS). We will always append the paymentSessionId under query param ps.

Example: "https://ryftpay.com/checkout?orderId=123&ps=ps_01FCTS1XMKH9FF43CAFA4CXT3P"
authorizationTypestring or null

Specifies the type of authorization. PreAuth - Used to authorize a non-final amount, where you may want to later capture a different amount or adjust the initial authorized amount. FinalAuth - When the amount authorized is final and identical to the amount later captured. By default we will always use FinalAuth. Note that PreAuth is restricted to particular MCC values for Visa, contact us to verify and enable PreAuth if you believe your business is eligible.

Enum"PreAuth""FinalAuth"
Example: "FinalAuth"
captureFlowstring or null

Whether the payment is automatically/manually captured. Defaults to Automatic.

Enum"Automatic""Manual"
Example: "Automatic"
verifyAccountboolean or null

Whether the PaymentSession was used to facilitate an account verification check.

Example: null
shippingDetails(ShippingDetails (object or null))
(ShippingDetails (object or null))
orderDetailsobject or null(OrderDetails)

The details of the order

paymentSettingsobject or null(PaymentSessionPaymentSettings)

Allows for customisation of various payment settings.

createdTimestampinteger(int64)

The epoch timestamp (seconds) when the payment was created

Example: 1470989538
lastUpdatedTimestampinteger(int64)

The epoch timestamp (seconds) when the payment was last updated

Example: 1470989538
Response
application/json
{ "id": "ps_01FCTS1XMKH9FF43CAFA4CXT3P", "amount": 500, "currency": "GBP", "paymentType": "Standard", "entryMode": "Online", "customerEmail": "example@mail.com", "customerDetails": { "id": "cus_01G0EYVFR02KBBVE2YWQ8AKMGJ", "firstName": "Fred", "lastName": "Jones", "homePhoneNumber": "+447900000000", "mobilePhoneNumber": "+447900000000", "metadata": { … } }, "credentialOnFileUsage": { "initiator": "Customer", "sequence": "Initial" }, "previousPayment": { "id": "ps_01G0EYVFR02KBBVE2YWQ8AKMGJ" }, "rebillingDetail": { "amountVariance": "Fixed", "numberOfDaysBetweenPayments": 30, "totalNumberOfPayments": 12, "currentPaymentNumber": 1, "expiry": 1776988800 }, "enabledPaymentMethods": [ "Card" ], "paymentMethod": { "type": "Card", "tokenizedDetails": { … }, "card": { … }, "wallet": { … }, "billingAddress": { … }, "checks": { … } }, "platformFee": 50, "splitPaymentDetail": { "items": [ … ] }, "status": "PendingPayment", "metadata": { "orderNumber": "123" }, "clientSecret": "ps_01FCTS1XMKH9FF43CAFA4CXT3P_secret_b83f2653-06d7-44a9-a548-5825e8186004", "lastError": "insufficient_funds", "refundedAmount": 120, "statementDescriptor": { "descriptor": "Ryft Ltd", "city": "London" }, "requiredAction": { "type": "Redirect", "url": "https://ryftpay.com/3ds-auth" }, "returnUrl": "https://ryftpay.com/checkout?orderId=123&ps=ps_01FCTS1XMKH9FF43CAFA4CXT3P", "authorizationType": "FinalAuth", "captureFlow": "Automatic", "verifyAccount": null, "shippingDetails": { "address": { … } }, "orderDetails": { "reference": "fffd1682-f82b-43e3-a89b-48d9ad7d55d9", "items": [ … ] }, "paymentSettings": { "paymentMethodOptions": { … }, "platform": { … } }, "createdTimestamp": 1470989538, "lastUpdatedTimestamp": 1470989538 }

Initiate a payment attempt

Request

This is used to supply the card you have collected from the customer to pay for this payment session. Only call this endpoint from your front-end once you have collected the customer's card details.

If you want the lowest PCI burden we recommend using our embedded payment forms in place of this endpoint. This ensures Ryft store & transmit the card details securely from our servers rather than your own. Please contact your account manager if you want to opt for this.

Security
publicApiKeyAuth
Headers
Accountstring^ac_[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a...

The linked accountId (use this when operating on payments related to a linked account)

Example: ac_3fe8398f-8cdb-43a3-9be2-806c4f84c327
Bodyapplication/jsonrequired
clientSecretstringrequired

The client secret of the payment session.

Example: "ps_01FCTS1XMKH9FF43CAFA4CXT3P_secret_b83f2653-06d7-44a9-a548-5825e8186004"
paymentMethodTypestring or null

The type of the payment method the customer has opted to pay with.

Default "Card"
Value"Card"
Example: "Card"
cardDetailsobject(CardDetails)
walletDetailsobject(WalletDetails)
paymentMethodobject(PaymentRequestPaymentMethod)
paymentMethodOptionsobject(AttemptPaymentPaymentMethodOptions)
billingAddressobject or null(CustomerAddress)
customerDetailsobject(CustomerDetails)
shippingDetailsobject or null(ShippingDetailsRequest)
Example: {"address":{"firstName":"Fox","lastName":"Mulder","lineOne":"Stonehenge","postalCode":"SP4 7DE","city":"Salisbury","country":"GB"},"phoneNumber":"+447900000000"}
threeDsRequestDetailsobject(ThreeDsRequestDetails)
curl -i -X POST \
  https://sandbox-api.ryftpay.com/v1/payment-sessions/attempt-payment \
  -H 'Authorization: YOUR_API_KEY_HERE' \
  -H 'Content-Type: application/json' \
  -d '{
    "clientSecret": "ps_01FCTS1XMKH9FF43CAFA4CXT3P_secret_b83f2653-06d7-44a9-a548-5825e8186004",
    "cardDetails": {
      "number": "4444333322221111",
      "expiryMonth": "10",
      "expiryYear": "2024",
      "cvc": "100"
    }
  }'

Responses

Request ok, check the 'status' field to determine if the payment was successful

Bodyapplication/json
idstring^ps_[0-7][0-9A-HJKMNP-TV-Z]{25}

The unique identifier for the payment

Example: "ps_01FCTS1XMKH9FF43CAFA4CXT3P"
amountinteger(int32)>= 30

The amount of the sale/purchase in minor digits

Example: 500
currencystring

The ISO currency code

Example: "GBP"
paymentTypestring or null

The type of the payment. Use this to control whether the payment is classified as a Customer-Initiated Transaction (CIT) or Merchant-Initiated Transaction (MIT). (MIT) - customer is not actively participating in the transaction and has instead given consent for you to charge their stored card off session. (CIT) - customer is actively in your checkout flow and is on hand to react to and complete any supplementary steps to complete the payment (e.g. 3DS). CIT values:

  • Standard - A regular one-off e-commerce payment, made by a customer on your website/app

MIT values:

  • Unscheduled - Uses an already stored card on file for a fixed or variable amount that does not occur on a scheduled or regular basis such as recurring payments/subcriptions.

Recurring is classified as CIT if it is the initial payment in the series and MIT if it is a subsequent (follow up) payment in the series. MOTO has now been deprecated in favour of the entryMode (MOTO) field.

Default "Standard"
Enum"Standard""Unscheduled""MOTO""Recurring"
Example: "Standard"
entryModestring or null(EntryMode)

Indicates how the payment method details were (or will be) obtained by the merchant for this payment.

  • Online - when the payment method is collected with the customer present (e.g. an e-commerce payment within a browser)
  • MOTO - when the payment method is collected via mail order (not e-email) or over the phone
  • InPerson - when the payment is collected in-person over a physical medium (such as card terminal)

MOTO is subject to additional approval, contact us if you require this functionality.

Enum"Online""MOTO""InPerson"
Example: "Online"
customerEmailstring or null

The email address of the customer

Example: "example@mail.com"
customerDetailsobject or null

The details of the customer that this payment belongs to

credentialOnFileUsage(CredentialOnFileUsage (object or null))
(CredentialOnFileUsage (object or null))
previousPaymentobject or null

For recurring/unscheduled payments - details of the initial payment in the series. Required for:

  • partners who want to externally schedule recurring payments.
  • partners who process Unscheduled payments
rebillingDetail(RebillingDetail (object or null))
(RebillingDetail (object or null))
enabledPaymentMethodsArray of strings

List of payment method types that can be used to complete payment for this PaymentSession. Card is the default and will allow all card schemes configured on your account (Visa, Mastercard etc.). Apple Pay & Google Pay are classified as Card types and will be displayed provided you have confogured them properly.

Default ["Card"]
Items Value"Card"
paymentMethodobject or null(PaymentSessionPaymentMethod)
platformFeeinteger or null(int32)>= 0

The amount (if any) that will be taken and applied to the platform account. This cannot be greater than the "amount" property

Example: 50
splitPaymentDetailobject or null(SplitPaymentDetail)
statusstring
Enum"PendingPayment""PendingAction""Processing""Approved""Captured""Voided"
Example: "PendingPayment"
metadataobject or null

use this parameter to attach key-value data to the payment. These will be sent with any associated payment events on your webhook.

Example: {"orderNumber":"123"}
clientSecretstring or null

The client secret is used to complete a payment from your frontend. Do NOT store/log/embed anywhere and ensure it is only surfaced on pages served over TSL

Example: "ps_01FCTS1XMKH9FF43CAFA4CXT3P_secret_b83f2653-06d7-44a9-a548-5825e8186004"
lastErrorstring or null(LastPaymentError)

The most recent error when attempting to Pay.

Note that we may add further values without notice.

Enum"insufficient_funds""declined_do_not_honour""invalid_card_number""cvv2_failure""restricted_card""blacklisted_card""blacklisted_bin""blacklisted_country""blacklisted_ip""risk_declined"
Example: "insufficient_funds"
refundedAmountinteger(int32)>= 0

The total amount refunded thus far against the payment-session. Refunds can only be actioned once the payment-session is Captured. You can only have one refund in-flight at a time.

Example: 120
statementDescriptorobject(StatementDescriptor)
requiredActionobject or null(RequiredAction)

The action to take (if any) in order to authorise the payment. This will be non-null if the customer's bank challenge the payment (i.e. 3DS)

Example: {"type":"Redirect","url":"https://ryftpay.com/3ds-auth"}
returnUrlstring

URL to send the customer back to after a redirection (e.g. 3DS). We will always append the paymentSessionId under query param ps.

Example: "https://ryftpay.com/checkout?orderId=123&ps=ps_01FCTS1XMKH9FF43CAFA4CXT3P"
authorizationTypestring or null

Specifies the type of authorization. PreAuth - Used to authorize a non-final amount, where you may want to later capture a different amount or adjust the initial authorized amount. FinalAuth - When the amount authorized is final and identical to the amount later captured. By default we will always use FinalAuth. Note that PreAuth is restricted to particular MCC values for Visa, contact us to verify and enable PreAuth if you believe your business is eligible.

Enum"PreAuth""FinalAuth"
Example: "FinalAuth"
captureFlowstring or null

Whether the payment is automatically/manually captured. Defaults to Automatic.

Enum"Automatic""Manual"
Example: "Automatic"
verifyAccountboolean or null

Whether the PaymentSession was used to facilitate an account verification check.

Example: null
shippingDetails(ShippingDetails (object or null))
(ShippingDetails (object or null))
orderDetailsobject or null(OrderDetails)

The details of the order

paymentSettingsobject or null(PaymentSessionPaymentSettings)

Allows for customisation of various payment settings.

createdTimestampinteger(int64)

The epoch timestamp (seconds) when the payment was created

Example: 1470989538
lastUpdatedTimestampinteger(int64)

The epoch timestamp (seconds) when the payment was last updated

Example: 1470989538
Response
application/json
{ "id": "ps_01FCTS1XMKH9FF43CAFA4CXT3P", "amount": 500, "currency": "GBP", "paymentType": "Standard", "entryMode": "Online", "customerEmail": "example@mail.com", "customerDetails": { "id": "cus_01G0EYVFR02KBBVE2YWQ8AKMGJ", "firstName": "Fred", "lastName": "Jones", "homePhoneNumber": "+447900000000", "mobilePhoneNumber": "+447900000000", "metadata": { … } }, "credentialOnFileUsage": { "initiator": "Customer", "sequence": "Initial" }, "previousPayment": { "id": "ps_01G0EYVFR02KBBVE2YWQ8AKMGJ" }, "rebillingDetail": { "amountVariance": "Fixed", "numberOfDaysBetweenPayments": 30, "totalNumberOfPayments": 12, "currentPaymentNumber": 1, "expiry": 1776988800 }, "enabledPaymentMethods": [ "Card" ], "paymentMethod": { "type": "Card", "tokenizedDetails": { … }, "card": { … }, "wallet": { … }, "billingAddress": { … }, "checks": { … } }, "platformFee": 50, "splitPaymentDetail": { "items": [ … ] }, "status": "PendingPayment", "metadata": { "orderNumber": "123" }, "clientSecret": "ps_01FCTS1XMKH9FF43CAFA4CXT3P_secret_b83f2653-06d7-44a9-a548-5825e8186004", "lastError": "insufficient_funds", "refundedAmount": 120, "statementDescriptor": { "descriptor": "Ryft Ltd", "city": "London" }, "requiredAction": { "type": "Redirect", "url": "https://ryftpay.com/3ds-auth" }, "returnUrl": "https://ryftpay.com/checkout?orderId=123&ps=ps_01FCTS1XMKH9FF43CAFA4CXT3P", "authorizationType": "FinalAuth", "captureFlow": "Automatic", "verifyAccount": null, "shippingDetails": { "address": { … } }, "orderDetails": { "reference": "fffd1682-f82b-43e3-a89b-48d9ad7d55d9", "items": [ … ] }, "paymentSettings": { "paymentMethodOptions": { … }, "platform": { … } }, "createdTimestamp": 1470989538, "lastUpdatedTimestamp": 1470989538 }

Continue taking payment after the initial attempt.

Request

Submit additional data for payment sessions that require further action after using attempt-payment. Note that our SDKs handle this step automatically.

Security
publicApiKeyAuth
Headers
Accountstring^ac_[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a...

The linked accountId (use this when operating on payments related to a linked account)

Example: ac_3fe8398f-8cdb-43a3-9be2-806c4f84c327
Bodyapplication/jsonrequired
clientSecretstringrequired

The client secret of the payment session.

Example: "ps_01FCTS1XMKH9FF43CAFA4CXT3P_secret_b83f2653-06d7-44a9-a548-5825e8186004"
threeDsobject(ContinueThreeDsRequest)

Supply the result of a 3ds fingerprint/challenge step. One of fingerprint or challengeResult must be provided.

curl -i -X POST \
  https://sandbox-api.ryftpay.com/v1/payment-sessions/continue-payment \
  -H 'Authorization: YOUR_API_KEY_HERE' \
  -H 'Content-Type: application/json' \
  -d '{
    "clientSecret": "ps_01FCTS1XMKH9FF43CAFA4CXT3P_secret_b83f2653-06d7-44a9-a548-5825e8186004",
    "threeDs": {
      "fingerprint": "ewogICJ0aHJlZURTU2VydmVyVHJhbnNJRCI6ICI4ZjAxNzdhNC0yY2VkLTQ4NjUtODViNy1iYWQ5YmZhMzk4ZDIiLAogICJ0aHJlZURTQ29tcEluZCI6IlkiCn0="
    }
  }'

Responses

Request ok, check the 'status' field to determine if the payment was successful. If status remains in PendingAction then further action is required before the payment can be authorized. Check the requiredAction field for the next step.

Bodyapplication/json
idstring^ps_[0-7][0-9A-HJKMNP-TV-Z]{25}

The unique identifier for the payment

Example: "ps_01FCTS1XMKH9FF43CAFA4CXT3P"
amountinteger(int32)>= 30

The amount of the sale/purchase in minor digits

Example: 500
currencystring

The ISO currency code

Example: "GBP"
customerEmailstring or null

The email address of the customer

Example: "example@mail.com"
enabledPaymentMethodsArray of strings

List of payment method types that can be used to complete payment for this PaymentSession. Card is the default and will allow all card schemes configured on your account (Visa, Mastercard etc.). Apple Pay & Google Pay are classified as Card types and will be displayed provided you have confogured them properly.

Default ["Card"]
Items Value"Card"
paymentMethodobject or null(PaymentSessionPaymentMethod)
statusstring
Enum"PendingPayment""PendingAction""Processing""Approved""Captured""Voided"
Example: "PendingPayment"
lastErrorstring or null(LastPaymentError)

The most recent error when attempting to Pay.

Note that we may add further values without notice.

Enum"insufficient_funds""declined_do_not_honour""invalid_card_number""cvv2_failure""restricted_card""blacklisted_card""blacklisted_bin""blacklisted_country""blacklisted_ip""risk_declined"
Example: "insufficient_funds"
requiredActionobject or null(RequiredAction)

The action to take (if any) in order to authorise the payment. This will be non-null if the customer's bank challenge the payment (i.e. 3DS)

Example: {"type":"Redirect","url":"https://ryftpay.com/3ds-auth"}
returnUrlstring

URL to send the customer back to after a redirection (e.g. 3DS). We will always append the paymentSessionId under query param ps.

Example: "https://ryftpay.com/checkout?orderId=123&ps=ps_01FCTS1XMKH9FF43CAFA4CXT3P"
createdTimestampinteger(int64)

The epoch timestamp (seconds) when the payment was created

Example: 1470989538
lastUpdatedTimestampinteger(int64)

The epoch timestamp (seconds) when the payment was last updated

Example: 1470989538
Response
application/json
{ "id": "ps_01FCTS1XMKH9FF43CAFA4CXT3P", "amount": 500, "currency": "GBP", "customerEmail": "example@mail.com", "enabledPaymentMethods": [ "Card" ], "paymentMethod": { "type": "Card", "tokenizedDetails": { … }, "card": { … }, "wallet": { … }, "billingAddress": { … }, "checks": { … } }, "status": "PendingPayment", "lastError": "insufficient_funds", "requiredAction": { "type": "Redirect", "url": "https://ryftpay.com/3ds-auth" }, "returnUrl": "https://ryftpay.com/checkout?orderId=123&ps=ps_01FCTS1XMKH9FF43CAFA4CXT3P", "createdTimestamp": 1470989538, "lastUpdatedTimestamp": 1470989538 }

List payment transaction(s)

Request

List the transaction(s) for a particular payment

Security
secretApiKeyAuth
Path
paymentSessionIdstringrequired

Payment Id to list transactions for

Query
ascendingboolean(boolean)

Control the order (newest or oldest) in which the transactions are returned. false will arrange the results with newest first, whereas true shows oldest first. The default is false.

Example: ascending=false
limitinteger(int32)

Control how many items are return in a given page The max limit we allow is 50. The default is 10.

Example: limit=10
startsAfterstring

A token to identify the item to start querying after. This is most commonly used to get the next page of results after a previous response did not return all items, due to the imposed limit. The value of the paginationToken field from that response should be supplied here, to retrieve the next page of results for that timestamp range.

Example: startsAfter=txn_01FCTS1XMKH9FF43CAFA4CXT3P_01FCTS1XMKH9FF43CAFA4CXT3P
Headers
Accountstring^ac_[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a...

The linked accountId (use this when operating on payments related to a linked account)

Example: ac_3fe8398f-8cdb-43a3-9be2-806c4f84c327
curl -i -X GET \
  'https://sandbox-api.ryftpay.com/v1/payment-sessions/{paymentSessionId}/transactions' \
  -H 'Authorization: YOUR_API_KEY_HERE'

Responses

Request Ok

Bodyapplication/json
itemsArray of objects(PaymentTransaction)
paginationTokenstring or null

A token to use for getting the next page of results - send the same request with this value in the 'paginationToken' query parameter. This field is null when there are no further items to return

Example: "txn_01FCTS1XMKH9FF43CAFA4CXT3P_01FCTS1XMKH9FF43CAFA4CXT3P"
Response
application/json
{ "items": [ { … } ], "paginationToken": "txn_01FCTS1XMKH9FF43CAFA4CXT3P_01FCTS1XMKH9FF43CAFA4CXT3P" }

Retrieve a payment transaction

Request

Retrieve the transaction for a particular payment

Security
secretApiKeyAuth
Path
paymentSessionIdstringrequired

Payment Id that the transaction is under

paymentTransactionIdstringrequired

Payment transaction Id to retrieve

Headers
Accountstring^ac_[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a...

The linked accountId (use this when operating on payments related to a linked account)

Example: ac_3fe8398f-8cdb-43a3-9be2-806c4f84c327
curl -i -X GET \
  'https://sandbox-api.ryftpay.com/v1/payment-sessions/{paymentSessionId}/transactions/{paymentTransactionId}' \
  -H 'Authorization: YOUR_API_KEY_HERE'

Responses

Request Ok

Bodyapplication/json
idstring

The unique identifier for the transaction

Example: "txn_01FCTS1XMKH9FF43CAFA4CXT3P_01FCTS1XMKH9FF43CAFA4CXT3P"
paymentSessionIdstring

The unique paymentSessionId that this transaction relates to

Example: "ps_01FCTS1XMKH9FF43CAFA4CXT3P"
amountinteger(int32)>= 0

The amount of the transaction in minor digits

Example: 250
currencystring

The ISO currency code

Example: "GBP"
typestring
Enum"Authorization""Void""Capture""Refund""Chargeback""ChargebackReversal"
Example: "Capture"
statusstring
Enum"Pending""Failed""Succeeded"
Example: "Succeeded"
refundedAmountinteger or null(int32)>= 0

The amount of the transaction that has been refunded, in minor digits.

Example: 50
platformFeeinteger or null(int32)>= 0

Only supplied for 'capture' transactions. The amount of the capture that will be taken and applied to the platform account, in minor digits.

Example: 50
platformFeeRefundedAmountinteger or null(int32)>= 0

Only supplied for 'capture' transactions. The amount of the capture that has been refunded to the platform account, in minor digits.

Example: 50
reasonstring or null

An optional reason to describe this transaction. Typically used for refunds whereby the reason for the refund is recorded.

Example: "Requested by the customer"
captureTypestring or null

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.

Enum"Final""NotFinal"
Example: "Final"
paymentMethodobject or null(PaymentSessionPaymentMethod)
splitPaymentDetailobject or null(SplitPaymentDetail)
inPersonDetailobject or null(InPersonPaymentDetail)
createdTimestampinteger(int64)

The epoch timestamp (seconds) when the transaction was initiated

Example: 1470989538
lastUpdatedTimestampinteger(int64)

The epoch timestamp (seconds) when the transaction was last updated

Example: 1470989538
processingFeeinteger or null(int32)>= 0Deprecated

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.

Example: 7
Response
application/json
{ "id": "txn_01FCTS1XMKH9FF43CAFA4CXT3P_01FCTS1XMKH9FF43CAFA4CXT3P", "paymentSessionId": "ps_01FCTS1XMKH9FF43CAFA4CXT3P", "amount": 250, "currency": "GBP", "type": "Capture", "status": "Succeeded", "refundedAmount": 50, "platformFee": 50, "platformFeeRefundedAmount": 50, "processingFee": 7, "reason": "Requested by the customer", "captureType": "Final", "paymentMethod": { "type": "Card", "tokenizedDetails": { … }, "card": { … }, "wallet": { … }, "billingAddress": { … }, "checks": { … } }, "splitPaymentDetail": { "items": [ … ] }, "inPersonDetail": { "terminalDetail": { … } }, "createdTimestamp": 1470989538, "lastUpdatedTimestamp": 1470989538 }

Manually capture a payment session

Request

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.

Security
secretApiKeyAuth
Path
paymentSessionIdstring^ps_[0-7][0-9A-HJKMNP-TV-Z]{25}required

Payment Id to update

Example: ps_01FCTS1XMKH9FF43CAFA4CXT3P
Headers
Accountstring

The linked accountId (use this when operating on payments related to a linked account)

Example: ac_3fe8398f-8cdb-43a3-9be2-806c4f84c327
Bodyapplication/jsonrequired
amountinteger or null(int32)[ 30 .. 2000000 ]

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).

Example: 500
captureTypestring or null

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.

Default "Final"
Enum"Final""NotFinal"
Example: "Final"
platformFeeinteger or null(int32)[ 0 .. 2000000 ]

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.

Example: 50
splitsobject or null(SplitPaymentRequestDetail)

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.

settingsobject(PaymentTransactionSettingsRequest)

Allows for customisation of various settings for this particular transaction.

curl -i -X POST \
  https://sandbox-api.ryftpay.com/v1/payment-sessions/ps_01FCTS1XMKH9FF43CAFA4CXT3P/captures \
  -H 'Authorization: YOUR_API_KEY_HERE' \
  -H 'Content-Type: application/json' \
  -d '{
    "amount": 50
  }'

Responses

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.

Bodyapplication/json
idstring

The unique identifier for the transaction

Example: "txn_01FCTS1XMKH9FF43CAFA4CXT3P_01FCTS1XMKH9FF43CAFA4CXT3P"
paymentSessionIdstring

The unique paymentSessionId that this transaction relates to

Example: "ps_01FCTS1XMKH9FF43CAFA4CXT3P"
amountinteger(int32)>= 0

The amount of the transaction in minor digits

Example: 250
currencystring

The ISO currency code

Example: "GBP"
typestring
Enum"Authorization""Void""Capture""Refund""Chargeback""ChargebackReversal"
Example: "Capture"
statusstring
Enum"Pending""Failed""Succeeded"
Example: "Succeeded"
refundedAmountinteger or null(int32)>= 0

The amount of the transaction that has been refunded, in minor digits.

Example: 50
platformFeeinteger or null(int32)>= 0

Only supplied for 'capture' transactions. The amount of the capture that will be taken and applied to the platform account, in minor digits.

Example: 50
platformFeeRefundedAmountinteger or null(int32)>= 0

Only supplied for 'capture' transactions. The amount of the capture that has been refunded to the platform account, in minor digits.

Example: 50
reasonstring or null

An optional reason to describe this transaction. Typically used for refunds whereby the reason for the refund is recorded.

Example: "Requested by the customer"
captureTypestring or null

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.

Enum"Final""NotFinal"
Example: "Final"
paymentMethodobject or null(PaymentSessionPaymentMethod)
splitPaymentDetailobject or null(SplitPaymentDetail)
inPersonDetailobject or null(InPersonPaymentDetail)
createdTimestampinteger(int64)

The epoch timestamp (seconds) when the transaction was initiated

Example: 1470989538
lastUpdatedTimestampinteger(int64)

The epoch timestamp (seconds) when the transaction was last updated

Example: 1470989538
processingFeeinteger or null(int32)>= 0Deprecated

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.

Example: 7
Response
application/json
{ "id": "txn_01J8HRF1FBEGYFFXNJMRZ704R6_01J8HRF73YD8VTP247ZRMT6E0B", "paymentSessionId": "ps_01J8HRF1FBEGYFFXNJMRZ704R6", "amount": 30, "currency": "GBP", "type": "Capture", "status": "Pending", "refundedAmount": 0, "captureType": "Final", "createdTimestamp": 1727172977, "lastUpdatedTimestamp": 1727172977 }

Void a payment session

Request

Call this endpoint to void a payment session currently awaiting manual capture. This will reverse the amount authorized on the payment and return it to the customer. If voided on the same-day, the transaction will not show up on the customer's card statement(s). You can only call this endpoint when the payment session is in status Approved and its captureFlow value is Manual.

Security
secretApiKeyAuth
Path
paymentSessionIdstring^ps_[0-7][0-9A-HJKMNP-TV-Z]{25}required

Payment Id to void

Example: ps_01FCTS1XMKH9FF43CAFA4CXT3P
Headers
Accountstring

The linked accountId (use this when operating on payments related to a linked account)

Example: ac_3fe8398f-8cdb-43a3-9be2-806c4f84c327
curl -i -X POST \
  https://sandbox-api.ryftpay.com/v1/payment-sessions/ps_01FCTS1XMKH9FF43CAFA4CXT3P/voids \
  -H 'Authorization: YOUR_API_KEY_HERE'

Responses

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

Bodyapplication/json
idstring

The unique identifier for the transaction

Example: "txn_01FCTS1XMKH9FF43CAFA4CXT3P_01FCTS1XMKH9FF43CAFA4CXT3P"
paymentSessionIdstring

The unique paymentSessionId that this transaction relates to

Example: "ps_01FCTS1XMKH9FF43CAFA4CXT3P"
amountinteger(int32)>= 0

The amount of the transaction in minor digits

Example: 250
currencystring

The ISO currency code

Example: "GBP"
typestring
Enum"Authorization""Void""Capture""Refund""Chargeback""ChargebackReversal"
Example: "Capture"
statusstring
Enum"Pending""Failed""Succeeded"
Example: "Succeeded"
refundedAmountinteger or null(int32)>= 0

The amount of the transaction that has been refunded, in minor digits.

Example: 50
platformFeeinteger or null(int32)>= 0

Only supplied for 'capture' transactions. The amount of the capture that will be taken and applied to the platform account, in minor digits.

Example: 50
platformFeeRefundedAmountinteger or null(int32)>= 0

Only supplied for 'capture' transactions. The amount of the capture that has been refunded to the platform account, in minor digits.

Example: 50
reasonstring or null

An optional reason to describe this transaction. Typically used for refunds whereby the reason for the refund is recorded.

Example: "Requested by the customer"
captureTypestring or null

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.

Enum"Final""NotFinal"
Example: "Final"
paymentMethodobject or null(PaymentSessionPaymentMethod)
splitPaymentDetailobject or null(SplitPaymentDetail)
inPersonDetailobject or null(InPersonPaymentDetail)
createdTimestampinteger(int64)

The epoch timestamp (seconds) when the transaction was initiated

Example: 1470989538
lastUpdatedTimestampinteger(int64)

The epoch timestamp (seconds) when the transaction was last updated

Example: 1470989538
processingFeeinteger or null(int32)>= 0Deprecated

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.

Example: 7
Response
application/json
{ "id": "txn_01J8HRF1FBEGYFFXNJMRZ704R6_01J8HRF73YD8VTP247ZRMT6E0B", "paymentSessionId": "ps_01J8HRF1FBEGYFFXNJMRZ704R6", "amount": 30, "currency": "GBP", "type": "Void", "status": "Pending", "refundedAmount": 0, "createdTimestamp": 1727172977, "lastUpdatedTimestamp": 1727172977 }

Refund a payment

Request

Use this endpoint to refund an already captured payment session. Unlike voids, which are typically completed in minutes, refunds can take several days to be cleared by the card schemes.

Security
secretApiKeyAuth
Path
paymentSessionIdstringrequired

Payment Id to refund

Headers
Accountstring^ac_[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a...

The linked accountId (use this when operating on payments related to a linked account)

Example: ac_3fe8398f-8cdb-43a3-9be2-806c4f84c327
Bodyapplication/json
amountinteger or null(int32)[ 30 .. 2000000 ]

The amount to refund in minor digits. Can be omitted when not using partial captures or splits; the remaining amount will be refunded.

Example: 500
reasonstring or null

The reason for the refund

Example: "Requested by the customer"
refundPlatformFeeboolean or null

A flag to indicate whether the platform fee should be refunded. If the payment amount is fully refunded, the platform fee will be too. If this is a partial refund then the platform fee will be refunded proportionally to the amount being refunded. By default this flag is false.

Example: false
splitsobject or null
captureTransactionobject or null

Required if you have actioned multiple captures against a single PaymentSession. This must match the Id of a particular capture transaction as returned from the /captures endpoint. Note that the amount to refund cannot exceed the amount you captured for that /captures request.

platformSettingsobject or null(PaymentPlatformSettingsRequest)

Only applicable to payments under the platform model. Use this field to control various settings relating to payments done under as a platform.

curl -i -X POST \
  'https://sandbox-api.ryftpay.com/v1/payment-sessions/{paymentSessionId}/refunds' \
  -H 'Authorization: YOUR_API_KEY_HERE' \
  -H 'Content-Type: application/json' \
  -d '{
    "amount": 250
  }'

Responses

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

Bodyapplication/json
idstring

The unique identifier for the transaction

Example: "txn_01FCTS1XMKH9FF43CAFA4CXT3P_01FCTS1XMKH9FF43CAFA4CXT3P"
paymentSessionIdstring

The unique paymentSessionId that this transaction relates to

Example: "ps_01FCTS1XMKH9FF43CAFA4CXT3P"
amountinteger(int32)>= 0

The amount of the transaction in minor digits

Example: 250
currencystring

The ISO currency code

Example: "GBP"
typestring
Enum"Authorization""Void""Capture""Refund""Chargeback""ChargebackReversal"
Example: "Capture"
statusstring
Enum"Pending""Failed""Succeeded"
Example: "Succeeded"
refundedAmountinteger or null(int32)>= 0

The amount of the transaction that has been refunded, in minor digits.

Example: 50
platformFeeinteger or null(int32)>= 0

Only supplied for 'capture' transactions. The amount of the capture that will be taken and applied to the platform account, in minor digits.

Example: 50
platformFeeRefundedAmountinteger or null(int32)>= 0

Only supplied for 'capture' transactions. The amount of the capture that has been refunded to the platform account, in minor digits.

Example: 50
reasonstring or null

An optional reason to describe this transaction. Typically used for refunds whereby the reason for the refund is recorded.

Example: "Requested by the customer"
captureTypestring or null

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.

Enum"Final""NotFinal"
Example: "Final"
paymentMethodobject or null(PaymentSessionPaymentMethod)
splitPaymentDetailobject or null(SplitPaymentDetail)
inPersonDetailobject or null(InPersonPaymentDetail)
createdTimestampinteger(int64)

The epoch timestamp (seconds) when the transaction was initiated

Example: 1470989538
lastUpdatedTimestampinteger(int64)

The epoch timestamp (seconds) when the transaction was last updated

Example: 1470989538
processingFeeinteger or null(int32)>= 0Deprecated

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.

Example: 7
Response
application/json
{ "id": "txn_01J8HRF1FBEGYFFXNJMRZ704R6_01J8HRF73YD8VTP247ZRMT6E0B", "paymentSessionId": "ps_01J8HRF1FBEGYFFXNJMRZ704R6", "amount": 30, "currency": "GBP", "type": "Refund", "status": "Pending", "reason": "Reduction due to missing / damaged item in transit", "createdTimestamp": 1727172977, "lastUpdatedTimestamp": 1727172977 }

Webhooks

Create and manage webhooks.

Operations

Events

Events are persisted throughout the lifecycle of a payment/action as you use our API. We use events to notify you when something important happens in your account (or a linked sub account). The most commonly used event occurs when a payment is captured, in which case we persist a PaymentSession.captured event and then (optionally) send it to any webhooks you have registered that are listening for that event type.

Note that if you are taking payments as a platform (for sub accounts), events are saved against the sub account accountId, but will be sent to any webhooks that your account has configured.

Operations

Accounts

Account registration for your sub accounts

Operations

Persons

The Persons API allows the creation and management of one or more persons for the purpose of verification for Business sub accounts. Recommended if you wish to implement verification programmatically for your sub accounts. This API cannot be accessed for Individual sub accounts.

Operations

Payout Methods

The Payout Methods API allows the creation and management of payout methods for use when receiving payouts, e.g. bank accounts. Recommended if you wish to implement payouts programmatically for your sub accounts.

Operations

Payouts

A payout represents the transfer of money from Ryft to a connected payout method (bank account), i.e. when we send money you're owed. Typically this is automated.

However, the payouts API allows you to explicitly create payouts for your sub accounts. Generally we'd recommend this if you are a marketplace who wants to control exactly when payouts should be sent out.

Operations

Transfers

A Transfer represents the movement of money between Ryft accounts.

This API allows platforms/marketplaces to transfer money from/to particular sub accounts, useful when:

  • you owe a sub account money from a particular transaction and want to explicitly send it after the fact
  • you want to recoup funds from a sub account, such as when dealing with disputes
  • you want to collect additional/new commission from the sub account
Operations

Balances

The balances API allows you to view your own or a particular sub accounts balances in real-time.

Typically useful when making use of manual payouts or our transfers API so you can determine the funds available prior to initiating requests.

Operations

Balance Transactions

Allows you to query for balance transactions. These transactions represent all actions within a Ryft account that impact account balances.

This API can only be used for reconciliation on transactions created from July 2025 onwards

Operations

Platform Fees

Query any platform fees that your account has taken (when taking payments on behalf of linked sub accounts)

Operations

Customers

The Customers API allows you to persist customer details across sessions. You should use this if you wish to support saving a customer's payment methods and thereby enabling them to reuse previously entered details for future payments.

Operations

Payment Methods

The Payment Methods API allows you to tokenize and store previously used payment methods.

Operations

Subscriptions

The subscriptions API allows you to automatically have Ryft schedule and charge recurring payments for a specific day and time. This API is not required to process recurring payments. After additional configuration, you can use our payment-sessions API to create and charge the recurring payments yourself.

Operations

Files

The Files API allows you to query for and upload files to Ryft. Some files may be generated internally by Ryft when requesting reports, or alternatively you may have uploaded evidence/verification documents

Operations

Apple Pay

Allows implementation of Apple Pay on the web via the API with Ryft's Apple Pay processing certificate.

Operations

Disputes

Disputes (also known as chargebacks) occur when a cardholder wants to query or challenge a transaction on their card statement. The Disputes API allows you to keep track of and manage disputes.

Operations

In-Person Products

The in-person products API allows you query for the products we offer for in-person payments. Useful to view and decide which SKUs you wish to order. Note that products themselves cannot be ordered. You must select one or more SKUs to purchase equipment.

Operations

In-Person SKUs

The in-person SKUs API allows you query for the SKUs we offer for in-person payments. SKUs are ultimately the items you order when purchasing equipment. Each SKU is scoped to a specific country and currency.

Operations

In-Person Orders

The in-person orders API allows you to request physical terminal orders to specific locations. Used in combination with our terminal API you can integrate in-person (card present) payments.

Operations

In-Person Locations

The in-person locations API allows you to setup and manage the locations in which terminals reside.

Operations

In-Person Terminals

The in-person terminals API allows you to setup and manage your physical terminal hardware for in-person (card present) payments.

Operations