Bootic Themes API

Hosted-storefront themes, templates, and assets. Applies only to shops with a hosted storefront (`store:` namespace); absent for headless shops.

Operations 13

GET /shops/{id}/themes List themes for a shop #
POST /shops/{id}/themes Create a dev theme #
GET /themes/{id} Get a theme #
PUT /themes/{id} Update a theme #
DELETE /themes/{id} Delete a dev theme #
PUT /themes/{id}/publication Publish a dev theme #
POST /themes/{theme_id}/templates Create a template #
PUT /themes/{theme_id}/templates/settings Update theme settings #
GET /themes/{theme_id}/templates/{id} Get a template #
PUT /themes/{theme_id}/templates/{id} Update a template #
DELETE /themes/{theme_id}/templates/{id} Delete a template #
POST /themes/{theme_id}/assets Upload a theme asset #
DELETE /themes/{theme_id}/assets/{id} Delete a theme asset #

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-themes-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-themes-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Bolder API v2 Themes 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: Themes
  description: 'Hosted-storefront themes, templates, and assets. Applies only to shops with a

    hosted storefront (`store:` namespace); absent for headless shops.'
paths:
  /shops/{id}/themes:
    parameters:
    - name: id
      in: path
      required: true
      schema:
        type: integer
      description: Shop ID
      example: 1
    get:
      tags:
      - Themes
      summary: List themes for a shop
      description: 'Returns the theme navigation document for the shop — links to the current

        production theme, the dev theme (if any), and the action to create a new

        dev theme. Requires `store.read` scope and ownership of the shop.'
      operationId: listShopThemes
      x-codeSamples:
      - lang: Shell
        label: cURL
        source: "curl -s -H \"Authorization: Bearer $BOLDER_TOKEN\" \\\n  \"https://api.onbolder.com/v2/shops/1/themes\"\n"
      responses:
        '200':
          description: Themes navigation document
          content:
            application/json:
              example:
                _class:
                - results
                - themes
                _links:
                  self:
                    href: https://api.onbolder.com/v2/shops/1/themes
                  store:theme:
                    href: https://api.onbolder.com/v2/themes/abc123
                    title: Current theme
                  store:create_dev_theme:
                    href: https://api.onbolder.com/v2/shops/1/themes
                    method: post
                  store:dev_theme:
                    href: https://api.onbolder.com/v2/themes/def456
                    title: Dev theme
        '401':
          description: Unauthorized
        '403':
          description: Access denied
    post:
      tags:
      - Themes
      summary: Create a dev theme
      description: 'Creates a new development theme by cloning the current production theme.

        If a dev theme already exists it is returned unchanged.'
      operationId: createShopTheme
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  description: Optional title for the new dev theme
            example:
              title: My Dev Theme
      responses:
        '201':
          description: Dev theme created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Theme'
        '401':
          description: Unauthorized
        '403':
          description: Access denied
  /themes/{id}:
    parameters:
    - name: id
      in: path
      required: true
      schema:
        type: string
      description: Theme ID
      example: abc123
    get:
      tags:
      - Themes
      summary: Get a theme
      description: 'Returns the full theme entity including all embedded templates and assets.

        The `production` field indicates whether this is the live theme.

        For the public/production theme, `store:create_dev_theme` is available.

        For a dev theme, `store:publish_theme` and `store:delete_theme` are available.'
      operationId: getTheme
      x-codeSamples:
      - lang: Shell
        label: cURL
        source: "curl -s -H \"Authorization: Bearer $BOLDER_TOKEN\" \\\n  \"https://api.onbolder.com/v2/themes/abc123\"\n"
      responses:
        '200':
          description: Theme entity with embedded templates and assets
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Theme'
              example:
                id: abc123
                title: My Theme
                production: true
                public: true
                accessible: true
                linked: false
                parent_id: null
                settings: '{"bg_color":"#fff"}'
                created_on: '2023-06-01T10:00:00Z'
                updated_on: '2024-11-15T09:30:00Z'
                _links:
                  self:
                    href: https://api.onbolder.com/v2/themes/abc123
                  store:update_theme:
                    href: https://api.onbolder.com/v2/themes/abc123
                    method: put
                  store:create_template:
                    href: https://api.onbolder.com/v2/themes/abc123/templates
                    method: post
                  store:create_theme_asset:
                    href: https://api.onbolder.com/v2/themes/abc123/assets
                    method: post
                  store:theme_preview:
                    href: https://myshop.onbolder.com
                    type: text/html
                  store:create_dev_theme:
                    href: https://api.onbolder.com/v2/shops/1/themes
                    method: post
                _embedded:
                  templates:
                  - id: t1
                    file_name: layout.html
                    name: layout
                    content_type: text/html
                    body: <html>...</html>
                    is_section: false
                    updated_on: '2024-11-15T09:30:00Z'
                  assets:
                  - id: a1
                    file_name: logo.png
                    content_type: image/png
                    file_size: 12400
                    url: https://cdn.onbolder.com/themes/abc123/logo.png
        '401':
          description: Unauthorized
        '403':
          description: Access denied
        '404':
          description: Theme not found
    put:
      tags:
      - Themes
      summary: Update a theme
      description: Update theme settings or title.
      operationId: updateTheme
      x-codeSamples:
      - lang: Shell
        label: cURL
        source: "curl -s -X PUT \\\n  -H \"Authorization: Bearer $BOLDER_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"title\":\"My Updated Theme\"}' \\\n  \"https://api.onbolder.com/v2/themes/abc123\"\n"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                settings_json:
                  type: string
                  description: 'Raw JSON string of theme settings. Note: the request field is `settings_json`, not `settings` (the response field, returned as `settings`, is named differently from the request field).

                    '
                parent_id:
                  type: string
                  description: Reassigns the dev theme's parent (production) theme.
                last_updated_on:
                  type: string
                  format: date-time
                  description: Optimistic-locking timestamp; rejects the update if the theme changed since.
            example:
              title: Updated Theme Title
              settings_json: '{"bg_color":"#333"}'
      responses:
        '200':
          description: Theme updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Theme'
        '401':
          description: Unauthorized
        '403':
          description: Access denied
        '404':
          description: Theme not found
    delete:
      tags:
      - Themes
      summary: Delete a dev theme
      description: 'Deletes the dev theme. The production theme cannot be deleted.

        The `store:delete_theme` link is only present on dev themes.'
      operationId: deleteTheme
      responses:
        '204':
          description: Theme deleted
        '403':
          description: Cannot delete the production theme
        '404':
          description: Theme not found
  /themes/{id}/publication:
    put:
      tags:
      - Themes
      summary: Publish a dev theme
      description: 'Promotes the dev theme to production. The current production theme is

        archived and the dev theme becomes the new live theme.

        Only available when `store:publish_theme` is present in the dev theme''s links.'
      operationId: publishTheme
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
        description: Dev theme ID
        example: def456
      responses:
        '200':
          description: Theme published — returns the now-production theme
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Theme'
        '401':
          description: Unauthorized
        '403':
          description: Access denied
        '404':
          description: Theme not found
  /themes/{theme_id}/templates:
    post:
      tags:
      - Themes
      summary: Create a template
      description: 'Creates a new template file inside the theme. The `file_name` determines

        the template type (e.g. `layout.html`, `product.html`, `custom.css`).'
      operationId: createTemplate
      parameters:
      - name: theme_id
        in: path
        required: true
        schema:
          type: string
        description: Theme ID
        example: abc123
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - file_name
              properties:
                file_name:
                  type: string
                  description: Template filename (determines type)
                  example: collection.html
                body:
                  type: string
                  description: Template source code
                  example: <h1>{{ collection.name }}</h1>
            example:
              file_name: collection.html
              body: <h1>{{ collection.name }}</h1>
      responses:
        '201':
          description: Template created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ThemeTemplate'
        '401':
          description: Unauthorized
        '403':
          description: Access denied
        '422':
          description: Validation error
  /themes/{theme_id}/templates/settings:
    put:
      tags:
      - Themes
      summary: Update theme settings
      description: Replaces the theme's global settings.
      operationId: updateThemeSettings
      parameters:
      - name: theme_id
        in: path
        required: true
        schema:
          type: string
        description: Theme ID
        example: abc123
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - settings_json
              properties:
                settings_json:
                  type: string
                  description: JSON string containing the theme settings blob
                  example: '{"color":"#ff0000","font":"Helvetica"}'
            example:
              settings_json: '{"color":"#ff0000","font":"Helvetica"}'
      responses:
        '200':
          description: Settings updated; returns the settings template stub
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ThemeTemplate'
        '401':
          description: Unauthorized
        '403':
          description: Access denied
        '422':
          description: Validation error
  /themes/{theme_id}/templates/{id}:
    parameters:
    - name: theme_id
      in: path
      required: true
      schema:
        type: string
      description: Theme ID
      example: abc123
    - name: id
      in: path
      required: true
      schema:
        type: string
      description: Template ID or filename slug
      example: layout.html
    get:
      tags:
      - Themes
      summary: Get a template
      description: Returns a single template including its full body source.
      operationId: getTemplate
      responses:
        '200':
          description: Template entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ThemeTemplate'
              example:
                id: t1
                file_name: layout.html
                name: layout
                content_type: text/html
                body: <html><head></head><body>{{ content }}</body></html>
                is_section: false
                updated_on: '2024-11-15T09:30:00Z'
                _links:
                  self:
                    href: https://api.onbolder.com/v2/themes/abc123/templates/t1
                  store:update_template:
                    href: https://api.onbolder.com/v2/themes/abc123/templates/t1
                    method: put
                  store:delete_template:
                    href: https://api.onbolder.com/v2/themes/abc123/templates/t1
                    method: delete
        '401':
          description: Unauthorized
        '403':
          description: Access denied
        '404':
          description: Template not found
    put:
      tags:
      - Themes
      summary: Update a template
      description: Replace the body of an existing template.
      operationId: updateTemplate
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                body:
                  type: string
                  description: New template source code
            example:
              body: <html><head><title>{{ shop.name }}</title></head><body>{{ content }}</body></html>
      responses:
        '200':
          description: Template updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ThemeTemplate'
        '401':
          description: Unauthorized
        '403':
          description: Access denied
        '404':
          description: Template not found
    delete:
      tags:
      - Themes
      summary: Delete a template
      description: 'Deletes a non-required template from the theme. Required templates

        (e.g. `layout.html`) cannot be deleted — the `store:delete_template`

        link is absent for those.'
      operationId: deleteTemplate
      responses:
        '204':
          description: Template deleted
        '403':
          description: Cannot delete a required template
        '404':
          description: Template not found
  /themes/{theme_id}/assets:
    post:
      tags:
      - Themes
      summary: Upload a theme asset
      description: 'Uploads a new file asset (image, font, stylesheet, etc.) to the theme.

        Send the file as a multipart/form-data upload.'
      operationId: createThemeAsset
      parameters:
      - name: theme_id
        in: path
        required: true
        schema:
          type: string
        description: Theme ID
        example: abc123
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
              - file
              properties:
                file:
                  type: string
                  format: binary
                  description: File to upload
      responses:
        '201':
          description: Asset uploaded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ThemeAsset'
        '401':
          description: Unauthorized
        '403':
          description: Access denied
        '422':
          description: Validation error
  /themes/{theme_id}/assets/{id}:
    delete:
      tags:
      - Themes
      summary: Delete a theme asset
      description: 'Permanently deletes an asset from the theme. The `store:delete_theme_asset`

        link is present on each asset entity.'
      operationId: deleteThemeAsset
      parameters:
      - name: theme_id
        in: path
        required: true
        schema:
          type: string
        description: Theme ID
        example: abc123
      - name: id
        in: path
        required: true
        schema:
          type: string
        description: Asset ID
        example: a1
      responses:
        '204':
          description: Asset deleted
        '401':
          description: Unauthorized
        '403':
          description: Access denied
        '404':
          description: Asset not found
