JustBlogged Themes API

The Themes API from JustBlogged — 5 operation(s) for themes.

GitHub OpenAPI

Operations 8

GET /blogs/{blogId}/theme List theme files #
GET /blogs/{blogId}/theme/available List available themes #
GET /blogs/{blogId}/theme/settings Get theme settings #
POST /blogs/{blogId}/theme/settings Update theme settings #
POST /blogs/{blogId}/theme/switch Switch theme #
GET /blogs/{blogId}/theme/files/{filePath} Get theme file #
PUT /blogs/{blogId}/theme/files/{filePath} Update theme file #
DELETE /blogs/{blogId}/theme/files/{filePath} Delete theme file #

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/justblogged-com:justblogged-com-themes-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

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

justblogged-com-themes-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: JustBlogged Themes API
  description: Content management API for JustBlogged multi-tenant blog platform
  version: 1.0.0
  contact:
    name: JustBlogged
  license:
    name: Proprietary
    identifier: LicenseRef-Proprietary
servers:
- url: /api
  description: API base path
security:
- bearerAuth: []
tags:
- name: Themes
paths:
  /blogs/{blogId}/theme:
    get:
      tags:
      - Themes
      summary: List theme files
      description: List the theme file tree for a blog. Requires owner or admin access.
      operationId: listThemeFiles
      parameters:
      - $ref: '#/components/parameters/blogId'
      responses:
        '200':
          description: Theme file tree
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ThemeTreeNode'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /blogs/{blogId}/theme/available:
    get:
      tags:
      - Themes
      summary: List available themes
      description: List built-in themes and the blog's current active theme.
      operationId: listAvailableThemes
      parameters:
      - $ref: '#/components/parameters/blogId'
      responses:
        '200':
          description: Available themes
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AvailableThemesResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /blogs/{blogId}/theme/settings:
    get:
      tags:
      - Themes
      summary: Get theme settings
      description: Get theme settings schema and current values.
      operationId: getThemeSettings
      parameters:
      - $ref: '#/components/parameters/blogId'
      responses:
        '200':
          description: Theme settings
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ThemeSettingsResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    post:
      tags:
      - Themes
      summary: Update theme settings
      description: Update theme setting values for a blog.
      operationId: updateThemeSettings
      parameters:
      - $ref: '#/components/parameters/blogId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateThemeSettingsRequest'
      responses:
        '200':
          description: Updated theme settings
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpdateThemeSettingsResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /blogs/{blogId}/theme/switch:
    post:
      tags:
      - Themes
      summary: Switch theme
      description: Switch a blog to a different built-in theme or to custom.
      operationId: switchTheme
      parameters:
      - $ref: '#/components/parameters/blogId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SwitchThemeRequest'
      responses:
        '200':
          description: Theme switched
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SwitchThemeResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '503':
          description: Theme assets not available
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /blogs/{blogId}/theme/files/{filePath}:
    get:
      tags:
      - Themes
      summary: Get theme file
      description: Read a theme file by path.
      operationId: getThemeFile
      parameters:
      - $ref: '#/components/parameters/blogId'
      - $ref: '#/components/parameters/filePath'
      responses:
        '200':
          description: Text or binary theme file content
          content:
            text/plain:
              schema:
                type: string
            application/octet-stream:
              schema:
                type: string
                format: binary
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      tags:
      - Themes
      summary: Update theme file
      description: Create or update a theme file. Requires a Pro subscription.
      operationId: updateThemeFile
      parameters:
      - $ref: '#/components/parameters/blogId'
      - $ref: '#/components/parameters/filePath'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateThemeFileRequest'
      responses:
        '204':
          description: Theme file saved
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      tags:
      - Themes
      summary: Delete theme file
      description: Delete a custom theme file. Requires a Pro subscription.
      operationId: deleteThemeFile
      parameters:
      - $ref: '#/components/parameters/blogId'
      - $ref: '#/components/parameters/filePath'
      responses:
        '204':
          description: Theme file deleted
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  schemas:
    Error:
      type: object
      required:
      - statusCode
      - statusMessage
      properties:
        statusCode:
          type: integer
        statusMessage:
          type: string
        message:
          type: string
    AvailableThemesResponse:
      type: object
      required:
      - themes
      - currentThemeId
      - hasCustomFiles
      properties:
        themes:
          type: array
          items:
            $ref: '#/components/schemas/ThemeDefinition'
        currentThemeId:
          type: string
        hasCustomFiles:
          type: boolean
    SwitchThemeRequest:
      type: object
      required:
      - themeId
      properties:
        themeId:
          type: string
          enum:
          - just
          - obsidian
          - linen
          - tribune
          - beacon
          - aside
          - changes
          - custom
    ThemeDefinition:
      type: object
      required:
      - id
      - name
      - description
      - thumbnail
      - tags
      properties:
        id:
          type: string
        name:
          type: string
        description:
          type: string
        thumbnail:
          type: string
        tags:
          type: array
          items:
            type: string
    UpdateThemeSettingsResponse:
      type: object
      required:
      - success
      - values
      properties:
        success:
          type: boolean
        values:
          type: object
          additionalProperties: true
    UpdateThemeFileRequest:
      type: object
      required:
      - content
      properties:
        content:
          type: string
    ThemeSettingsResponse:
      type: object
      required:
      - schema
      - values
      properties:
        schema:
          description: Theme settings field schema from settings.json
        values:
          type: object
          additionalProperties: true
    SwitchThemeResponse:
      type: object
      required:
      - success
      - message
      properties:
        success:
          type: boolean
        message:
          type: string
        themeId:
          type: string
    UpdateThemeSettingsRequest:
      type: object
      required:
      - values
      properties:
        values:
          type: object
          additionalProperties: true
    ThemeTreeNode:
      type: object
      required:
      - type
      - name
      - path
      properties:
        type:
          type: string
          enum:
          - folder
          - file
        name:
          type: string
        path:
          type: string
        children:
          type: array
          items:
            $ref: '#/components/schemas/ThemeTreeNode'
  parameters:
    filePath:
      name: filePath
      in: path
      required: true
      description: Theme file path relative to the theme root (e.g. layouts/theme.liquid)
      schema:
        type: string
    blogId:
      name: blogId
      in: path
      required: true
      description: Blog ID
      schema:
        type: string
  responses:
    BadRequest:
      description: Invalid request data
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Authentication required
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Forbidden:
      description: Insufficient permissions
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'API key authentication (format: jb_xxxx). Blog-scoped keys can manage only their bound blog and inherit the key owner''s current account status and blog permissions.'