openapi: 3.2.0 info: title: Checkouts API version: 1.0.0 servers: - url: https://global-api-sandbox.afterpay.com description: Sandbox - url: https://global-api.afterpay.com description: Production tags: - name: Checkouts paths: /v2/checkouts: post: operationId: create-checkout-1 summary: Create Checkout description: The `checkouts` endpoint is responsible for creating a new checkout and returning the associated checkout token. tags: - Checkouts parameters: - name: Authorization in: header description: Basic authentication required: true schema: type: string - name: User-Agent in: header required: true schema: type: string - name: Accept in: header required: false schema: type: string default: application/json responses: '201': description: Returns a token, expiry date/time, and checkout URL if successful. content: application/json: schema: $ref: '#/components/schemas/Checkout-Response' '400': description: Bad Request content: application/json: schema: description: Any type '422': description: '| errorCode | Description | | --- | --- | | invalid_object | One or more required fields were missing or invalid. | | unsupported_payment_type | The `amount` is outside of the merchant''s payment limits, as returned by GET Configuration. | | unsupported_currency | One or more Money objects contained a currency that differs from the merchant''s account currency. | ' content: application/json: schema: description: Any type requestBody: description: '' content: application/json: schema: $ref: '#/components/schemas/Checkout-Request' /v2/checkouts/{token}: get: operationId: get-checkout summary: Get Checkout description: 'This endpoint retrieves an incomplete individual checkout by token. Checkout details are only retained in this temporary format for up to 60 minutes. If a checkout token expires or has an order created against it, it can no longer be retrieved from this endpoint. To retrieve a Payment record (Afterpay Order) along with its associated checkout details, see Get Payment By Token.' tags: - Checkouts parameters: - name: token in: path description: The token of the checkout to be retrieved. required: true schema: type: string - name: Authorization in: header description: Basic authentication required: true schema: type: string - name: User-Agent in: header required: true schema: type: string - name: Accept in: header required: false schema: type: string default: application/json responses: '200': description: 'Returns an object combining the [Checkout Request](reference/Checkouts.v2.yaml/components/schemas/Checkout-Request) and [Checkout Response](reference/Checkouts.v2.yaml/components/schemas/Checkout-Response) for a provided token. ' content: application/json: schema: $ref: '#/components/schemas/get-checkout_Response_200' '404': description: No checkout token was provided. content: application/json: schema: description: Any type '412': description: The checkout token is invalid, expired, completed, or does not exist. content: application/json: schema: description: Any type components: schemas: Consumer: type: object properties: email: type: string format: email givenNames: type: string description: The consumer's first name surname: type: string description: The consumer's last name phoneNumber: type: string required: - email description: The consumer data model is used for gathering essential user information. It captures details such as the individual's first name, represented by `givenNames`, and their last name, captured under `surname`. In addition, it stores the user's contact number under `phoneNumber` and their email address under `email`. These fields collectively provide contact and identification details for a user. title: Consumer MoneyCurrency: type: string enum: - AUD - NZD - USD - CAD - GBP title: MoneyCurrency get-checkout_Response_200: type: object properties: token: type: string description: Checkout token to be used to complete payment. expires: type: string description: The UTC timestamp of when the checkout token will expire, in ISO 8601 format. redirectCheckoutUrl: type: string description: A URL that can be used to redirect the customer to the Afterpay screenflow directly from the merchant backend. amount: $ref: '#/components/schemas/Money' consumer: $ref: '#/components/schemas/Consumer' merchantReference: type: string billing: $ref: '#/components/schemas/Contact' shipping: $ref: '#/components/schemas/Contact' merchant: $ref: '#/components/schemas/CheckoutRequestMerchant' items: type: array items: $ref: '#/components/schemas/Item' courier: $ref: '#/components/schemas/Shipping-Courier' taxAmount: $ref: '#/components/schemas/Money' shippingAmount: $ref: '#/components/schemas/Money' discounts: type: array items: $ref: '#/components/schemas/Discount' description: type: string mode: type: string default: standard description: 'Must be set to `express` to enable express checkout. Allowed values: `express` `standard`' required: - amount - consumer title: get-checkout_Response_200 Checkout-Response: type: object properties: token: type: string description: Checkout token to be used to complete payment. expires: type: string description: The UTC timestamp of when the checkout token will expire, in ISO 8601 format. redirectCheckoutUrl: type: string description: A URL that can be used to redirect the customer to the Afterpay screenflow directly from the merchant backend. title: Checkout-Response Checkout-Request: type: object properties: amount: $ref: '#/components/schemas/Money' consumer: $ref: '#/components/schemas/Consumer' merchantReference: type: string billing: $ref: '#/components/schemas/Contact' shipping: $ref: '#/components/schemas/Contact' merchant: $ref: '#/components/schemas/CheckoutRequestMerchant' items: type: array items: $ref: '#/components/schemas/Item' courier: $ref: '#/components/schemas/Shipping-Courier' taxAmount: $ref: '#/components/schemas/Money' shippingAmount: $ref: '#/components/schemas/Money' discounts: type: array items: $ref: '#/components/schemas/Discount' description: type: string mode: type: string default: standard description: 'Must be set to `express` to enable express checkout. Allowed values: `express` `standard`' required: - amount - consumer description: Individual Checkout title: Checkout-Request ShippingCourierPriority: type: string enum: - STANDARD - EXPRESS title: ShippingCourierPriority Contact: type: object properties: name: type: string line1: type: string description: First line of the address line2: type: string description: 'Second line of the address ' area1: type: string description: '- AU: Suburb - NZ: Town or City - UK: Postal Town - US: City - Canada: City' area2: type: string description: '- NZ: suburb - UK: village or local area.' region: type: string description: "- AU: State \n- NZ: Region\n- UK: County\n- US: State\n- CA: Province or Territory" postcode: type: string countryCode: $ref: '#/components/schemas/ContactCountryCode' phoneNumber: type: string description: The phone number, in [E.123](https://en.wikipedia.org/wiki/E.123) format. required: - name - line1 - area1 - region - postcode - countryCode description: "This data model is used for storing an individual's contact information. Mandatory fields such as **name**, **line1**, **area1**, **region**, **postcode**, and **countryCode** help in capturing vital information about a user's location. \n\nThe `line2` and `area2` fields provide additional space for extended addresses, while `phoneNumber` can be used to store the user's contact number.\n\n\n\n The `area1`, `area2` and `region` properties feature localized terminology based on country. Refer to the property descriptions for insights on each country's specific usage \n\n" title: Contact Shipping-Courier: type: object properties: shippedAt: type: string format: date-time name: type: string tracking: type: string priority: $ref: '#/components/schemas/ShippingCourierPriority' description: 'Essential information for tracking a shipment. The `shippedAt` key represents the date and time when the item was shipped. This value follows the [ISO 8601 standard format](https://www.iso.org/iso-8601-date-and-time-format.html) for date and time representations. The `name` field indicates the courier service employed to handle the shipment (e.g. FEDEX, UPS). For orders that are picked up in-store (also known as Buy-Online-Pickup-Instore), please use "INSTORE_PICKUP" as the `name` field value. The `tracking` key represents a unique tracking number provided by the courier service to monitor the shipment''s progress. It''s a valuable tool for customers and businesses to track and trace their packages. The `priority` field tracks the shipping speed or service level associated with the delivery. ' title: Shipping-Courier CheckoutRequestMerchant: type: object properties: redirectConfirmUrl: type: string redirectCancelUrl: type: string popupOriginUrl: type: string description: The URL location from which Afterpay is initiated (required for express checkout). Optional for standard checkout when a `redirectConfirmURL` is provided. name: type: string description: The merchant name displayed in the Afterpay checkout flow, confirmation & refund emails, and the consumer portal required: - redirectConfirmUrl - redirectCancelUrl title: CheckoutRequestMerchant ContactCountryCode: type: string enum: - AU - NZ - US - CA - GB title: ContactCountryCode Item: type: object properties: name: type: string sku: type: string pageUrl: type: string imageUrl: type: string quantity: type: integer price: $ref: '#/components/schemas/Money' categories: type: array items: type: array items: type: string estimatedShipmentDate: type: string format: date preorder: type: boolean default: false required: - name - quantity - price description: "This data model is used to store crucial product details. The `price.amount` field represents the unit price of the individual item. The `quantity` field shows the number of units of the item. The `name` field denotes the name of the product, while `sku` holds the Stock Keeping Unit identifier. 100 is the maximum number of item objects in the items array.\n\n It is crucial that the `price.amount` represents the unit price of the individual item.\n **Never** populate the `price.amount` by multiplying the quantity by the unit cost. Always enter the price for a single unit to maintain data accuracy.\n\n" title: Item Discount: type: object properties: displayName: type: string amount: $ref: '#/components/schemas/Money' description: Discount applied to an order title: Discount Money: type: object properties: amount: type: string description: The amount as a string representation of a decimal number, rounded to 2 decimal places. currency: $ref: '#/components/schemas/MoneyCurrency' required: - amount - currency description: Object containing amount and currency title: Money securitySchemes: sec0: type: http scheme: basic