Commerce Layer Payments API

Configure payment methods and payment gateways and manage payment sources used to authorize and capture funds against orders across supported PSPs.

OpenAPI Specification

commercelayer-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Commerce Layer Core API
  description: >-
    Commerce Layer is a headless, composable commerce platform. The Core API is
    100% compliant with the JSON:API specification (v1.0) and supports compound
    documents, sparse fieldsets, resource linking, filtering, sorting, and
    pagination. All requests are authenticated with an OAuth2 Bearer access
    token obtained from https://auth.commercelayer.io/oauth/token, and access
    tokens may be scoped to a market or stock location. Resources are served
    under the organization subdomain at https://{organization}.commercelayer.io/api
    using the application/vnd.api+json content type.
  termsOfService: https://commercelayer.io/legal/terms-of-service
  contact:
    name: Commerce Layer Support
    url: https://commercelayer.io/contact
  version: '4.0'
servers:
  - url: https://{organization}.commercelayer.io/api
    description: Organization-scoped Core API endpoint
    variables:
      organization:
        default: yourdomain
        description: Your Commerce Layer organization subdomain (slug).
security:
  - bearerAuth: []
tags:
  - name: SKUs
    description: Stock keeping units describing the product variations being sold.
  - name: Prices
    description: Prices belonging to price lists, associated with SKUs.
  - name: Stock Items
    description: Stock quantities for a SKU at a given stock location.
  - name: Orders
    description: Shopping carts and orders and their checkout lifecycle.
  - name: Line Items
    description: Line items belonging to an order.
  - name: Customers
    description: Customer accounts.
  - name: Addresses
    description: Billing and shipping addresses.
  - name: Shipments
    description: Order shipments and fulfillment.
  - name: Payment Methods
    description: Payment methods available for orders.
  - name: Markets
    description: Markets binding price list, inventory model, and merchant.
  - name: Promotions
    description: Discounts, free shipping, free gifts, and other promotions.
  - name: Webhooks
    description: Event subscriptions delivering signed callbacks.
