openapi: 3.0.2
info:
x-logo:
url: https://apidocs.primer.io/docs/assets/images/primer-logo.svg
title: Primer Client Session API API
version: '2.4'
description: This API enforces a timeout of 90 seconds for all requests. A 504 response indicates a timeout occurred.
servers:
- url: https://api.sandbox.primer.io
- url: https://api.primer.io
security:
- ApiKeyAuth: []
tags:
- name: Client Session API
paths:
/client-session:
post:
tags:
- Client Session API
summary: Create a client session
description: "Creating a client session generates a client token: a temporary key used to initialize [Universal Checkout](/docs/get-started/set-up-a-checkout) and authenticate it against your account.\n\nUniversal Checkout automatically retrieves all the settings from the client session and the Dashboard to configure the payment methods and the checkout experience.\n\nNote:\nWhen creating a Client Session, please make sure to provide `currencyCode`, `orderId`, and at least one of `amount` or `lineItems`. \nIf any of these are not yet available, you can provide them when making the payment request.\n\nPOST /client-session does not have required fields as all fields are not always known when a client session is created. \nUse PATCH /client-session to update the parameters throughout the checkout session.\n\nClient tokens expire after 24 hours.\n"
operationId: create_client_side_token_client_session_post
parameters:
- $ref: '#/components/parameters/ApiVersionHeader'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ClientSessionAPIRequest'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/ClientSessionWithTokenAPIResponse'
'400':
description: Error Response
content:
application/json:
schema:
$ref: '#/components/schemas/400ErrorResponse'
examples:
ClientSessionValidationError:
summary: The client token is invalid.
value:
error:
errorId: ClientSessionValidationError
description: The client token is invalid.
recoverySuggestion: Please provide a valid client token.
diagnosticsId: '1234567898'
MetadataContainsEmptyKey:
summary: Metadata field contains empty string key.
value:
error:
errorId: MetadataContainsEmptyKey
description: Metadata field contains empty string key.
recoverySuggestion: Either remove empty string keys or provide non-empty string instead.
diagnosticsId: '1234567898'
'422':
description: Error Response
content:
application/json:
schema:
$ref: '#/components/schemas/422ErrorResponse'
example:
error:
errorId: RequestValidationError
description: We were unable to validate your request, please check your payload against /docs/api
diagnosticsId: '1234567898'
validationErrors:
- model: ClientSessionAPIRequest
errors:
- path: $.customerId
description: Value must be a valid string
get:
tags:
- Client Session API
summary: Retrieve a client session
description: 'This API call retrieves all the details associated with the client session corresponding to the client token that is provided in the request. The fields with empty values are excluded from the response.
'
operationId: retrieve_client_side_token_client_session_get
parameters:
- description: Client token corresponding to the client session to retrieve
schema:
title: Client Token
type: string
description: Client token
name: clientToken
in: query
- $ref: '#/components/parameters/ApiVersionHeader'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/ClientSessionAPIResponse'
'400':
description: Error Response
content:
application/json:
schema:
$ref: '#/components/schemas/400ErrorResponse'
'422':
description: Error Response
content:
application/json:
schema:
$ref: '#/components/schemas/422ErrorResponse'
patch:
tags:
- Client Session API
summary: Update client session
description: 'You can update a clients session created earlier with the `PATCH /client-session` [API call](#operation/create_client_side_token_client_session_post).
The only required field for the request is `clientToken`. Other supported request fields are same as for the `POST /client-session` [API call](#operation/create_client_side_token_client_session_post).
You need to specify only the fields you wish to update. However, if the items to be updated are arrays (e.g.`lineItems`), you need to provide the entire array, including any new or modified items. Primer will replace the full array with whatever is sent in the request. If you want to keep existing items, make sure to include them in your request, anything omitted will be removed.
If you wish to update nested fields on the client session, such as the customer `emailAddress` field, you can pass the `customer` object with only one field, `emailAddress`, to update.
If you simply wish to clear the value of the field, pass `null` as your input.
You can update `paymentMethod.vaultOnSuccess` field but updating of the `paymentMethod.options` field through `PATCH /client-session` is not supported.
The response will contain all the fields of the client session including the ones that were changed.
'
operationId: update_client_side_token_client_session_patch
parameters:
- $ref: '#/components/parameters/ApiVersionHeader'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ClientSessionUpdateAPIRequest'
title: Request
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/ClientSessionAPIResponse'
'400':
description: Error Response
content:
application/json:
schema:
$ref: '#/components/schemas/400ErrorResponse'
examples:
ClientSessionValidationError:
summary: The client token is invalid.
value:
error:
errorId: ClientSessionValidationError
description: The client token is invalid.
recoverySuggestion: Please provide a valid client token.
diagnosticsId: '1234567898'
MetadataContainsEmptyKey:
summary: Metadata field contains empty string key.
value:
error:
errorId: MetadataContainsEmptyKey
description: Metadata field contains empty string key.
recoverySuggestion: Either remove empty string keys or provide non-empty string instead.
diagnosticsId: '1234567898'
'422':
description: Error Response
content:
application/json:
schema:
$ref: '#/components/schemas/422ErrorResponse'
components:
schemas:
CheckoutPaymentMethodOptionSurchargeAPISchema:
title: CheckoutPaymentMethodOptionSurchargeAPISchema
type: object
properties:
amount:
type: integer
minimum: 0.0
format: int64
description: The surcharge amount, in minor units. Surcharge amount must be used in conjunction with line item amounts, if a top level amount is passed then surcharge will not be calculated.
AuthorizationTypeEnum:
title: AuthorizationTypeEnum
enum:
- ESTIMATED
- FINAL
type: string
description: Type of authorization for the payment.
ApplePayAutomaticReloadBilling:
title: ApplePayAutomaticReloadBilling
type: object
required:
- label
- automaticReloadThresholdAmount
properties:
label:
$ref: '#/components/schemas/ApplePayLabel'
amount:
$ref: '#/components/schemas/Amount'
automaticReloadThresholdAmount:
type: integer
format: int64
minimum: 0
description: Balance threshold in minor units (e.g., 500 = $5.00) that triggers the reload.
example:
label: Auto Reload
amount: 2500
automaticReloadThresholdAmount: 500
ApplePayDeferredBilling:
title: ApplePayDeferredBilling
type: object
required:
- label
- deferredPaymentDate
properties:
label:
$ref: '#/components/schemas/ApplePayLabel'
amount:
$ref: '#/components/schemas/Amount'
deferredPaymentDate:
type: string
format: date-time
description: 'Start of billing cycle date and time (UTC) in [ISO 8601 format](https://en.wikipedia.org/wiki/ISO_8601).
'
example:
label: Product Payment
amount: 4999
deferredPaymentDate: '2024-07-03T00:00:00Z'
OptionalAddressAPISchema:
title: OptionalAddressAPISchema
type: object
properties:
firstName:
title: First Name
type: string
minLength: 1
maxLength: 255
lastName:
title: Last Name
type: string
minLength: 1
maxLength: 255
addressLine1:
title: Address Line 1
type: string
description: Street name, Company name or PO Box
minLength: 1
maxLength: 255
addressLine2:
title: Address Line 2
type: string
description: Apartment, Unit or Building number
maxLength: 255
city:
title: City
type: string
description: Name of the city, district, town or village
minLength: 1
maxLength: 255
state:
title: State
type: string
description: State, County or Province
minLength: 1
maxLength: 255
countryCode:
$ref: '#/components/schemas/CountryCodeEnum'
title: Country Code
description: Two letter ISO country code
postalCode:
title: Postal Code
type: string
description: Postal or ZIP code
minLength: 1
maxLength: 255
ApplePayTrialBilling:
title: ApplePayTrialBilling
type: object
required:
- label
properties:
label:
$ref: '#/components/schemas/ApplePayLabel'
amount:
allOf:
- $ref: '#/components/schemas/Amount'
default: 0
recurringStartDate:
type: string
format: date-time
description: 'Start of billing cycle date and time (UTC) in [ISO 8601 format](https://en.wikipedia.org/wiki/ISO_8601). If not provided, Apple Pay defaults it to now().
'
recurringEndDate:
type: string
format: date-time
description: 'End of billing cycle date and time (UTC) in [ISO 8601 format](https://en.wikipedia.org/wiki/ISO_8601).
'
recurringIntervalUnit:
$ref: '#/components/schemas/ApplePayIntervalUnit'
recurringIntervalCount:
$ref: '#/components/schemas/ApplePayIntervalCount'
example:
label: Free Trial
amount: 0
recurringEndDate: '2024-06-09T00:00:00Z'
ApplePayIntervalUnit:
type: string
enum:
- minute
- hour
- day
- month
- year
description: 'Calendar unit representing part of a recurring billing interval.
'
ClientSessionAPIResponse:
title: ClientSessionAPIResponse
type: object
properties:
customerId:
title: The ID of the customer using the checkout
type: string
description: A unique identifier for your customer.
maxLength: 255
orderId:
title: Order ID
type: string
description: Your reference for the payment.
maxLength: 255
currencyCode:
$ref: '#/components/schemas/Currency'
title: Currency
description: 'The 3-letter currency code in [ISO 4217 format](https://en.wikipedia.org/wiki/ISO_4217#Active_codes). e.g. use `USD` for US dollars.
'
amount:
title: Payment amount
minimum: 0.0
type: integer
format: int64
description: "The amount you are going to charge the customer, in minor units. This amount is calculated from the line items, shipping and other amounts provided in the `order`. \nIf a top-level amount is provided, it would override any calculated amount."
metadata:
title: Payment Metadata
type: object
description: 'Additional data to be used throughout the payment lifecycle.
'
customer:
$ref: '#/components/schemas/CustomerDetailsAPISchema'
title: Customer Details
description: More information associated with the customer.
order:
$ref: '#/components/schemas/OrderDetailsAPISchema'
title: Order Details
description: More information associated with the order.
paymentMethod:
$ref: '#/components/schemas/CheckoutPaymentMethodOptionsAPISchema'
title: Payment Method Options
description: Enable certain options associated with the payment methods.
example:
customerId: customer-123
orderId: order-abc
currencyCode: GBP
amount: 650
metadata:
productType: Clothing
customer:
emailAddress: john@primer.io
order:
lineItems:
- itemId: t-shirt-1
description: White T-Shirt
amount: 500
quantity: 1
fees:
- type: SURCHARGE
amount: 100
shipping:
amount: 50
paymentMethod:
vaultOnSuccess: false
vaultOn3DS: false
options:
GOOGLE_PAY:
surcharge:
amount: 100
PAYMENT_CARD:
networks:
VISA:
surcharge:
amount: 10
MASTERCARD:
surcharge:
amount: 20
PAY_NL_IDEAL:
surcharge:
amount: 50
authorizationType: ESTIMATED
OrderLineItemsProductDataAPISchema:
title: OrderLineItemsProductDataAPISchema
description: Details related to the product
type: object
properties:
sku:
title: SKU
type: string
description: The product SKU
minLength: 1
maxLength: 255
brand:
title: Brand
type: string
description: The product brand
minLength: 1
maxLength: 255
color:
title: Color
type: string
description: The product color
minLength: 1
maxLength: 255
globalTradeItemNumber:
title: Global Trade Item Number
type: string
description: The product Global Trade Item Number (e.g. ISBN)
minLength: 1
maxLength: 255
manufacturerPartNumber:
title: Manufacturer Part Number
type: string
description: The product Manufacturer Part Number
minLength: 1
maxLength: 255
weight:
title: Weight
type: number
description: The product weight
minimum: 0.0
weightUnit:
title: Weight Unit
type: string
description: The product weight unit (e.g. kg, g)
minLength: 1
maxLength: 255
pageUrl:
title: Page URL
type: string
description: The product page URL
minLength: 1
maxLength: 1024
Currency:
title: Currency
enum:
- AED
- AFN
- ALL
- AMD
- ANG
- AOA
- ARS
- AUD
- AWG
- AZN
- BAM
- BBD
- BDT
- BGN
- BHD
- BIF
- BMD
- BND
- BOB
- BOV
- BRL
- BSD
- BTN
- BWP
- BYR
- BYN
- BZD
- CAD
- CDF
- CHE
- CHF
- CHW
- CLP
- CNY
- COP
- COU
- CRC
- CUC
- CUP
- CVE
- CZK
- DJF
- DKK
- DOP
- DZD
- EGP
- ERN
- ETB
- EUR
- FJD
- FKP
- GBP
- GEL
- GHS
- GIP
- GMD
- GNF
- GTQ
- GYD
- HKD
- HNL
- HRK
- HTG
- HUF
- IDR
- ILS
- INR
- IQD
- IRR
- ISK
- JMD
- JOD
- JPY
- KES
- KGS
- KHR
- KMF
- KPW
- KRW
- KWD
- KYD
- KZT
- LAK
- LBP
- LKR
- LRD
- LSL
- LYD
- MAD
- MDL
- MKD
- MMK
- MNT
- MOP
- MRO
- MUR
- MVR
- MWK
- MXN
- MXV
- MYR
- MZN
- NAD
- NGN
- NIO
- NOK
- NPR
- NZD
- OMR
- PAB
- PEN
- PGK
- PHP
- PKR
- PLN
- PYG
- QAR
- RON
- RSD
- RUB
- RWF
- SAR
- SBD
- SCR
- SDG
- SEK
- SGD
- SHP
- SOS
- SRD
- SSP
- SVC
- SYP
- SZL
- THB
- TJS
- TMT
- TND
- TOP
- TRY
- TTD
- TWD
- TZS
- UAH
- UGX
- USD
- UYU
- UZS
- VND
- VUV
- WST
- XAF
- XAG
- XAU
- XBA
- XBB
- XBC
- XBD
- XCD
- XDR
- XFU
- XOF
- XPD
- XPF
- XPT
- XSU
- XTS
- XUA
- YER
- ZAR
- ZMW
- ZWL
description: "3-letter currency code in ISO 4217 format, \ne.g. USD for US dollars.\n"
Amount:
type: integer
format: int64
minimum: 0
description: 'Charge amount in minor units (e.g., 500 = $5.00). Some currencies, such as Japanese Yen, do not have minor units. In this case, use the value as-is (e.g., ¥100 = 100).
'
ApplePayAutomaticReloadRequest:
title: ApplePayAutomaticReloadRequest
type: object
required:
- managementUrl
- automaticReloadBilling
properties:
paymentDescription:
$ref: '#/components/schemas/ApplePayPaymentDescription'
billingAgreement:
$ref: '#/components/schemas/ApplePayBillingAgreement'
managementUrl:
$ref: '#/components/schemas/ApplePayManagementUrl'
automaticReloadBilling:
$ref: '#/components/schemas/ApplePayAutomaticReloadBilling'
example:
paymentDescription: Account Auto Reload
billingAgreement: When your balance drops below the threshold, we'll automatically reload your account.
managementUrl: https://example.com/account
automaticReloadBilling:
label: Auto Reload
amount: 2500
automaticReloadThresholdAmount: 500
RecurringTransactionTypeEnum:
title: RecurringTransactionTypeEnum
enum:
- FIRST_PAYMENT
- ECOMMERCE
- SUBSCRIPTION
- UNSCHEDULED
type: string
description: An enumeration.
CheckoutPaymentMethodCardOptionAPISchema:
title: Payment Method Card Option
type: object
properties:
networks:
$ref: '#/components/schemas/CheckoutPaymentMethodOptionCardNetworkAPISchema'
title: Card networks
description: Dictionary of available card networks as a key with value of Payment Method Card Network Option.
captureVaultedCardCvv:
type: boolean
description: Whether to capture CVV for vaulted card.
ErrorObject:
title: Error
type: object
description: An object containing information about the error that occurred.
required:
- errorId
- description
properties:
errorId:
title: Error ID
type: string
description: An error ID
description:
title: Error description
type: string
description: A human readable description of the error
recoverySuggestion:
title: Recovery Suggestion
type: string
description: A suggestion on how to recover from the error.
diagnosticsId:
title: Error diagnostics ID
type: string
description: An ID that you can quote when contacting the Primer support team via our [Support Portal](https://primerapi.atlassian.net/servicedesk/customer/portal/11).
validationErrors:
title: Validation Errors
type: array
items:
type: object
description: Returned in case of a badly formed request
OrderFeesAPISchema:
title: OrderFeesAPISchema
type: object
required:
- amount
properties:
amount:
minimum: 0.0
type: integer
format: int64
description: The fee amount charged to the customer, in minor units. e.g. for $7, use `700`.
type:
type: string
description: The type of fee.
minLength: 1
maxLength: 255
description:
type: string
description: A description of the fee, e.g. "Currency Conversion Fee".
minLength: 1
maxLength: 255
CheckoutPaymentMethodOptionCardNetworkAPISchema:
title: Payment Method Card Network Option
type: object
properties:
AMEX:
$ref: '#/components/schemas/CheckoutPaymentMethodOptionCardNetworkSurchargeAPISchema'
CARTES_BANCAIRES:
$ref: '#/components/schemas/CheckoutPaymentMethodOptionCardNetworkSurchargeAPISchema'
DANKORT:
$ref: '#/components/schemas/CheckoutPaymentMethodOptionCardNetworkSurchargeAPISchema'
DINERS_CLUB:
$ref: '#/components/schemas/CheckoutPaymentMethodOptionCardNetworkSurchargeAPISchema'
DISCOVER:
$ref: '#/components/schemas/CheckoutPaymentMethodOptionCardNetworkSurchargeAPISchema'
ENROUTE:
$ref: '#/components/schemas/CheckoutPaymentMethodOptionCardNetworkSurchargeAPISchema'
ELO:
$ref: '#/components/schemas/CheckoutPaymentMethodOptionCardNetworkSurchargeAPISchema'
HIPER:
$ref: '#/components/schemas/CheckoutPaymentMethodOptionCardNetworkSurchargeAPISchema'
INTERAC:
$ref: '#/components/schemas/CheckoutPaymentMethodOptionCardNetworkSurchargeAPISchema'
JCB:
$ref: '#/components/schemas/CheckoutPaymentMethodOptionCardNetworkSurchargeAPISchema'
MAESTRO:
$ref: '#/components/schemas/CheckoutPaymentMethodOptionCardNetworkSurchargeAPISchema'
MASTERCARD:
$ref: '#/components/schemas/CheckoutPaymentMethodOptionCardNetworkSurchargeAPISchema'
MIR:
$ref: '#/components/schemas/CheckoutPaymentMethodOptionCardNetworkSurchargeAPISchema'
PRIVATE_LABEL:
$ref: '#/components/schemas/CheckoutPaymentMethodOptionCardNetworkSurchargeAPISchema'
UNIONPAY:
$ref: '#/components/schemas/CheckoutPaymentMethodOptionCardNetworkSurchargeAPISchema'
VISA:
$ref: '#/components/schemas/CheckoutPaymentMethodOptionCardNetworkSurchargeAPISchema'
OTHER:
$ref: '#/components/schemas/CheckoutPaymentMethodOptionCardNetworkSurchargeAPISchema'
additionalProperties: false
422ErrorResponse:
title: 422ErrorResponse
type: object
required:
- error
properties:
error:
$ref: '#/components/schemas/ErrorObject'
CheckoutPaymentMethodApplePayOptionAPISchema:
title: ApplePayOptions
type: object
description: Apple Pay configuration used in a client session's payment method options.
properties:
merchantName:
type: string
description: Display name for the merchant shown in the Apple Pay sheet.
minLength: 1
maxLength: 1024
recurringPaymentRequest:
$ref: '#/components/schemas/ApplePayRecurringRequest'
deferredPaymentRequest:
$ref: '#/components/schemas/ApplePayDeferredRequest'
automaticReloadRequest:
$ref: '#/components/schemas/ApplePayAutomaticReloadRequest'
example:
merchantName: My Store
recurringPaymentRequest:
paymentDescription: Monthly Subscription
billingAgreement: You agree to pay monthly until you cancel.
managementUrl: https://example.com/manage
regularBilling:
label: Monthly Plan
amount: 999
recurringStartDate: '2025-06-09T00:00:00Z'
recurringIntervalUnit: month
RecurringPaymentTypeSchema:
$ref: '#/components/schemas/RecurringTransactionTypeEnum'
title: Recurring Payment Type
description: "Payment types, primarily to be used for recurring payments.\nSee the table below for all possible values. \n\nNote: if no field is set, we will return a blank value and make a best effort\nto calculate the downstream fields required for processing the payment.\n\n| paymentType | Use case |\n| --- | --- |\n| `FIRST_PAYMENT` | a customer-initiated payment which is the first in a series of recurring payments or subscription, or a card on file scenario. |\n| `ECOMMERCE` | a customer-initiated payment using stored payment details where the cardholder is present. |\n| `SUBSCRIPTION` | a merchant-initiated payment as part of a series of payments on a fixed schedule and a set amount. |\n| `UNSCHEDULED` | a merchant-initiated payment using stored payment details with no fixed schedule or amount. |\n"
CardNetworkEnum:
title: CardNetworkEnum
enum:
- AMEX
- DANKORT
- DINERS_CLUB
- DISCOVER
- EFTPOS
- ENROUTE
- ELO
- HIPER
- INTERAC
- JCB
- MAESTRO
- MASTERCARD
- MIR
- PRIVATE_LABEL
- UNIONPAY
- VISA
- CARTES_BANCAIRES
- OTHER
type: string
description: 'The list of available card networks.
'
OrderDetailsAPISchema:
title: OrderDetailsAPISchema
type: object
properties:
lineItems:
title: Line Items
type: array
items:
$ref: '#/components/schemas/OrderLineItemsAPISchema'
description: The details of the line items of the order.
countryCode:
$ref: '#/components/schemas/CountryCodeEnum'
title: Country Code
description: The country in which the order is created
retailerCountryCode:
$ref: '#/components/schemas/CountryCodeEnum'
title: Retailer Country Code
description: The country code of the retailer
fees:
title: Fee Details
type: array
items:
$ref: '#/components/schemas/OrderFeesAPISchema'
description: The details of fees charged.
shipping:
$ref: '#/components/schemas/OrderShippingAPISchema'
title: Shipping Details
description: The details of shipping charged.
CheckoutPaymentMethodOptionExtraMerchantDataAPISchema:
title: CheckoutPaymentMethodOptionExtraMerchantDataAPISchema
type: object
additionalProperties: true
ClientSessionAPIRequest:
title: ClientSessionAPIRequest
type: object
properties:
orderId:
title: Order identifier
type: string
description: Your reference for the payment.
minLength: 1
maxLength: 255
currencyCode:
$ref: '#/components/schemas/Currency'
title: Currency
description: 'The 3-letter currency code in [ISO 4217 format](https://en.wikipedia.org/wiki/ISO_4217#Active_codes). e.g. use `USD` for US dollars.
'
amount:
title: Payment amount
minimum: 0.0
type: integer
format: int64
description: 'The amount you would like to charge the customer, in minor units. e.g. for $7, use `700`.
Some currencies, such as Japanese Yen, do not have minor units. In this case you should use the value as it is, without any formatting. For example for ¥100, use `100`.
If the amount is provided on this level, it would override any amount calculated from the provided line items, shipping and other amounts.'
order:
$ref: '#/components/schemas/OrderDetailsAPISchema'
title: Order Details
description: More information associated with the order.
customerId:
title: The ID of the customer using the checkout
type: string
description: 'A unique identifier for your customer.
Create a client session token with a `customerId` to enable the client-side SDK to retrieve and manage your customer''s saved payment methods. A client session token also enables saving payment methods against this customer id.'
minLength: 1
maxLength: 255
customer:
$ref: '#/components/schemas/CheckoutCustomerDetailsAPISchema'
title: Customer Details
description: More information associated with the customer.
metadata:
title: Payment Metadata
type: object
description: 'Additional data to be used throughout the payment lifecycle.
A dictionary of key-value pairs where the values can only be strings or
integers.
e.g. `{"productId": 1001, "merchantId": "a13bsd62s"}`
'
paymentMethod:
$ref: '#/components/schemas/CheckoutPaymentMethodOptionsAPISchema'
title: Payment Method Options
description: Enable certain options associated with the payment method.
additionalProperties: false
example:
orderId: order-abc
currencyCode: GBP
amount: 1000
order:
countryCode: FR,
lineItems:
- itemId: shoe-123
description: Blue Shoe
amount: 100
quantity: 10
customerId: customer-123
customer:
emailAddress: john@primer.io
metadata:
productType: Shoes
paymentMethod:
descriptor: 'Purchase: Shoes'
paymentMethodType: PAYMENT_CARD
vaultOnSuccess: true
vaultOn3DS: false
options:
PAYMENT_CARD:
networks:
VISA:
surcharge:
amount: 10
GOOGLE_PAY:
surcharge:
amount: 20
authorizationType: ESTIMATED
ApplePayManagementUrl:
type: string
format: uri
minLength: 1
maxLength: 1024
description: 'URL where users can manage or cancel their Apple Pay billing agreements or subscriptions.
'
ClientSessionWarningsAPIResponse:
title: ClientSessionWarningsAPIResponse
type: object
properties:
type:
type: string
description: The type of the connection involved
example: TAXJAR
code:
type: string
description: A unique code describing the particular issue
example: MISSING_DATA
message:
type: string
description: More information as to the reason for the warning
ProductTypeEnum:
title: ProductTypeEnum
enum:
- PHYSICAL
- DIGITAL
type: string
description: An enumeration
CountryCodeEnum:
title: CountryCodeEnum
enum:
- AW
- AF
- AO
- AI
- AX
- AL
- AD
- AE
- AR
- AM
- AS
- AQ
- TF
- AG
- AU
- AT
- AZ
- BI
- BE
- BJ
- BQ
- BF
- BD
- BG
- BH
- BS
- BA
- BL
- BY
- BZ
- BM
- BO
- BR
- BB
- BN
- BT
- BV
- BW
- CF
- CA
- CC
- CH
- CL
- CN
- CI
- CM
- CD
- CG
- CK
- CO
- KM
- CV
- CR
- CU
- CW
- CX
- KY
- CY
- CZ
- DE
- DJ
- DM
- DK
- DO
- DZ
- EC
- EG
- ER
- EH
- ES
- EE
- ET
- FI
- FJ
- FK
- FR
- FO
- FM
- GA
- GB
- GE
- GG
- GH
- GI
- GN
- GP
- GM
- GW
- GQ
- GR
- GD
- GL
- GT
- GF
- GU
- GY
- HK
- HM
- HN
- HR
- HT
- HU
- ID
- IM
- IN
- IO
- IE
- IR
- IQ
- IS
- IL
- IT
- JM
- JE
- JO
- JP
- KZ
- KE
- KG
- KH
- KI
- KN
- KR
- KW
- LA
- LB
- LR
- LY
- LC
- LI
- LK
- LS
- LT
- LU
- LV
- MO
- MF
- MA
- MC
- MD
- MG
- MV
- MX
- MH
- MK
- ML
- MT
- MM
- ME
- MN
- MP
- MZ
- MR
- MS
- MQ
- MU
- MW
- MY
- YT
- NA
- NC
- NE
- NF
- NG
- NI
- NU
- NL
- 'NO'
- NP
- NR
- NZ
- OM
- PK
- PA
- PN
- PE
- PH
- PW
- PG
- PL
- PR
- KP
- PT
- PY
- PS
- PF
- QA
- RE
- RO
- RU
- RW
- SA
- SD
- SN
- SG
- GS
- SH
- SJ
- SB
- SL
- SV
- SM
- SO
- PM
- RS
- SS
- ST
- SR
- SK
- SI
- SE
- SZ
- SX
- SC
- SY
- TC
- TD
- TG
- TH
- TJ
- TK
- TM
- TL
- TO
- TT
- TN
- TR
- TV
- TW
- TZ
- UG
- UA
- UM
- UY
- US
- UZ
- VA
- VC
- VE
- VG
- VI
- VN
- VU
- WF
- WS
- YE
- ZA
- ZM
- ZW
description: "2-letter country code in ISO 3166-1 alpha format, \ne.g. FR for France and GB for the United Kingdom.\n"
ApplePayBillingAgreement:
type: string
minLength: 1
maxLength: 1024
description: 'Terms and conditions the user agrees to when authorizing Apple Pay billing.
'
OrderLineItemsAPISchema:
title: OrderLineItemsAPISchema
description: "The details of the line items of the order.\n\nThe total amount of a line item is calculated like so: \n````\n totalAmount = (amount * quantity) - discountAmount + taxAmount\n```\n"
type: object
required:
- amount
properties:
itemId:
title: Item ID
type: string
description: A unique identifier for the line item.
minLength: 1
maxLength: 255
name:
title: Name
type: string
description: A name of the item.
maxLength: 255
description:
title: Item ID
type: string
description: A description of the item.
maxLength: 255
amount:
minimum: 0.0
type: integer
format: int64
description: The amount charged to the customer, in minor units. The minimum amount is 0. The maximum amount is the limit of `int64`.
quantity:
type: integer
description: The number of the particular line item that is being ordered.
default: 1
format: int64
discountAmount:
title: Discount Amount
minimum: 0.0
type: integer
format: int64
description: Any discount applicable to this item, in minor units. This discount is applied for the entire line item, and not per `quantity`.
taxAmount:
title: Tax Amount
minimum: 0.0
type: integer
format: int64
description: The tax charged on this item, in minor units. This tax amount is applied for the entire line item, and not per `quantity`.
taxCode:
title: Tax Code
type: string
description: The tax code associated with this item, in minor units. This is required for Primer-initiated tax calculations.
minLength: 1
maxLength: 255
productType:
$ref: '#/components/schemas/ProductTypeEnum'
title: Product Type
description: An identifier for the product type.
productData:
$ref: '#/components/schemas/OrderLineItemsProductDataAPISchema'
title: Product Data
description: Details related to the product
400ErrorResponse:
title: 400ErrorResponse
type: object
required:
- error
properties:
error:
allOf:
- $ref: '#/components/schemas/ErrorObject'
- type: object
properties:
paymentId:
title: Payment ID
type: string
description: Payment ID of the related pay
paymentStatus:
title: Status
type: string
description: Status of the related payment
ApplePayRegularBilling:
title: ApplePayRegularBilling
type: object
required:
- label
properties:
label:
$ref: '#/components/schemas/ApplePayLabel'
amount:
$ref: '#/components/schemas/Amount'
recurringStartDate:
type: string
format: date-time
description: 'Start of billing cycle date and time (UTC) in [ISO 8601 format](https://en.wikipedia.org/wiki/ISO_8601). If not provided, Apple Pay defaults it to now().
'
recurringEndDate:
type: string
format: date-time
description: 'End of billing cycle date and time (UTC) in [ISO 8601 format](https://en.wikipedia.org/wiki/ISO_8601).
'
recurringIntervalUnit:
$ref: '#/components/schemas/ApplePayIntervalUnit'
recurringIntervalCount:
$ref: '#/components/schemas/ApplePayIntervalCount'
example:
label: Monthly Subscription
amount: 999
recurringStartDate: '2024-06-03T00:00:00Z'
recurringIntervalUnit: month
ApplePayLabel:
type: string
minLength: 1
maxLength: 1024
description: 'Display label shown in the Apple Pay sheet to describe this billing option.
'
FirstPaymentReasonEnum:
title: FirstPaymentReasonEnum
enum:
- CardOnFile
- Recurring
- Unscheduled
type: string
description: 'The reason for the first payment. This is used for informing payment processors about the specific reason a payment method is being stored.
Defaults to None if not provided.
'
CustomerDetailsAPISchema:
title: CustomerDetailsAPISchema
type: object
properties:
emailAddress:
title: Email Address
type: string
description: 'Customer email address.
Note: It is recommended to include this field if a 3DS check will be performed
'
format: email
mobileNumber:
title: Mobile Number
type: string
description: The customer's mobile number
maxLength: 255
firstName:
title: First Name
type: string
description: The customer's first name
maxLength: 255
lastName:
title: Last Name
type: string
description: The customer's last name
maxLength: 255
billingAddress:
$ref: '#/components/schemas/OptionalAddressAPISchema'
title: Billing Address
description: 'Customer billing address.
Note: It is recommended to include this field if a 3DS check will be performed
'
shippingAddress:
$ref: '#/components/schemas/OptionalAddressAPISchema'
title: Shipping Address
description: Customer shipping address
taxId:
title: Tax ID
type: string
description: The customer's tax id number for tax exemptions
maxLength: 255
nationalDocumentId:
title: National Document ID
type: string
description: The customer's national identification number
maxLength: 255
CheckoutPaymentMethodOptionsAPISchema:
title: PaymentMethodOptionsAPISchema
type: object
properties:
vaultOnSuccess:
type: boolean
description: Whether the payment method should be vaulted on a successful payment or not.
default: false
vaultOn3DS:
type: boolean
description: Whether the payment method should be vaulted after a successful 3DS authentication or not.
default: false
vaultOnAgreement:
type: boolean
description: Whether the payment method should be vaulted right when payment is created or not.
default: false
descriptor:
title: Payment descriptor
type: string
description: A description of the payment, as it would typically appear on a bank statement.
maxLength: 255
paymentType:
$ref: '#/components/schemas/RecurringPaymentTypeSchema'
orderedAllowedCardNetworks:
title: Allowed card networks
type: array
items:
$ref: '#/components/schemas/CardNetworkEnum'
description: "If provided, the checkout will run the validation on the entered card number and raise an error in case the card network is not supported.\n\nThe order sets the default card network that should be used in the case of co-badged cards. \ne.g. in the case of `[\"VISA\", \"CARTES_BANCAIRES\", \"MASTERCARD\"]` - if the user enters a \"Visa\" / \"Cartes Bancaires\" card: the default is Visa.\n\nValues should be unique. \n\nIf `null` or nothing passed in the request, the following list with all card networks will be returned in the response:\n\n`[\"VISA\", \"MASTERCARD\", \"AMEX\", \"MAESTRO\", \"UNIONPAY\", \"CARTES_BANCAIRES\", \"DANKORT\", \"DINERS_CLUB\", \"DISCOVER\", \"EFTPOS\", \"ENROUTE\", \"ELO\", \"HIPER\", \"INTERAC\", \"JCB\", \"MIR\", \"OTHER\"]`\n"
options:
title: Payment Method Options
type: object
description: "Additional options for the payment methods represented as dictionary \nwith key of [available payment methods](/docs/connections/payment-methods/available-payment-methods) and value of corresponding options.\n"
properties:
:
type: object
$ref: '#/components/schemas/CheckoutPaymentMethodOptionAPISchema'
APPLE_PAY:
type: object
$ref: '#/components/schemas/CheckoutPaymentMethodApplePayOptionAPISchema'
PAYMENT_CARD:
type: object
$ref: '#/components/schemas/CheckoutPaymentMethodCardOptionAPISchema'
authorizationType:
title: Authorization Type
$ref: '#/components/schemas/AuthorizationTypeEnum'
description: 'Allows to adjust the authorized amount after the authorization, if supported by payment method.
`FINAL` - the authorized amount is final and can not be adjusted. Adjusting the amount can be only done via canceling the payment and re-authorization with new amount.
`ESTIMATED` - the amount can be adjusted after the authorization, if supported by payment method.
'
firstPaymentReason:
title: First Payment Reason
$ref: '#/components/schemas/FirstPaymentReasonEnum'
description: 'The reason for the first payment. This is used for informing payment processors about the specific reason a payment method is being stored.
Defaults to None if not provided.
'
CheckoutPaymentMethodOptionCardNetworkSurchargeAPISchema:
type: object
properties:
surcharge:
$ref: '#/components/schemas/CheckoutPaymentMethodOptionSurchargeAPISchema'
title: Surcharge
description: Surcharge information
ClientSessionUpdateAPIRequest:
title: ClientSessionUpdateAPIRequest
type: object
properties:
clientToken:
title: Client token
type: string
description: Client token for use in the Primer-JS SDK obtained via `POST` /client-session API call.
customerId:
title: The ID of the customer using the checkout.
type: string
description: A unique identifier for your customer.
orderId:
title: Order ID
type: string
description: Your reference for the order.
currencyCode:
title: Currency
type: string
description: 'The 3-letter currency code in [ISO 4217 format](https://en.wikipedia.org/wiki/ISO_4217#Active_codes). e.g. use `USD` for US dollars.
'
amount:
title: Payment amount
minimum: 0.0
type: integer
format: int64
description: 'The amount you would like to charge the customer, in minor units. e.g. for $7, use `700`.
Some currencies, such as Japanese Yen, do not have minor units. In this case you should use the value as it is, without any formatting. For example for ¥100, use `100`.
If the amount is provided on this level, it would override any amount calculated from the provided line items, shipping and other amounts.'
metadata:
title: Payment Metadata
type: object
description: 'Additional data to be used throughout the payment lifecycle.
Provide the entire object to update it. Anything provided previously will be overwritten.
'
customer:
$ref: '#/components/schemas/CheckoutCustomerDetailsAPISchema'
title: Customer Details
description: 'More information associated with the customer.
Each of the fields in this object must be updated in its entirety, i.e. provide the entire object to update it. Anything provided previously will be overwritten.
'
order:
$ref: '#/components/schemas/OrderDetailsAPISchema'
title: Order Details
description: 'More information associated with the order.
Each of the fields in this object must be updated in its entirety, i.e. provide the entire object to update it. Anything provided previously will be overwritten.
'
paymentMethod:
$ref: '#/components/schemas/CheckoutPaymentMethodOptionsAPISchema'
title: Payment Method Options
description: Enable certain options associated with the payment method. Provide the entire object to update it. Anything provided previously will be overwritten.
additionalProperties: false
example:
clientToken: client-session-token
customerId: customer-123
orderId: order-abc
customer:
emailAddress: john@primer.io
amount: 500
paymentMethod:
authorizationType: FINAL
order:
lineItems:
- itemId: shoe-123
description: Blue Shoe
amount: 100
quantity: 10
countryCode: FR
ApplePayPaymentDescription:
type: string
minLength: 1
maxLength: 1024
description: 'Text shown to the user during Apple Pay authorization.
'
OrderShippingAPISchema:
title: OrderShippingAPISchema
type: object
properties:
amount:
minimum: 0.0
type: integer
format: int64
description: The shipping amount charged to the customer, in minor units. e.g. for $7, use `700`.
methodId:
type: string
description: Your unique identifier of the shipping method selected by the customer.
methodName:
type: string
description: The display label for the selected shipping method (e.g. "Standard Shipping").
methodDescription:
type: string
description: The descriptive text that is displayed alongside the shipping method name.
ApplePayIntervalCount:
type: integer
format: int64
minimum: 1
description: 'Number of calendar units that make up the full recurring interval (e.g., 1 = monthly).
'
ApplePayRecurringRequest:
title: ApplePayRecurringRequest
type: object
required:
- managementUrl
- regularBilling
properties:
paymentDescription:
$ref: '#/components/schemas/ApplePayPaymentDescription'
billingAgreement:
$ref: '#/components/schemas/ApplePayBillingAgreement'
managementUrl:
$ref: '#/components/schemas/ApplePayManagementUrl'
regularBilling:
$ref: '#/components/schemas/ApplePayRegularBilling'
trialBilling:
$ref: '#/components/schemas/ApplePayTrialBilling'
example:
paymentDescription: Subscription Service
billingAgreement: You authorize us to charge your payment method monthly. You can cancel anytime.
managementUrl: https://example.com/subscription
regularBilling:
label: Premium Plan
amount: 1999
recurringStartDate: '2024-06-03T00:00:00Z'
recurringIntervalUnit: month
recurringIntervalCount: 1
trialBilling:
label: Free Trial
amount: 0
recurringEndDate: '2024-06-09T00:00:00Z'
CheckoutPaymentMethodOptionAPISchema:
title: PaymentMethodOptionAPISchema
type: object
description: 'Options for the payment method of type `PAYMENT_METHOD_TYPE`.
'
required:
- surcharge
properties:
surcharge:
$ref: '#/components/schemas/CheckoutPaymentMethodOptionSurchargeAPISchema'
title: Surcharge
description: Surcharge information
extraMerchantData:
$ref: '#/components/schemas/CheckoutPaymentMethodOptionExtraMerchantDataAPISchema'
title: Extra Merchant Data
description: "For payments using the Klarna payment method, depending on the merchant segment and/or \nthe services available to consumers, Klarna may require additional information regarding \nthe customer, the merchant and/or the purchase. This information, referred to as extra merchant \ndata (EMD), consist of data that is typically not available at the checkout, but which enables \nKlarna to complete an assertive risk assessment, enable new promotional products and improve \nconversion rates for a boost in performance.\n"
merchantName:
title: Merchant name
type: string
description: "For payments using the Apple Pay payment method, use this field to override the default merchant \nname for the Primer account from showing on the Apple Pay flow. For example, if your merchant \nname on your account is \"Company X\" but you want to display a specific store name on the Apple Pay \nflow, you can set the `merchantName` to \"Store name A\".\n"
CheckoutCustomerDetailsAPISchema:
title: CustomerDetailsAPISchema
type: object
properties:
emailAddress:
title: Email Address
type: string
description: 'Customer email address.
Must be a valid email address. Supports internationalized email addresses.
'
format: email
mobileNumber:
title: Mobile Number
type: string
description: The customer's mobile number
minLength: 1
maxLength: 255
firstName:
title: First Name
type: string
description: The customer's first name
minLength: 1
maxLength: 255
lastName:
title: Last Name
type: string
description: The customer's last name
minLength: 1
maxLength: 255
billingAddress:
$ref: '#/components/schemas/OptionalAddressAPISchema'
title: Billing Address
description: 'Customer billing address.
'
shippingAddress:
$ref: '#/components/schemas/OptionalAddressAPISchema'
title: Shipping Address
description: Customer shipping address
taxId:
title: Tax ID
type: string
description: The customer's tax id number for tax exemptions
maxLength: 255
nationalDocumentId:
title: National Document ID
type: string
description: The customer's national identification number
maxLength: 255
ClientSessionWithTokenAPIResponse:
title: ClientSessionWithTokenAPIResponse
type: object
required:
- clientToken
- clientTokenExpirationDate
properties:
clientToken:
title: Client token
type: string
description: Client token used to initialize the SDK on all platforms.
clientTokenExpirationDate:
title: Expiration Date
type: string
description: Expiration date & time of the client token (UTC with no timezoneinfo).
format: date-time
orderId:
title: Order ID
type: string
description: Your reference for the payment.
currencyCode:
title: Currency
type: string
description: 'The 3-letter currency code in [ISO 4217 format](https://en.wikipedia.org/wiki/ISO_4217#Active_codes). e.g. use `USD` for US dollars.
'
amount:
title: Payment amount
minimum: 0.0
type: integer
format: int64
description: 'The amount you would like to charge the customer, in minor units. e.g. for $7, use `700`.
Some currencies, such as Japanese Yen, do not have minor units. In this case you should use the value as it is, without any formatting. For example for ¥100, use `100`.
If the amount is provided on this level, it would override any amount calculated from the provided line items, shipping and other amounts.'
order:
$ref: '#/components/schemas/OrderDetailsAPISchema'
title: Order Details
description: More information associated with the order.
customerId:
title: The ID of the customer using the checkout
type: string
description: A unique identifier for your customer.
customer:
$ref: '#/components/schemas/CustomerDetailsAPISchema'
title: Customer Details
description: More information associated with the customer.
metadata:
title: Payment Metadata
type: object
description: 'Additional data to be used throughout the payment lifecycle.
'
paymentMethod:
$ref: '#/components/schemas/CheckoutPaymentMethodOptionsAPISchema'
title: Payment Method Options
description: Enable certain options associated with the payment methods.
warnings:
$ref: '#/components/schemas/ClientSessionWarningsAPIResponse'
description: Warning messages to indicate missing information that are required for payment methods, checkout modules and other features; or when third-party services are unavailable.
example:
clientToken: client-session-token
clientExpirationDate: '2019-08-24T14:15:22Z'
customerId: customer-123
orderId: order-abc
currencyCode: GBP
metadata:
productType: Shoe
customer:
emailAddress: john@primer.io
amount: 20
order:
countryCode: FR
fees:
- type: SURCHARGE
amount: 20
paymentMethod:
vaultOnSuccess: true
vaultOn3DS: false
options:
PAYMENT_CARD:
networks:
VISA:
surcharge:
amount: 10
captureVaultedCardCvv: true
GOOGLE_PAY:
surcharge:
amount: 20
authorizationType: ESTIMATED
warnings:
- type: TAXJAR
code: MISSING_DATA
message: Shipping details are required for calculating tax.
ApplePayDeferredRequest:
title: ApplePayDeferredRequest
type: object
required:
- managementUrl
- deferredBilling
properties:
paymentDescription:
$ref: '#/components/schemas/ApplePayPaymentDescription'
billingAgreement:
$ref: '#/components/schemas/ApplePayBillingAgreement'
managementUrl:
$ref: '#/components/schemas/ApplePayManagementUrl'
deferredBilling:
$ref: '#/components/schemas/ApplePayDeferredBilling'
freeCancellationDate:
type: string
format: date-time
description: 'End of billing cycle date and time (UTC) in [ISO 8601 format](https://en.wikipedia.org/wiki/ISO_8601).
'
freeCancellationTimeZone:
type: string
minLength: 3
maxLength: 50
description: Time zone for interpreting freeCancellationDate.
example:
paymentDescription: Deferred Payment
billingAgreement: You will be charged when the item ships. Free cancellation until shipping.
managementUrl: https://example.com/orders
deferredBilling:
label: Order Payment
amount: 4999
deferredPaymentDate: '2024-07-03T00:00:00Z'
freeCancellationDate: '2024-07-02T00:00:00Z'
freeCancellationTimeZone: UTC
parameters:
ApiVersionHeader:
required: true
schema:
title: X-API-VERSION
type: string
example: '2.4'
name: X-API-VERSION
description: Specifies the version of the API to use. This must be set to `2.4`.
in: header
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: X-API-KEY
x-readme:
explorer-enabled: true
samples-languages:
- curl
- javascript
- python
- kotlin
- swift
headers:
- key: X-API-VERSION
value: '2.4'