Bootic Themes API
Hosted-storefront themes, templates, and assets. Applies only to shops with a hosted storefront (`store:` namespace); absent for headless shops.
Hosted-storefront themes, templates, and assets. Applies only to shops with a hosted storefront (`store:` namespace); absent for headless shops.
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-themes-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 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