The Rokt Catalog API is the REST interface to Rokt Catalog, the dropship and marketplace
platform that lets Partners (retailers) sell products supplied by Brands without holding
inventory. Brands use it to publish products and variants, receive orders, and record
fulfillments; Partners use it to browse the products they are approved to sell, create and
manage orders, quote shipping and tax at checkout, and handle refunds and returns. All
requests go to the production base URL https://api.shopcanal.com/platform. There is no
separate sandbox: test against the designated test Brand accounts from a separate test
Partner login, as described in the
Environments guide.
Every request carries two headers: X-CANAL-APP-ID (your Application ID) and
X-CANAL-APP-TOKEN (your API Access Token). Both are generated when your account is
created; find them in the Developer tab under Settings > API Credentials after you log
in to the Rokt Catalog app. Treat the token as a secret:
keep it server-side and never ship it in a browser or mobile app. See the
Authentication guide.
The endpoint descriptions below come from the API code, which uses the older names for the
two roles: [Storefront Only] means the endpoint is for Partner integrations and
[Supplier Only] means it is for Brand integrations. The Brand integrations and
Partner integrations groups in the sidebar list the endpoints each role uses; a
resource that both roles call appears in both groups. List endpoints use cursor-based
pagination (cursor query parameter, next and previous URLs in the response) and
accept an ordering parameter where noted. Errors return a JSON body: authentication and
permission errors carry a detail field, and most other errors carry a message and,
where relevant, a detail field with more information. For the step-by-step integration
flow, start with the Rokt Catalog integration guides
and the
Catalog API overview; for anything
else, contact roktcatalogsupport@rokt.com.
The Products endpoints give access to every product you have permission to sell on your Partner storefront, and let Brands create, update, reorder, and delete the products they supply. To get permission to sell specific products, send proposals to Brands in the Rokt Catalog app; once a Brand approves a proposal, its products become available through these endpoints.
[Storefront Only] Retrieve a paginated list of products accessible to your Storefront through your established Rokt Catalog connections.
This endpoint returns products from Suppliers with whom you have an active and approved partnership. It includes products you might have already added/linked to your Storefront platform, as well as other products listed by those Suppliers that are available to you based on your connection terms.
You can filter the results to view products exclusively from one Supplier by providing their Catalog supplier_id (UUID) as a query parameter.
Results are returned using cursor-based pagination (PlatformPagination). Available ordering fields include created_at, updated_at, and title. The default order is -created_at.
| ordering | string Which field to use when ordering the results. |
| cursor | string The pagination cursor value. |
| supplier_id | string <uuid> Filter products by the Catalog ID of a specific connected Supplier. |
| qa_review_complete | boolean Filter products by whether they have been reviewed and approved. |
{- "results": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "variants": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "inventory_policy": "string",
- "inventory_quantity": -2147483648,
- "inventory_item_cost": 0.1,
- "option1": "string",
- "option2": "string",
- "option3": "string",
- "position": 0,
- "price": "string",
- "compare_at_price": "string",
- "origin_supplier_currency": "string",
- "title": "string",
- "sku": "string",
- "upc": "string",
- "grams": 0.1,
- "weight": 0.1,
- "weight_unit": "str",
- "pause_selling": true,
- "origin_supplier_id": "string",
- "origin_supplier_name": "string",
- "available_for_ordering": true,
- "supplier_sku": "string",
- "is_exclusive_offer": true,
- "sup_price": "string",
- "sup_compare_at_price": "string"
}
], - "body_html": "string",
- "handle": "string",
- "image_src": "string",
- "images": [
- {
- "property1": null,
- "property2": null
}
], - "options": [
- {
- "property1": null,
- "property2": null
}
], - "product_type": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "published_at": "2019-08-24T14:15:22Z",
- "status": "active",
- "title": "string",
- "vendor": "string",
- "tags": "string",
- "number_of_reviews": -2147483648,
- "star_rating": 0.1,
- "product_type_category": "string",
- "customer_charge_amount": {
- "property1": null,
- "property2": null
}
}
]
}[Supplier Only] Create a new product listing within your Rokt Catalog Supplier account. This makes the product manageable through Catalog and potentially available to your connected Storefront partners.
The request body must conform to the PushProductSerializer structure. Key fields include:
title (string, required), body_html (string, product description), product_type (string), vendor (string), tags (string, comma-separated), and a list of variants (required, at least one).
Each object in the variants list requires price (decimal string), sku (string), inventory_quantity (integer), and option values (option1, option2, option3). compare_at_price (decimal string) is optional for sale pricing.
You can also include a list of images, each with a src (URL) and optional position.
Successfully creating a product (HTTP 201 Created) makes it visible in your Catalog dashboard. Its availability to Storefronts depends on its listing status (supplier_has_listed_on_canal flag on variants) and the terms established with each partner.
The response body contains the full details of the newly created product and its variants, including their assigned Catalog IDs (UUIDs), using the ProductSerializer.
| title required | string |
| body_html | string |
required | Array of objects (PushProductVariant) |
| permalink | string |
| handle | string |
| image_src | string |
Array of objects (Image) | |
| product_type | string |
| tags | string |
| vendor | string |
| shopify_taxonomy | string or null |
| is_listed | boolean Default: true |
| status | string Default: "active" Enum: "active" "draft" "archived"
|
{- "title": "string",
- "body_html": "string",
- "variants": [
- {
- "title": "string",
- "price": "string",
- "compare_at_price": "string",
- "inventory_policy": "continue",
- "inventory_quantity": 0,
- "option1": "string",
- "option2": "string",
- "option3": "string",
- "sku": "string",
- "position": 0,
- "image_src": "string",
- "weight": 0.1,
- "weight_unit": "string"
}
], - "permalink": "string",
- "handle": "string",
- "image_src": "string",
- "images": [
- {
- "id": "string",
- "position": 0,
- "width": 0,
- "height": 0,
- "variant_ids": [
- "string"
], - "origin_supplier_image_id": "78f40e09-a463-4e20-b9d0-a8eb90e46d9f"
}
], - "product_type": "string",
- "tags": "string",
- "vendor": "string",
- "shopify_taxonomy": "string",
- "is_listed": true,
- "status": "active"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "variants": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "inventory_policy": "string",
- "inventory_quantity": -2147483648,
- "inventory_item_cost": 0.1,
- "option1": "string",
- "option2": "string",
- "option3": "string",
- "position": 0,
- "price": "string",
- "compare_at_price": "string",
- "origin_supplier_currency": "string",
- "title": "string",
- "sku": "string",
- "upc": "string",
- "grams": 0.1,
- "weight": 0.1,
- "weight_unit": "str",
- "pause_selling": true,
- "origin_supplier_id": "string",
- "origin_supplier_name": "string",
- "available_for_ordering": true,
- "supplier_sku": "string",
- "is_exclusive_offer": true,
- "sup_price": "string",
- "sup_compare_at_price": "string"
}
], - "body_html": "string",
- "handle": "string",
- "image_src": "string",
- "images": [
- {
- "id": "string",
- "position": 0,
- "width": 0,
- "height": 0,
- "canal_variant_ids": [
- "string"
], - "variant_ids": [
- "string"
], - "origin_supplier_image_id": "78f40e09-a463-4e20-b9d0-a8eb90e46d9f"
}
], - "options": null,
- "product_type": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "published_at": "2019-08-24T14:15:22Z",
- "status": "active",
- "title": "string",
- "vendor": "string",
- "tags": "string",
- "number_of_reviews": -2147483648,
- "star_rating": 0.1
}[Storefront Only] Retrieve comprehensive details for a single product, identified by its Rokt Catalog ID (UUID) in the URL path.
Access is restricted: this endpoint only returns data for products sourced from Suppliers with whom your Storefront has an active and approved partnership connection.
The response (ExternalProductSerializer) includes all product-level information (title, description, vendor, etc.), a list of associated images, and a list of variants.
Crucially, the variant information includes pricing (price, compare_at_price) and inventory_quantity that are specific to your connection with the Supplier, reflecting any agreed-upon terms or markups managed by Catalog.
If the provided product ID is invalid, or if the product belongs to a Supplier you are not actively connected with, a 404 Not Found error is returned.
| id required | string |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "variants": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "inventory_policy": "string",
- "inventory_quantity": -2147483648,
- "inventory_item_cost": 0.1,
- "option1": "string",
- "option2": "string",
- "option3": "string",
- "position": 0,
- "price": "string",
- "compare_at_price": "string",
- "origin_supplier_currency": "string",
- "title": "string",
- "sku": "string",
- "upc": "string",
- "grams": 0.1,
- "weight": 0.1,
- "weight_unit": "str",
- "pause_selling": true,
- "origin_supplier_id": "string",
- "origin_supplier_name": "string",
- "available_for_ordering": true,
- "supplier_sku": "string",
- "is_exclusive_offer": true,
- "sup_price": "string",
- "sup_compare_at_price": "string"
}
], - "body_html": "string",
- "handle": "string",
- "image_src": "string",
- "images": [
- {
- "property1": null,
- "property2": null
}
], - "options": [
- {
- "property1": null,
- "property2": null
}
], - "product_type": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "published_at": "2019-08-24T14:15:22Z",
- "status": "active",
- "title": "string",
- "vendor": "string",
- "tags": "string",
- "number_of_reviews": -2147483648,
- "star_rating": 0.1,
- "product_type_category": "string",
- "customer_charge_amount": {
- "property1": null,
- "property2": null
}
}[Supplier Only] Update attributes of an existing product listing, identified by its Rokt Catalog ID (UUID) in the URL path.
This endpoint is used for modifying product-level details. Provide the fields you wish to change in the request body (e.g., title, body_html, product_type, vendor, tags).
Important: To modify variant-specific details like price, SKU, inventory, or options, you must use the dedicated /variants/{variant_id}/ endpoint. Updates to variants are not supported here.
Changes made to product-level fields via this endpoint (like updating the description) are automatically synchronized to any connected Storefronts that are currently selling this product. This synchronization process runs asynchronously in the background.
A successful update returns 200 OK with the complete, updated product details (including all variants) using the ProductSerializer.
| id required | string |
| body_html | string or null <= 60000 characters |
| handle | string or null <= 258 characters |
| image_src | string or null <= 1043 characters |
Array of objects (Image) | |
| options | any Product options (for example size or color) and their values, or |
| product_type | string or null <= 1044 characters |
| published_at | string or null <date-time> |
| status | string (Status2eaEnum) Enum: "active" "draft" "archived" "unlisted"
|
| title required | string <= 1029 characters |
| vendor | string or null <= 227 characters |
| tags | string or null <= 63750 characters |
| permalink | string or null <uri> <= 2000 characters |
| number_of_reviews | integer or null [ -2147483648 .. 2147483647 ] |
| star_rating | number or null <double> |
{- "body_html": "string",
- "handle": "string",
- "image_src": "string",
- "images": [
- {
- "id": "string",
- "position": 0,
- "width": 0,
- "height": 0,
- "variant_ids": [
- "string"
], - "origin_supplier_image_id": "78f40e09-a463-4e20-b9d0-a8eb90e46d9f"
}
], - "options": null,
- "product_type": "string",
- "published_at": "2019-08-24T14:15:22Z",
- "status": "active",
- "title": "string",
- "vendor": "string",
- "tags": "string",
- "number_of_reviews": -2147483648,
- "star_rating": 0.1
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "variants": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "inventory_policy": "string",
- "inventory_quantity": -2147483648,
- "inventory_item_cost": 0.1,
- "option1": "string",
- "option2": "string",
- "option3": "string",
- "position": 0,
- "price": "string",
- "compare_at_price": "string",
- "origin_supplier_currency": "string",
- "title": "string",
- "sku": "string",
- "upc": "string",
- "grams": 0.1,
- "weight": 0.1,
- "weight_unit": "str",
- "pause_selling": true,
- "origin_supplier_id": "string",
- "origin_supplier_name": "string",
- "available_for_ordering": true,
- "supplier_sku": "string",
- "is_exclusive_offer": true,
- "sup_price": "string",
- "sup_compare_at_price": "string"
}
], - "body_html": "string",
- "handle": "string",
- "image_src": "string",
- "images": [
- {
- "id": "string",
- "position": 0,
- "width": 0,
- "height": 0,
- "canal_variant_ids": [
- "string"
], - "variant_ids": [
- "string"
], - "origin_supplier_image_id": "78f40e09-a463-4e20-b9d0-a8eb90e46d9f"
}
], - "options": null,
- "product_type": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "published_at": "2019-08-24T14:15:22Z",
- "status": "active",
- "title": "string",
- "vendor": "string",
- "tags": "string",
- "number_of_reviews": -2147483648,
- "star_rating": 0.1
}| id required | string |
| body_html | string or null <= 60000 characters |
| handle | string or null <= 258 characters |
| image_src | string or null <= 1043 characters |
Array of objects (Image) | |
| options | any Product options (for example size or color) and their values, or |
| product_type | string or null <= 1044 characters |
| published_at | string or null <date-time> |
| status | string (Status2eaEnum) Enum: "active" "draft" "archived" "unlisted"
|
| title | string <= 1029 characters |
| vendor | string or null <= 227 characters |
| tags | string or null <= 63750 characters |
| permalink | string or null <uri> <= 2000 characters |
| number_of_reviews | integer or null [ -2147483648 .. 2147483647 ] |
| star_rating | number or null <double> |
{- "body_html": "string",
- "handle": "string",
- "image_src": "string",
- "images": [
- {
- "id": "string",
- "position": 0,
- "width": 0,
- "height": 0,
- "variant_ids": [
- "string"
], - "origin_supplier_image_id": "78f40e09-a463-4e20-b9d0-a8eb90e46d9f"
}
], - "options": null,
- "product_type": "string",
- "published_at": "2019-08-24T14:15:22Z",
- "status": "active",
- "title": "string",
- "vendor": "string",
- "tags": "string",
- "number_of_reviews": -2147483648,
- "star_rating": 0.1
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "variants": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "inventory_policy": "string",
- "inventory_quantity": -2147483648,
- "inventory_item_cost": 0.1,
- "option1": "string",
- "option2": "string",
- "option3": "string",
- "position": 0,
- "price": "string",
- "compare_at_price": "string",
- "origin_supplier_currency": "string",
- "title": "string",
- "sku": "string",
- "upc": "string",
- "grams": 0.1,
- "weight": 0.1,
- "weight_unit": "str",
- "pause_selling": true,
- "origin_supplier_id": "string",
- "origin_supplier_name": "string",
- "available_for_ordering": true,
- "supplier_sku": "string",
- "is_exclusive_offer": true,
- "sup_price": "string",
- "sup_compare_at_price": "string"
}
], - "body_html": "string",
- "handle": "string",
- "image_src": "string",
- "images": [
- {
- "id": "string",
- "position": 0,
- "width": 0,
- "height": 0,
- "canal_variant_ids": [
- "string"
], - "variant_ids": [
- "string"
], - "origin_supplier_image_id": "78f40e09-a463-4e20-b9d0-a8eb90e46d9f"
}
], - "options": null,
- "product_type": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "published_at": "2019-08-24T14:15:22Z",
- "status": "active",
- "title": "string",
- "vendor": "string",
- "tags": "string",
- "number_of_reviews": -2147483648,
- "star_rating": 0.1
}[Supplier Only] Permanently remove a product listing, identified by its Rokt Catalog ID (UUID) in the URL path, from the Catalog platform.
Warning: This action is irreversible. Ensure you intend to delete this product permanently.
You can only delete products that are directly owned by your Supplier account. Attempting to delete a product belonging to another shop will result in a 403 Forbidden error.
Effect on Storefronts: When a product is deleted, Catalog automatically pauses the corresponding product listings on any connected Storefronts that were actively selling it. An asynchronous task is initiated to inform these Storefronts about the product's removal.
A successful deletion returns an HTTP 204 No Content status with an empty response body.
| id required | string |
{- "message": "string",
- "detail": null
}[Supplier Only] Update the display sequence of variants for a specific product. The product is identified by its Rokt Catalog ID (UUID) in the URL path.
The request body must contain a field named variant_order, which is a list of Catalog variant IDs (UUIDs) sorted in the desired display order (0-indexed).
Requirement: The variant_order list must include the IDs of all currently existing variants for the specified product. Omitting or adding incorrect IDs will result in a validation error (400 Bad Request).
This reordering affects how variants are presented within the Catalog platform (e.g., in the Supplier dashboard). It may also influence the display order on connected Storefronts if their integration respects the position attribute of the variants.
A successful update returns 200 OK with the full product details (ProductSerializer), reflecting the new position values for each variant.
| id required | string |
| variant_order required | Array of strings <uuid> [ items <uuid > ] |
{- "variant_order": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "variants": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "inventory_policy": "string",
- "inventory_quantity": -2147483648,
- "inventory_item_cost": 0.1,
- "option1": "string",
- "option2": "string",
- "option3": "string",
- "position": 0,
- "price": "string",
- "compare_at_price": "string",
- "origin_supplier_currency": "string",
- "title": "string",
- "sku": "string",
- "upc": "string",
- "grams": 0.1,
- "weight": 0.1,
- "weight_unit": "str",
- "pause_selling": true,
- "origin_supplier_id": "string",
- "origin_supplier_name": "string",
- "available_for_ordering": true,
- "supplier_sku": "string",
- "is_exclusive_offer": true,
- "sup_price": "string",
- "sup_compare_at_price": "string"
}
], - "body_html": "string",
- "handle": "string",
- "image_src": "string",
- "images": [
- {
- "id": "string",
- "position": 0,
- "width": 0,
- "height": 0,
- "canal_variant_ids": [
- "string"
], - "variant_ids": [
- "string"
], - "origin_supplier_image_id": "78f40e09-a463-4e20-b9d0-a8eb90e46d9f"
}
], - "options": null,
- "product_type": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "published_at": "2019-08-24T14:15:22Z",
- "status": "active",
- "title": "string",
- "vendor": "string",
- "tags": "string",
- "number_of_reviews": -2147483648,
- "star_rating": 0.1
}Resynchronize a retailer (Shopkeep) product with its origin supplier product.
If fields_to_resync is provided, only those fields will be updated; otherwise all fields are resynced.
On success, returns the updated product data. If the resync is queued to run asynchronously (e.g. due to rate limits), returns a message indicating the resync has started.
| id required | string |
| fields_to_resync | Array of strings (FieldsToResyncEnum) Items Enum: "images" "product_title" "description" "tags" "variants" "vendor" "permalink" |
{- "fields_to_resync": [
- "images"
]
}{- "ok": true,
- "status": "string",
- "shopify_product": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "variants": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "inventory_policy": "string",
- "inventory_quantity": -2147483648,
- "inventory_item_cost": 0.1,
- "option1": "string",
- "option2": "string",
- "option3": "string",
- "position": 0,
- "price": "string",
- "compare_at_price": "string",
- "origin_supplier_currency": "string",
- "title": "string",
- "sku": "string",
- "upc": "string",
- "grams": 0.1,
- "weight": 0.1,
- "weight_unit": "str",
- "pause_selling": true,
- "origin_supplier_id": "string",
- "origin_supplier_name": "string",
- "available_for_ordering": true,
- "supplier_sku": "string",
- "is_exclusive_offer": true,
- "sup_price": "string",
- "sup_compare_at_price": "string"
}
], - "body_html": "string",
- "handle": "string",
- "image_src": "string",
- "images": [
- {
- "id": "string",
- "position": 0,
- "width": 0,
- "height": 0,
- "canal_variant_ids": [
- "string"
], - "variant_ids": [
- "string"
], - "origin_supplier_image_id": "78f40e09-a463-4e20-b9d0-a8eb90e46d9f"
}
], - "options": null,
- "product_type": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "published_at": "2019-08-24T14:15:22Z",
- "status": "active",
- "title": "string",
- "vendor": "string",
- "tags": "string",
- "number_of_reviews": -2147483648,
- "star_rating": 0.1
}
}[Storefront Only] Retrieve a paginated list of active products that are eligible for upselling.
This endpoint returns products from Suppliers with whom you have an active and approved partnership.
Products must meet the following criteria:
Have status='active',
Have at least one variant that is connected to a supplier variant, listed on Catalog, and not paused for selling,
Have passed ads eligibility checks,
Have at least one available variant in a non-deleted product set,
| ordering | string Which field to use when ordering the results. |
| cursor | string The pagination cursor value. |
| supplier_id | string <uuid> Filter products by the Catalog ID of a specific connected Supplier. |
{- "results": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "variants": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "inventory_policy": "string",
- "inventory_quantity": -2147483648,
- "inventory_item_cost": 0.1,
- "option1": "string",
- "option2": "string",
- "option3": "string",
- "position": 0,
- "price": "string",
- "compare_at_price": "string",
- "origin_supplier_currency": "string",
- "title": "string",
- "sku": "string",
- "upc": "string",
- "grams": 0.1,
- "weight": 0.1,
- "weight_unit": "str",
- "pause_selling": true,
- "origin_supplier_id": "string",
- "origin_supplier_name": "string",
- "available_for_ordering": true,
- "supplier_sku": "string",
- "is_exclusive_offer": true,
- "sup_price": "string",
- "sup_compare_at_price": "string",
- "source_variant_id": "string",
- "source_inventory_quantity": 0
}
], - "body_html": "string",
- "handle": "string",
- "image_src": "string",
- "images": [
- {
- "property1": null,
- "property2": null
}
], - "options": [
- {
- "property1": null,
- "property2": null
}
], - "product_type": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "published_at": "2019-08-24T14:15:22Z",
- "status": "active",
- "title": "string",
- "vendor": "string",
- "tags": "string",
- "number_of_reviews": -2147483648,
- "star_rating": 0.1,
- "product_type_category": "string",
- "customer_charge_amount": {
- "property1": null,
- "property2": null
}
}
]
}Variants are the purchasable options of a product (size, color, SKU, price, inventory). Brands add, update, list, and remove variants for their own products; Partners receive variant data on the product and through the product/create and product/update webhooks.
[Supplier Only] Retrieve a paginated list of all product variants associated with all products owned by your Supplier account.
This endpoint provides a flat list of variant details, independent of their parent products. Use this if you need to query or manage variants across your entire catalog.
Results are returned using cursor-based pagination (PlatformPagination). Available ordering fields include created_at, updated_at, price, and compare_at_price. The default order is -created_at.
| ordering | string Which field to use when ordering the results. |
| cursor | string The pagination cursor value. |
{- "results": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "inventory_policy": "string",
- "inventory_quantity": -2147483648,
- "inventory_item_cost": 0.1,
- "option1": "string",
- "option2": "string",
- "option3": "string",
- "position": 0,
- "price": "string",
- "compare_at_price": "string",
- "origin_supplier_currency": "string",
- "title": "string",
- "sku": "string",
- "upc": "string",
- "grams": 0.1,
- "weight": 0.1,
- "weight_unit": "str",
- "pause_selling": true,
- "origin_supplier_id": "string",
- "origin_supplier_name": "string",
- "available_for_ordering": true,
- "supplier_sku": "string",
- "is_exclusive_offer": true,
- "sup_price": "string",
- "sup_compare_at_price": "string"
}
]
}[Supplier Only] Add a new variant to an existing product within your Rokt Catalog Supplier account.
The request body must conform to the CreateVariantSerializer structure, requiring the product_id (UUID) of the parent product and the full details of the new variant (including price, sku, inventory_quantity, option1, etc.).
Upon successful creation, the new variant is added to the specified product. By default, it will be assigned the next available position (typically appearing last in the variant list, unless explicitly reordered later using the /products/{product_id}/reorder_variants/ endpoint).
Synchronization: This addition is automatically propagated asynchronously to connected Storefronts that are selling the parent product.
A successful creation returns 201 Created with the full details of the parent product (ProductSerializer), now including the newly added variant and its assigned Catalog ID (UUID).
| title | string |
| price required | string <decimal> ^-?\d{0,10}(?:\.\d{0,2})?$ The price of the variant to be sold at. |
| compare_at_price | string or null <decimal> ^-?\d{0,10}(?:\.\d{0,2})?$ The original price of the product from before the sale price. Should be greater than "price". If you elect to not allow sale price passthrough, Connected Storefronts will sell items at this price. |
| inventory_policy required | string (InventoryPolicyEnum) Enum: "continue" "deny"
|
| inventory_quantity required | integer |
| option1 required | string |
| option2 | string |
| option3 | string |
| sku | string |
| position | integer |
| image_src | string |
| weight | number <double> |
| weight_unit | string |
| product_id required | string <uuid> |
{- "title": "string",
- "price": "string",
- "compare_at_price": "string",
- "inventory_policy": "continue",
- "inventory_quantity": 0,
- "option1": "string",
- "option2": "string",
- "option3": "string",
- "sku": "string",
- "position": 0,
- "image_src": "string",
- "weight": 0.1,
- "weight_unit": "string",
- "product_id": "0d012afa-f885-4e65-aeca-37e27701e2d1"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "variants": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "inventory_policy": "string",
- "inventory_quantity": -2147483648,
- "inventory_item_cost": 0.1,
- "option1": "string",
- "option2": "string",
- "option3": "string",
- "position": 0,
- "price": "string",
- "compare_at_price": "string",
- "origin_supplier_currency": "string",
- "title": "string",
- "sku": "string",
- "upc": "string",
- "grams": 0.1,
- "weight": 0.1,
- "weight_unit": "str",
- "pause_selling": true,
- "origin_supplier_id": "string",
- "origin_supplier_name": "string",
- "available_for_ordering": true,
- "supplier_sku": "string",
- "is_exclusive_offer": true,
- "sup_price": "string",
- "sup_compare_at_price": "string"
}
], - "body_html": "string",
- "handle": "string",
- "image_src": "string",
- "images": [
- {
- "id": "string",
- "position": 0,
- "width": 0,
- "height": 0,
- "canal_variant_ids": [
- "string"
], - "variant_ids": [
- "string"
], - "origin_supplier_image_id": "78f40e09-a463-4e20-b9d0-a8eb90e46d9f"
}
], - "options": null,
- "product_type": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "published_at": "2019-08-24T14:15:22Z",
- "status": "active",
- "title": "string",
- "vendor": "string",
- "tags": "string",
- "number_of_reviews": -2147483648,
- "star_rating": 0.1
}[Supplier Only] Retrieve the full details for a specific product variant, identified by its Rokt Catalog ID (UUID) provided in the URL path.
This endpoint returns data only for variants that belong to products owned by your Supplier account.
The response (VariantSerializer) includes all attributes of the variant, such as price, SKU, inventory, options, weight, timestamps, and its parent product ID.
If the provided variant ID is invalid or belongs to a product owned by another shop, a 404 Not Found error is returned.
| id required | string |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "inventory_policy": "string",
- "inventory_quantity": -2147483648,
- "inventory_item_cost": 0.1,
- "option1": "string",
- "option2": "string",
- "option3": "string",
- "position": 0,
- "price": "string",
- "compare_at_price": "string",
- "origin_supplier_currency": "string",
- "title": "string",
- "sku": "string",
- "upc": "string",
- "grams": 0.1,
- "weight": 0.1,
- "weight_unit": "str",
- "pause_selling": true,
- "origin_supplier_id": "string",
- "origin_supplier_name": "string",
- "available_for_ordering": true,
- "supplier_sku": "string",
- "is_exclusive_offer": true,
- "sup_price": "string",
- "sup_compare_at_price": "string"
}[Supplier Only] Update attributes of a specific product variant, identified by its Rokt Catalog ID (UUID) in the URL path.
Provide the fields you wish to change in the request body using the VariantSerializer structure (partial updates are allowed). Common updatable fields include price, compare_at_price, sku, inventory_quantity, option1, option2, option3, weight, weight_unit, etc.
Synchronization: Changes to critical attributes like price and inventory are automatically propagated to connected Storefronts that are selling this variant. This synchronization occurs asynchronously.
Pricing Update: When updating price or compare_at_price, the system also updates the associated variant listing's default price, considering the shop's feature flags for sale price syncing.
A successful update returns 200 OK with the full details of the parent product (ProductSerializer), reflecting the changes made to the specific variant.
| id required | string |
| inventory_policy | string or null <= 123 characters |
| inventory_quantity | integer or null [ -2147483648 .. 2147483647 ] |
| inventory_item_cost | number <double> |
| option1 | string or null <= 255 characters |
| option2 | string or null <= 256 characters |
| option3 | string or null <= 257 characters |
| price required | string <decimal> ^-?\d{0,10}(?:\.\d{0,2})?$ The price of the variant to be sold at. |
| compare_at_price | string or null <= 128 characters |
| title required | string |
| upc | string or null <= 253 characters |
| grams | number or null <double> |
| weight | number or null <double> |
| weight_unit | string or null <= 3 characters |
| pause_selling | boolean |
{- "inventory_policy": "string",
- "inventory_quantity": -2147483648,
- "inventory_item_cost": 0.1,
- "option1": "string",
- "option2": "string",
- "option3": "string",
- "price": "string",
- "compare_at_price": "string",
- "title": "string",
- "upc": "string",
- "grams": 0.1,
- "weight": 0.1,
- "weight_unit": "str",
- "pause_selling": true
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "variants": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "inventory_policy": "string",
- "inventory_quantity": -2147483648,
- "inventory_item_cost": 0.1,
- "option1": "string",
- "option2": "string",
- "option3": "string",
- "position": 0,
- "price": "string",
- "compare_at_price": "string",
- "origin_supplier_currency": "string",
- "title": "string",
- "sku": "string",
- "upc": "string",
- "grams": 0.1,
- "weight": 0.1,
- "weight_unit": "str",
- "pause_selling": true,
- "origin_supplier_id": "string",
- "origin_supplier_name": "string",
- "available_for_ordering": true,
- "supplier_sku": "string",
- "is_exclusive_offer": true,
- "sup_price": "string",
- "sup_compare_at_price": "string"
}
], - "body_html": "string",
- "handle": "string",
- "image_src": "string",
- "images": [
- {
- "id": "string",
- "position": 0,
- "width": 0,
- "height": 0,
- "canal_variant_ids": [
- "string"
], - "variant_ids": [
- "string"
], - "origin_supplier_image_id": "78f40e09-a463-4e20-b9d0-a8eb90e46d9f"
}
], - "options": null,
- "product_type": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "published_at": "2019-08-24T14:15:22Z",
- "status": "active",
- "title": "string",
- "vendor": "string",
- "tags": "string",
- "number_of_reviews": -2147483648,
- "star_rating": 0.1
}| id required | string |
| inventory_policy | string or null <= 123 characters |
| inventory_quantity | integer or null [ -2147483648 .. 2147483647 ] |
| inventory_item_cost | number <double> |
| option1 | string or null <= 255 characters |
| option2 | string or null <= 256 characters |
| option3 | string or null <= 257 characters |
| price | string <decimal> ^-?\d{0,10}(?:\.\d{0,2})?$ The price of the variant to be sold at. |
| compare_at_price | string or null <= 128 characters |
| title | string |
| upc | string or null <= 253 characters |
| grams | number or null <double> |
| weight | number or null <double> |
| weight_unit | string or null <= 3 characters |
| pause_selling | boolean |
{- "inventory_policy": "string",
- "inventory_quantity": -2147483648,
- "inventory_item_cost": 0.1,
- "option1": "string",
- "option2": "string",
- "option3": "string",
- "price": "string",
- "compare_at_price": "string",
- "title": "string",
- "upc": "string",
- "grams": 0.1,
- "weight": 0.1,
- "weight_unit": "str",
- "pause_selling": true
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "inventory_policy": "string",
- "inventory_quantity": -2147483648,
- "inventory_item_cost": 0.1,
- "option1": "string",
- "option2": "string",
- "option3": "string",
- "position": 0,
- "price": "string",
- "compare_at_price": "string",
- "origin_supplier_currency": "string",
- "title": "string",
- "sku": "string",
- "upc": "string",
- "grams": 0.1,
- "weight": 0.1,
- "weight_unit": "str",
- "pause_selling": true,
- "origin_supplier_id": "string",
- "origin_supplier_name": "string",
- "available_for_ordering": true,
- "supplier_sku": "string",
- "is_exclusive_offer": true,
- "sup_price": "string",
- "sup_compare_at_price": "string"
}[Supplier Only] Permanently remove a specific product variant, identified by its Rokt Catalog ID (UUID) in the URL path, from its parent product.
Warning: This action is irreversible.
Constraint: You cannot delete the last remaining variant of a product using this endpoint. If you need to remove the product entirely, use the /products/{product_id}/ delete endpoint instead.
Synchronization: Deleting a variant automatically triggers an asynchronous update (emitting a PRODUCT_UPDATE webhook) to propagate this change to connected Storefronts, effectively removing the variant from their listings.
Position Update: The position attribute of the remaining variants on the parent product will be automatically recalculated and updated to maintain a contiguous sequence.
A successful deletion returns 200 OK with the full details of the parent product (ProductSerializer), reflecting the variant's removal and the updated positions of the remaining variants.
| id required | string |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "variants": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "inventory_policy": "string",
- "inventory_quantity": -2147483648,
- "inventory_item_cost": 0.1,
- "option1": "string",
- "option2": "string",
- "option3": "string",
- "position": 0,
- "price": "string",
- "compare_at_price": "string",
- "origin_supplier_currency": "string",
- "title": "string",
- "sku": "string",
- "upc": "string",
- "grams": 0.1,
- "weight": 0.1,
- "weight_unit": "str",
- "pause_selling": true,
- "origin_supplier_id": "string",
- "origin_supplier_name": "string",
- "available_for_ordering": true,
- "supplier_sku": "string",
- "is_exclusive_offer": true,
- "sup_price": "string",
- "sup_compare_at_price": "string"
}
], - "body_html": "string",
- "handle": "string",
- "image_src": "string",
- "images": [
- {
- "id": "string",
- "position": 0,
- "width": 0,
- "height": 0,
- "canal_variant_ids": [
- "string"
], - "variant_ids": [
- "string"
], - "origin_supplier_image_id": "78f40e09-a463-4e20-b9d0-a8eb90e46d9f"
}
], - "options": null,
- "product_type": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "published_at": "2019-08-24T14:15:22Z",
- "status": "active",
- "title": "string",
- "vendor": "string",
- "tags": "string",
- "number_of_reviews": -2147483648,
- "star_rating": 0.1
}The Fulfillments endpoints give access to the latest shipping information for Brand orders placed through your Partner storefront. Brands create and update fulfillment (shipment) records; Partners list and retrieve them to show tracking to their customers. Note: only Rokt Catalog Brand products should appear in these fulfillments.
Retrieve a paginated list of fulfillment records associated with the authenticated store, reflecting its role in the order process.
If called by a Storefront: Returns fulfillments created by connected Suppliers for orders originating from the Storefront. This allows the Storefront to track shipments for items their customers ordered.
If called by a Supplier: Returns fulfillments created by this Supplier for orders they received from connected Storefronts.
Results (FulfillmentSerializer) include tracking details when present, status, associated line items, and timestamps.
Pagination is cursor-based (PlatformPagination). Ordering is available on created_at and updated_at, defaulting to -created_at.
| ordering | string Which field to use when ordering the results. |
| cursor | string The pagination cursor value. |
{- "results": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "order_id": "93101167-9065-4b9c-b98b-5d789a3ed9fe",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}
], - "service": "string",
- "shipment_status": "string",
- "status": "string",
- "tracking_company": "string",
- "tracking_numbers": [
- "string"
], - "tracking_urls": [
- "string"
]
}
]
}[Supplier Only] Create a fulfillment record for items in an order received from a connected Storefront.
The request body (CreateFulfillmentSerializer) must specify:
order_id (UUID of the Supplier's Rokt Catalog order record) and a list of line_items.
Each object in line_items needs the Catalog id (UUID) of the Supplier's line item record and the quantity being fulfilled.
For physical shipments, include tracking information (tracking_company, tracking_numbers, tracking_urls) when available. For digital/email fulfillment with no shipment, omit the tracking fields.
Process:
Validation: Checks if the order exists, belongs to the Supplier, is a connected order, and if the provided line items are valid. Returns 400 Bad Request or 404 Not Found on failure.
Create Supplier Fulfillment: Creates the fulfillment record associated with the Supplier's order in Catalog. Considers feature flags to determine if the notify_customer flag should be set during downstream sync.
Sync to Storefront: Triggers a synchronization process. This attempts to create or update the corresponding fulfillment record on the original Storefront's order (e.g., via Shopify API), including tracking information when present.
Webhook: Emits a FULFILLMENT_UPDATE webhook event containing details of the Supplier's newly created fulfillment record.
A successful creation returns 201 Created with the details of the Supplier's fulfillment record (FulfillmentSerializer).
| name required | string |
| service required | string |
| shipment_status required | string (ShipmentStatusEnum) Enum: "label_printed" "label_purchased" "attempted_delivery" "ready_for_pickup" "confirmed" "in_transit" "out_for_delivery" "delivered" "failure"
|
| status required | string (Status406Enum) Enum: "pending" "open" "success" "cancelled" "error" "failure"
|
| tracking_company | string or null |
| tracking_numbers | Array of strings or null |
| tracking_urls | Array of strings or null |
| order_id required | string <uuid> |
required | Array of objects (LineItem) |
{- "name": "string",
- "service": "string",
- "shipment_status": "label_printed",
- "status": "pending",
- "tracking_company": "string",
- "tracking_numbers": [
- "string"
], - "tracking_urls": [
- "string"
], - "order_id": "93101167-9065-4b9c-b98b-5d789a3ed9fe",
- "line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "quantity": 0
}
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "order_id": "93101167-9065-4b9c-b98b-5d789a3ed9fe",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}
], - "service": "string",
- "shipment_status": "string",
- "status": "string",
- "tracking_company": "string",
- "tracking_numbers": [
- "string"
], - "tracking_urls": [
- "string"
]
}Retrieve the full details for a specific fulfillment record, identified by its Rokt Catalog ID (UUID) in the URL path.
Access is restricted to fulfillments associated with the authenticated store (request.shop). This means:
Storefronts can retrieve details of fulfillments created by their Suppliers for their orders.
Suppliers can retrieve details of fulfillments they created.
The response (FulfillmentSerializer) includes the fulfillment status (e.g., 'fulfilled', 'cancelled'), optional tracking_company, optional tracking_numbers, optional tracking_urls, the list of line_items included in this fulfillment (with quantities), and relevant timestamps.
If the fulfillment ID is invalid or not associated with an order linked to your store, a 404 Not Found error is returned.
| id required | string |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "order_id": "93101167-9065-4b9c-b98b-5d789a3ed9fe",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}
], - "service": "string",
- "shipment_status": "string",
- "status": "string",
- "tracking_company": "string",
- "tracking_numbers": [
- "string"
], - "tracking_urls": [
- "string"
]
}[Supplier Only] Update an existing fulfillment record created by your Supplier account. Identify the fulfillment by its Rokt Catalog ID (UUID) in the URL path.
The request body (UpdateFulfillmentSerializer) should contain the fields to update, such as tracking_company, tracking_numbers, and/or tracking_urls for physical shipments. Tracking fields are optional and can be omitted for digital/email fulfillments with no shipment. Partial updates are allowed (only include the fields you want to change).
Process:
Update Supplier Fulfillment: Updates the specified fields on the Supplier's fulfillment record in Catalog.
Sync to Storefront: Triggers a synchronization process. This attempts to update the corresponding fulfillment record on the original Storefront's order (e.g., via Shopify API) with the new tracking information when present.
Webhook: Emits a FULFILLMENT_UPDATE webhook event containing details of the Supplier's updated fulfillment record. If the sync to the Storefront also resulted in an update to the Storefront's fulfillment record in Catalog, a separate FULFILLMENT_UPDATE event for the Storefront's fulfillment might also be emitted (depending on the sync logic).
A successful update returns 200 OK with the updated details of the Supplier's fulfillment record (FulfillmentSerializer).
| id required | string |
| name required | string |
| service required | string |
| shipment_status required | string (ShipmentStatusEnum) Enum: "label_printed" "label_purchased" "attempted_delivery" "ready_for_pickup" "confirmed" "in_transit" "out_for_delivery" "delivered" "failure"
|
| status required | string (Status406Enum) Enum: "pending" "open" "success" "cancelled" "error" "failure"
|
| tracking_company | string or null |
| tracking_numbers | Array of strings or null |
| tracking_urls | Array of strings or null |
{- "name": "string",
- "service": "string",
- "shipment_status": "label_printed",
- "status": "pending",
- "tracking_company": "string",
- "tracking_numbers": [
- "string"
], - "tracking_urls": [
- "string"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "order_id": "93101167-9065-4b9c-b98b-5d789a3ed9fe",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}
], - "service": "string",
- "shipment_status": "string",
- "status": "string",
- "tracking_company": "string",
- "tracking_numbers": [
- "string"
], - "tracking_urls": [
- "string"
]
}| id required | string |
| name | string <= 255 characters |
| order_id | string <uuid> |
object (Shop) | |
Array of objects (LineItemRead) | |
| service | string or null <= 258 characters |
| shipment_status | string or null <= 32 characters |
| status | string or null <= 32 characters |
| tracking_company | string or null <= 257 characters |
| tracking_numbers | Array of strings or null[ items <= 128 characters ] |
| tracking_urls | Array of strings or null[ items <= 256 characters ] |
{- "name": "string",
- "order_id": "93101167-9065-4b9c-b98b-5d789a3ed9fe",
- "shop": {
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
}, - "line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}
], - "service": "string",
- "shipment_status": "string",
- "status": "string",
- "tracking_company": "string",
- "tracking_numbers": [
- "string"
], - "tracking_urls": [
- "string"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "order_id": "93101167-9065-4b9c-b98b-5d789a3ed9fe",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}
], - "service": "string",
- "shipment_status": "string",
- "status": "string",
- "tracking_company": "string",
- "tracking_numbers": [
- "string"
], - "tracking_urls": [
- "string"
]
}The Refunds endpoints allow the Partner to initiate refunds for Brand products that were bought through the Partner storefront. Brands can also create refunds for orders they received, and both roles can list and retrieve refunds.
Retrieve a paginated list of refund records associated with the authenticated store, reflecting its role in the order process.
If called by a Storefront: Returns refund records linked to orders originating from the Storefront. This includes refunds initiated by the Storefront and refunds initiated by connected Suppliers for those orders.
If called by a Supplier: Returns refund records linked to orders received by the Supplier from connected Storefronts. This includes refunds initiated by the Supplier and refunds initiated by the originating Storefronts for those orders.
The response (RefundSerializer, paginated) includes details for each refund, such as the calculated total_refunded_amount, currency, the list of refund_line_items (with quantities and amounts), associated order_id, and timestamps.
Pagination is cursor-based (PlatformPagination). Ordering is available on created_at and updated_at, defaulting to -created_at.
| ordering | string Which field to use when ordering the results. |
| cursor | string The pagination cursor value. |
{- "results": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "order_id": "string",
- "amount": {
- "property1": null,
- "property2": null
}, - "note": "string",
- "duties": null,
- "restock": true,
- "processed_at": "2019-08-24T14:15:22Z",
- "refund_line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line_item": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}, - "quantity": -2147483648,
- "subtotal": "string"
}
], - "shipping_refund_amount": "string",
- "failed_to_create_refund_line_items": "string"
}
]
}Initiate a refund for specific quantities of line items within a Rokt Catalog order. This endpoint handles refund requests originating from both Storefronts and Suppliers.
Request Body (RefundCreateSerializer):
order_id (UUID, required): The Catalog ID of the order to be refunded.
line_items (list, required): A list of objects, each specifying:
id (UUID, required): The Catalog ID of the line item to refund.
quantity (integer, required): The quantity of this line item to refund.
should_refund_shipping (boolean, optional, Storefront only): If true, attempts to refund the original shipping cost associated with the Storefront order.
extra_amount (decimal string, optional, restricted use): Allows refunding an additional amount beyond line items/shipping (currently restricted to specific approved shops).
Process & Permissions:
Identify Initiator: Determines if the request comes from the Storefront or the Supplier by checking the order's relationships.
Lock Order: Acquires a lock on the order record to prevent concurrent modifications.
Validate Quantities: Checks if the requested quantity for each line item exceeds the currently refundable quantity (original quantity minus previously refunded quantity). If validation fails, returns 400 Bad Request with error_code: ITEMS_ALREADY_REFUNDED and details of affected items.
Storefront-Initiated Refund:
Permission Check: Verifies the Storefront has the required scope (write_sk_refunds). Returns 403 Forbidden if missing.
Dispatch: Calculates refund amounts, creates the refund record for the Storefront in Catalog, and asynchronously triggers tasks to create corresponding refund records on the connected Supplier(s)' systems (e.g., via Shopify API).
Error Handling: If downstream Supplier refund creation fails, returns 400 Bad Request with error_code: SUPPLIER_REFUND_FAILED.
Supplier-Initiated Refund:
Permission Check: Implicitly requires the write_refunds scope.
Create Supplier Refund: Creates the refund record for the Supplier in Catalog.
Dispatch to Storefront: If the Supplier order originated from a Storefront with integration settings, synchronously attempts to create a corresponding refund record on the Storefront's order in Catalog.
Error Handling: If downstream Storefront refund creation fails, returns 400 Bad Request with error_code: SK_REFUND_FAILED.
Extra Amount: If extra_amount is provided and valid, creates an associated record (restricted use).
Response: On success, returns 201 Created with the details of the primary refund record created (either the Storefront's or the Supplier's) using RefundSerializer. The serializer might include details about failed downstream refunds in the failed_to_create_refund_line_items field for Storefront-initiated refunds.
| order_id required | string <uuid> |
required | Array of objects (LineItem) |
| should_refund_shipping | boolean |
| extra_amount | string <decimal> ^-?\d{0,8}(?:\.\d{0,4})?$ Only available to select retailers. |
{- "order_id": "93101167-9065-4b9c-b98b-5d789a3ed9fe",
- "line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "quantity": 0
}
], - "should_refund_shipping": true,
- "extra_amount": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "order_id": "string",
- "amount": {
- "property1": null,
- "property2": null
}, - "note": "string",
- "duties": null,
- "restock": true,
- "processed_at": "2019-08-24T14:15:22Z",
- "refund_line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line_item": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}, - "quantity": -2147483648,
- "subtotal": "string"
}
], - "shipping_refund_amount": "string",
- "failed_to_create_refund_line_items": "string"
}Retrieve the full details for a specific refund record, identified by its Rokt Catalog ID (UUID) in the URL path.
Access is restricted to refunds associated with orders linked to the authenticated store (request.shop).
The response (RefundSerializer) includes the total_refunded_amount, currency, the list of refund_line_items (specifying the exact items, quantities, and subtotal refunded), the associated order_id, note (if any), processed_at timestamp, and other relevant details.
If the refund ID is invalid or the refund is not associated with an order linked to your store, a 404 Not Found error is returned.
| id required | string |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "order_id": "string",
- "amount": {
- "property1": null,
- "property2": null
}, - "note": "string",
- "duties": null,
- "restock": true,
- "processed_at": "2019-08-24T14:15:22Z",
- "refund_line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line_item": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}, - "quantity": -2147483648,
- "subtotal": "string"
}
], - "shipping_refund_amount": "string",
- "failed_to_create_refund_line_items": "string"
}Partners create return requests for items purchased in a Rokt Catalog order and add tracking for the return shipment; Brands review the return requests they receive and close them once the returned items have been processed. Closing a return does not create a refund: use the Refunds endpoints for that.
Retrieve a paginated list of return requests associated with the authenticated store, reflecting its role.
If called by a Storefront: Returns ReturnRequest records initiated by this Storefront for orders placed on their platform.
If called by a Supplier: Returns ReturnRequest records received from connected Storefronts for orders the Supplier fulfilled.
Filtering: You can filter the list by status using a query parameter (e.g., ?status=OPEN or ?status=CLOSED).
Response (ReturnSerializer, paginated): Includes details for each return request: id, name, rma, associated order_id, status ('OPEN' or 'CLOSED'), return_line_items (with quantities, reasons), reverse_deliveries (tracking info), and timestamps.
Pagination is cursor-based (PlatformPagination). Ordering is available on created_at and updated_at, defaulting to -created_at.
| ordering | string Which field to use when ordering the results. |
| cursor | string The pagination cursor value. |
| status | string Enum: "closed" "open" Filter returns by status |
{- "results": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "order": "93b532b3-a125-4cd2-9b71-9996b1e164ce",
- "return_line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line_item_id": "57fa9869-a772-45e6-b99d-250b3c5af2f2",
- "quantity": -2147483648,
- "customer_note": "string",
- "return_reason": "color",
- "return_reason_note": "string"
}
], - "status": "canceled",
- "name": "string",
- "total_return_line_items": -32768,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "tracking": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "carrier_name": "string",
- "tracking_number": "string",
}
], - "rma": "string"
}
]
}[Storefront Only] Initiate a return process for items purchased in a Rokt Catalog-facilitated order.
Request Body (ReturnCreateSerializer):
order_id (UUID, required): The Catalog ID of the original Storefront order containing the items to be returned.
name (string, required): A unique identifier for this return request (e.g., your system's RMA number).
rma (string, optional): An alternative return merchandise authorization identifier.
return_line_items (list, required): A list of objects, each specifying:
line_item_id (UUID, required): The Catalog ID of the Storefront's line item record to be returned.
quantity (integer, required): The quantity of this line item being returned.
return_reason (string, optional): A code or description for the return reason.
customer_note (string, optional): Any notes provided by the customer.
reverse_deliveries (list, optional): Allows providing initial return shipping tracking information (see ReverseDeliveryCreateSerializer) within the same request.
Process:
Validation: Checks if the order and line items exist, belong to the Storefront, and if the requested return quantities are valid (e.g., not exceeding fulfilled quantity). Acquires a lock on the order.
Create Storefront Return Request: Creates the primary return request record associated with the Storefront's order in Rokt Catalog.
Create Initial Tracking (Optional): If reverse_deliveries are provided, creates associated return tracking records.
Dispatch to Suppliers (Async): Triggers an asynchronous task to create corresponding return request records for each relevant Supplier involved in the returned line items. These Supplier return requests are linked back to the Storefront's request.
Error Handling: Returns 400 Bad Request for validation errors (e.g., invalid quantity, bad IDs). Returns 500 Internal Server Error for unexpected issues.
Response: On success, returns 201 Created with the details of the newly created Storefront return request (ReturnSerializer).
| order_id required | string <uuid> |
required | Array of objects (CreateReturnLineItem) |
required | object (ReverseDeliveryCreate) |
| name | string or null |
| rma | string |
{- "order_id": "93101167-9065-4b9c-b98b-5d789a3ed9fe",
- "return_line_items": [
- {
- "line_item_id": "57fa9869-a772-45e6-b99d-250b3c5af2f2",
- "quantity": 0,
- "customer_note": "string",
- "return_reason": "color"
}
], - "tracking": {
- "carrier_name": "string",
- "tracking_number": "string",
}, - "name": "string",
- "rma": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "order": "93b532b3-a125-4cd2-9b71-9996b1e164ce",
- "return_line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line_item_id": "57fa9869-a772-45e6-b99d-250b3c5af2f2",
- "quantity": -2147483648,
- "customer_note": "string",
- "return_reason": "color",
- "return_reason_note": "string"
}
], - "status": "canceled",
- "name": "string",
- "total_return_line_items": -32768,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "tracking": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "carrier_name": "string",
- "tracking_number": "string",
}
], - "rma": "string"
}| id required | string |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "order": "93b532b3-a125-4cd2-9b71-9996b1e164ce",
- "return_line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line_item_id": "57fa9869-a772-45e6-b99d-250b3c5af2f2",
- "quantity": -2147483648,
- "customer_note": "string",
- "return_reason": "color",
- "return_reason_note": "string"
}
], - "status": "canceled",
- "name": "string",
- "total_return_line_items": -32768,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "tracking": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "carrier_name": "string",
- "tracking_number": "string",
}
], - "rma": "string"
}[Supplier Only] Mark a return request that your Supplier account received from a Storefront as 'CLOSED'.
Identify the return request by its Rokt Catalog ID (UUID) provided in the URL path.
Use Case: This endpoint should typically be called by the Supplier once they have received the physical returned items from the customer/Storefront and completed their internal processing (inspection, restocking, etc.).
Action: Sets the status field of the Supplier's return request record in Catalog to CLOSED.
Important Limitation: This action only updates the status of the Supplier's return record. It does not automatically update the status of the original Storefront's return request, nor does it trigger any notifications or refunds. Subsequent actions, such as initiating a refund using the /refunds/ endpoint, might be required based on the agreed return policy and workflow.
Permissions: Requires the request to be authenticated as the Supplier associated with the return request. Attempting to close a return belonging to another shop results in 403 Forbidden.
A successful update returns 200 OK with the updated details of the Supplier's return request (ReturnSerializer), showing the status as 'CLOSED'.
| id required | string |
| order required | string <uuid> |
required | Array of objects (ReturnLineItem) |
| status | string (Status602Enum) Enum: "canceled" "closed" "declined" "open" "requested"
|
| name | string or null <= 501 characters |
| total_return_line_items required | integer [ -32768 .. 32767 ] The sum of all return line item quantities for the return. |
required | Array of objects (ReverseDelivery) |
| rma | string or null <= 501 characters "Return merchandise authorization" -- used as reference number for SK to SUP comms |
{- "order": "93b532b3-a125-4cd2-9b71-9996b1e164ce",
- "return_line_items": [
- {
- "line_item_id": "57fa9869-a772-45e6-b99d-250b3c5af2f2",
- "quantity": -2147483648,
- "customer_note": "string",
- "return_reason": "color",
- "return_reason_note": "string"
}
], - "status": "canceled",
- "name": "string",
- "total_return_line_items": -32768,
- "tracking": [
- {
- "carrier_name": "string",
- "tracking_number": "string",
}
], - "rma": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "order": "93b532b3-a125-4cd2-9b71-9996b1e164ce",
- "return_line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line_item_id": "57fa9869-a772-45e6-b99d-250b3c5af2f2",
- "quantity": -2147483648,
- "customer_note": "string",
- "return_reason": "color",
- "return_reason_note": "string"
}
], - "status": "canceled",
- "name": "string",
- "total_return_line_items": -32768,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "tracking": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "carrier_name": "string",
- "tracking_number": "string",
}
], - "rma": "string"
}[Storefront Only] Add or update the tracking information for the shipment returning items back to the Supplier(s). Identify the specific return request using its Rokt Catalog ID (UUID) in the URL path.
Request Body (ReverseDeliveryCreateSerializer):
carrier_name (string, optional): Name of the shipping carrier (e.g., 'USPS', 'FedEx').
tracking_number (string, optional): The tracking number for the return shipment.
tracking_url (string, optional): A direct URL to track the shipment.
shipping_label_file_url (string, optional): URL to a downloadable shipping label file (e.g., PDF).
shipping_label_created_at (datetime string, optional): Timestamp when the label was created.
Process:
Validation: Checks if the return request exists and belongs to the Storefront.
Create Storefront Return Tracking: Creates a return tracking record containing the provided tracking/label info and associates it with the Storefront's return request.
Sync to Suppliers (Sync): This synchronously attempts to add the same return tracking information to the corresponding return request records on the Supplier side(s).
Response: Returns 200 OK with the updated details of the Storefront's return request (ReturnSerializer), now including the added return tracking information.
| id required | string |
| ordering | string Which field to use when ordering the results. |
| cursor | string The pagination cursor value. |
| carrier_name | string or null <= 100 characters |
| tracking_number | string or null <= 100 characters |
| tracking_url | string or null <uri> <= 200 characters |
| shipping_label_file_url | string or null <uri> <= 1279 characters |
{- "carrier_name": "string",
- "tracking_number": "string",
}{- "results": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "order": "93b532b3-a125-4cd2-9b71-9996b1e164ce",
- "return_line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line_item_id": "57fa9869-a772-45e6-b99d-250b3c5af2f2",
- "quantity": -2147483648,
- "customer_note": "string",
- "return_reason": "color",
- "return_reason_note": "string"
}
], - "status": "canceled",
- "name": "string",
- "total_return_line_items": -32768,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "tracking": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "carrier_name": "string",
- "tracking_number": "string",
}
], - "rma": "string"
}
]
}Register and manage webhook subscriptions so Rokt Catalog can notify your application when products, orders, and fulfillments change. See the Webhooks guide for the available topics, payloads, and delivery behavior.
Retrieve a paginated list of all webhook subscriptions currently registered and active for the authenticated application (identified by the API credentials used in the request).
The response (RegisteredWebhookSerializer, paginated) includes the unique Rokt Catalog ID (UUID), the subscribed topic, and the target address (URL) for each registered webhook.
Results are returned using cursor-based pagination (PlatformPagination).
| cursor | string The pagination cursor value. |
{- "results": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "topic": "order/create",
- "address": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z"
}
]
}Register a new endpoint URL to receive notifications (webhooks) from Rokt Catalog when specific events occur related to your store.
The request body (CreateUpdateWebhookSerializer) requires:
topic: A string representing the event type you want to subscribe to (e.g., product/update, order/cancel, fulfillment/update). See Catalog documentation for the full list of available topics.
address: The HTTPS URL of your application's endpoint that will receive the webhook POST requests from Catalog.
Process: Catalog validates the topic and creates a webhook subscription record associated with your application's integration settings. When an event matching the topic occurs for a resource linked to your store (e.g., an order associated with your shop is cancelled), Catalog will send an HTTP POST request containing the relevant event payload (JSON format) to the registered address.
A successful registration returns 201 Created with the details of the new subscription (RegisteredWebhookSerializer), including its unique Catalog ID (UUID).
| topic required | string |
| address required | string |
{- "topic": "string",
- "address": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "topic": "order/create",
- "address": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z"
}Retrieve the details for a single, specific webhook subscription, identified by its Rokt Catalog ID (UUID) provided in the URL path.
Access is restricted to subscriptions belonging to the authenticated application.
The response (RegisteredWebhookSerializer) includes the id, topic, and address.
If the provided ID is invalid or does not correspond to a webhook registered by your application, a 404 Not Found error is returned.
| id required | string |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "topic": "order/create",
- "address": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z"
}Update the configuration of an existing webhook subscription. Identify the subscription by its Rokt Catalog ID (UUID) in the URL path.
The request body (CreateUpdateWebhookSerializer) can include the new topic and/or address you want to set. Partial updates are allowed (only include the fields you want to change).
Validation: If provided, the topic must be one of the valid WEBHOOK_TOPICS.
A successful update returns 200 OK with the complete, updated details of the webhook subscription (RegisteredWebhookSerializer).
| id required | string |
| topic required | string |
| address required | string |
{- "topic": "string",
- "address": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "topic": "order/create",
- "address": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z"
}| id required | string |
| topic | string (TopicEnum) Enum: "order/create" "order/update" "order/cancel" "product/create" "product/update" "fulfillment/create" "fulfillment/update"
|
| address | string <= 512 characters |
{- "topic": "order/create",
- "address": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "topic": "order/create",
- "address": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z"
}Permanently remove an existing webhook subscription, identified by its Rokt Catalog ID (UUID) in the URL path.
Access is restricted to subscriptions belonging to the authenticated application.
Once deleted, Catalog will immediately stop sending notifications for the associated topic to the registered address.
Warning: This action is irreversible. To resume receiving notifications, you must create a new subscription.
A successful deletion returns an HTTP 200 OK status with an empty response body.
| id required | string |
{- "message": "string",
- "detail": null
}CSV downloads: the product import template, and line-item exports for Partners and Brands. These endpoints back the upload and export flows in the Rokt Catalog app and expect a signed-in app session; use the Products and Variants endpoints with the API headers for programmatic catalog changes.
Import market-specific prices for your products. These endpoints back the upload and export flows in the Rokt Catalog app and expect a signed-in app session; use the Products and Variants endpoints with the API headers for programmatic catalog changes.
The Orders endpoints give access to every order containing Brand products that was purchased from your Partner storefront. Note: only Rokt Catalog Brand products should appear in these orders.
curl https://api.shopcanal.com/platform/orders/ \
--request POST \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'x-canal-app-id: xxxx-xxxx-xxxx-xxxx' \
--header 'x-canal-app-token: your_api_access_token' \
--data '{
"line_items": [
{
"variant_id": "0f9e8d7c-6b5a-4433-8211-000000000001",
"quantity": 1
}
],
"shipping_address": {
"name": "John Doe",
"address1": "123 Your St",
"address2": "",
"city": "San Francisco",
"province": "California",
"province_code": "CA",
"country": "United States of America",
"country_code": "USA",
"zip": "94111",
"phone": "123-456-7890"
},
"customer": {
"email": "john.doe@example.com",
"first_name": "John",
"last_name": "Doe"
}
}'
[Storefront Only] Retrieve a paginated list of orders recorded in Rokt Catalog that originated from your Storefront and contain items sourced from Catalog Suppliers.
This provides your Storefront's view of these cross-shop orders.
Results are returned using cursor-based pagination (PlatformPagination). Available ordering fields are created_at and updated_at. The default order is -created_at.
| ordering | string Which field to use when ordering the results. |
| cursor | string The pagination cursor value. |
{- "results": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "remote_rid": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "customer": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "user@example.com",
- "first_name": "string",
- "last_name": "string",
- "orders_count": -2147483648
}, - "email": "user@example.com",
- "total_price": "string",
- "currency": "string",
- "name": "string",
- "line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}
], - "fulfillments": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "order_id": "93101167-9065-4b9c-b98b-5d789a3ed9fe",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}
], - "service": "string",
- "shipment_status": "string",
- "status": "string",
- "tracking_company": "string",
- "tracking_numbers": [
- "string"
], - "tracking_urls": [
- "string"
]
}
], - "billing_address": null,
- "shipping_address": null,
- "shipping_lines": [
- {
- "code": "string",
- "title": "string",
- "price": 0.1,
- "currency": "USD"
}
], - "cancelled_at": "2019-08-24T14:15:22Z",
- "refunds": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "order_id": "string",
- "amount": {
- "property1": null,
- "property2": null
}, - "note": "string",
- "duties": null,
- "restock": true,
- "processed_at": "2019-08-24T14:15:22Z",
- "refund_line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line_item": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}, - "quantity": -2147483648,
- "subtotal": "string"
}
], - "shipping_refund_amount": "string",
- "failed_to_create_refund_line_items": "string"
}
], - "connected_supplier_order_numbers": [
- {
- "property1": "string",
- "property2": "string"
}
], - "cancel_reason": "string",
- "note_attributes": [
- {
- "name": "string",
- "value": "string"
}
], - "returns": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "order": "93b532b3-a125-4cd2-9b71-9996b1e164ce",
- "return_line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line_item_id": "57fa9869-a772-45e6-b99d-250b3c5af2f2",
- "quantity": -2147483648,
- "customer_note": "string",
- "return_reason": "color",
- "return_reason_note": "string"
}
], - "status": "canceled",
- "name": "string",
- "total_return_line_items": -32768,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "tracking": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "carrier_name": "string",
- "tracking_number": "string",
}
], - "rma": "string"
}
]
}
]
}[Storefront Only] Record a new customer order placed on your external platform (e.g., your Shopify store) that contains items sourced from Rokt Catalog Suppliers.
The request body (OrderCreateSerializer) must include:
order_name (your unique identifier for this order), currency, email, customer_locale, shipping_address (full address object), billing_address (optional), and a list of line_items.
Each object in line_items requires the Catalog variant_id (UUID of the Storefront's variant record, which links to the Supplier variant) and quantity.
Process:
Validation: Checks if input variants are valid, active, and listed by the supplier. If variants are paused or unlisted, returns 422 Unprocessable Entity. Basic format validation returns 400 Bad Request.
Locking: Acquires a temporary lock based on customer name/phone to prevent duplicate order creation during concurrent requests. If lock fails, returns 503 Service Unavailable.
Storefront Order Creation: Creates the primary order record in Catalog representing the Storefront's view of the order.
Supplier Order Dispatch: Based on the Storefront's order_forwarding_delay setting:
If delay > 0: Schedules an asynchronous task to forward order details to relevant Suppliers after the delay. Returns 202 Accepted with the created Storefront order data.
If delay == 0: Synchronously attempts to dispatch orders to Suppliers. If successful, returns 201 Created with Storefront order data. If dispatch fails (e.g., Supplier API issue), attempts to cancel any partially created Supplier orders and raises an error (likely resulting in a 500 Internal Server Error response).
Error Handling: Catches various exceptions, including dispatch errors, database connection issues, and general exceptions, logging them and potentially returning 500 Internal Server Error.
required | Array of objects (CreateOrderLineItem) |
object (OrderCreateCustomer) | |
| order_name | string |
| total_tax | string <decimal> ^-?\d{0,8}(?:\.\d{0,4})?$ |
Array of objects (OrderNoteAttribute) This field is useful for passing customization options for Supplier products that support customization (gift messages, logos, custom text).
Example: {"name": "Variant 1 Custom Text", "value": " | |
required | object (Address) |
object (Address) |
{- "line_items": [
- {
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "price": "string"
}
], - "customer": {
- "email": "user@example.com",
- "first_name": "string",
- "last_name": ""
}, - "order_name": "string",
- "total_tax": "string",
- "note_attributes": [
- {
- "name": "string",
- "value": "string"
}
], - "shipping_address": {
- "name": "string",
- "address1": "string",
- "address2": "string",
- "city": "string",
- "province": "string",
- "province_code": "string",
- "country": "string",
- "country_code": "string",
- "zip": "string",
- "phone": "string"
}, - "billing_address": {
- "name": "string",
- "address1": "string",
- "address2": "string",
- "city": "string",
- "province": "string",
- "province_code": "string",
- "country": "string",
- "country_code": "string",
- "zip": "string",
- "phone": "string"
}
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "remote_rid": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "customer": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "user@example.com",
- "first_name": "string",
- "last_name": "string",
- "orders_count": -2147483648
}, - "email": "user@example.com",
- "total_price": "string",
- "currency": "string",
- "name": "string",
- "line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}
], - "fulfillments": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "order_id": "93101167-9065-4b9c-b98b-5d789a3ed9fe",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}
], - "service": "string",
- "shipment_status": "string",
- "status": "string",
- "tracking_company": "string",
- "tracking_numbers": [
- "string"
], - "tracking_urls": [
- "string"
]
}
], - "billing_address": null,
- "shipping_address": null,
- "shipping_lines": [
- {
- "code": "string",
- "title": "string",
- "price": 0.1,
- "currency": "USD"
}
], - "cancelled_at": "2019-08-24T14:15:22Z",
- "refunds": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "order_id": "string",
- "amount": {
- "property1": null,
- "property2": null
}, - "note": "string",
- "duties": null,
- "restock": true,
- "processed_at": "2019-08-24T14:15:22Z",
- "refund_line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line_item": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}, - "quantity": -2147483648,
- "subtotal": "string"
}
], - "shipping_refund_amount": "string",
- "failed_to_create_refund_line_items": "string"
}
], - "connected_supplier_order_numbers": [
- {
- "property1": "string",
- "property2": "string"
}
], - "cancel_reason": "string",
- "note_attributes": [
- {
- "name": "string",
- "value": "string"
}
], - "returns": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "order": "93b532b3-a125-4cd2-9b71-9996b1e164ce",
- "return_line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line_item_id": "57fa9869-a772-45e6-b99d-250b3c5af2f2",
- "quantity": -2147483648,
- "customer_note": "string",
- "return_reason": "color",
- "return_reason_note": "string"
}
], - "status": "canceled",
- "name": "string",
- "total_return_line_items": -32768,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "tracking": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "carrier_name": "string",
- "tracking_number": "string",
}
], - "rma": "string"
}
]
}[Storefront Only] Retrieve the full details for a specific Rokt Catalog order, identified by its Catalog ID (UUID) in the URL path.
This endpoint provides the Storefront's perspective on the order. Access is restricted to orders associated with the authenticated Storefront (request.shop).
The response (OrderSerializer) includes comprehensive information: customer details (email, customer_locale), shipping_address, billing_address, currency, order_name, line_items (with Catalog variant IDs and quantities), overall fulfillment_status, financial_status, cancelled_at timestamp (if applicable), calculated totals (total_price, subtotal_price, etc.), and potentially links or references to the corresponding connected orders created on the Supplier side.
If the provided order ID is invalid or the order does not belong to your Storefront, a 404 Not Found error is returned.
| id required | string |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "remote_rid": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "customer": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "user@example.com",
- "first_name": "string",
- "last_name": "string",
- "orders_count": -2147483648
}, - "email": "user@example.com",
- "total_price": "string",
- "currency": "string",
- "name": "string",
- "line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}
], - "fulfillments": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "order_id": "93101167-9065-4b9c-b98b-5d789a3ed9fe",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}
], - "service": "string",
- "shipment_status": "string",
- "status": "string",
- "tracking_company": "string",
- "tracking_numbers": [
- "string"
], - "tracking_urls": [
- "string"
]
}
], - "billing_address": null,
- "shipping_address": null,
- "shipping_lines": [
- {
- "code": "string",
- "title": "string",
- "price": 0.1,
- "currency": "USD"
}
], - "cancelled_at": "2019-08-24T14:15:22Z",
- "refunds": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "order_id": "string",
- "amount": {
- "property1": null,
- "property2": null
}, - "note": "string",
- "duties": null,
- "restock": true,
- "processed_at": "2019-08-24T14:15:22Z",
- "refund_line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line_item": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}, - "quantity": -2147483648,
- "subtotal": "string"
}
], - "shipping_refund_amount": "string",
- "failed_to_create_refund_line_items": "string"
}
], - "connected_supplier_order_numbers": [
- {
- "property1": "string",
- "property2": "string"
}
], - "cancel_reason": "string",
- "note_attributes": [
- {
- "name": "string",
- "value": "string"
}
], - "returns": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "order": "93b532b3-a125-4cd2-9b71-9996b1e164ce",
- "return_line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line_item_id": "57fa9869-a772-45e6-b99d-250b3c5af2f2",
- "quantity": -2147483648,
- "customer_note": "string",
- "return_reason": "color",
- "return_reason_note": "string"
}
], - "status": "canceled",
- "name": "string",
- "total_return_line_items": -32768,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "tracking": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "carrier_name": "string",
- "tracking_number": "string",
}
], - "rma": "string"
}
]
}[Storefront Only] Cancel a Rokt Catalog order associated with your Storefront.
Identify the order to be cancelled by its Catalog ID (UUID) provided in the URL path.
Process:
Update Storefront Order: Sets the cancelled_at field on the Storefront's order record in Catalog to the current timestamp.
Cancel Supplier Orders: Triggers an asynchronous operation. This attempts to cancel the corresponding order(s) that were previously dispatched to the relevant Supplier(s)' external platforms (e.g., calling the Shopify API to cancel the order on the Supplier's store).
Webhook: Emits an ORDER_CANCEL webhook event containing the details of the cancelled Storefront order.
Permissions: Requires valid platform integration settings for the Storefront. If settings are missing, returns 403 Forbidden.
A successful cancellation returns 200 OK with the updated Storefront order details (OrderSerializer), including the cancelled_at timestamp.
| id required | string |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "remote_rid": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "customer": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "user@example.com",
- "first_name": "string",
- "last_name": "string",
- "orders_count": -2147483648
}, - "email": "user@example.com",
- "total_price": "string",
- "currency": "string",
- "name": "string",
- "line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}
], - "fulfillments": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "order_id": "93101167-9065-4b9c-b98b-5d789a3ed9fe",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}
], - "service": "string",
- "shipment_status": "string",
- "status": "string",
- "tracking_company": "string",
- "tracking_numbers": [
- "string"
], - "tracking_urls": [
- "string"
]
}
], - "billing_address": null,
- "shipping_address": null,
- "shipping_lines": [
- {
- "code": "string",
- "title": "string",
- "price": 0.1,
- "currency": "USD"
}
], - "cancelled_at": "2019-08-24T14:15:22Z",
- "refunds": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "order_id": "string",
- "amount": {
- "property1": null,
- "property2": null
}, - "note": "string",
- "duties": null,
- "restock": true,
- "processed_at": "2019-08-24T14:15:22Z",
- "refund_line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line_item": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}, - "quantity": -2147483648,
- "subtotal": "string"
}
], - "shipping_refund_amount": "string",
- "failed_to_create_refund_line_items": "string"
}
], - "connected_supplier_order_numbers": [
- {
- "property1": "string",
- "property2": "string"
}
], - "cancel_reason": "string",
- "note_attributes": [
- {
- "name": "string",
- "value": "string"
}
], - "returns": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "order": "93b532b3-a125-4cd2-9b71-9996b1e164ce",
- "return_line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line_item_id": "57fa9869-a772-45e6-b99d-250b3c5af2f2",
- "quantity": -2147483648,
- "customer_note": "string",
- "return_reason": "color",
- "return_reason_note": "string"
}
], - "status": "canceled",
- "name": "string",
- "total_return_line_items": -32768,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "tracking": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "carrier_name": "string",
- "tracking_number": "string",
}
], - "rma": "string"
}
]
}[Storefront Only] Safely create or retrieve a Catalog order using your Storefront's unique order identifier (order_name) to ensure idempotency.
Behavior:
Check Existing: The system first queries for an existing active (non-cancelled) order associated with your shop that matches the provided order_name.
Return Existing: If exactly one such active order is found, the endpoint immediately returns 200 OK with the details of that existing order (OrderSerializer). This prevents duplicate creation.
Handle Duplicates: If multiple active orders are found with the same order_name (which indicates a potential issue), it returns a 400 Bad Request validation error.
Create New: If no active order with the given order_name is found, the endpoint proceeds to call the standard create method (the /orders/ POST endpoint logic) using the entire request payload.
Payload Requirement: Even though this endpoint might retrieve an existing order, you must provide the full order creation payload (identical to the standard /orders/ create request) in the request body. This payload is used only if a new order needs to be created.
Use Case: This endpoint is ideal for scenarios where order creation requests might be retried (e.g., due to network issues). It guarantees that submitting the same request multiple times will result in only one Catalog order being created.
Responses & Errors: If creating a new order, the responses (201 Created, 202 Accepted) and potential errors (400, 422, 500, 503) are identical to those of the standard create endpoint.
required | Array of objects (CreateOrderLineItem) |
object (OrderCreateCustomer) | |
| order_name | string |
| total_tax | string <decimal> ^-?\d{0,8}(?:\.\d{0,4})?$ |
Array of objects (OrderNoteAttribute) This field is useful for passing customization options for Supplier products that support customization (gift messages, logos, custom text).
Example: {"name": "Variant 1 Custom Text", "value": " | |
required | object (Address) |
object (Address) |
{- "line_items": [
- {
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "price": "string"
}
], - "customer": {
- "email": "user@example.com",
- "first_name": "string",
- "last_name": ""
}, - "order_name": "string",
- "total_tax": "string",
- "note_attributes": [
- {
- "name": "string",
- "value": "string"
}
], - "shipping_address": {
- "name": "string",
- "address1": "string",
- "address2": "string",
- "city": "string",
- "province": "string",
- "province_code": "string",
- "country": "string",
- "country_code": "string",
- "zip": "string",
- "phone": "string"
}, - "billing_address": {
- "name": "string",
- "address1": "string",
- "address2": "string",
- "city": "string",
- "province": "string",
- "province_code": "string",
- "country": "string",
- "country_code": "string",
- "zip": "string",
- "phone": "string"
}
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "remote_rid": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "customer": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "user@example.com",
- "first_name": "string",
- "last_name": "string",
- "orders_count": -2147483648
}, - "email": "user@example.com",
- "total_price": "string",
- "currency": "string",
- "name": "string",
- "line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}
], - "fulfillments": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "order_id": "93101167-9065-4b9c-b98b-5d789a3ed9fe",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}
], - "service": "string",
- "shipment_status": "string",
- "status": "string",
- "tracking_company": "string",
- "tracking_numbers": [
- "string"
], - "tracking_urls": [
- "string"
]
}
], - "billing_address": null,
- "shipping_address": null,
- "shipping_lines": [
- {
- "code": "string",
- "title": "string",
- "price": 0.1,
- "currency": "USD"
}
], - "cancelled_at": "2019-08-24T14:15:22Z",
- "refunds": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "order_id": "string",
- "amount": {
- "property1": null,
- "property2": null
}, - "note": "string",
- "duties": null,
- "restock": true,
- "processed_at": "2019-08-24T14:15:22Z",
- "refund_line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line_item": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}, - "quantity": -2147483648,
- "subtotal": "string"
}
], - "shipping_refund_amount": "string",
- "failed_to_create_refund_line_items": "string"
}
], - "connected_supplier_order_numbers": [
- {
- "property1": "string",
- "property2": "string"
}
], - "cancel_reason": "string",
- "note_attributes": [
- {
- "name": "string",
- "value": "string"
}
], - "returns": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "order": "93b532b3-a125-4cd2-9b71-9996b1e164ce",
- "return_line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line_item_id": "57fa9869-a772-45e6-b99d-250b3c5af2f2",
- "quantity": -2147483648,
- "customer_note": "string",
- "return_reason": "color",
- "return_reason_note": "string"
}
], - "status": "canceled",
- "name": "string",
- "total_return_line_items": -32768,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "tracking": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "carrier_name": "string",
- "tracking_number": "string",
}
], - "rma": "string"
}
]
}[Storefront Only] Create a new order with immediate payment processing.
This endpoint combines order creation and payment processing in a single request.
The request body follows the same structure as the standard order creation endpoint, with additional payment fields.
Process:
Validation: Checks if input variants are valid, active, and listed by the supplier. If variants are paused or unlisted, returns 422 Unprocessable Entity. Basic format validation returns 400 Bad Request.
Payment Processing: Processes the payment with a third party payment service provider.
Storefront Order Creation: Creates the primary order record in Catalog representing the Storefront's view of the order.
Supplier Order Dispatch: Schedules an asynchronous task to forward order details to relevant Suppliers. Returns 202 Accepted with the created Storefront order data.
Responses & Errors:
Response: Returns the created order details on success, or payment/validation errors on failure.
Error Handling: Catches various exceptions, including dispatch errors, database connection issues, and general exceptions, logging them and potentially returning 500 Internal Server Error. If payment fails, will not continue with order creation.
required | Array of objects (CreateOrderLineItem) |
object (OrderCreateCustomer) | |
| order_name | string |
| total_tax | string <decimal> ^-?\d{0,8}(?:\.\d{0,4})?$ |
Array of objects (OrderNoteAttribute) This field is useful for passing customization options for Supplier products that support customization (gift messages, logos, custom text).
Example: {"name": "Variant 1 Custom Text", "value": " | |
| partner_name | string |
required | object (OrderShippingDetails) |
| ppu_transaction_id required | string The Post Purchase Upsell session id for the tax calculation. This matches the tax calculation request. |
required | object This field is the response from the vault. It is used to charge the customer. |
{- "line_items": [
- {
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "price": "string"
}
], - "customer": {
- "email": "user@example.com",
- "first_name": "string",
- "last_name": ""
}, - "order_name": "string",
- "total_tax": "string",
- "note_attributes": [
- {
- "name": "string",
- "value": "string"
}
], - "partner_name": "string",
- "shipping_details": {
- "code": "string",
- "amount": "0.0000",
- "use_override_amount": false,
- "shipping_address": {
- "name": "string",
- "address1": "string",
- "address2": "string",
- "city": "string",
- "province": "string",
- "province_code": "string",
- "country": "string",
- "country_code": "string",
- "zip": "string",
- "phone": "string"
}
}, - "ppu_transaction_id": "string",
- "payment_details": {
- "tokenized_card_response": {
- "payment_reference_id": "string"
}, - "billing_address": {
- "name": "string",
- "address1": "string",
- "address2": "string",
- "city": "string",
- "province": "string",
- "province_code": "string",
- "country": "string",
- "country_code": "string",
- "zip": "string",
- "phone": "string"
}
}
}{- "confirmation_details": {
- "confirmation_number": "string",
- "catalog_order_id": "string",
- "order_id": "string",
- "order_date": "2019-08-24T14:15:22Z",
- "order_status": "string",
- "fulfillment_status": "string",
- "tracking_info": [
- "string"
]
}, - "line_items": [
- {
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "price": "string"
}
], - "customer": {
- "email": "user@example.com",
- "first_name": "string",
- "last_name": ""
}, - "shipping_address": {
- "name": "string",
- "address1": "string",
- "address2": "string",
- "city": "string",
- "province": "string",
- "province_code": "string",
- "country": "string",
- "country_code": "string",
- "zip": "string",
- "phone": "string"
}, - "display_metadata": {
- "property1": null,
- "property2": null
}, - "payment_details": {
- "property1": {
- "payment_status": "string",
- "payment_confirmation_id": "string",
- "statement_descriptor": "string"
}, - "property2": {
- "payment_status": "string",
- "payment_confirmation_id": "string",
- "statement_descriptor": "string"
}
}
}[Storefront Only] Create a new order and receive a Stripe PaymentIntent client secret for frontend payment confirmation.
This endpoint allows Storefronts to initiate order creation and receive a Stripe client_secret, which must be passed to the Stripe frontend payment element (such as Stripe Elements) to collect payment authorization from the customer.
The request payload mirrors the standard post purchase upsell order creation structure, but payment details are not required.
Process:
Validation: Ensures input variants are valid, active, and listed by the supplier. If variants are paused, unlisted, or invalid, returns 422 Unprocessable Entity. If the input data format is invalid, returns 400 Bad Request.
Stripe PaymentIntent Creation: Generates a Stripe PaymentIntent and returns its client_secret. The client secret must be used with the Stripe frontend integration to complete payment.
Order Creation: Creates the primary Storefront order record in Catalog, associated with the PaymentIntent.
Supplier Dispatch: After payment confirmation from the frontend, supplier orders are asynchronously dispatched.
Responses & Errors:
Response: On success, returns order details and the Stripe client_secret for the PaymentIntent. The frontend must use this secret to proceed with payment authorization.
Error Handling: Returns specific errors for failed validation, payment intent creation issues, or unexpected exceptions (such as dispatch or database failures). If payment intent creation fails, order creation will not proceed.
required | Array of objects (CreateOrderLineItem) |
object (OrderCreateCustomer) | |
| order_name | string |
| total_tax | string <decimal> ^-?\d{0,8}(?:\.\d{0,4})?$ |
Array of objects (OrderNoteAttribute) This field is useful for passing customization options for Supplier products that support customization (gift messages, logos, custom text).
Example: {"name": "Variant 1 Custom Text", "value": " | |
| partner_name | string |
required | object (OrderShippingDetails) |
| ppu_transaction_id required | string The Post Purchase Upsell session id for the tax calculation. This matches the tax calculation request. |
object This field is the response from the vault. It is used to charge the customer. |
{- "line_items": [
- {
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "price": "string"
}
], - "customer": {
- "email": "user@example.com",
- "first_name": "string",
- "last_name": ""
}, - "order_name": "string",
- "total_tax": "string",
- "note_attributes": [
- {
- "name": "string",
- "value": "string"
}
], - "partner_name": "string",
- "shipping_details": {
- "code": "string",
- "amount": "0.0000",
- "use_override_amount": false,
- "shipping_address": {
- "name": "string",
- "address1": "string",
- "address2": "string",
- "city": "string",
- "province": "string",
- "province_code": "string",
- "country": "string",
- "country_code": "string",
- "zip": "string",
- "phone": "string"
}
}, - "ppu_transaction_id": "string",
- "payment_details": {
- "billing_address": {
- "name": "string",
- "address1": "string",
- "address2": "string",
- "city": "string",
- "province": "string",
- "province_code": "string",
- "country": "string",
- "country_code": "string",
- "zip": "string",
- "phone": "string"
}
}
}{- "confirmation_details": {
- "confirmation_number": "string",
- "catalog_order_id": "string",
- "order_id": "string",
- "order_date": "2019-08-24T14:15:22Z",
- "order_status": "string",
- "fulfillment_status": "string",
- "tracking_info": [
- "string"
]
}, - "line_items": [
- {
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "price": "string"
}
], - "customer": {
- "email": "user@example.com",
- "first_name": "string",
- "last_name": ""
}, - "shipping_address": {
- "name": "string",
- "address1": "string",
- "address2": "string",
- "city": "string",
- "province": "string",
- "province_code": "string",
- "country": "string",
- "country_code": "string",
- "zip": "string",
- "phone": "string"
}, - "display_metadata": {
- "property1": null,
- "property2": null
}, - "payment_details": {
- "payment_status": "string",
- "payment_confirmation_id": "string",
- "statement_descriptor": "string",
- "client_secret": "string",
- "line_item_total_amount": "string",
- "shipping_amount": "string",
- "tax_amount": "string",
- "currency": "string",
- "brand_account_id": "string"
}
}The Products endpoints give access to every product you have permission to sell on your Partner storefront, and let Brands create, update, reorder, and delete the products they supply. To get permission to sell specific products, send proposals to Brands in the Rokt Catalog app; once a Brand approves a proposal, its products become available through these endpoints.
[Storefront Only] Retrieve a paginated list of products accessible to your Storefront through your established Rokt Catalog connections.
This endpoint returns products from Suppliers with whom you have an active and approved partnership. It includes products you might have already added/linked to your Storefront platform, as well as other products listed by those Suppliers that are available to you based on your connection terms.
You can filter the results to view products exclusively from one Supplier by providing their Catalog supplier_id (UUID) as a query parameter.
Results are returned using cursor-based pagination (PlatformPagination). Available ordering fields include created_at, updated_at, and title. The default order is -created_at.
| ordering | string Which field to use when ordering the results. |
| cursor | string The pagination cursor value. |
| supplier_id | string <uuid> Filter products by the Catalog ID of a specific connected Supplier. |
| qa_review_complete | boolean Filter products by whether they have been reviewed and approved. |
{- "results": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "variants": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "inventory_policy": "string",
- "inventory_quantity": -2147483648,
- "inventory_item_cost": 0.1,
- "option1": "string",
- "option2": "string",
- "option3": "string",
- "position": 0,
- "price": "string",
- "compare_at_price": "string",
- "origin_supplier_currency": "string",
- "title": "string",
- "sku": "string",
- "upc": "string",
- "grams": 0.1,
- "weight": 0.1,
- "weight_unit": "str",
- "pause_selling": true,
- "origin_supplier_id": "string",
- "origin_supplier_name": "string",
- "available_for_ordering": true,
- "supplier_sku": "string",
- "is_exclusive_offer": true,
- "sup_price": "string",
- "sup_compare_at_price": "string"
}
], - "body_html": "string",
- "handle": "string",
- "image_src": "string",
- "images": [
- {
- "property1": null,
- "property2": null
}
], - "options": [
- {
- "property1": null,
- "property2": null
}
], - "product_type": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "published_at": "2019-08-24T14:15:22Z",
- "status": "active",
- "title": "string",
- "vendor": "string",
- "tags": "string",
- "number_of_reviews": -2147483648,
- "star_rating": 0.1,
- "product_type_category": "string",
- "customer_charge_amount": {
- "property1": null,
- "property2": null
}
}
]
}[Supplier Only] Create a new product listing within your Rokt Catalog Supplier account. This makes the product manageable through Catalog and potentially available to your connected Storefront partners.
The request body must conform to the PushProductSerializer structure. Key fields include:
title (string, required), body_html (string, product description), product_type (string), vendor (string), tags (string, comma-separated), and a list of variants (required, at least one).
Each object in the variants list requires price (decimal string), sku (string), inventory_quantity (integer), and option values (option1, option2, option3). compare_at_price (decimal string) is optional for sale pricing.
You can also include a list of images, each with a src (URL) and optional position.
Successfully creating a product (HTTP 201 Created) makes it visible in your Catalog dashboard. Its availability to Storefronts depends on its listing status (supplier_has_listed_on_canal flag on variants) and the terms established with each partner.
The response body contains the full details of the newly created product and its variants, including their assigned Catalog IDs (UUIDs), using the ProductSerializer.
| title required | string |
| body_html | string |
required | Array of objects (PushProductVariant) |
| permalink | string |
| handle | string |
| image_src | string |
Array of objects (Image) | |
| product_type | string |
| tags | string |
| vendor | string |
| shopify_taxonomy | string or null |
| is_listed | boolean Default: true |
| status | string Default: "active" Enum: "active" "draft" "archived"
|
{- "title": "string",
- "body_html": "string",
- "variants": [
- {
- "title": "string",
- "price": "string",
- "compare_at_price": "string",
- "inventory_policy": "continue",
- "inventory_quantity": 0,
- "option1": "string",
- "option2": "string",
- "option3": "string",
- "sku": "string",
- "position": 0,
- "image_src": "string",
- "weight": 0.1,
- "weight_unit": "string"
}
], - "permalink": "string",
- "handle": "string",
- "image_src": "string",
- "images": [
- {
- "id": "string",
- "position": 0,
- "width": 0,
- "height": 0,
- "variant_ids": [
- "string"
], - "origin_supplier_image_id": "78f40e09-a463-4e20-b9d0-a8eb90e46d9f"
}
], - "product_type": "string",
- "tags": "string",
- "vendor": "string",
- "shopify_taxonomy": "string",
- "is_listed": true,
- "status": "active"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "variants": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "inventory_policy": "string",
- "inventory_quantity": -2147483648,
- "inventory_item_cost": 0.1,
- "option1": "string",
- "option2": "string",
- "option3": "string",
- "position": 0,
- "price": "string",
- "compare_at_price": "string",
- "origin_supplier_currency": "string",
- "title": "string",
- "sku": "string",
- "upc": "string",
- "grams": 0.1,
- "weight": 0.1,
- "weight_unit": "str",
- "pause_selling": true,
- "origin_supplier_id": "string",
- "origin_supplier_name": "string",
- "available_for_ordering": true,
- "supplier_sku": "string",
- "is_exclusive_offer": true,
- "sup_price": "string",
- "sup_compare_at_price": "string"
}
], - "body_html": "string",
- "handle": "string",
- "image_src": "string",
- "images": [
- {
- "id": "string",
- "position": 0,
- "width": 0,
- "height": 0,
- "canal_variant_ids": [
- "string"
], - "variant_ids": [
- "string"
], - "origin_supplier_image_id": "78f40e09-a463-4e20-b9d0-a8eb90e46d9f"
}
], - "options": null,
- "product_type": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "published_at": "2019-08-24T14:15:22Z",
- "status": "active",
- "title": "string",
- "vendor": "string",
- "tags": "string",
- "number_of_reviews": -2147483648,
- "star_rating": 0.1
}[Storefront Only] Retrieve comprehensive details for a single product, identified by its Rokt Catalog ID (UUID) in the URL path.
Access is restricted: this endpoint only returns data for products sourced from Suppliers with whom your Storefront has an active and approved partnership connection.
The response (ExternalProductSerializer) includes all product-level information (title, description, vendor, etc.), a list of associated images, and a list of variants.
Crucially, the variant information includes pricing (price, compare_at_price) and inventory_quantity that are specific to your connection with the Supplier, reflecting any agreed-upon terms or markups managed by Catalog.
If the provided product ID is invalid, or if the product belongs to a Supplier you are not actively connected with, a 404 Not Found error is returned.
| id required | string |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "variants": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "inventory_policy": "string",
- "inventory_quantity": -2147483648,
- "inventory_item_cost": 0.1,
- "option1": "string",
- "option2": "string",
- "option3": "string",
- "position": 0,
- "price": "string",
- "compare_at_price": "string",
- "origin_supplier_currency": "string",
- "title": "string",
- "sku": "string",
- "upc": "string",
- "grams": 0.1,
- "weight": 0.1,
- "weight_unit": "str",
- "pause_selling": true,
- "origin_supplier_id": "string",
- "origin_supplier_name": "string",
- "available_for_ordering": true,
- "supplier_sku": "string",
- "is_exclusive_offer": true,
- "sup_price": "string",
- "sup_compare_at_price": "string"
}
], - "body_html": "string",
- "handle": "string",
- "image_src": "string",
- "images": [
- {
- "property1": null,
- "property2": null
}
], - "options": [
- {
- "property1": null,
- "property2": null
}
], - "product_type": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "published_at": "2019-08-24T14:15:22Z",
- "status": "active",
- "title": "string",
- "vendor": "string",
- "tags": "string",
- "number_of_reviews": -2147483648,
- "star_rating": 0.1,
- "product_type_category": "string",
- "customer_charge_amount": {
- "property1": null,
- "property2": null
}
}[Supplier Only] Update attributes of an existing product listing, identified by its Rokt Catalog ID (UUID) in the URL path.
This endpoint is used for modifying product-level details. Provide the fields you wish to change in the request body (e.g., title, body_html, product_type, vendor, tags).
Important: To modify variant-specific details like price, SKU, inventory, or options, you must use the dedicated /variants/{variant_id}/ endpoint. Updates to variants are not supported here.
Changes made to product-level fields via this endpoint (like updating the description) are automatically synchronized to any connected Storefronts that are currently selling this product. This synchronization process runs asynchronously in the background.
A successful update returns 200 OK with the complete, updated product details (including all variants) using the ProductSerializer.
| id required | string |
| body_html | string or null <= 60000 characters |
| handle | string or null <= 258 characters |
| image_src | string or null <= 1043 characters |
Array of objects (Image) | |
| options | any Product options (for example size or color) and their values, or |
| product_type | string or null <= 1044 characters |
| published_at | string or null <date-time> |
| status | string (Status2eaEnum) Enum: "active" "draft" "archived" "unlisted"
|
| title required | string <= 1029 characters |
| vendor | string or null <= 227 characters |
| tags | string or null <= 63750 characters |
| permalink | string or null <uri> <= 2000 characters |
| number_of_reviews | integer or null [ -2147483648 .. 2147483647 ] |
| star_rating | number or null <double> |
{- "body_html": "string",
- "handle": "string",
- "image_src": "string",
- "images": [
- {
- "id": "string",
- "position": 0,
- "width": 0,
- "height": 0,
- "variant_ids": [
- "string"
], - "origin_supplier_image_id": "78f40e09-a463-4e20-b9d0-a8eb90e46d9f"
}
], - "options": null,
- "product_type": "string",
- "published_at": "2019-08-24T14:15:22Z",
- "status": "active",
- "title": "string",
- "vendor": "string",
- "tags": "string",
- "number_of_reviews": -2147483648,
- "star_rating": 0.1
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "variants": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "inventory_policy": "string",
- "inventory_quantity": -2147483648,
- "inventory_item_cost": 0.1,
- "option1": "string",
- "option2": "string",
- "option3": "string",
- "position": 0,
- "price": "string",
- "compare_at_price": "string",
- "origin_supplier_currency": "string",
- "title": "string",
- "sku": "string",
- "upc": "string",
- "grams": 0.1,
- "weight": 0.1,
- "weight_unit": "str",
- "pause_selling": true,
- "origin_supplier_id": "string",
- "origin_supplier_name": "string",
- "available_for_ordering": true,
- "supplier_sku": "string",
- "is_exclusive_offer": true,
- "sup_price": "string",
- "sup_compare_at_price": "string"
}
], - "body_html": "string",
- "handle": "string",
- "image_src": "string",
- "images": [
- {
- "id": "string",
- "position": 0,
- "width": 0,
- "height": 0,
- "canal_variant_ids": [
- "string"
], - "variant_ids": [
- "string"
], - "origin_supplier_image_id": "78f40e09-a463-4e20-b9d0-a8eb90e46d9f"
}
], - "options": null,
- "product_type": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "published_at": "2019-08-24T14:15:22Z",
- "status": "active",
- "title": "string",
- "vendor": "string",
- "tags": "string",
- "number_of_reviews": -2147483648,
- "star_rating": 0.1
}| id required | string |
| body_html | string or null <= 60000 characters |
| handle | string or null <= 258 characters |
| image_src | string or null <= 1043 characters |
Array of objects (Image) | |
| options | any Product options (for example size or color) and their values, or |
| product_type | string or null <= 1044 characters |
| published_at | string or null <date-time> |
| status | string (Status2eaEnum) Enum: "active" "draft" "archived" "unlisted"
|
| title | string <= 1029 characters |
| vendor | string or null <= 227 characters |
| tags | string or null <= 63750 characters |
| permalink | string or null <uri> <= 2000 characters |
| number_of_reviews | integer or null [ -2147483648 .. 2147483647 ] |
| star_rating | number or null <double> |
{- "body_html": "string",
- "handle": "string",
- "image_src": "string",
- "images": [
- {
- "id": "string",
- "position": 0,
- "width": 0,
- "height": 0,
- "variant_ids": [
- "string"
], - "origin_supplier_image_id": "78f40e09-a463-4e20-b9d0-a8eb90e46d9f"
}
], - "options": null,
- "product_type": "string",
- "published_at": "2019-08-24T14:15:22Z",
- "status": "active",
- "title": "string",
- "vendor": "string",
- "tags": "string",
- "number_of_reviews": -2147483648,
- "star_rating": 0.1
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "variants": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "inventory_policy": "string",
- "inventory_quantity": -2147483648,
- "inventory_item_cost": 0.1,
- "option1": "string",
- "option2": "string",
- "option3": "string",
- "position": 0,
- "price": "string",
- "compare_at_price": "string",
- "origin_supplier_currency": "string",
- "title": "string",
- "sku": "string",
- "upc": "string",
- "grams": 0.1,
- "weight": 0.1,
- "weight_unit": "str",
- "pause_selling": true,
- "origin_supplier_id": "string",
- "origin_supplier_name": "string",
- "available_for_ordering": true,
- "supplier_sku": "string",
- "is_exclusive_offer": true,
- "sup_price": "string",
- "sup_compare_at_price": "string"
}
], - "body_html": "string",
- "handle": "string",
- "image_src": "string",
- "images": [
- {
- "id": "string",
- "position": 0,
- "width": 0,
- "height": 0,
- "canal_variant_ids": [
- "string"
], - "variant_ids": [
- "string"
], - "origin_supplier_image_id": "78f40e09-a463-4e20-b9d0-a8eb90e46d9f"
}
], - "options": null,
- "product_type": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "published_at": "2019-08-24T14:15:22Z",
- "status": "active",
- "title": "string",
- "vendor": "string",
- "tags": "string",
- "number_of_reviews": -2147483648,
- "star_rating": 0.1
}[Supplier Only] Permanently remove a product listing, identified by its Rokt Catalog ID (UUID) in the URL path, from the Catalog platform.
Warning: This action is irreversible. Ensure you intend to delete this product permanently.
You can only delete products that are directly owned by your Supplier account. Attempting to delete a product belonging to another shop will result in a 403 Forbidden error.
Effect on Storefronts: When a product is deleted, Catalog automatically pauses the corresponding product listings on any connected Storefronts that were actively selling it. An asynchronous task is initiated to inform these Storefronts about the product's removal.
A successful deletion returns an HTTP 204 No Content status with an empty response body.
| id required | string |
{- "message": "string",
- "detail": null
}[Supplier Only] Update the display sequence of variants for a specific product. The product is identified by its Rokt Catalog ID (UUID) in the URL path.
The request body must contain a field named variant_order, which is a list of Catalog variant IDs (UUIDs) sorted in the desired display order (0-indexed).
Requirement: The variant_order list must include the IDs of all currently existing variants for the specified product. Omitting or adding incorrect IDs will result in a validation error (400 Bad Request).
This reordering affects how variants are presented within the Catalog platform (e.g., in the Supplier dashboard). It may also influence the display order on connected Storefronts if their integration respects the position attribute of the variants.
A successful update returns 200 OK with the full product details (ProductSerializer), reflecting the new position values for each variant.
| id required | string |
| variant_order required | Array of strings <uuid> [ items <uuid > ] |
{- "variant_order": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "variants": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "inventory_policy": "string",
- "inventory_quantity": -2147483648,
- "inventory_item_cost": 0.1,
- "option1": "string",
- "option2": "string",
- "option3": "string",
- "position": 0,
- "price": "string",
- "compare_at_price": "string",
- "origin_supplier_currency": "string",
- "title": "string",
- "sku": "string",
- "upc": "string",
- "grams": 0.1,
- "weight": 0.1,
- "weight_unit": "str",
- "pause_selling": true,
- "origin_supplier_id": "string",
- "origin_supplier_name": "string",
- "available_for_ordering": true,
- "supplier_sku": "string",
- "is_exclusive_offer": true,
- "sup_price": "string",
- "sup_compare_at_price": "string"
}
], - "body_html": "string",
- "handle": "string",
- "image_src": "string",
- "images": [
- {
- "id": "string",
- "position": 0,
- "width": 0,
- "height": 0,
- "canal_variant_ids": [
- "string"
], - "variant_ids": [
- "string"
], - "origin_supplier_image_id": "78f40e09-a463-4e20-b9d0-a8eb90e46d9f"
}
], - "options": null,
- "product_type": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "published_at": "2019-08-24T14:15:22Z",
- "status": "active",
- "title": "string",
- "vendor": "string",
- "tags": "string",
- "number_of_reviews": -2147483648,
- "star_rating": 0.1
}Resynchronize a retailer (Shopkeep) product with its origin supplier product.
If fields_to_resync is provided, only those fields will be updated; otherwise all fields are resynced.
On success, returns the updated product data. If the resync is queued to run asynchronously (e.g. due to rate limits), returns a message indicating the resync has started.
| id required | string |
| fields_to_resync | Array of strings (FieldsToResyncEnum) Items Enum: "images" "product_title" "description" "tags" "variants" "vendor" "permalink" |
{- "fields_to_resync": [
- "images"
]
}{- "ok": true,
- "status": "string",
- "shopify_product": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "variants": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "inventory_policy": "string",
- "inventory_quantity": -2147483648,
- "inventory_item_cost": 0.1,
- "option1": "string",
- "option2": "string",
- "option3": "string",
- "position": 0,
- "price": "string",
- "compare_at_price": "string",
- "origin_supplier_currency": "string",
- "title": "string",
- "sku": "string",
- "upc": "string",
- "grams": 0.1,
- "weight": 0.1,
- "weight_unit": "str",
- "pause_selling": true,
- "origin_supplier_id": "string",
- "origin_supplier_name": "string",
- "available_for_ordering": true,
- "supplier_sku": "string",
- "is_exclusive_offer": true,
- "sup_price": "string",
- "sup_compare_at_price": "string"
}
], - "body_html": "string",
- "handle": "string",
- "image_src": "string",
- "images": [
- {
- "id": "string",
- "position": 0,
- "width": 0,
- "height": 0,
- "canal_variant_ids": [
- "string"
], - "variant_ids": [
- "string"
], - "origin_supplier_image_id": "78f40e09-a463-4e20-b9d0-a8eb90e46d9f"
}
], - "options": null,
- "product_type": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "published_at": "2019-08-24T14:15:22Z",
- "status": "active",
- "title": "string",
- "vendor": "string",
- "tags": "string",
- "number_of_reviews": -2147483648,
- "star_rating": 0.1
}
}[Storefront Only] Retrieve a paginated list of active products that are eligible for upselling.
This endpoint returns products from Suppliers with whom you have an active and approved partnership.
Products must meet the following criteria:
Have status='active',
Have at least one variant that is connected to a supplier variant, listed on Catalog, and not paused for selling,
Have passed ads eligibility checks,
Have at least one available variant in a non-deleted product set,
| ordering | string Which field to use when ordering the results. |
| cursor | string The pagination cursor value. |
| supplier_id | string <uuid> Filter products by the Catalog ID of a specific connected Supplier. |
{- "results": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "variants": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "inventory_policy": "string",
- "inventory_quantity": -2147483648,
- "inventory_item_cost": 0.1,
- "option1": "string",
- "option2": "string",
- "option3": "string",
- "position": 0,
- "price": "string",
- "compare_at_price": "string",
- "origin_supplier_currency": "string",
- "title": "string",
- "sku": "string",
- "upc": "string",
- "grams": 0.1,
- "weight": 0.1,
- "weight_unit": "str",
- "pause_selling": true,
- "origin_supplier_id": "string",
- "origin_supplier_name": "string",
- "available_for_ordering": true,
- "supplier_sku": "string",
- "is_exclusive_offer": true,
- "sup_price": "string",
- "sup_compare_at_price": "string",
- "source_variant_id": "string",
- "source_inventory_quantity": 0
}
], - "body_html": "string",
- "handle": "string",
- "image_src": "string",
- "images": [
- {
- "property1": null,
- "property2": null
}
], - "options": [
- {
- "property1": null,
- "property2": null
}
], - "product_type": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "published_at": "2019-08-24T14:15:22Z",
- "status": "active",
- "title": "string",
- "vendor": "string",
- "tags": "string",
- "number_of_reviews": -2147483648,
- "star_rating": 0.1,
- "product_type_category": "string",
- "customer_charge_amount": {
- "property1": null,
- "property2": null
}
}
]
}Shops are the Brand accounts connected to your Partner storefront. List your active connections, retrieve a connected Brand, or request new connections by Brand contact email.
[Storefront Only] Retrieve a paginated list of Supplier shops with whom your Storefront has an active and approved partnership connection.
This endpoint provides essential details for each connected Supplier, such as their name, Rokt Catalog ID, contact information, and domain.
Use this to get an overview of your current Supplier network within Catalog.
You can filter this list to find a specific Supplier by providing their canal_contact_email using the email query parameter (ensure proper URL encoding if the email contains special characters like '+').
Results are returned using cursor-based pagination, ordered by updated_at descending by default. Standard ordering fields like created_at and name are also available.
| cursor | string The pagination cursor value. |
string <email> Filter by the Supplier's primary contact email address. |
{- "results": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}
]
}[Storefront Only] Initiate partnership connection requests with one or more existing Rokt Catalog Suppliers by specifying their primary contact email addresses.
In the request body, provide a list of strings under the key canal_contact_emails.
For each email address that corresponds to an active Catalog Supplier shop, Catalog will record your request to connect, initially in a pending state.
The Supplier must then approve this request (usually through the Catalog web application) for the connection to become active.
Once approved, the Supplier will appear in your 'My Suppliers' list within the Catalog app, and you will gain access to view and potentially sell their products based on the agreed terms.
This endpoint returns a 201 Created status along with the details (using ShopSerializer) of the Supplier shops for which pending connection requests were successfully created. It does not wait for Supplier approval. If an email does not match an active Supplier, no request is created for that email.
| canal_contact_emails required | Array of strings <email> [ items <email > ] |
{- "canal_contact_emails": [
- "user@example.com"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}[Storefront Only] Retrieve the full profile details for a specific Supplier shop, identified by its unique Rokt Catalog ID (UUID) provided in the URL path.
Access is restricted: this endpoint will only return data if an active and approved partnership connection exists between your Storefront and the specified Supplier.
The response includes comprehensive details like shop name, ID, contact info, address, configured settings (if applicable), etc.
If the provided ID is invalid, does not correspond to a Supplier shop, or if no approved connection exists, a 404 Not Found error will be returned.
| id required | string |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}The Shipping Rates endpoints allow the Partner to determine how much to charge for shipping Brand products that are bought through the Partner storefront. Rokt Catalog charges the Partner this amount for shipping and passes it to the Brand. An empty list is returned when the line items cannot be shipped to the given location.
[Storefront Only] Calculate available shipping options and their estimated costs for a given destination address and a set of line items containing products sourced from Rokt Catalog Suppliers.
This endpoint is typically used during the checkout process after the customer has provided their shipping address.
Request Body (ShippingQuerySerializer):
shipping_address (object, required): The destination address, including fields like address1, city, province_code, country_code, zip. name and phone are optional but recommended.
line_items (list, required): A list of objects, each specifying:
variant_id (UUID, required): The Rokt Catalog ID of the Storefront's variant record.
quantity (integer, required): The quantity of this variant.
Process:
Identify Suppliers: Catalog determines which unique Suppliers are involved based on the variant_ids provided.
Query Suppliers: For each unique Supplier, Catalog queries their integrated shipping rate provider (e.g., Shopify's API) using the provided shipping_address and the subset of line_items belonging to that Supplier.
Aggregate Rates: Catalog aggregates the rates returned from all involved Suppliers. The exact aggregation logic might vary (e.g., summing costs for the same shipping service level across suppliers, presenting distinct options per supplier).
Response (ShippingRateResponseSerializer):
rates (list): A list of available shipping rate options. Each object contains:
title (string): The name of the shipping service (e.g., 'Standard Ground', 'Express Overnight').
price (Money object): The calculated cost for this shipping option, including amount (decimal string) and currency (string).
Potentially other fields depending on the Supplier's integration.
This response allows the Storefront to present the customer with accurate shipping choices and costs before finalizing the order.
required | Array of objects (CreateOrderLineItem) |
required | object (Address) |
{- "line_items": [
- {
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "price": "string"
}
], - "shipping_address": {
- "name": "string",
- "address1": "string",
- "address2": "string",
- "city": "string",
- "province": "string",
- "province_code": "string",
- "country": "string",
- "country_code": "string",
- "zip": "string",
- "phone": "string"
}
}{- "shipping_rates": [
- {
- "code": "string",
- "title": "string",
- "price": 0.1,
- "currency": "USD"
}
]
}Estimate the highest shipping cost for a set of line items before the customer has entered an address, for "Shipping from" style displays on a product page.
[Storefront Only] Provide a rough, potentially overestimated shipping cost for a set of line items, useful for display before a customer provides their full address (e.g., showing 'Shipping from $X' on a product page).
Request Body (MaxShippingQuerySerializer):
line_items (list, required): A list of objects, each specifying:
variant_id (UUID, required): The Rokt Catalog ID of the Storefront's variant record.
quantity (integer, required): The quantity of this variant.
Process:
Default Address: This endpoint ignores any address provided and instead uses a hardcoded default address (currently hardcoded to San Francisco, CA: 655 Montgomery St, 94111).
Query Suppliers: It queries the relevant Suppliers for shipping rates to this default address using the provided line_items.
Find Maximum: It identifies the single highest shipping rate returned across all involved Suppliers for the default address.
Response (ShippingRateResponseSerializer):
rates (list): Typically contains only one rate object representing the maximum cost found for the default address. The object includes title and price (Money object).Disclaimer: This is an estimate based on a fixed location. The actual shipping cost calculated using the customer's real address via the /shipping_rates endpoint during checkout may be significantly different (higher or lower).
required | Array of objects (CreateOrderLineItem) | ||||||
Array
| |||||||
{- "line_items": [
- {
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "price": "string"
}
]
}{- "shipping_rates": [
- {
- "code": "string",
- "title": "string",
- "price": 0.1,
- "currency": "USD"
}
]
}[Storefront Only] Calculate estimated tax lines for a set of line items and a shipping address.
required | Array of objects (CreateOrderLineItem) |
required | object The destination address, including fields like |
object The billing address, including fields like |
{- "line_items": [
- {
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "price": "string"
}
], - "shipping_address": {
- "name": "string",
- "address1": "string",
- "address2": "string",
- "city": "string",
- "province": "string",
- "province_code": "string",
- "country": "string",
- "country_code": "string",
- "zip": "string",
- "phone": "string"
}, - "billing_address": {
- "name": "string",
- "address1": "string",
- "address2": "string",
- "city": "string",
- "province": "string",
- "province_code": "string",
- "country": "string",
- "country_code": "string",
- "zip": "string",
- "phone": "string"
}
}{- "tax_amount": "string",
- "currency": "USD",
- "tax_lines_per_supplier": {
- "property1": [
- {
- "tax_amount": "string",
- "currency": "USD",
- "title": "string",
- "rate": "string"
}
], - "property2": [
- {
- "tax_amount": "string",
- "currency": "USD",
- "title": "string",
- "rate": "string"
}
]
}, - "calculation_errors": [
- "string"
]
}Calculate estimated tax lines and available shipping options in a single call during checkout, once the customer has provided a shipping address. See Calculating Tax and Shipping for Shoppable Ads.
[Storefront Only] Calculate estimated tax lines and available shipping options and costs, given a set of line items, shipping address, and optionally a billing address.
This endpoint is typically used during the checkout process after the customer has provided their shipping address.
Request Body (TaxCalculationQuerySerializer):
line_items (list, required): A list of objects, each specifying:
variant_id (UUID, required): The Catalog ID of the Storefront's variant record.
quantity (integer, required): The quantity of this variant.
shipping_address (object, required): The destination address, including fields like address1, city, province_code, country_code, zip. name and phone are optional but recommended.
billing_address (object, optional): The billing address, with the same fields as shipping_address.
Process:
Identify Suppliers: Catalog determines which unique Suppliers are involved based on the variant_ids provided.
Query Suppliers: For each unique Supplier, Catalog queries their integrated shipping rate provider (e.g., Shopify's API) using the provided shipping_address and the subset of line_items belonging to that Supplier.
Aggregate Rates: Catalog aggregates the rates returned from all involved Suppliers. The exact aggregation logic might vary (e.g., summing costs for the same shipping service level across suppliers, presenting distinct options per supplier).
Tax Calculation: Catalog queries an integrated tax rate provider (e.g., Shopify's API) using the provided shipping_address and billing_address to calculate the tax line items for this order.
Response (TaxAndShippingResponseSerializer):
rates (list): A list of available shipping rate options. Each object contains:
title (string): The name of the shipping service (e.g., 'Standard Ground', 'Express Overnight').
price (Money object): The calculated cost for this shipping option, including amount (decimal string) and currency (string).
Potentially other fields depending on the Supplier's integration.
tax_amount (string): Total sum of the taxes applied to this order.
currency (string): Currency for the current order.
tax_lines_per_supplier: Dictionary mapping a supplier's id to a list of tax line responses.
This response allows the Storefront to present the customer with accurate shipping choices and costs before finalizing the order.
required | Array of objects (CreateOrderLineItem) |
required | object The destination address, including fields like |
object The billing address, including fields like |
{- "line_items": [
- {
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "price": "string"
}
], - "shipping_address": {
- "name": "string",
- "address1": "string",
- "address2": "string",
- "city": "string",
- "province": "string",
- "province_code": "string",
- "country": "string",
- "country_code": "string",
- "zip": "string",
- "phone": "string"
}, - "billing_address": {
- "name": "string",
- "address1": "string",
- "address2": "string",
- "city": "string",
- "province": "string",
- "province_code": "string",
- "country": "string",
- "country_code": "string",
- "zip": "string",
- "phone": "string"
}
}{- "shipping_rates": [
- {
- "code": "string",
- "title": "string",
- "price": 0.1,
- "currency": "USD"
}
], - "tax_amount": "string",
- "currency": "USD",
- "tax_lines_per_supplier": {
- "property1": [
- {
- "tax_amount": "string",
- "currency": "USD",
- "title": "string",
- "rate": "string"
}
], - "property2": [
- {
- "tax_amount": "string",
- "currency": "USD",
- "title": "string",
- "rate": "string"
}
]
}, - "calculation_errors": [
- "string"
]
}[Storefront Only] Calculate estimated tax lines and available shipping options and costs, given a set of line items, shipping address, and optionally a billing address.
This endpoint is typically used during the checkout process after the customer has provided their shipping address.
Process:
Tax Calculation: Rokt Catalog queries an integrated tax rate provider (e.g., Shopify's API) using the provided shipping_address and billing_address to calculate the tax line items for this order.
Shipping Calculation: Catalog queries an integrated shipping rate provider (e.g., Shopify's API) using the provided shipping_address and the subset of line_items belonging to that Supplier.
required | Array of objects (CreateOrderLineItem) |
required | object The destination address, including fields like |
object The billing address, including fields like | |
| ppu_transaction_id required | string The Post Purchase Upsell session id for the tax calculation. This will be reused at order creation time to match the tax calculation request. |
{- "line_items": [
- {
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "price": "string"
}
], - "shipping_address": {
- "name": "string",
- "address1": "string",
- "address2": "string",
- "city": "string",
- "province": "string",
- "province_code": "string",
- "country": "string",
- "country_code": "string",
- "zip": "string",
- "phone": "string"
}, - "billing_address": {
- "name": "string",
- "address1": "string",
- "address2": "string",
- "city": "string",
- "province": "string",
- "province_code": "string",
- "country": "string",
- "country_code": "string",
- "zip": "string",
- "phone": "string"
}, - "ppu_transaction_id": "string"
}{- "line_items": [
- {
- "tax_amount": "string",
- "currency": "USD",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "shipping_amount": "string",
- "shipping_details": {
- "price": "string",
- "code": "string",
- "title": "string",
- "description": "string"
}
}
], - "calculation_errors": [
- "string"
], - "request_id": "266ea41d-adf5-480b-af50-15b940c2b846"
}The Fulfillments endpoints give access to the latest shipping information for Brand orders placed through your Partner storefront. Brands create and update fulfillment (shipment) records; Partners list and retrieve them to show tracking to their customers. Note: only Rokt Catalog Brand products should appear in these fulfillments.
Retrieve a paginated list of fulfillment records associated with the authenticated store, reflecting its role in the order process.
If called by a Storefront: Returns fulfillments created by connected Suppliers for orders originating from the Storefront. This allows the Storefront to track shipments for items their customers ordered.
If called by a Supplier: Returns fulfillments created by this Supplier for orders they received from connected Storefronts.
Results (FulfillmentSerializer) include tracking details when present, status, associated line items, and timestamps.
Pagination is cursor-based (PlatformPagination). Ordering is available on created_at and updated_at, defaulting to -created_at.
| ordering | string Which field to use when ordering the results. |
| cursor | string The pagination cursor value. |
{- "results": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "order_id": "93101167-9065-4b9c-b98b-5d789a3ed9fe",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}
], - "service": "string",
- "shipment_status": "string",
- "status": "string",
- "tracking_company": "string",
- "tracking_numbers": [
- "string"
], - "tracking_urls": [
- "string"
]
}
]
}[Supplier Only] Create a fulfillment record for items in an order received from a connected Storefront.
The request body (CreateFulfillmentSerializer) must specify:
order_id (UUID of the Supplier's Rokt Catalog order record) and a list of line_items.
Each object in line_items needs the Catalog id (UUID) of the Supplier's line item record and the quantity being fulfilled.
For physical shipments, include tracking information (tracking_company, tracking_numbers, tracking_urls) when available. For digital/email fulfillment with no shipment, omit the tracking fields.
Process:
Validation: Checks if the order exists, belongs to the Supplier, is a connected order, and if the provided line items are valid. Returns 400 Bad Request or 404 Not Found on failure.
Create Supplier Fulfillment: Creates the fulfillment record associated with the Supplier's order in Catalog. Considers feature flags to determine if the notify_customer flag should be set during downstream sync.
Sync to Storefront: Triggers a synchronization process. This attempts to create or update the corresponding fulfillment record on the original Storefront's order (e.g., via Shopify API), including tracking information when present.
Webhook: Emits a FULFILLMENT_UPDATE webhook event containing details of the Supplier's newly created fulfillment record.
A successful creation returns 201 Created with the details of the Supplier's fulfillment record (FulfillmentSerializer).
| name required | string |
| service required | string |
| shipment_status required | string (ShipmentStatusEnum) Enum: "label_printed" "label_purchased" "attempted_delivery" "ready_for_pickup" "confirmed" "in_transit" "out_for_delivery" "delivered" "failure"
|
| status required | string (Status406Enum) Enum: "pending" "open" "success" "cancelled" "error" "failure"
|
| tracking_company | string or null |
| tracking_numbers | Array of strings or null |
| tracking_urls | Array of strings or null |
| order_id required | string <uuid> |
required | Array of objects (LineItem) |
{- "name": "string",
- "service": "string",
- "shipment_status": "label_printed",
- "status": "pending",
- "tracking_company": "string",
- "tracking_numbers": [
- "string"
], - "tracking_urls": [
- "string"
], - "order_id": "93101167-9065-4b9c-b98b-5d789a3ed9fe",
- "line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "quantity": 0
}
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "order_id": "93101167-9065-4b9c-b98b-5d789a3ed9fe",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}
], - "service": "string",
- "shipment_status": "string",
- "status": "string",
- "tracking_company": "string",
- "tracking_numbers": [
- "string"
], - "tracking_urls": [
- "string"
]
}Retrieve the full details for a specific fulfillment record, identified by its Rokt Catalog ID (UUID) in the URL path.
Access is restricted to fulfillments associated with the authenticated store (request.shop). This means:
Storefronts can retrieve details of fulfillments created by their Suppliers for their orders.
Suppliers can retrieve details of fulfillments they created.
The response (FulfillmentSerializer) includes the fulfillment status (e.g., 'fulfilled', 'cancelled'), optional tracking_company, optional tracking_numbers, optional tracking_urls, the list of line_items included in this fulfillment (with quantities), and relevant timestamps.
If the fulfillment ID is invalid or not associated with an order linked to your store, a 404 Not Found error is returned.
| id required | string |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "order_id": "93101167-9065-4b9c-b98b-5d789a3ed9fe",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}
], - "service": "string",
- "shipment_status": "string",
- "status": "string",
- "tracking_company": "string",
- "tracking_numbers": [
- "string"
], - "tracking_urls": [
- "string"
]
}[Supplier Only] Update an existing fulfillment record created by your Supplier account. Identify the fulfillment by its Rokt Catalog ID (UUID) in the URL path.
The request body (UpdateFulfillmentSerializer) should contain the fields to update, such as tracking_company, tracking_numbers, and/or tracking_urls for physical shipments. Tracking fields are optional and can be omitted for digital/email fulfillments with no shipment. Partial updates are allowed (only include the fields you want to change).
Process:
Update Supplier Fulfillment: Updates the specified fields on the Supplier's fulfillment record in Catalog.
Sync to Storefront: Triggers a synchronization process. This attempts to update the corresponding fulfillment record on the original Storefront's order (e.g., via Shopify API) with the new tracking information when present.
Webhook: Emits a FULFILLMENT_UPDATE webhook event containing details of the Supplier's updated fulfillment record. If the sync to the Storefront also resulted in an update to the Storefront's fulfillment record in Catalog, a separate FULFILLMENT_UPDATE event for the Storefront's fulfillment might also be emitted (depending on the sync logic).
A successful update returns 200 OK with the updated details of the Supplier's fulfillment record (FulfillmentSerializer).
| id required | string |
| name required | string |
| service required | string |
| shipment_status required | string (ShipmentStatusEnum) Enum: "label_printed" "label_purchased" "attempted_delivery" "ready_for_pickup" "confirmed" "in_transit" "out_for_delivery" "delivered" "failure"
|
| status required | string (Status406Enum) Enum: "pending" "open" "success" "cancelled" "error" "failure"
|
| tracking_company | string or null |
| tracking_numbers | Array of strings or null |
| tracking_urls | Array of strings or null |
{- "name": "string",
- "service": "string",
- "shipment_status": "label_printed",
- "status": "pending",
- "tracking_company": "string",
- "tracking_numbers": [
- "string"
], - "tracking_urls": [
- "string"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "order_id": "93101167-9065-4b9c-b98b-5d789a3ed9fe",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}
], - "service": "string",
- "shipment_status": "string",
- "status": "string",
- "tracking_company": "string",
- "tracking_numbers": [
- "string"
], - "tracking_urls": [
- "string"
]
}| id required | string |
| name | string <= 255 characters |
| order_id | string <uuid> |
object (Shop) | |
Array of objects (LineItemRead) | |
| service | string or null <= 258 characters |
| shipment_status | string or null <= 32 characters |
| status | string or null <= 32 characters |
| tracking_company | string or null <= 257 characters |
| tracking_numbers | Array of strings or null[ items <= 128 characters ] |
| tracking_urls | Array of strings or null[ items <= 256 characters ] |
{- "name": "string",
- "order_id": "93101167-9065-4b9c-b98b-5d789a3ed9fe",
- "shop": {
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
}, - "line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}
], - "service": "string",
- "shipment_status": "string",
- "status": "string",
- "tracking_company": "string",
- "tracking_numbers": [
- "string"
], - "tracking_urls": [
- "string"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "order_id": "93101167-9065-4b9c-b98b-5d789a3ed9fe",
- "shop": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "phone": "string",
- "name": "string",
- "description": "string",
- "myshopify_domain": "string",
- "province": "string",
- "country": "string",
- "domain": "string",
- "display_domain": "string",
}, - "line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}
], - "service": "string",
- "shipment_status": "string",
- "status": "string",
- "tracking_company": "string",
- "tracking_numbers": [
- "string"
], - "tracking_urls": [
- "string"
]
}The Refunds endpoints allow the Partner to initiate refunds for Brand products that were bought through the Partner storefront. Brands can also create refunds for orders they received, and both roles can list and retrieve refunds.
Retrieve a paginated list of refund records associated with the authenticated store, reflecting its role in the order process.
If called by a Storefront: Returns refund records linked to orders originating from the Storefront. This includes refunds initiated by the Storefront and refunds initiated by connected Suppliers for those orders.
If called by a Supplier: Returns refund records linked to orders received by the Supplier from connected Storefronts. This includes refunds initiated by the Supplier and refunds initiated by the originating Storefronts for those orders.
The response (RefundSerializer, paginated) includes details for each refund, such as the calculated total_refunded_amount, currency, the list of refund_line_items (with quantities and amounts), associated order_id, and timestamps.
Pagination is cursor-based (PlatformPagination). Ordering is available on created_at and updated_at, defaulting to -created_at.
| ordering | string Which field to use when ordering the results. |
| cursor | string The pagination cursor value. |
{- "results": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "order_id": "string",
- "amount": {
- "property1": null,
- "property2": null
}, - "note": "string",
- "duties": null,
- "restock": true,
- "processed_at": "2019-08-24T14:15:22Z",
- "refund_line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line_item": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}, - "quantity": -2147483648,
- "subtotal": "string"
}
], - "shipping_refund_amount": "string",
- "failed_to_create_refund_line_items": "string"
}
]
}Initiate a refund for specific quantities of line items within a Rokt Catalog order. This endpoint handles refund requests originating from both Storefronts and Suppliers.
Request Body (RefundCreateSerializer):
order_id (UUID, required): The Catalog ID of the order to be refunded.
line_items (list, required): A list of objects, each specifying:
id (UUID, required): The Catalog ID of the line item to refund.
quantity (integer, required): The quantity of this line item to refund.
should_refund_shipping (boolean, optional, Storefront only): If true, attempts to refund the original shipping cost associated with the Storefront order.
extra_amount (decimal string, optional, restricted use): Allows refunding an additional amount beyond line items/shipping (currently restricted to specific approved shops).
Process & Permissions:
Identify Initiator: Determines if the request comes from the Storefront or the Supplier by checking the order's relationships.
Lock Order: Acquires a lock on the order record to prevent concurrent modifications.
Validate Quantities: Checks if the requested quantity for each line item exceeds the currently refundable quantity (original quantity minus previously refunded quantity). If validation fails, returns 400 Bad Request with error_code: ITEMS_ALREADY_REFUNDED and details of affected items.
Storefront-Initiated Refund:
Permission Check: Verifies the Storefront has the required scope (write_sk_refunds). Returns 403 Forbidden if missing.
Dispatch: Calculates refund amounts, creates the refund record for the Storefront in Catalog, and asynchronously triggers tasks to create corresponding refund records on the connected Supplier(s)' systems (e.g., via Shopify API).
Error Handling: If downstream Supplier refund creation fails, returns 400 Bad Request with error_code: SUPPLIER_REFUND_FAILED.
Supplier-Initiated Refund:
Permission Check: Implicitly requires the write_refunds scope.
Create Supplier Refund: Creates the refund record for the Supplier in Catalog.
Dispatch to Storefront: If the Supplier order originated from a Storefront with integration settings, synchronously attempts to create a corresponding refund record on the Storefront's order in Catalog.
Error Handling: If downstream Storefront refund creation fails, returns 400 Bad Request with error_code: SK_REFUND_FAILED.
Extra Amount: If extra_amount is provided and valid, creates an associated record (restricted use).
Response: On success, returns 201 Created with the details of the primary refund record created (either the Storefront's or the Supplier's) using RefundSerializer. The serializer might include details about failed downstream refunds in the failed_to_create_refund_line_items field for Storefront-initiated refunds.
| order_id required | string <uuid> |
required | Array of objects (LineItem) |
| should_refund_shipping | boolean |
| extra_amount | string <decimal> ^-?\d{0,8}(?:\.\d{0,4})?$ Only available to select retailers. |
{- "order_id": "93101167-9065-4b9c-b98b-5d789a3ed9fe",
- "line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "quantity": 0
}
], - "should_refund_shipping": true,
- "extra_amount": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "order_id": "string",
- "amount": {
- "property1": null,
- "property2": null
}, - "note": "string",
- "duties": null,
- "restock": true,
- "processed_at": "2019-08-24T14:15:22Z",
- "refund_line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line_item": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}, - "quantity": -2147483648,
- "subtotal": "string"
}
], - "shipping_refund_amount": "string",
- "failed_to_create_refund_line_items": "string"
}Retrieve the full details for a specific refund record, identified by its Rokt Catalog ID (UUID) in the URL path.
Access is restricted to refunds associated with orders linked to the authenticated store (request.shop).
The response (RefundSerializer) includes the total_refunded_amount, currency, the list of refund_line_items (specifying the exact items, quantities, and subtotal refunded), the associated order_id, note (if any), processed_at timestamp, and other relevant details.
If the refund ID is invalid or the refund is not associated with an order linked to your store, a 404 Not Found error is returned.
| id required | string |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "order_id": "string",
- "amount": {
- "property1": null,
- "property2": null
}, - "note": "string",
- "duties": null,
- "restock": true,
- "processed_at": "2019-08-24T14:15:22Z",
- "refund_line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line_item": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "quantity": 0,
- "fulfillable_quantity": 0,
- "price": 0.1,
- "requires_shipping": true,
- "title": "string",
- "sku": "string"
}, - "quantity": -2147483648,
- "subtotal": "string"
}
], - "shipping_refund_amount": "string",
- "failed_to_create_refund_line_items": "string"
}Partners create return requests for items purchased in a Rokt Catalog order and add tracking for the return shipment; Brands review the return requests they receive and close them once the returned items have been processed. Closing a return does not create a refund: use the Refunds endpoints for that.
Retrieve a paginated list of return requests associated with the authenticated store, reflecting its role.
If called by a Storefront: Returns ReturnRequest records initiated by this Storefront for orders placed on their platform.
If called by a Supplier: Returns ReturnRequest records received from connected Storefronts for orders the Supplier fulfilled.
Filtering: You can filter the list by status using a query parameter (e.g., ?status=OPEN or ?status=CLOSED).
Response (ReturnSerializer, paginated): Includes details for each return request: id, name, rma, associated order_id, status ('OPEN' or 'CLOSED'), return_line_items (with quantities, reasons), reverse_deliveries (tracking info), and timestamps.
Pagination is cursor-based (PlatformPagination). Ordering is available on created_at and updated_at, defaulting to -created_at.
| ordering | string Which field to use when ordering the results. |
| cursor | string The pagination cursor value. |
| status | string Enum: "closed" "open" Filter returns by status |
{- "results": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "order": "93b532b3-a125-4cd2-9b71-9996b1e164ce",
- "return_line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line_item_id": "57fa9869-a772-45e6-b99d-250b3c5af2f2",
- "quantity": -2147483648,
- "customer_note": "string",
- "return_reason": "color",
- "return_reason_note": "string"
}
], - "status": "canceled",
- "name": "string",
- "total_return_line_items": -32768,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "tracking": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "carrier_name": "string",
- "tracking_number": "string",
}
], - "rma": "string"
}
]
}[Storefront Only] Initiate a return process for items purchased in a Rokt Catalog-facilitated order.
Request Body (ReturnCreateSerializer):
order_id (UUID, required): The Catalog ID of the original Storefront order containing the items to be returned.
name (string, required): A unique identifier for this return request (e.g., your system's RMA number).
rma (string, optional): An alternative return merchandise authorization identifier.
return_line_items (list, required): A list of objects, each specifying:
line_item_id (UUID, required): The Catalog ID of the Storefront's line item record to be returned.
quantity (integer, required): The quantity of this line item being returned.
return_reason (string, optional): A code or description for the return reason.
customer_note (string, optional): Any notes provided by the customer.
reverse_deliveries (list, optional): Allows providing initial return shipping tracking information (see ReverseDeliveryCreateSerializer) within the same request.
Process:
Validation: Checks if the order and line items exist, belong to the Storefront, and if the requested return quantities are valid (e.g., not exceeding fulfilled quantity). Acquires a lock on the order.
Create Storefront Return Request: Creates the primary return request record associated with the Storefront's order in Rokt Catalog.
Create Initial Tracking (Optional): If reverse_deliveries are provided, creates associated return tracking records.
Dispatch to Suppliers (Async): Triggers an asynchronous task to create corresponding return request records for each relevant Supplier involved in the returned line items. These Supplier return requests are linked back to the Storefront's request.
Error Handling: Returns 400 Bad Request for validation errors (e.g., invalid quantity, bad IDs). Returns 500 Internal Server Error for unexpected issues.
Response: On success, returns 201 Created with the details of the newly created Storefront return request (ReturnSerializer).
| order_id required | string <uuid> |
required | Array of objects (CreateReturnLineItem) |
required | object (ReverseDeliveryCreate) |
| name | string or null |
| rma | string |
{- "order_id": "93101167-9065-4b9c-b98b-5d789a3ed9fe",
- "return_line_items": [
- {
- "line_item_id": "57fa9869-a772-45e6-b99d-250b3c5af2f2",
- "quantity": 0,
- "customer_note": "string",
- "return_reason": "color"
}
], - "tracking": {
- "carrier_name": "string",
- "tracking_number": "string",
}, - "name": "string",
- "rma": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "order": "93b532b3-a125-4cd2-9b71-9996b1e164ce",
- "return_line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line_item_id": "57fa9869-a772-45e6-b99d-250b3c5af2f2",
- "quantity": -2147483648,
- "customer_note": "string",
- "return_reason": "color",
- "return_reason_note": "string"
}
], - "status": "canceled",
- "name": "string",
- "total_return_line_items": -32768,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "tracking": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "carrier_name": "string",
- "tracking_number": "string",
}
], - "rma": "string"
}| id required | string |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "order": "93b532b3-a125-4cd2-9b71-9996b1e164ce",
- "return_line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line_item_id": "57fa9869-a772-45e6-b99d-250b3c5af2f2",
- "quantity": -2147483648,
- "customer_note": "string",
- "return_reason": "color",
- "return_reason_note": "string"
}
], - "status": "canceled",
- "name": "string",
- "total_return_line_items": -32768,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "tracking": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "carrier_name": "string",
- "tracking_number": "string",
}
], - "rma": "string"
}[Supplier Only] Mark a return request that your Supplier account received from a Storefront as 'CLOSED'.
Identify the return request by its Rokt Catalog ID (UUID) provided in the URL path.
Use Case: This endpoint should typically be called by the Supplier once they have received the physical returned items from the customer/Storefront and completed their internal processing (inspection, restocking, etc.).
Action: Sets the status field of the Supplier's return request record in Catalog to CLOSED.
Important Limitation: This action only updates the status of the Supplier's return record. It does not automatically update the status of the original Storefront's return request, nor does it trigger any notifications or refunds. Subsequent actions, such as initiating a refund using the /refunds/ endpoint, might be required based on the agreed return policy and workflow.
Permissions: Requires the request to be authenticated as the Supplier associated with the return request. Attempting to close a return belonging to another shop results in 403 Forbidden.
A successful update returns 200 OK with the updated details of the Supplier's return request (ReturnSerializer), showing the status as 'CLOSED'.
| id required | string |
| order required | string <uuid> |
required | Array of objects (ReturnLineItem) |
| status | string (Status602Enum) Enum: "canceled" "closed" "declined" "open" "requested"
|
| name | string or null <= 501 characters |
| total_return_line_items required | integer [ -32768 .. 32767 ] The sum of all return line item quantities for the return. |
required | Array of objects (ReverseDelivery) |
| rma | string or null <= 501 characters "Return merchandise authorization" -- used as reference number for SK to SUP comms |
{- "order": "93b532b3-a125-4cd2-9b71-9996b1e164ce",
- "return_line_items": [
- {
- "line_item_id": "57fa9869-a772-45e6-b99d-250b3c5af2f2",
- "quantity": -2147483648,
- "customer_note": "string",
- "return_reason": "color",
- "return_reason_note": "string"
}
], - "status": "canceled",
- "name": "string",
- "total_return_line_items": -32768,
- "tracking": [
- {
- "carrier_name": "string",
- "tracking_number": "string",
}
], - "rma": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "order": "93b532b3-a125-4cd2-9b71-9996b1e164ce",
- "return_line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line_item_id": "57fa9869-a772-45e6-b99d-250b3c5af2f2",
- "quantity": -2147483648,
- "customer_note": "string",
- "return_reason": "color",
- "return_reason_note": "string"
}
], - "status": "canceled",
- "name": "string",
- "total_return_line_items": -32768,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "tracking": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "carrier_name": "string",
- "tracking_number": "string",
}
], - "rma": "string"
}[Storefront Only] Add or update the tracking information for the shipment returning items back to the Supplier(s). Identify the specific return request using its Rokt Catalog ID (UUID) in the URL path.
Request Body (ReverseDeliveryCreateSerializer):
carrier_name (string, optional): Name of the shipping carrier (e.g., 'USPS', 'FedEx').
tracking_number (string, optional): The tracking number for the return shipment.
tracking_url (string, optional): A direct URL to track the shipment.
shipping_label_file_url (string, optional): URL to a downloadable shipping label file (e.g., PDF).
shipping_label_created_at (datetime string, optional): Timestamp when the label was created.
Process:
Validation: Checks if the return request exists and belongs to the Storefront.
Create Storefront Return Tracking: Creates a return tracking record containing the provided tracking/label info and associates it with the Storefront's return request.
Sync to Suppliers (Sync): This synchronously attempts to add the same return tracking information to the corresponding return request records on the Supplier side(s).
Response: Returns 200 OK with the updated details of the Storefront's return request (ReturnSerializer), now including the added return tracking information.
| id required | string |
| ordering | string Which field to use when ordering the results. |
| cursor | string The pagination cursor value. |
| carrier_name | string or null <= 100 characters |
| tracking_number | string or null <= 100 characters |
| tracking_url | string or null <uri> <= 200 characters |
| shipping_label_file_url | string or null <uri> <= 1279 characters |
{- "carrier_name": "string",
- "tracking_number": "string",
}{- "results": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "order": "93b532b3-a125-4cd2-9b71-9996b1e164ce",
- "return_line_items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "line_item_id": "57fa9869-a772-45e6-b99d-250b3c5af2f2",
- "quantity": -2147483648,
- "customer_note": "string",
- "return_reason": "color",
- "return_reason_note": "string"
}
], - "status": "canceled",
- "name": "string",
- "total_return_line_items": -32768,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "tracking": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "carrier_name": "string",
- "tracking_number": "string",
}
], - "rma": "string"
}
]
}Register and manage webhook subscriptions so Rokt Catalog can notify your application when products, orders, and fulfillments change. See the Webhooks guide for the available topics, payloads, and delivery behavior.
Retrieve a paginated list of all webhook subscriptions currently registered and active for the authenticated application (identified by the API credentials used in the request).
The response (RegisteredWebhookSerializer, paginated) includes the unique Rokt Catalog ID (UUID), the subscribed topic, and the target address (URL) for each registered webhook.
Results are returned using cursor-based pagination (PlatformPagination).
| cursor | string The pagination cursor value. |
{- "results": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "topic": "order/create",
- "address": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z"
}
]
}Register a new endpoint URL to receive notifications (webhooks) from Rokt Catalog when specific events occur related to your store.
The request body (CreateUpdateWebhookSerializer) requires:
topic: A string representing the event type you want to subscribe to (e.g., product/update, order/cancel, fulfillment/update). See Catalog documentation for the full list of available topics.
address: The HTTPS URL of your application's endpoint that will receive the webhook POST requests from Catalog.
Process: Catalog validates the topic and creates a webhook subscription record associated with your application's integration settings. When an event matching the topic occurs for a resource linked to your store (e.g., an order associated with your shop is cancelled), Catalog will send an HTTP POST request containing the relevant event payload (JSON format) to the registered address.
A successful registration returns 201 Created with the details of the new subscription (RegisteredWebhookSerializer), including its unique Catalog ID (UUID).
| topic required | string |
| address required | string |
{- "topic": "string",
- "address": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "topic": "order/create",
- "address": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z"
}Retrieve the details for a single, specific webhook subscription, identified by its Rokt Catalog ID (UUID) provided in the URL path.
Access is restricted to subscriptions belonging to the authenticated application.
The response (RegisteredWebhookSerializer) includes the id, topic, and address.
If the provided ID is invalid or does not correspond to a webhook registered by your application, a 404 Not Found error is returned.
| id required | string |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "topic": "order/create",
- "address": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z"
}Update the configuration of an existing webhook subscription. Identify the subscription by its Rokt Catalog ID (UUID) in the URL path.
The request body (CreateUpdateWebhookSerializer) can include the new topic and/or address you want to set. Partial updates are allowed (only include the fields you want to change).
Validation: If provided, the topic must be one of the valid WEBHOOK_TOPICS.
A successful update returns 200 OK with the complete, updated details of the webhook subscription (RegisteredWebhookSerializer).
| id required | string |
| topic required | string |
| address required | string |
{- "topic": "string",
- "address": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "topic": "order/create",
- "address": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z"
}| id required | string |
| topic | string (TopicEnum) Enum: "order/create" "order/update" "order/cancel" "product/create" "product/update" "fulfillment/create" "fulfillment/update"
|
| address | string <= 512 characters |
{- "topic": "order/create",
- "address": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "topic": "order/create",
- "address": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z"
}Permanently remove an existing webhook subscription, identified by its Rokt Catalog ID (UUID) in the URL path.
Access is restricted to subscriptions belonging to the authenticated application.
Once deleted, Catalog will immediately stop sending notifications for the associated topic to the registered address.
Warning: This action is irreversible. To resume receiving notifications, you must create a new subscription.
A successful deletion returns an HTTP 200 OK status with an empty response body.
| id required | string |
{- "message": "string",
- "detail": null
}CSV downloads: the product import template, and line-item exports for Partners and Brands. These endpoints back the upload and export flows in the Rokt Catalog app and expect a signed-in app session; use the Products and Variants endpoints with the API headers for programmatic catalog changes.