ColoringBookify Pages API

The Pages API from ColoringBookify — 8 operation(s) for pages.

GitHub OpenAPI

Operations 13

POST /api/v1/books/{book_id}/pages Generate a new book page or attach an existing ready page #
DELETE /api/v1/books/{book_id}/pages/{id} Detach a page from a book without deleting it #
PATCH /api/v1/books/{id}/pages/order Replace the page order for a book #
GET /api/v1/pages List pages owned by the account #
POST /api/v1/pages Create and asynchronously generate a standalone page #
POST /api/v1/pages/import Import a finished page created outside ColoringBookify #
GET /api/v1/pages/{id} Get an owned page #
PATCH /api/v1/pages/{id} Update page metadata or reusable characters #
PUT /api/v1/pages/{id} Update page metadata or reusable characters #
DELETE /api/v1/pages/{id} Delete an owned page #
GET /api/v1/pages/{id}/image Download an owned page's generated image #
PUT /api/v1/pages/{id}/image Replace a page image with a finished image created outside ColoringBookify #
POST /api/v1/pages/{id}/regenerate Asynchronously regenerate an owned page #

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/coloringbookify-com:coloringbookify-com-pages-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

coloringbookify-com-pages-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Coloringbookify Com Pages API
  version: 1.1.0
  description: 'Operations tagged Pages across 2 of this provider''s published API definitions: coloringbookify-com-openapi.yml, coloringbookify-com-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://coloringbookify.com
