Clerk.io Product Data API
The Product Data API from Clerk.io — 4 operation(s) for product data.
The Product Data API from Clerk.io — 4 operation(s) for product data.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/clerk-io-product-data-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Clerk.io Product Data API
version: '2'
description: 'Clerk.io e-commerce personalisation REST API. Ingest and manage catalog data (products, categories, pages, orders, order parcels, customers, accessories), run behaviour-ranked search and predictive search-as-you-type, request recommendation logics (popular, trending, new, complementary, substituting, visitor- and customer-personalised, category- and page-scoped), manage merchandising (custom search configurations, synonyms, redirects), drive audiences/campaigns/subscribers for email, log visitor behaviour events, and service GDPR privacy requests.
All endpoints live under https://api.clerk.io/v2. Authentication uses a dual-key model: the public `key` identifies the store and is safe in browser-side calls; `private_key` is additionally required for write and sensitive operations and MUST only be sent over SSL.'
contact:
name: Clerk.io Documentation
url: https://docs.clerk.io/
x-provenance:
method: searched
harvested: '2026-08-13'
source: https://docs.clerk.io/reference/ (ReadMe API Designer OpenAPI 3.1.0 fragments per reference page)
original: openapi/_original/clerk-io-api-settings-openapi-original.yml
note: Provider-published operation content is verbatim. API Evangelist added the document title/description, tags[] declarations and per-operation tag assignment; see overlays/clerk-io-api-overlay.yaml.
servers:
- url: https://api.clerk.io/v2
security:
- sec0: []
tags:
- name: Product Data
paths:
/product/add:
get:
summary: product/add
description: Bulk add new / changed products to a store.
operationId: product-add
parameters:
- name: key
in: query
description: You store API key.
required: true
schema:
type: string
- name: private_key
in: query
description: Your store private API key.
required: true
schema:
type: string
- name: products
in: query
description: List of the product objects to add. If the product already exists it will be overridden with the new data.
required: true
schema:
type: array
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"status\": \"ok\"\n}"
Error:
value: "{\n \"status\": \"error\",\n \"message\": \"A message explaining the error.\",\n \"moreInfo\": \"http://help.clerk.io/error/{ERROR_ID}\",\n \"type\": \"ErrorType\",\n \"id\": \"{ERROR_ID}\"\n}"
schema:
oneOf:
- type: object
properties:
status:
type: string
example: ok
- title: Error
type: object
properties:
status:
type: string
example: error
message:
type: string
example: A message explaining the error.
moreInfo:
type: string
example: http://help.clerk.io/error/{ERROR_ID}
type:
type: string
example: ErrorType
id:
type: string
example: '{ERROR_ID}'
deprecated: false
x-readme:
code-samples:
- language: curl
code: "curl -X POST \\\n -H 'Content-Type: application/json' \\\n -d '{\"key\": \"store_api_key\",\n \"private_key\": \"store_private_api_key\"\n \"products\": [\n {\n \"id\": 123,\n \"name\": \"Green Lightsaber\",\n \"description\": \"Antiuque rebel lightsaber.\",\n \"price\": 99995.95,\n \"brand\": \"Je’daii\",\n \"categories\": [987, 654],\n \"created_at\": 1199145600\n },\n {\n \"id\": 789,\n \"name\": \"Death Star Deluxe\",\n \"description\": \"Death Star. Guaranteed idiot proof. \"\n \"price\": 99999999999999.95,\n \"brand\": \"Imperial Inc.\",\n \"categories\": [345678],\n \"created_at\": 11991864600\n }\n ]}' \\\n https://api.clerk.io/v2/product/add"
name: POST
samples-languages:
- curl
tags:
- Product Data
/product/attributes:
get:
summary: product/attributes
description: Loads the given attributes for the given products. See the API documentation for Product Metadata to embed this with every avary call.
operationId: product-attributes
parameters:
- name: key
in: query
description: You store API key.
required: true
schema:
type: string
- name: products
in: query
description: List of Product ID's to return attributes for.
required: true
schema:
type: array
items:
type: integer
format: int32
- name: attributes
in: query
description: Product attributes to be provided in the response. See API documentation on Product Metadata for details. If none is provided all available attributes will be returned.
schema:
type: array
items:
type: string
- name: language
in: query
description: The language if the store is using multiple languages. If not provided the most used language in the store will be used.
schema:
type: string
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "[\n {\n \"id\": 123,\n \"name\": \"Wombat Wand\",\n \"price\": 14.95\n },\n {\n \"id\": 123,\n \"name\": \"Green Light Saber\",\n \"price\": 99995.95\n },\n {\n \"id\": 789,\n \"name\": \"Death Star Deluxe\",\n \"price\": 99999999999999.95\n }\n]"
Error:
value: "{\n \"status\": \"error\",\n \"message\": \"A message explaining the error.\",\n \"moreInfo\": \"http://help.clerk.io/error/{ERROR_ID}\",\n \"type\": \"ErrorType\",\n \"id\": \"{ERROR_ID}\"\n}"
schema:
oneOf:
- type: array
items:
type: object
properties:
id:
type: integer
example: 123
default: 0
name:
type: string
example: Wombat Wand
price:
type: number
example: 14.95
default: 0
- title: Error
type: object
properties:
status:
type: string
example: error
message:
type: string
example: A message explaining the error.
moreInfo:
type: string
example: http://help.clerk.io/error/{ERROR_ID}
type:
type: string
example: ErrorType
id:
type: string
example: '{ERROR_ID}'
deprecated: false
x-readme:
code-samples:
- language: curl
code: curl http://api.clerk.io/v2/product/attributes?key=store_api_key&products=[123,456,789]&attributes=id,name,price
name: GET
- language: curl
code: "curl -X POST \\\n -H 'Content-Type: application/json' \\\n -d '{\"key\": \"store_api_key\",\n \"products\": [123, 456, 789],\n \"attributes\": [\"id\", \"name\", \"price\"]}' \\\n http://api.clerk.io/v2/product/attributes"
name: POST
samples-languages:
- curl
tags:
- Product Data
/product/facets:
get:
summary: product/facets
description: Loads the facet groups available for the given products and attributes.
operationId: product-facets
parameters:
- name: key
in: query
description: You store API key.
required: true
schema:
type: string
- name: products
in: query
description: List of product IDs. If not provided facets will be computed for all products.
schema:
type: array
items:
type: string
- name: attributes
in: query
description: Product attributes to be provided in the response. See API documentation on Product Metadata for details. If none is provided all available attributes will be returned.
schema:
type: array
items:
type: string
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"status\": \"ok\",\n \"facets\": {\n \"categories\": [\n {\n \"count\": 2,\n \"type\": \"unit\",\n \"name\": \"Imperial Inc.\",\n \"value\": \"Imperial Inc.\"\n },\n {\n \"count\": 1,\n \"type\": \"unit\",\n \"name\": \"Je’daii\",\n \"value\": \"Je’daii\"\n }\n ],\n \"price\": [\n {\n \"max\": 49.0,\n \"type\": \"range\",\n \"name\": \"0 - 49\",\n \"min\": 0.0\n },\n {\n \"max\": 99.0,\n \"type\": \"range\",\n \"name\": \"50 - 99\",\n \"min\": 50.0\n },\n {\n \"max\": 750,\n \"type\": \"range\",\n \"name\": \"> 100\",\n \"min\": 100\n }\n ]\n }\n}\n"
Error:
value: "{\n \"status\": \"error\",\n \"message\": \"A message explaining the error.\",\n \"moreInfo\": \"http://help.clerk.io/error/{ERROR_ID}\",\n \"type\": \"ErrorType\",\n \"id\": \"{ERROR_ID}\"\n}"
schema:
oneOf:
- type: object
properties:
status:
type: string
example: ok
facets:
type: object
properties:
categories:
type: array
items:
type: object
properties:
count:
type: integer
example: 2
default: 0
type:
type: string
example: unit
name:
type: string
example: Imperial Inc.
value:
type: string
example: Imperial Inc.
price:
type: array
items:
type: object
properties:
max:
type: integer
example: 49
default: 0
type:
type: string
example: range
name:
type: string
example: 0 - 49
min:
type: integer
example: 0
default: 0
- title: Error
type: object
properties:
status:
type: string
example: error
message:
type: string
example: A message explaining the error.
moreInfo:
type: string
example: http://help.clerk.io/error/{ERROR_ID}
type:
type: string
example: ErrorType
id:
type: string
example: '{ERROR_ID}'
deprecated: false
x-readme:
code-samples:
- language: curl
code: curl http://api.clerk.io/v2/product/facets?key=store_api_key&products=[123,456,789]&attributes=brand,price
name: GET
- language: curl
code: "curl -X POST \\\n -H 'Content-Type: application/json' \\\n -d '{\"key\": \"store_api_key\",\n \"products\": [123, 456, 789],\n \"attributes\": [\"id\", \"name\", \"price\"]}' \\\n http://api.clerk.io/v2/product/attributes"
name: POST
samples-languages:
- curl
tags:
- Product Data
/product/remove:
get:
summary: product/remove
description: Bulk remove products from a store.
operationId: product-remove
parameters:
- name: key
in: query
description: You store API key.
required: true
schema:
type: string
- name: private_key
in: query
description: Your store private API key.
required: true
schema:
type: string
- name: products
in: query
description: List of product IDs to be removed.
required: true
schema:
type: array
items:
type: string
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"status\": \"ok\"\n}"
Error:
value: "{\n \"status\": \"error\",\n \"message\": \"A message explaining the error.\",\n \"moreInfo\": \"http://help.clerk.io/error/{ERROR_ID}\",\n \"type\": \"ErrorType\",\n \"id\": \"{ERROR_ID}\"\n}"
schema:
oneOf:
- type: object
properties:
status:
type: string
example: ok
- title: Error
type: object
properties:
status:
type: string
example: error
message:
type: string
example: A message explaining the error.
moreInfo:
type: string
example: http://help.clerk.io/error/{ERROR_ID}
type:
type: string
example: ErrorType
id:
type: string
example: '{ERROR_ID}'
deprecated: false
x-readme:
code-samples:
- language: curl
code: curl https://api.clerk.io/v2/product/remove?key=store_api_key&private_key=store_private_key&products=[123,456,789]
name: GET
- language: curl
code: "curl -X POST \\\n -H 'Content-Type: application/json' \\\n -d '{\"key\": \"store_api_key\",\n \"private_key\": \"store_private_api_key\"\n \"products\": [123, 456, 789]}' \\\n https://api.clerk.io/v2/product/remove"
name: POST
samples-languages:
- curl
tags:
- Product Data
components:
securitySchemes:
sec0:
type: apiKey
name: key
in: query
x-default: your_api_key