Elastic Path Payments API

When you [checkout](/docs/api/carts/checkout) a [cart](/docs/api/carts/cart-management), an unpaid [order](/docs/api/carts/orders) is returned. You can process the payment for the order though a payment gateway. :::note - You need to configure and enable a payment gateway before you can accept payments for orders. - Configure your store to use [Manual Gateway](/docs/api/payments/update-manual-gateway) to process payments if the order total is zero or the payment is through non-supported payment providers. - There are a number of actions that happen to your inventory when checking out and paying for an order. For more information, see [Inventory](/docs/api/pxm/inventory/inventories-introduction). - We recommend to wait until the payment confirmation process is fully completed before proceeding with any additional updates to the order. Making simultaneous updates to the same entity immediately after payment confirmation can lead to a race condition. To learn more information on handling parallel calls to API objects, see [Parallel Calls to API Objects](/guides/Getting-Started/api-contract#parallel-calls-to-api-objects). ::: ### Payment Methods Depending on the chosen gateway, you may or may not have access to capture funds immediately or authorize for later payment. To make a partial payment in Postman through any payment gateway, specify the desired payment amount in the amount field within the request body. To learn about Split Payments, see the [Split Payments](/docs/api/payments/payment-gateways-introduction#split-payments) section. #### Purchase The simplest method is purchase. The gateway attempts to charge the customer immediately, and the result of the attempt is returned. You can partially pay funds using purchase method. The gateway attempts to charge the customer immediately, and the payment status for an order shows `partially_paid`. When you Get an order, you can see the following fields in the `meta` object: - `balance_owing`: Specifies the outstanding funds required to complete an order. It considers all complete or pending transactions, including authorized, paid, and captured transactions. (`balance_owing` = order total - `authorized` amount - `paid` amount). - `paid`: Specifies the total amount of purchased or captured transactions. - `authorized`: Specifies the total amount of completed or pending authorized transactions for an order. #### Authorize You can `authorize` a payment so funds can later be captured when an item is dispatched or restocked. You can partially pay for an order using `authorize` payment method so that the order is `partially_authorized`. The transaction must be complete for the order status to be `partially_authorized`. For more information about order and payment statuses for split payments, see [Split Payments](/docs/api/payments/payment-gateways-introduction#split-payments). #### Capture After authorizing a transaction, you have to capture the authorized funds. :::note We recommend capturing payments several hours to days after the authorization to mitigate risks of fraud and chargebacks. When you sell digital goods that are delivered immediately, we recommend using a single purchase call instead of separate authorize and capture calls. ::: After the payment is `partially_authorized`, you must `capture` the authorized transaction later. Once you capture the authorized transactions, the order payment status will change to `partially_paid`. #### Refunds You can use either the Refund through Composable Commerce or use the Mark as Refunded capability, or a combination of both capabilities. For more information about refund for split payments, see [Refund a Payment](/docs/api/carts/refund-a-transaction). #### Refund through Composable Commerce You can start a full or partial refund to a supported payment provider directly from Commerce Manager or the API. When you start the refund process, the refund request is sent to the payment gateway. You no longer have to log on to your payment gateway's console to process the refund. When you process a refund, use the refund endpoint to pass the refund amount. If you don't pass an amount, the refund is processed as Mark as refunded. For more information, see the Mark as Refunded section. Each time a partial refund is triggered, the transaction.updated event is generated and updated with refunded.amount. The `order.updated` event is also triggered. The `order.refunded` event generates when the full amount is refunded. #### Mark as Refunded You can use your payment gateway's console to process a refund. Process the refund first in the payment gateway and then use the **Mark as Refunded** capability in Composable Commerce to complete the process. When an order is **Marked as refunded**, the payment status `order.payment.status` is set to `refunded`. In this case, the `order.updated`, `transaction.updated` and `order.refunded` events are generated.

Operations 8

POST /v2/carts/{cartID}/payments Create Stripe Payment Intent for a Cart #
POST /v2/orders/{orderID}/payments Payments #
POST /v2/orders/{orderID}/transactions/{transactionID}/confirm Confirm Payment #
POST /v2/orders/{orderID}/transactions/{transactionID}/capture Capture a Transaction #
POST /v2/orders/{orderID}/transactions/{transactionID}/refund Refund a Transaction #
GET /v2/orders/{orderID}/transactions Get Order Transactions #
GET /v2/orders/{orderID}/transactions/{transactionID} Get a Transaction #
POST /v2/orders/{orderID}/transactions/{transactionID}/cancel Cancel a Transaction #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/elastic-path-payments-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

elastic-path-payments-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Carts, Checkout, Orders Introduction Payments API
  description: 'A cart contains a list of the products that a shopper adds to the cart while browsing your catalog. In the context of a cart, a selected product is called a cart item.


    A cart item identifies the product, the product price, the quantity selected, and the total price for the quantity selected. The cart displays a running total of the cost for the selected products plus the calculated tax.


    You can allow your shoppers to add custom text to a product when adding an item to their carts. This is useful, for example, if you have a product like a T-shirt that can be personalized. See [Add product to cart](/docs/api/carts/manage-carts#add-product-to-cart).


    After a shopper checks out, the cart is converted to an order, and you can manually delete the cart. If you don''t delete the cart, it is purged automatically after seven days.


    The preview cart feature allows you to set a future date for your shopping cart and view the promotions that will be available during that time period. This feature enables you to validate your promotion settings and observe how they will be applied in the cart. See [Create a Preview Cart](/docs/api/carts/create-a-cart#preview-cart).


    The following diagram shows a typical cart workflow:


    ![Shows a cart workflow, starting from adding the first item to a cart, through cart creation and checkout](/assets/cart-workflow.png)


    ### Multiple Carts


    Buyers often make purchases based on jobs that they need to perform or outcomes they need to achieve and therefore require more than one shopping cart. For example, a corporate buyer places orders for multiple locations. Each location has a different frequency of ordering and require different products. The buyer can create one cart per location, fill the carts, and then check out the carts quickly. Similarly, shoppers can also create multiple carts for the ease of managing various shopping experiences, such as birthdays or holidays.


    Each cart is discrete and separate. Any updates or changes to one cart has no effect on the other carts. A cart persists, that is, it stays with the buyer or shopper even after they use the cart in a checkout. Carts remain available after a checkout.

    '
  contact:
    name: Elastic Path
    url: https://elasticpath.com
  version: 26.0313.7324347
  x-version-timestamp: 2026-03-13 21:22:42+00:00
  license:
    name: MIT
    url: assets/LICENSE
servers:
- url: https://useast.api.elasticpath.com
  description: US East Production Server
  variables: {}
- url: https://euwest.api.elasticpath.com
  description: EU West Production Server
  variables: {}
security:
- bearerAuth: []
tags:
- name: Payments
  description: 'When you [checkout](/docs/api/carts/checkout) a [cart](/docs/api/carts/cart-management), an unpaid [order](/docs/api/carts/orders) is returned. You can process the payment for the order though a payment gateway.


    :::note


    - You need to configure and enable a payment gateway before you can accept payments for orders.

    - Configure your store to use [Manual Gateway](/docs/api/payments/update-manual-gateway) to process payments if the order total is zero or the payment is through non-supported payment providers.

    - There are a number of actions that happen to your inventory when checking out and paying for an order. For more information, see [Inventory](/docs/api/pxm/inventory/inventories-introduction).

    - We recommend to wait until the payment confirmation process is fully completed before proceeding with any additional updates to the order. Making simultaneous updates to the same entity immediately after payment confirmation can lead to a race condition. To learn more information on handling parallel calls to API objects, see [Parallel Calls to API Objects](/guides/Getting-Started/api-contract#parallel-calls-to-api-objects).


    :::


    ### Payment Methods


    Depending on the chosen gateway, you may or may not have access to capture funds immediately or authorize for later payment.


    To make a partial payment in Postman through any payment gateway, specify the desired payment amount in the amount field within the request body. To learn about Split Payments, see the [Split Payments](/docs/api/payments/payment-gateways-introduction#split-payments) section.


    #### Purchase


    The simplest method is purchase. The gateway attempts to charge the customer immediately, and the result of the attempt is returned.


    You can partially pay funds using purchase method. The gateway attempts to charge the customer immediately, and the payment status for an order shows `partially_paid`.


    When you Get an order, you can see the following fields in the `meta` object:


    - `balance_owing`: Specifies the outstanding funds required to complete an order. It considers all complete or pending transactions, including authorized, paid, and captured transactions. (`balance_owing` = order total - `authorized` amount - `paid` amount).

    - `paid`: Specifies the total amount of purchased or captured transactions.

    - `authorized`: Specifies the total amount of completed or pending authorized transactions for an order.


    #### Authorize


    You can `authorize` a payment so funds can later be captured when an item is dispatched or restocked.


    You can partially pay for an order using `authorize` payment method so that the order is `partially_authorized`. The transaction must be complete for the order status to be `partially_authorized`.


    For more information about order and payment statuses for split payments, see [Split Payments](/docs/api/payments/payment-gateways-introduction#split-payments).


    #### Capture


    After authorizing a transaction, you have to capture the authorized funds.


    :::note


    We recommend capturing payments several hours to days after the authorization to mitigate risks of fraud and chargebacks. When you sell digital goods that are delivered immediately, we recommend using a single purchase call instead of separate authorize and capture calls.


    :::


    After the payment is `partially_authorized`, you must `capture` the authorized transaction later. Once you capture the authorized transactions, the order payment status will change to `partially_paid`.


    #### Refunds


    You can use either the Refund through Composable Commerce or use the Mark as Refunded capability, or a combination of both capabilities.


    For more information about refund for split payments, see [Refund a Payment](/docs/api/carts/refund-a-transaction).


    #### Refund through Composable Commerce


    You can start a full or partial refund to a supported payment provider directly from Commerce Manager or the API. When you start the refund process, the refund request is sent to the payment gateway. You no longer have to log on to your payment gateway''s console to process the refund.


    When you process a refund, use the refund endpoint to pass the refund amount. If you don''t pass an amount, the refund is processed as Mark as refunded. For more information, see the Mark as Refunded section.


    Each time a partial refund is triggered, the transaction.updated event is generated and updated with refunded.amount. The `order.updated` event is also triggered. The `order.refunded` event generates when the full amount is refunded.



    #### Mark as Refunded


    You can use your payment gateway''s console to process a refund. Process the refund first in the payment gateway and then use the **Mark as Refunded** capability in Composable Commerce to complete the process.


    When an order is **Marked as refunded**, the payment status `order.payment.status` is set to `refunded`. In this case, the `order.updated`, `transaction.updated` and `order.refunded` events are generated.

    '
paths:
  /v2/carts/{cartID}/payments:
    parameters: []
    post:
      tags:
      - Payments
      summary: Create Stripe Payment Intent for a Cart
      description: 'The Cart Payment Intent feature enables the creation of a Stripe Payment Intent specifically tied to a shopping cart and its subsequent order. This allows Payment Intent users to track payment details from the cart stage and seamlessly maintain consistency in payment information throughout the order stage. Using these features, you can create Payment Intents for their carts, update Payment Intents with final cart details, and synchronize Payment Intents from Stripe to Commerce.


        :::note


        - Typically, in Commerce, inventory is allocated at the time of payment initiation after an order is created. However, in the case of Cart Payment Intent, information about the payment is received only upon synchronizing the order from Stripe to Commerce. This may happen after the payment is completed. Therefore, there might be a delay between the payment made and allocation, increasing the chance of paying for items that are not in stock.

        - There are certain fields you can choose to set up when [creating a payment intent](https://stripe.com/docs/api/payment_intents/create). However, if you decide to update a payment intent, the available options may not be the same as those allowed while creating a payment intent. See [updating a payment intent](https://stripe.com/docs/api/payment_intents/update).


        :::


        The following steps outline the workflow associated with the Payment Intent:


        1. [Add items to cart](/docs/api/carts/manage-carts#add-custom-item-to-cart).

        1. [Create a Payment Intent for the cart](/docs/api/carts/create-cart-payment-intent). The Payment Intent is created in Stripe, reflecting the cart and transaction details, including currency, amounts, payment type, and any optional Stripe details. The Payment Intent ID is generated and linked to the cart.

        1. [Update a Payment Intent](/docs/carts-orders/update-cart-payment-intent). This step is optional but becomes necessary when there are changes in the cart details at the time of payment. It ensures the Payment Intent accurately reflects the current cart details when processing the payments on the front end.

        1. [Checkout the cart](/docs/api/carts/checkout). An unpaid order is created, and the Payment Intent ID is linked to the order.

        1. [Confirm the order](/docs/carts-orders/confirm-an-order). This is important because after checkout, it is essential to confirm the Payment Intent and synchronize it with Commerce. This results in a corresponding transaction and change in order statuses in Commerce. Additionally, the Payment Intent ID is removed from the order once it is linked via the transaction.


        ### Best Practices


        We recommend you follow these practices to maintain consistency and accuracy when using Cart Payment Intent.


        - After checkout, we recommend clearing the shopping cart. You can achieve this using a [Delete a cart](/docs/api/carts/delete-a-cart) endpoint or [Update a cart](/docs/api/carts/update-a-cart) to remove the Payment Intent ID. This helps to avoid potential issues where subsequent checkouts for the same cart might unintentionally use the previous Stripe Payment Intent ID.

        - If it is not reasonable to clear the cart immediately after checkout due to several subsequent, duplicate checkouts to the same cart, ensure that you only synchronize the Payment Intent when finalizing the order. Each order confirmation is unaware of the others, and syncing Payment Intent IDs for each confirmation can lead to duplicate transactions in Commerce. In other words, if you synchronize Payment Intents for earlier versions of a repeated checkout, you''ll end up with multiple orders from the same cart, each having transactions linked to the same Payment Intent.

        - To pay the entire amount at once, use the [Update Cart Payment Intent](/docs/carts-orders/update-cart-payment-intent) endpoint to update the Stripe Payment Intent with the final cart details when preparing to take the payment. Doing so, ensures that the Payment Intent accurately reflects the current cart details when processing payments on the front end. We do not recommend calling the [Update Cart Payment Intent](/docs/carts-orders/update-cart-payment-intent) for each individual change in the cart, as this can lead to more requests and may slow down the front-end performance.

        '
      operationId: createCartPaymentIntent
      parameters:
      - name: cartID
        in: path
        required: true
        style: simple
        schema:
          type: string
        description: The universally unique identifier of the cart for which you want to create a payment intent.
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ElasticPathPaymentsPoweredByStripePayment'
            examples:
              Create Stripe Payment Intent for a Cart:
                value:
                  data:
                    gateway: elastic_path_payments_stripe
                    method: purchase
                    options:
                      automatic_payment_methods:
                        enabled: true
                      receipt_email: john@example.com
              Create Stripe Payment Intent for a Cart Using Specific Payment Methods:
                value:
                  data:
                    gateway: elastic_path_payments_stripe
                    method: purchase
                    payment_method_types:
                    - affirm
                    - card
                    - link
                    options:
                      receipt_email: john@example.com
      responses:
        '201':
          description: Payment Intent created successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CartEntityResponse'
      deprecated: false
  /v2/orders/{orderID}/payments:
    parameters: []
    post:
      tags:
      - Payments
      summary: Payments
      description: 'Depending on the payment gateway, you may have access to different transaction types such as capturing funds immediately or authorizing them for later. For more information, see [Payments](/docs/api/carts/payments).


        The following types of payment methods are available depending on the payment gateway:


        - `purchase`: This is the simplest method. The gateway attempts to charge the customer immediately.

        - `authorize`: This method authorizes a payment so that funds can be captured later, for example, when an item is dispatched or restocked.

        - `purchase_setup`: This method prepares the system for a purchase by verifying payment details without actually charging the customer. For example, a customer adds items to their cart and proceeds to checkout. Before finalizing the purchase, the system runs `purchase_setup` to confirm all payment details, but no funds are transferred until the customer confirms the order.

        - `authorize_setup`: This method prepares the system for an authorization-only transaction. This process holds the necessary funds but does not transfer them, ensuring that the customer has sufficient balance for the transaction. It sets up the conditions for a future capture of the authorized funds. For example, a customer places a pre-order for a product that will ship in two weeks. The merchant uses `authorize_setup` to prepare for the payment authorization. This holds the customer''s funds to ensure they can cover the purchase but waits to capture the payment until the product ships. This ensures that payment is secured but not collected prematurely.


        :::note


        Split payments can be performed using any methods for any gateway.


        - You can partially pay funds using `purchase` method. The gateway attempts to charge the customer immediately, and the payment status for an order will show `partially_paid`

        - You can partially pay for an order using `authorize` method where the order will be marked as `partially_authorized`. The transaction must be completed for the order status to be `partially_authorized`.

        - A `purchase_setup` method allows verification of payment details for partial payments without transferring funds until the customer confirms the full order.

        - An `authorize_setup` method can be used to hold a partial amount of the total funds, ensuring the customer has enough balance for a future capture.

        Until a payment is made neither `purchase_setup` nor `authorize_setup` affects the payment statuses, and the order remains unpaid. For more information about order and payment statuses for split payments, see [Split payments](/docs/api/payments/payment-gateways-introduction#split-payments).


        :::

        '
      operationId: paymentSetup
      parameters:
      - name: orderID
        in: path
        description: The Universally Unique Identifier (UUID) of the order you want to pay for.
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        description: ''
        content:
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/PaymentsRequest'
        required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionEntityResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response.ErrorResponse'
              examples:
                default:
                  summary: Required field missing
                  value:
                    errors:
                    - detail: Request could not be processed
                      status: '400'
                      title: Bad Request
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response.ErrorResponse'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response.ErrorResponse'
      deprecated: false
  /v2/orders/{orderID}/transactions/{transactionID}/confirm:
    parameters: []
    post:
      tags:
      - Payments
      summary: Confirm Payment
      description: 'Confirm Payment serves as a mechanism to synchronize transaction information from the third-party payment provider back to our system. This ensures that Composable Commerce accurately reflects the values from the payment provider.


        ### Handling 3D Secure Validations for Stripe Payments


        For Stripe Payments requiring 3D Secure validation, the transaction response will include the `client_parameters` object, which provides credentials to support validation of these payment requests on the payment provider''s side. We recommend using the Stripe''s client libraries to manage these 3D Secure validations. Once the validation succeeds, proceed with a confirmation request to sync the validated transaction into Composable Commerce and continue with the payment process.

        '
      operationId: confirmPayment
      parameters:
      - name: orderID
        in: path
        description: The unique identifier of the order.
        required: true
        style: simple
        schema:
          type: string
      - name: transactionID
        in: path
        description: The unique identifier of the transaction.
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        description: ''
        content:
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/OrdersTransactionsConfirmRequest'
      responses:
        '200':
          description: ''
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionEntityResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response.ErrorResponse'
              examples:
                default:
                  summary: Required field missing
                  value:
                    errors:
                    - detail: Request could not be processed
                      status: '400'
                      title: Bad Request
      deprecated: false
  /v2/orders/{orderID}/transactions/{transactionID}/capture:
    parameters: []
    post:
      tags:
      - Payments
      summary: Capture a Transaction
      description: Use this endpoint to capture a previously authorized payment. In this step, you can also pass in a custom reference, such as the payment reference from your chosen gateway.
      operationId: captureATransaction
      parameters:
      - name: orderID
        in: path
        description: The UUID of the order.
        required: true
        style: simple
        schema:
          type: string
      - name: transactionID
        in: path
        description: The UUID of the transaction to capture.
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        description: ''
        content:
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/OrdersTransactionsCaptureRequest'
        required: false
      responses:
        '200':
          description: ''
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionEntityResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response.ErrorResponse'
              examples:
                default:
                  summary: Required field missing
                  value:
                    errors:
                    - detail: Request could not be processed
                      status: '400'
                      title: Bad Request
      deprecated: false
  /v2/orders/{orderID}/transactions/{transactionID}/refund:
    parameters: []
    post:
      tags:
      - Payments
      summary: Refund a Transaction
      description: 'There are two ways to refund; through your payment gateway and mark it refunded in Commerce Manager, or directly through Commerce Manager or API.


        * Mark as Refunded: You can manually mark a transaction as refunded. Before you can mark the order as refunded, you need to handle the actual refund on your side with your payment provider. Mark as Refunded is a full refund made to the transaction.

        * Refund through Composable Commerce: You can process a full or partial refund to a supported payment provider directly from Commerce Manager or API by providing the refund amount. When you start the refund process, the request is directly sent to the payment gateway.


        :::caution


        If you use manual gateway for partial or full refund, you need to handle the actual refund on your side with your payment provider.


        :::

        '
      operationId: refundATransaction
      parameters:
      - name: orderID
        in: path
        description: The UUID of the order.
        required: true
        style: simple
        schema:
          type: string
      - name: transactionID
        in: path
        description: The UUID of the transaction you want to refund.
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        description: ''
        content:
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/OrdersTransactionsRefundRequest'
        required: false
      responses:
        '200':
          description: ''
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionEntityResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response.ErrorResponse'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response.ErrorResponse'
                examples:
                  default:
                    summary: Validation error
                    value: "{\n  \"errors\": [\n    {\n      \"detail\": \"Transaction cannot be refunded in its current state\",\n      \"status\": \"422\",\n      \"title\": \"Unprocessable Entity\"\n    }\n  ]\n}\n"
      deprecated: false
  /v2/orders/{orderID}/transactions:
    parameters: []
    get:
      tags:
      - Payments
      summary: Get Order Transactions
      description: Get order transactions
      operationId: getOrderTransactions
      parameters:
      - name: orderID
        in: path
        description: The unique identifier of the order.
        required: true
        style: simple
        schema:
          type: string
      responses:
        '200':
          description: ''
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionListResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response.ErrorResponse'
                examples:
                  default:
                    summary: Required field missing
                    value: "{\n  \"errors\": [\n    {\n      \"detail\": \"Request could not be processed\",\n      \"status\": \"400\",\n      \"title\": \"Bad Request\"\n    }\n  ]\n}\n"
      deprecated: false
  /v2/orders/{orderID}/transactions/{transactionID}:
    parameters: []
    get:
      tags:
      - Payments
      summary: Get a Transaction
      description: Retrieves a transaction
      operationId: getATransaction
      parameters:
      - name: orderID
        in: path
        description: The unique identifier of the order that you require transactions for.
        required: true
        style: simple
        schema:
          type: string
      - name: transactionID
        in: path
        description: The unique identifier of the transaction.
        required: true
        style: simple
        schema:
          type: string
      responses:
        '200':
          description: ''
          headers: {}
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/Response.Data'
                - type: object
                  properties:
                    data:
                      $ref: '#/components/schemas/TransactionResponse'
      deprecated: false
  /v2/orders/{orderID}/transactions/{transactionID}/cancel:
    parameters: []
    post:
      tags:
      - Payments
      summary: Cancel a Transaction
      description: 'Use this endpoint to cancel or void a pending or authorized transaction. The transaction can be canceled or voided when it is in `pending` and `completed` statuses.


        :::caution


        This endpoint works only for Stripe and PayPal and does not work for manual gateway.


        :::

        '
      operationId: cancelATransaction
      parameters:
      - name: orderID
        in: path
        description: The unique identifier of the order.
        required: true
        style: simple
        schema:
          type: string
      - name: transactionID
        in: path
        description: The unique identifier of the transaction to be canceled or voided.
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        description: ''
        content:
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/OrdersTransactionsCancelRequest'
        required: false
      responses:
        '200':
          description: ''
          headers: {}
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/TransactionEntityResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response.ErrorResponse'
      deprecated: false
components:
  schemas:
    BaseCartResponse:
      title: BaseCartResponse
      type: object
      properties:
        id:
          description: The unique identifier for the cart. Use SDK or create it yourself.
          type: string
        name:
          description: The name of this cart.
          type: string
          examples:
          - cart name
        description:
          description: A description of the cart.
          type: string
          examples:
          - cart description
        contact:
          $ref: '#/components/schemas/CartContact'
        discount_settings:
          $ref: '#/components/schemas/DiscountSettings'
        inventory_settings:
          $ref: '#/components/schemas/InventorySettings'
        item_settings:
          $ref: '#/components/schemas/ItemSettings'
        payment_intent_id:
          description: Stripe-assigned unique identifier for the linked Payment Intent
          type: string
        custom_attributes:
          $ref: '#/components/schemas/CustomAttributes'
        snapshot_date:
          description: The snapshot date for the cart.
          type: string
          format: date-time
        links:
          type: object
          properties:
            self:
              description: A link to that specific resource.
              type: string
          examples:
          - https://useast.api.elasticpath.com/v2/carts/1
        meta:
          type: object
          properties:
            display_price:
              type: object
              properties:
                with_tax:
                  $ref: '#/components/schemas/FormattedPriceData'
                without_tax:
                  $ref: '#/components/schemas/FormattedPriceData'
                tax:
                  $ref: '#/components/schemas/FormattedPriceData'
                discount:
                  $ref: '#/components/schemas/FormattedPriceData'
                without_discount:
                  $ref: '#/components/schemas/FormattedPriceData'
                shipping:
                  $ref: '#/components/schemas/FormattedPriceData'
                shipping_discount:
                  $ref: '#/components/schemas/FormattedPriceData'
            timestamps:
              $ref: '#/components/schemas/CartTimestamps'
            promotion_suggestions:
              description: Array of promotion suggestions
              type: array
              items:
                type: object
                properties:
                  bundle:
                    description: Bundle configuration with promotion targets
                    type: array
                    items:
                      type: object
                      properties:
                        auto_add_free_gift:
                          description: Whether to automatically add free gift
                          type: boolean
                        cart_item_id:
                          description: Cart item ID for the target
                          type: string
                        quantity:
                          description: Quantity for the promotion
                          type: integer
                        targets:
                          description: Array of target SKUs
                          type: array
                          items:
                            type: string
                      additionalProperties: true
                  code:
                    type: string
                  info:
                    type: string
                  message:
                    type: string
                  promotion_id:
                    type: string
        relationships:
          type: object
          prop

# --- truncated at 32 KB (64 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/elastic-path/refs/heads/main/openapi/elastic-path-payments-api-openapi.yml