security:
- bearerApiKey: []
tags:
- name: Pages
paths:
  /api/v1/books/{book_id}/pages:
    post:
      tags:
      - Pages
      operationId: addBookPage
      summary: Generate a new book page or attach an existing ready page
      description: New generation requires Idempotency-Key and one credit. Attaching existing_page_id is synchronous and free.
      x-credit-cost: 0 when attaching an existing page; 1 when generating a page.
      parameters:
      - $ref: '#/components/parameters/BookId'
      - $ref: '#/components/parameters/OptionalIdempotencyKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              oneOf:
              - $ref: '#/components/schemas/ExistingPageInput'
              - $ref: '#/components/schemas/PageCreateInput'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/PageCreateInput'
      responses:
        '201':
          description: Existing page attached
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageEnvelope'
        '202':
          $ref: '#/components/responses/PageMutationAccepted'
        '400':
          $ref: '#/components/responses/InvalidRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/InsufficientCredits'
        '403':
          $ref: '#/components/responses/BusinessPlanRequired'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '422':
          $ref: '#/components/responses/ValidationFailed'
    servers:
    - url: https://coloringbookify.com
  /api/v1/books/{book_id}/pages/{id}:
    delete:
      tags:
      - Pages
      operationId: detachBookPage
      summary: Detach a page from a book without deleting it
      x-credit-cost: 0
      parameters:
      - $ref: '#/components/parameters/BookId'
      - $ref: '#/components/parameters/ResourceId'
      responses:
        '204':
          description: Page detached
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/BusinessPlanRequired'
        '404':
          $ref: '#/components/responses/NotFound'
    servers:
    - url: https://coloringbookify.com
  /api/v1/books/{id}/pages/order:
    patch:
      tags:
      - Pages
      operationId: reorderBookPages
      summary: Replace the page order for a book
      x-credit-cost: 0
      parameters:
      - $ref: '#/components/parameters/ResourceId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PageOrderInput'
      responses:
        '200':
          description: Ordered pages
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageListDataEnvelope'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/BusinessPlanRequired'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationFailed'
    servers:
    - url: https://coloringbookify.com
  /api/v1/pages:
    get:
      tags:
      - Pages
      operationId: listPages
      summary: List pages owned by the account
      x-credit-cost: 0
      parameters:
      - $ref: '#/components/parameters/Limit'
      - $ref: '#/components/parameters/After'
      responses:
        '200':
          description: A page of pages
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageListEnvelope'
        '400':
          $ref: '#/components/responses/InvalidRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/BusinessPlanRequired'
    post:
      tags:
      - Pages
      operationId: createPage
      summary: Create and asynchronously generate a standalone page
      description: Generation consumes one credit.
      x-credit-cost: 1
      parameters:
      - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PageCreateInput'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/PageCreateInput'
      responses:
        '202':
          $ref: '#/components/responses/PageMutationAccepted'
        '400':
          $ref: '#/components/responses/InvalidRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/InsufficientCredits'
        '403':
          $ref: '#/components/responses/BusinessPlanRequired'
        '409':
          $ref: '#/components/responses/Conflict'
        '422':
          $ref: '#/components/responses/ValidationFailed'
    servers:
    - url: https://coloringbookify.com
  /api/v1/pages/import:
    post:
      tags:
      - Pages
      operationId: importFinishedPage
      summary: Import a finished page created outside ColoringBookify
      description: Creates a ready standalone page without AI generation. JPEG, PNG, and WebP uploads are normalized to PNG and padded with white, without cropping, when a small aspect adjustment is needed.
      x-credit-cost: 0
      parameters:
      - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/FinishedPageImportInput'
      responses:
        '201':
          description: Imported ready page
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageEnvelope'
        '400':
          $ref: '#/components/responses/InvalidRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/BusinessPlanRequired'
        '409':
          $ref: '#/components/responses/Conflict'
        '422':
          $ref: '#/components/responses/ValidationFailed'
    servers:
    - url: https://coloringbookify.com
  /api/v1/pages/{id}:
    get:
      tags:
      - Pages
      operationId: getPage
      summary: Get an owned page
      x-credit-cost: 0
      parameters:
      - $ref: '#/components/parameters/ResourceId'
      responses:
        '200':
          description: Page details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageEnvelope'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/BusinessPlanRequired'
        '404':
          $ref: '#/components/responses/NotFound'
    patch:
      tags:
      - Pages
      operationId: updatePage
      summary: Update page metadata or reusable characters
      x-credit-cost: 0
      parameters:
      - $ref: '#/components/parameters/ResourceId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PageUpdateInput'
      responses:
        '200':
          description: Updated page
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageEnvelope'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/BusinessPlanRequired'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationFailed'
    put:
      tags:
      - Pages
      operationId: replacePageMutableFields
      summary: Update page metadata or reusable characters
      x-credit-cost: 0
      parameters:
      - $ref: '#/components/parameters/ResourceId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PageUpdateInput'
      responses:
        '200':
          description: Updated page
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageEnvelope'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/BusinessPlanRequired'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationFailed'
    delete:
      tags:
      - Pages
      operationId: deletePage
      summary: Delete an owned page
      x-credit-cost: 0
      parameters:
      - $ref: '#/components/parameters/ResourceId'
      responses:
        '204':
          description: Page deleted
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/BusinessPlanRequired'
        '404':
          $ref: '#/components/responses/NotFound'
    servers:
    - url: https://coloringbookify.com
  /api/v1/pages/{id}/image:
    get:
      tags:
      - Pages
      operationId: getPageImage
      summary: Download an owned page's generated image
      x-credit-cost: 0
      parameters:
      - $ref: '#/components/parameters/ResourceId'
      - name: download
        in: query
        description: Return Content-Disposition attachment when true.
        schema:
          type: boolean
          default: false
      responses:
        '200':
          description: Generated image bytes.
          content:
            image/png:
              schema:
                type: string
                format: binary
            image/jpeg:
              schema:
                type: string
                format: binary
            image/svg+xml:
              schema:
                type: string
                format: binary
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/BusinessPlanRequired'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      tags:
      - Pages
      operationId: replacePageImage
      summary: Replace a page image with a finished image created outside ColoringBookify
      description: Marks the page ready, clears its prior safe error, and does not call an AI provider. The same normalization rules as page import apply.
      x-credit-cost: 0
      parameters:
      - $ref: '#/components/parameters/ResourceId'
      - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/FinishedPageReplacementInput'
      responses:
        '200':
          description: Updated ready page
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageEnvelope'
        '400':
          $ref: '#/components/responses/InvalidRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/BusinessPlanRequired'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '422':
          $ref: '#/components/responses/ValidationFailed'
    servers:
    - url: https://coloringbookify.com
  /api/v1/pages/{id}/regenerate:
    post:
      tags:
      - Pages
      operationId: regeneratePage
      summary: Asynchronously regenerate an owned page
      description: Regeneration consumes one credit.
      x-credit-cost: 1
      parameters:
      - $ref: '#/components/parameters/ResourceId'
      - $ref: '#/components/parameters/IdempotencyKey'
      responses:
        '202':
          $ref: '#/components/responses/PageMutationAccepted'
        '400':
          $ref: '#/components/responses/InvalidRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/InsufficientCredits'
        '403':
          $ref: '#/components/responses/BusinessPlanRequired'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '422':
          $ref: '#/components/responses/ValidationFailed'
    servers:
    - url: https://coloringbookify.com