paths:
  /skus:
    get:
      operationId: listSkus
      tags: [SKUs]
      summary: List all SKUs
      parameters:
        - $ref: '#/components/parameters/PageNumber'
        - $ref: '#/components/parameters/PageSize'
        - $ref: '#/components/parameters/Sort'
        - $ref: '#/components/parameters/Include'
      responses:
        '200':
          description: A list of SKU resources.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/SkuList'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
    post:
      operationId: createSku
      tags: [SKUs]
      summary: Create a SKU
      requestBody:
        required: true
        content:
          application/vnd.api+json:
            schema:
              $ref: '#/components/schemas/SkuData'
      responses:
        '201':
          description: The created SKU resource.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/SkuData'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /skus/{skuId}:
    parameters:
      - $ref: '#/components/parameters/ResourceId'
    get:
      operationId: getSku
      tags: [SKUs]
      summary: Retrieve a SKU
      responses:
        '200':
          description: The requested SKU resource.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/SkuData'
        '404':
          $ref: '#/components/responses/NotFound'
    patch:
      operationId: updateSku
      tags: [SKUs]
      summary: Update a SKU
      requestBody:
        required: true
        content:
          application/vnd.api+json:
            schema:
              $ref: '#/components/schemas/SkuData'
      responses:
        '200':
          description: The updated SKU resource.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/SkuData'
    delete:
      operationId: deleteSku
      tags: [SKUs]
      summary: Delete a SKU
      responses:
        '204':
          description: The SKU was deleted.
  /prices:
    get:
      operationId: listPrices
      tags: [Prices]
      summary: List all prices
      responses:
        '200':
          description: A list of price resources.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/ResourceList'
    post:
      operationId: createPrice
      tags: [Prices]
      summary: Create a price
      responses:
        '201':
          description: The created price resource.
  /prices/{priceId}:
    parameters:
      - $ref: '#/components/parameters/ResourceId'
    get:
      operationId: getPrice
      tags: [Prices]
      summary: Retrieve a price
      responses:
        '200':
          description: The requested price resource.
    patch:
      operationId: updatePrice
      tags: [Prices]
      summary: Update a price
      responses:
        '200':
          description: The updated price resource.
    delete:
      operationId: deletePrice
      tags: [Prices]
      summary: Delete a price
      responses:
        '204':
          description: The price was deleted.
  /stock_items:
    get:
      operationId: listStockItems
      tags: [Stock Items]
      summary: List all stock items
      responses:
        '200':
          description: A list of stock item resources.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/ResourceList'
    post:
      operationId: createStockItem
      tags: [Stock Items]
      summary: Create a stock item
      responses:
        '201':
          description: The created stock item resource.
  /stock_items/{stockItemId}:
    parameters:
      - $ref: '#/components/parameters/ResourceId'
    get:
      operationId: getStockItem
      tags: [Stock Items]
      summary: Retrieve a stock item
      responses:
        '200':
          description: The requested stock item resource.
    patch:
      operationId: updateStockItem
      tags: [Stock Items]
      summary: Update a stock item
      responses:
        '200':
          description: The updated stock item resource.
    delete:
      operationId: deleteStockItem
      tags: [Stock Items]
      summary: Delete a stock item
      responses:
        '204':
          description: The stock item was deleted.
  /orders:
    get:
      operationId: listOrders
      tags: [Orders]
      summary: List all orders
      responses:
        '200':
          description: A list of order resources.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/ResourceList'
    post:
      operationId: createOrder
      tags: [Orders]
      summary: Create an order
      requestBody:
        required: true
        content:
          application/vnd.api+json:
            schema:
              $ref: '#/components/schemas/OrderData'
      responses:
        '201':
          description: The created order resource.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/OrderData'
  /orders/{orderId}:
    parameters:
      - $ref: '#/components/parameters/ResourceId'
    get:
      operationId: getOrder
      tags: [Orders]
      summary: Retrieve an order
      responses:
        '200':
          description: The requested order resource.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/OrderData'
    patch:
      operationId: updateOrder
      tags: [Orders]
      summary: Update an order
      description: >-
        Update order attributes or trigger order state transitions (e.g.
        _place, _approve, _cancel) by setting the corresponding trigger
        attribute to true.
      requestBody:
        required: true
        content:
          application/vnd.api+json:
            schema:
              $ref: '#/components/schemas/OrderData'
      responses:
        '200':
          description: The updated order resource.
    delete:
      operationId: deleteOrder
      tags: [Orders]
      summary: Delete an order
      responses:
        '204':
          description: The order was deleted.
  /line_items:
    get:
      operationId: listLineItems
      tags: [Line Items]
      summary: List all line items
      responses:
        '200':
          description: A list of line item resources.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/ResourceList'
    post:
      operationId: createLineItem
      tags: [Line Items]
      summary: Create a line item
      responses:
        '201':
          description: The created line item resource.
  /line_items/{lineItemId}:
    parameters:
      - $ref: '#/components/parameters/ResourceId'
    get:
      operationId: getLineItem
      tags: [Line Items]
      summary: Retrieve a line item
      responses:
        '200':
          description: The requested line item resource.
    patch:
      operationId: updateLineItem
      tags: [Line Items]
      summary: Update a line item
      responses:
        '200':
          description: The updated line item resource.
    delete:
      operationId: deleteLineItem
      tags: [Line Items]
      summary: Delete a line item
      responses:
        '204':
          description: The line item was deleted.
  /customers:
    get:
      operationId: listCustomers
      tags: [Customers]
      summary: List all customers
      responses:
        '200':
          description: A list of customer resources.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/ResourceList'
    post:
      operationId: createCustomer
      tags: [Customers]
      summary: Create a customer
      responses:
        '201':
          description: The created customer resource.
  /customers/{customerId}:
    parameters:
      - $ref: '#/components/parameters/ResourceId'
    get:
      operationId: getCustomer
      tags: [Customers]
      summary: Retrieve a customer
      responses:
        '200':
          description: The requested customer resource.
    patch:
      operationId: updateCustomer
      tags: [Customers]
      summary: Update a customer
      responses:
        '200':
          description: The updated customer resource.
    delete:
      operationId: deleteCustomer
      tags: [Customers]
      summary: Delete a customer
      responses:
        '204':
          description: The customer was deleted.
  /addresses:
    get:
      operationId: listAddresses
      tags: [Addresses]
      summary: List all addresses
      responses:
        '200':
          description: A list of address resources.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/ResourceList'
    post:
      operationId: createAddress
      tags: [Addresses]
      summary: Create an address
      responses:
        '201':
          description: The created address resource.
  /addresses/{addressId}:
    parameters:
      - $ref: '#/components/parameters/ResourceId'
    get:
      operationId: getAddress
      tags: [Addresses]
      summary: Retrieve an address
      responses:
        '200':
          description: The requested address resource.
    patch:
      operationId: updateAddress
      tags: [Addresses]
      summary: Update an address
      responses:
        '200':
          description: The updated address resource.
    delete:
      operationId: deleteAddress
      tags: [Addresses]
      summary: Delete an address
      responses:
        '204':
          description: The address was deleted.
  /shipments:
    get:
      operationId: listShipments
      tags: [Shipments]
      summary: List all shipments
      responses:
        '200':
          description: A list of shipment resources.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/ResourceList'
  /shipments/{shipmentId}:
    parameters:
      - $ref: '#/components/parameters/ResourceId'
    get:
      operationId: getShipment
      tags: [Shipments]
      summary: Retrieve a shipment
      responses:
        '200':
          description: The requested shipment resource.
    patch:
      operationId: updateShipment
      tags: [Shipments]
      summary: Update a shipment
      description: >-
        Update shipment attributes or trigger shipment state transitions (e.g.
        _ship, _deliver) by setting the corresponding trigger attribute.
      responses:
        '200':
          description: The updated shipment resource.
  /payment_methods:
    get:
      operationId: listPaymentMethods
      tags: [Payment Methods]
      summary: List all payment methods
      responses:
        '200':
          description: A list of payment method resources.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/ResourceList'
    post:
      operationId: createPaymentMethod
      tags: [Payment Methods]
      summary: Create a payment method
      responses:
        '201':
          description: The created payment method resource.
  /payment_methods/{paymentMethodId}:
    parameters:
      - $ref: '#/components/parameters/ResourceId'
    get:
      operationId: getPaymentMethod
      tags: [Payment Methods]
      summary: Retrieve a payment method
      responses:
        '200':
          description: The requested payment method resource.
    patch:
      operationId: updatePaymentMethod
      tags: [Payment Methods]
      summary: Update a payment method
      responses:
        '200':
          description: The updated payment method resource.
    delete:
      operationId: deletePaymentMethod
      tags: [Payment Methods]
      summary: Delete a payment method
      responses:
        '204':
          description: The payment method was deleted.
  /markets:
    get:
      operationId: listMarkets
      tags: [Markets]
      summary: List all markets
      responses:
        '200':
          description: A list of market resources.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/ResourceList'
    post:
      operationId: createMarket
      tags: [Markets]
      summary: Create a market
      responses:
        '201':
          description: The created market resource.
  /markets/{marketId}:
    parameters:
      - $ref: '#/components/parameters/ResourceId'
    get:
      operationId: getMarket
      tags: [Markets]
      summary: Retrieve a market
      responses:
        '200':
          description: The requested market resource.
    patch:
      operationId: updateMarket
      tags: [Markets]
      summary: Update a market
      responses:
        '200':
          description: The updated market resource.
    delete:
      operationId: deleteMarket
      tags: [Markets]
      summary: Delete a market
      responses:
        '204':
          description: The market was deleted.
  /promotions:
    get:
      operationId: listPromotions
      tags: [Promotions]
      summary: List all promotions
      responses:
        '200':
          description: A list of promotion resources.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/ResourceList'
  /promotions/{promotionId}:
    parameters:
      - $ref: '#/components/parameters/ResourceId'
    get:
      operationId: getPromotion
      tags: [Promotions]
      summary: Retrieve a promotion
      responses:
        '200':
          description: The requested promotion resource.
  /webhooks:
    get:
      operationId: listWebhooks
      tags: [Webhooks]
      summary: List all webhooks
      responses:
        '200':
          description: A list of webhook resources.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/ResourceList'
    post:
      operationId: createWebhook
      tags: [Webhooks]
      summary: Create a webhook
      description: >-
        Subscribe to an event topic. Each time the subscribed event occurs,
        Commerce Layer triggers a POST request to the callback_url; the topic
        is sent in the X-CommerceLayer-Topic header.
      requestBody:
        required: true
        content:
          application/vnd.api+json:
            schema:
              $ref: '#/components/schemas/WebhookData'
      responses:
        '201':
          description: The created webhook resource.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/WebhookData'
  /webhooks/{webhookId}:
    parameters:
      - $ref: '#/components/parameters/ResourceId'
    get:
      operationId: getWebhook
      tags: [Webhooks]
      summary: Retrieve a webhook
      responses:
        '200':
          description: The requested webhook resource.
    patch:
      operationId: updateWebhook
      tags: [Webhooks]
      summary: Update a webhook
      responses:
        '200':
          description: The updated webhook resource.
    delete:
      operationId: deleteWebhook
      tags: [Webhooks]
      summary: Delete a webhook
      responses:
        '204':
          description: The webhook was deleted.
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        OAuth2 access token obtained from
        https://auth.commercelayer.io/oauth/token (client_credentials,
        password, authorization_code, refresh_token, or JWT bearer grant).
        Passed as Authorization: Bearer {access_token}. Tokens may carry a
        market or stock_location scope.
  parameters:
    ResourceId:
      name: id
      in: path
      required: true
      description: The resource unique identifier.
      schema:
        type: string
    PageNumber:
      name: page[number]
      in: query
      required: false
      description: The page of results to return (JSON:API pagination).
      schema:
        type: integer
        default: 1
    PageSize:
      name: page[size]
      in: query
      required: false
      description: Number of results per page (max 25, up to 25 by default).
      schema:
        type: integer
        default: 10
        maximum: 25
    Sort:
      name: sort
      in: query
      required: false
      description: Comma-separated list of fields to sort by; prefix with - for descending.
      schema:
        type: string
    Include:
      name: include
      in: query
      required: false
      description: Comma-separated list of relationships to side-load (compound documents).
      schema:
        type: string
  responses:
    Unauthorized:
      description: Missing or invalid access token.
      content:
        application/vnd.api+json:
          schema:
            $ref: '#/components/schemas/Errors'
    NotFound:
      description: The resource was not found.
      content:
        application/vnd.api+json:
          schema:
            $ref: '#/components/schemas/Errors'
    UnprocessableEntity:
      description: Validation failed.
      content:
        application/vnd.api+json:
          schema:
            $ref: '#/components/schemas/Errors'
    RateLimited:
      description: Too many requests; the rate limit was exceeded.
      content:
        application/vnd.api+json:
          schema:
            $ref: '#/components/schemas/Errors'
  schemas:
    ResourceList:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Resource'
        meta:
          $ref: '#/components/schemas/Meta'
        links:
          type: object
    Resource:
      type: object
      properties:
        id:
          type: string
        type:
          type: string
        attributes:
          type: object
        relationships:
          type: object
        links:
          type: object
    Meta:
      type: object
      properties:
        record_count:
          type: integer
        page_count:
          type: integer
    Errors:
      type: object
      properties:
        errors:
          type: array
          items:
            type: object
            properties:
              title:
                type: string
              detail:
                type: string
              code:
                type: string
              status:
                type: string
    SkuList:
      allOf:
        - $ref: '#/components/schemas/ResourceList'
    SkuData:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/Sku'
    Sku:
      type: object
      properties:
        id:
          type: string
        type:
          type: string
          enum: [skus]
        attributes:
          type: object
          properties:
            code:
              type: string
              description: A unique SKU code (EAN, UPC, or any custom code).
            name:
              type: string
            description:
              type: string
            image_url:
              type: string
            pieces_per_pack:
              type: integer
            weight:
              type: number
            unit_of_weight:
              type: string
              enum: [gr, oz, lb]
            hs_tariff_number:
              type: string
            do_not_ship:
              type: boolean
            do_not_track:
              type: boolean
            metadata:
              type: object
            created_at:
              type: string
              format: date-time
            updated_at:
              type: string
              format: date-time
        relationships:
          type: object
    OrderData:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/Order'
    Order:
      type: object
      properties:
        id:
          type: string
        type:
          type: string
          enum: [orders]
        attributes:
          type: object
          properties:
            number:
              type: integer
            status:
              type: string
              enum: [draft, pending, placed, approved, cancelled]
            payment_status:
              type: string
              enum: [unpaid, authorized, paid, voided, refunded, free, partially_authorized, partially_paid, partially_refunded, partially_voided]
            fulfillment_status:
              type: string
              enum: [unfulfilled, in_progress, fulfilled, not_required]
            currency_code:
              type: string
            total_amount_cents:
              type: integer
            customer_email:
              type: string
            language_code:
              type: string
            _place:
              type: boolean
              description: Trigger attribute to place the order.
            _approve:
              type: boolean
              description: Trigger attribute to approve the order.
            metadata:
              type: object
        relationships:
          type: object
    WebhookData:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/Webhook'
    Webhook:
      type: object
      properties:
        id:
          type: string
        type:
          type: string
          enum: [webhooks]
        attributes:
          type: object
          properties:
            name:
              type: string
            topic:
              type: string
              description: The event topic, e.g. orders.place or orders.approve.
            callback_url:
              type: string
              description: The endpoint that receives the POST callback.
            include_resources:
              type: array
              items:
                type: string
            circuit_state:
              type: string
              enum: [closed, open]
              description: Circuit breaker state; opens after repeated delivery failures.
            circuit_failure_count:
              type: integer
            shared_secret:
              type: string
              description: Secret used to sign callback payloads.
            metadata:
              type: object
        relationships:
          type: object