Bootic Variants API
Product variants (size, colour, etc.). Nested under `/products/{product_id}/variants`. Each variant holds its own SKU, price, stock level, and images.
Product variants (size, colour, etc.). Nested under `/products/{product_id}/variants`. Each variant holds its own SKU, price, stock level, and images.
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/bootic-variants-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: Bolder API v2 Variants API
version: '2.0'
description: '## Getting Started
The Bolder API provides programmatic access to your Bolder Shop data through a
hypermedia-driven REST interface.'
contact:
name: Bolder API Support
url: https://www.onbolder.com
servers:
- url: https://api.onbolder.com/v2
description: Production
security:
- bearerAuth: []
tags:
- name: Variants
description: 'Product variants (size, colour, etc.). Nested under `/products/{product_id}/variants`.
Each variant holds its own SKU, price, stock level, and images.'
paths:
/products/{product_id}/variants:
get:
tags:
- Variants
summary: List variants
description: Returns variants for a product.
operationId: listVariants
x-codeSamples:
- lang: Shell
label: cURL
source: "curl -s -H \"Authorization: Bearer $BOLDER_TOKEN\" \\\n \"https://api.onbolder.com/v2/products/101/variants\"\n"
parameters:
- name: product_id
in: path
required: true
schema:
type: string
description: Product ID or slug
example: '101'
- name: page
in: query
schema:
type: integer
default: 1
- name: per_page
in: query
schema:
type: integer
default: 20
responses:
'200':
description: Paginated variants list
content:
application/json:
schema:
type: object
properties:
_embedded:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/Variant'
example:
_class:
- results
- variants
total_items: 3
per_page: 20
page: 1
_embedded:
items:
- id: 201
product_id: 101
name: Small
sku: WH-001-S
option1: Small
currency_code: USD
regular_price: 8999
price: 8999
online_stock: 10
post:
tags:
- Variants
summary: Create a variant
description: Creates a new variant for a product.
operationId: createVariant
parameters:
- name: product_id
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
id:
type: integer
description: Pre-assign a specific variant ID (rarely used; usually omitted).
position:
type: integer
description: 'Ordering position within the product (lower comes first). On a `chained_variants` product, omitting it defaults to the current highest position instead of 0.
'
option1:
type: string
option2:
type: string
option3:
type: string
option_values:
type: object
description: Custom variant option values, keyed by `option1`/`option2`/`option3`.
option_asset_ids:
type: object
description: Asset IDs to associate with each option value.
product_asset_ids:
type: array
items:
type: integer
description: Product image asset IDs to associate with this variant.
sku:
type: string
barcode_number:
type: string
regular_price:
type: integer
description: In cents. Required if the product has per-variant prices.
sale_price:
type: integer
description: In cents
cost:
type: integer
weight_in_grams:
type: integer
unit_quantity:
type: number
color:
type: string
available_if_no_stock:
type: boolean
default: false
online_stock:
type: integer
status:
type: string
enum:
- visible
- hidden
stocks:
type: array
items:
type: object
properties:
location_id:
type: integer
units:
type: integer
example:
option1: Large
sku: WH-001-L
regular_price: 8999
stocks:
- location_id: 1
units: 15
responses:
'201':
description: Variant created
content:
application/json:
schema:
$ref: '#/components/schemas/Variant'
example:
id: 202
product_id: 101
name: Large
sku: WH-001-L
regular_price: 8999
price: 8999
/products/{product_id}/variants/{id}:
parameters:
- name: product_id
in: path
required: true
schema:
type: string
- name: id
in: path
required: true
schema:
type: string
description: Variant ID or SKU
get:
tags:
- Variants
summary: Get a variant
operationId: getVariant
responses:
'200':
description: Variant details
content:
application/json:
schema:
$ref: '#/components/schemas/Variant'
example:
id: 201
product_id: 101
name: Small
sku: WH-001-S
regular_price: 8999
price: 8999
online_stock: 10
'404':
description: Variant not found
put:
tags:
- Variants
summary: Update a variant
description: Variant names are set via `option1`/`option2`/`option3`. On update, `stocks` accepts `available_units`/`total_units` in addition to `location_id`.
operationId: updateVariant
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
position:
type: integer
description: Ordering position within the product (lower comes first).
sku:
type: string
barcode_number:
type: string
option1:
type: string
option2:
type: string
option3:
type: string
option_values:
type: object
description: Custom variant option values, keyed by `option1`/`option2`/`option3`.
option_asset_ids:
type: object
description: Asset IDs to associate with each option value.
product_asset_ids:
type: array
items:
type: integer
description: Product image asset IDs to associate with this variant.
color:
type: string
regular_price:
type: integer
sale_price:
type: integer
cost:
type: integer
description: Cost in cents (for margin reporting, not shown to buyers).
status:
type: string
enum:
- visible
- hidden
available_if_no_stock:
type: boolean
weight_in_grams:
type: integer
unit_quantity:
type: number
online_stock:
type: integer
stocks:
type: array
items:
type: object
properties:
location_id:
type: integer
available_units:
type: integer
total_units:
type: integer
allows_negative:
type: boolean
example:
regular_price: 7999
responses:
'200':
description: Variant updated
content:
application/json:
schema:
$ref: '#/components/schemas/Variant'
delete:
tags:
- Variants
summary: Delete a variant
operationId: deleteVariant
responses:
'204':
description: Variant deleted
/products/{product_id}/variants/updaters:
post:
tags:
- Variants
summary: Batch update variants
description: Updates multiple **existing** variants in a single request (does not create new variants). Each entry in `batch` must include `id` (numeric variant ID or SKU) to match an existing variant; unmatched IDs are silently skipped. Stock fields use `available_units`/`total_units` (`units` is deprecated but still accepted).
operationId: batchUpdateVariants
parameters:
- name: product_id
in: path
required: true
schema:
type: string
- name: shop_id
in: query
required: true
schema:
type: integer
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- batch
properties:
batch:
type: array
items:
type: object
required:
- id
properties:
id:
type: string
description: Existing variant ID or SKU
title:
type: string
description: Accepted (unlike the standalone update endpoint, which ignores it)
sku:
type: string
regular_price:
type: integer
sale_price:
type: integer
status:
type: string
enum:
- visible
- hidden
stocks:
type: array
items:
type: object
properties:
location_id:
type: integer
available_units:
type: integer
total_units:
type: integer
example:
batch:
- id: '201'
title: Small
regular_price: 7999
- id: '202'
title: Large
regular_price: 8999
responses:
'201':
description: Variants processed
content:
application/json:
schema:
type: object
properties:
_embedded:
type: object
properties:
valid_items:
type: array
items:
type: object
properties:
id:
type: integer
title:
type: string
invalid_items:
type: array
items:
type: object
properties:
id:
type: integer
title:
type: string
components:
schemas:
HalLink:
type: object
required:
- href
properties:
href:
type: string
templated:
type: boolean
method:
type: string
enum:
- get
- post
- put
- patch
- delete
title:
type: string
type:
type: string
Variant:
type: object
properties:
_links:
$ref: '#/components/schemas/HalLinks'
id:
type: integer
product_id:
type: integer
name:
type: string
description: Display name, computed from option1/option2/option3.
position:
type: integer
description: 'Ordering position within the product. Lower comes first. For products with `chained_variants` enabled this drives which variant stays visible (lowest position, then cheapest, then lowest id).
'
status:
type: string
enum:
- visible
- hidden
sku:
type: string
barcode_number:
type: string
option1:
type: string
option2:
type: string
option3:
type: string
currency_code:
type: string
regular_price:
type: integer
description: Regular price in cents
sale_price:
type:
- integer
- 'null'
description: Sale price in cents
price:
type: integer
description: Effective price in cents (sale_price if set, else regular_price)
online_stock:
type: integer
all_stock:
type: integer
available_if_no_stock:
type: boolean
weight_in_grams:
type: integer
unit_quantity:
type: number
color:
type: string
cost:
type: integer
profit:
type: integer
stocks:
type: array
description: Per-location stock breakdown
items:
type: object
properties:
location_id:
type: integer
available_units:
type: integer
total_units:
type: integer
HalLinks:
type: object
additionalProperties:
oneOf:
- $ref: '#/components/schemas/HalLink'
- type: array
items:
$ref: '#/components/schemas/HalLink'
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
oauth2:
type: oauth2
flows:
clientCredentials:
tokenUrl: https://auth.onbolder.com/oauth/token
scopes:
products.read: View products, variants and collections
products.write: Create and update products
orders.read: View orders
orders.write: Create and update orders
customers.read: View customer profiles
customers.write: Update customer profiles
shops.read: View shop configuration
shops.write: Update shop configuration
hub.read: View content (posts, pages)
hub.write: Create and update content
store.read: View themes and assets
store.write: Manage themes and assets
sellers.read: View seller information
batches.read: View batch job status
batches.write: Create and run batch jobs
authorizationCode:
authorizationUrl: https://auth.onbolder.com/oauth/authorize
tokenUrl: https://auth.onbolder.com/oauth/token
scopes:
products.read: View products, variants and collections
products.write: Create and update products
orders.read: View orders
orders.write: Create and update orders
customers.read: View customer profiles
customers.write: Update customer profiles
shops.read: View shop configuration
shops.write: Update shop configuration
hub.read: View content (posts, pages)
hub.write: Create and update content
store.read: View themes and assets
store.write: Manage themes and assets
sellers.read: View seller information
batches.read: View batch job status
batches.write: Create and run batch jobs