Commerce Layer Orders & Line Items API
Create and manage shopping carts and orders, add and update line items, and drive the checkout state machine (pending, placed, approved) through the JSON:API order and line_item resources.
Create and manage shopping carts and orders, add and update line items, and drive the checkout state machine (pending, placed, approved) through the JSON:API order and line_item resources.
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