components:
  schemas:
    Theme:
      type: object
      properties:
        _links:
          $ref: '#/components/schemas/HalLinks'
        id:
          type: string
          description: Opaque theme identifier
        linked:
          type: boolean
          description: Whether this is a linked (inherited) theme
        parent_id:
          type:
          - string
          - 'null'
        production:
          type: boolean
          description: '`true` for the live/public theme'
        public:
          type: boolean
          description: Alias for `production`
        accessible:
          type: boolean
        title:
          type: string
        settings:
          type: string
          description: Raw JSON string of theme settings
        created_on:
          type: string
          format: date-time
        updated_on:
          type: string
          format: date-time
        _embedded:
          type: object
          properties:
            templates:
              type: array
              items:
                $ref: '#/components/schemas/ThemeTemplate'
            assets:
              type: array
              items:
                $ref: '#/components/schemas/ThemeAsset'
    ThemeAsset:
      type: object
      properties:
        _links:
          $ref: '#/components/schemas/HalLinks'
        id:
          type: string
        file_name:
          type: string
          example: logo.png
        content_type:
          type: string
          example: image/png
        file_size:
          type: integer
        digest:
          type: string
        url:
          type: string
          description: CDN URL for this asset
        updated_on:
          type: string
          format: date-time
    ThemeTemplate:
      type: object
      description: There is no `name`/`content_type` field — use `file_name`/`path`.
      properties:
        _links:
          $ref: '#/components/schemas/HalLinks'
        id:
          type: string
        file_name:
          type: string
          example: layout.html
        path:
          type: string
        body:
          type: string
          description: Full template source code
        is_section:
          type: boolean
        schema:
          type: object
          description: Present only when `is_section` is true — the section's configurable schema.
        parent_commit:
          type:
          - string
          - 'null'
        updated_on:
          type: string
          format: date-time
    HalLinks:
      type: object
      additionalProperties:
        oneOf:
        - $ref: '#/components/schemas/HalLink'
        - type: array
          items:
            $ref: '#/components/schemas/HalLink'
    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
  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