ColoringBookify Books API

The Books API from ColoringBookify — 7 operation(s) for books.

GitHub OpenAPI

Operations 11

POST /api/v1/book_plans Create a stateless, editable plan and exact generation payload #
GET /api/v1/books List books owned by the account #
POST /api/v1/books Create a book and asynchronously generate its pages and cover #
GET /api/v1/books/{id} Get an owned book with ordered page summaries #
PATCH /api/v1/books/{id} Update book metadata or reusable characters #
PUT /api/v1/books/{id} Update book metadata or reusable characters #
DELETE /api/v1/books/{id} Delete an owned book #
GET /api/v1/books/{id}/pdf Generate and download the final print-ready book PDF #
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 #

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-books-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-books-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Coloringbookify Com Books API
  version: 1.1.0
  description: 'Operations tagged Books 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: Books
paths:
  /api/v1/book_plans:
    post:
      tags:
      - Books
      operationId: createBookPlan
      summary: Create a stateless, editable plan and exact generation payload
      description: The plan is not persisted. The client reviews or edits generation_request, then submits it to POST /api/v1/books with a new idempotency key.
      x-credit-cost: 0
      parameters:
      - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BookPlanInput'
      responses:
        '200':
          description: Editable plan
          exact credit estimate: null
          and generation request: null
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BookPlanEnvelope'
        '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'
        '429':
          $ref: '#/components/responses/RateLimited'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
    servers:
    - url: https://coloringbookify.com
  /api/v1/books:
    get:
      tags:
      - Books
      operationId: listBooks
      summary: List books owned by the account
      x-credit-cost: 0
      parameters:
      - $ref: '#/components/parameters/Limit'
      - $ref: '#/components/parameters/After'
      responses:
        '200':
          description: A page of books
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BookListEnvelope'
        '400':
          $ref: '#/components/responses/InvalidRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/BusinessPlanRequired'
    post:
      tags:
      - Books
      operationId: createBook
      summary: Create a book and asynchronously generate its pages and cover
      description: Each requested coloring or special page consumes one credit; automatically generated covers and structural pages do not.
      x-credit-cost: One credit per requested coloring, test-color, dedication, or ending page.
      parameters:
      - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BookCreateInput'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/BookCreateInput'
      responses:
        '202':
          $ref: '#/components/responses/BookMutationAccepted'
        '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/books/{id}:
    get:
      tags:
      - Books
      operationId: getBook
      summary: Get an owned book with ordered page summaries
      x-credit-cost: 0
      parameters:
      - $ref: '#/components/parameters/ResourceId'
      responses:
        '200':
          description: Book details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BookEnvelope'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/BusinessPlanRequired'
        '404':
          $ref: '#/components/responses/NotFound'
    patch:
      tags:
      - Books
      operationId: updateBook
      summary: Update book metadata or reusable characters
      x-credit-cost: 0
      parameters:
      - $ref: '#/components/parameters/ResourceId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BookUpdateInput'
      responses:
        '200':
          description: Updated book
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BookEnvelope'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/BusinessPlanRequired'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationFailed'
    put:
      tags:
      - Books
      operationId: replaceBookMutableFields
      summary: Update book metadata or reusable characters
      x-credit-cost: 0
      parameters:
      - $ref: '#/components/parameters/ResourceId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BookUpdateInput'
      responses:
        '200':
          description: Updated book
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BookEnvelope'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/BusinessPlanRequired'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationFailed'
    delete:
      tags:
      - Books
      operationId: deleteBook
      summary: Delete an owned book
      x-credit-cost: 0
      parameters:
      - $ref: '#/components/parameters/ResourceId'
      responses:
        '204':
          description: Book deleted
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/BusinessPlanRequired'
        '404':
          $ref: '#/components/responses/NotFound'
    servers:
    - url: https://coloringbookify.com
  /api/v1/books/{id}/pdf:
    get:
      tags:
      - Books
      operationId: downloadBookPdf
      summary: Generate and download the final print-ready book PDF
      description: This standard PDF export does not expose Lulu or Amazon KDP publishing workflows. The book must have a ready cover and every included page must be ready with an image.
      x-credit-cost: 0
      parameters:
      - $ref: '#/components/parameters/ResourceId'
      - name: page_size
        in: query
        required: false
        description: A format ID from GET /api/v1/print_formats whose aspect matches the book. Defaults to the recommended format for the book aspect.
        schema:
          type: string
      responses:
        '200':
          description: PDF bytes.
          content:
            application/pdf:
              schema:
                type: string
                format: binary
        '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/books/{book_id}/pages:
    post:
      tags:
      - Books
      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:
      - Books
      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:
      - Books
      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
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
    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
    BookCreateInput:
      type: object
      required:
      - book
      properties:
        book:
          type: object
          required:
          - title
          - description
          - pages
          properties:
            title:
              type: string
            description:
              type: string
            additional_instructions:
              type: string
            aspect:
              type: string
              enum:
              - square
              - portrait
              - landscape
            level:
              type: string
            privacy:
              type: string
            border_type:
              type: string
            outline_weight:
              type: string
            cover_style:
              type: string
            include_test_color_page:
              type: boolean
            language:
              type: string
            style_template_key:
              type: string
            style_prompt:
              type: string
            theme_summary:
              type: string
            cover_instructions:
              type: string
            character_description:
              type: string
            dedication_text:
              type: string
            ending_text:
              type: string
            reference_image:
              type: string
              format: binary
            character_ids:
              type: array
              items:
                type: string
            pages:
              type: array
              minItems: 1
              maxItems: 50
              items:
                type: object
                properties:
                  title:
                    type: string
                  template_data:
                    type: object
                    additionalProperties: true
    Book:
      type: object
      properties:
        id:
          type: string
        title:
          type:
          - string
          - 'null'
        description:
          type:
          - string
          - 'null'
        language:
          type: string
        aspect:
          type: string
          enum:
          - square
          - portrait
          - landscape
        level:
          type: string
        privacy:
          type: string
        outline_weight:
          type: string
        cover_style:
          type: string
        page_count:
          type: integer
        character_ids:
          type: array
          items:
            type: string
        cover_page_id:
          type:
          - string
          - 'null'
        back_page_id:
          type:
          - string
          - 'null'
        pages:
          type: array
          items:
            $ref: '#/components/schemas/Page'
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        links:
          $ref: '#/components/schemas/Links'
    BookUpdateInput:
      type: object
      properties:
        book:
          type: object
          properties:
            title:
              type: string
            description:
              type: string
            privacy:
              type: string
            border_type:
              type: string
            cover_style:
              type: string
            character_ids:
              type: array
              items:
                type: string
    BookListEnvelope:
      allOf:
      - $ref: '#/components/schemas/PaginatedEnvelope'
      - type: object
        properties:
          data:
            type: array
            items:
              $ref: '#/components/schemas/Book'
    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
    BookEnvelope:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/Book'
    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
    BookPlanInput:
      type: object
      required:
      - book_plan
      properties:
        book_plan:
          type: object
          required:
          - title
          - description
          properties:
            title:
              type: string
              maxLength: 100
              example: Ava and the Friendly Dragon
            description:
              type: string
              maxLength: 2000
              example: A 12-page portrait coloring book about Ava and her dragon exploring a magical forest.
            additional_instructions:
              type: string
            style_template_key:
              type: string
              enum:
              - classic
              - bold_and_easy_first_words
              - custom
              default: classic
            style_prompt:
              type: string
              description: Custom visual directions when style_template_key is custom.
            language:
              type: string
              enum:
              - en
              - es
              - fr
              - pt
              default: en
            aspect:
              type: string
              enum:
              - square
              - portrait
              - landscape
            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
            cover_style:
              type: string
              enum:
              - classic
              - interactive_split
              - vibrant_hero
              default: classic
            include_test_color_page:
              type: boolean
            character_ids:
              type: array
              items:
                type: string
    BookPlanEnvelope:
      type: object
      properties:
        data:
          type: object
          required:
          - type
          - persistent
          - plan
          - credits
          - generation_request
          properties:
            type:
              type: string
              const: book_plan
            persistent:
              type: boolean
              const: false
            plan:
              type: object
              additionalProperties: true
            credits:
              type: object
              properties:
                required:
                  type: integer
                available:
                  type: integer
                sufficient:
                  type: boolean
            generation_request:
              $ref: '#/components/schemas/BookCreateInput'
            links:
              $ref: '#/components/schemas/Links'
    PaginatedEnvelope:
      type: object
      properties:
        data:
          type: array
        meta:
          type: object
          properties:
            limit:
              type: integer
            next_cursor:
              type:
              - string
              - 'null'
            has_more:
              type: boolean
    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'
    RateLimited:
      description: Too many requests
      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'
    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'
    ServiceUnavailable:
      description: A dependent planning service is temporarily unavailable
      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'
    BookMutationAccepted:
      description: Book generation accepted.
      content:
        application/json:
          schema:
            allOf:
            - $ref: '#/components/schemas/MutationEnvelope'
            - type: object
              properties:
                resource:
                  $ref: '#/components/schemas/Book'
    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