components:
  parameters:
    After:
      name: after
      in: query
      description: Opaque next_cursor from a previous response.
      schema:
        type: string
    BookId:
      name: book_id
      in: path
      required: true
      description: Opaque book identifier.
      schema:
        type: string
    IdempotencyKey:
      name: Idempotency-Key
      in: header
      required: true
      description: Unique key for safely retrying this request.
      schema:
        type: string
        minLength: 8
        maxLength: 255
    ResourceId:
      name: id
      in: path
      required: true
      description: Opaque resource identifier.
      schema:
        type: string
    Limit:
      name: limit
      in: query
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 25
    OptionalIdempotencyKey:
      name: Idempotency-Key
      in: header
      required: false
      description: Required for new page generation; unused when attaching an existing page.
      schema:
        type: string
        minLength: 8
        maxLength: 255
  schemas:
    Page:
      type: object
      properties:
        id:
          type: string
        title:
          type: string
        description:
          type:
          - string
          - 'null'
        status:
          type: string
        kind:
          type: string
        aspect:
          type: string
        level:
          type: string
        privacy:
          type: string
        outline_weight:
          type: string
        character_ids:
          type: array
          items:
            type: string
        book_ids:
          type: array
          items:
            type: string
        image_format:
          type: string
        book_index:
          type:
          - integer
          - 'null'
        error:
          type: string
          const: Generation failed.
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        links:
          $ref: '#/components/schemas/Links'
    PageOrderInput:
      type: object
      required:
      - page_ids
      properties:
        page_ids:
          type: array
          uniqueItems: true
          items:
            type: string
    PageListEnvelope:
      allOf:
      - $ref: '#/components/schemas/PaginatedEnvelope'
      - type: object
        properties:
          data:
            type: array
            items:
              $ref: '#/components/schemas/Page'
    Operation:
      type: object
      properties:
        id:
          type: string
        action:
          type: string
          enum:
          - character.create
          - character.regenerate
          - book.create
          - page.create
          - page.regenerate
        status:
          type: string
          enum:
          - queued
          - running
          - succeeded
          - partially_succeeded
          - failed
        credits:
          type: object
          properties:
            charged:
              type: integer
            refunded:
              type: integer
        progress:
          type: object
          additionalProperties: true
        resource:
          type: object
          properties:
            type:
              type: string
            id:
              type: string
            link:
              type: string
        error:
          type: object
          properties:
            code:
              type: string
            message:
              type: string
        created_at:
          type: string
          format: date-time
        started_at:
          type:
          - string
          - 'null'
          format: date-time
        finished_at:
          type:
          - string
          - 'null'
          format: date-time
        links:
          $ref: '#/components/schemas/Links'
    PageEnvelope:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/Page'
    ErrorEnvelope:
      type: object
      required:
      - error
      properties:
        error:
          type: object
          required:
          - code
          - message
          - request_id
          properties:
            code:
              type: string
            message:
              type: string
            request_id:
              type: string
            details:
              type:
              - array
              - object
    ExistingPageInput:
      type: object
      required:
      - existing_page_id
      properties:
        existing_page_id:
          type: string
    PageUpdateInput:
      type: object
      properties:
        page:
          type: object
          properties:
            title:
              type: string
            description:
              type: string
            privacy:
              type: string
            character_ids:
              type: array
              items:
                type: string
    PageCreateInput:
      type: object
      required:
      - page
      properties:
        page:
          type: object
          required:
          - title
          properties:
            title:
              type: string
            description:
              type: string
            kind:
              type: string
              enum:
              - coloring
              - freeform
              - dedication
              - quote
              - test_color
              - belongs
            aspect:
              type: string
              enum:
              - square
              - portrait
              - landscape
            level:
              type: string
            privacy:
              type: string
            border_type:
              type: string
            outline_weight:
              type: string
            input_image:
              type: string
              format: binary
            character_ids:
              type: array
              items:
                type: string
            template_data:
              type: object
              additionalProperties: true
    PageListDataEnvelope:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Page'
    MutationEnvelope:
      type: object
      required:
      - data
      - resource
      properties:
        data:
          $ref: '#/components/schemas/Operation'
        resource:
          type: object
    FinishedPageReplacementInput:
      type: object
      required:
      - page
      properties:
        page:
          type: object
          required:
          - image
          properties:
            image:
              type: string
              format: binary
              description: JPEG
              PNG: null
              or WebP; maximum 15 MB.: null
    PaginatedEnvelope:
      type: object
      properties:
        data:
          type: array
        meta:
          type: object
          properties:
            limit:
              type: integer
            next_cursor:
              type:
              - string
              - 'null'
            has_more:
              type: boolean
    FinishedPageImportInput:
      type: object
      required:
      - page
      properties:
        page:
          type: object
          required:
          - title
          - image
          properties:
            title:
              type: string
            description:
              type: string
            aspect:
              type: string
              enum:
              - square
              - portrait
              - landscape
              default: square
            level:
              type: string
              enum:
              - easy
              - medium
              - hard
              default: easy
            privacy:
              type: string
              enum:
              - is_private
              - is_public
              default: is_private
            border_type:
              type: string
              enum:
              - dotted
              - solid
            outline_weight:
              type: string
              enum:
              - fine
              - standard
              - bold
              - extra_bold
              default: standard
            image:
              type: string
              format: binary
              description: JPEG
              PNG: null
              or WebP; maximum 15 MB.: null
    Links:
      type: object
      additionalProperties:
        type: string
  responses:
    PageMutationAccepted:
      description: Page generation accepted.
      content:
        application/json:
          schema:
            allOf:
            - $ref: '#/components/schemas/MutationEnvelope'
            - type: object
              properties:
                resource:
                  $ref: '#/components/schemas/Page'
    NotFound:
      description: Resource missing or inaccessible
      headers:
        X-ColoringBookify-Credits-Available:
          $ref: '#/components/headers/CreditsAvailable'
        X-ColoringBookify-Credits-Consumed:
          $ref: '#/components/headers/CreditsConsumed'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    BusinessPlanRequired:
      description: Active Business plan required
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    Unauthorized:
      description: Bearer API key missing or invalid
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    InsufficientCredits:
      description: Not enough credits
      headers:
        X-ColoringBookify-Credits-Available:
          $ref: '#/components/headers/CreditsAvailable'
        X-ColoringBookify-Credits-Consumed:
          $ref: '#/components/headers/CreditsConsumed'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    Conflict:
      description: Idempotency
      readiness: null
      or generation conflict: null
      headers:
        X-ColoringBookify-Credits-Available:
          $ref: '#/components/headers/CreditsAvailable'
        X-ColoringBookify-Credits-Consumed:
          $ref: '#/components/headers/CreditsConsumed'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    ValidationFailed:
      description: Validation failed
      headers:
        X-ColoringBookify-Credits-Available:
          $ref: '#/components/headers/CreditsAvailable'
        X-ColoringBookify-Credits-Consumed:
          $ref: '#/components/headers/CreditsConsumed'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    InvalidRequest:
      description: Invalid request or idempotency key
      headers:
        X-ColoringBookify-Credits-Available:
          $ref: '#/components/headers/CreditsAvailable'
        X-ColoringBookify-Credits-Consumed:
          $ref: '#/components/headers/CreditsConsumed'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
  headers:
    CreditsConsumed:
      description: Credits consumed by this HTTP request. An idempotent replay returns 0 even though its operation body reports the original charge.
      schema:
        type: integer
        minimum: 0
    CreditsAvailable:
      description: Account credits available after this HTTP request.
      schema:
        type: integer
        minimum: 0
  securitySchemes:
    bearerApiKey:
      type: http
      scheme: bearer
      bearerFormat: ColoringBookify API key
x-refined-from:
- coloringbookify-com-openapi.yml
- coloringbookify-com-openapi.yml