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.

Operations 6

GET /products/{product_id}/variants List variants #
POST /products/{product_id}/variants Create a variant #
GET /products/{product_id}/variants/{id} Get a variant #
PUT /products/{product_id}/variants/{id} Update a variant #
DELETE /products/{product_id}/variants/{id} Delete a variant #
POST /products/{product_id}/variants/updaters Batch update variants #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/bootic-variants-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

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 Specification

bootic-variants-api-openapi.yml Raw ↑
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