KDP Coloring Book Generate API

The Generate API from KDP Coloring Book — 3 operation(s) for generate.

GitHub OpenAPI

Operations 3

POST /api/generate Start Generation #
POST /api/generate/quote Quote Generation #
GET /api/generate/{job_id}/status Job Status #

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/kdpcoloringbook-com:kdpcoloringbook-com-generate-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

kdpcoloringbook-com-generate-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Book Generator Generate API
  description: Backend API for the AI-powered coloring book generator.
  version: 1.0.0
tags:
- name: Generate
paths:
  /api/generate:
    post:
      summary: Start Generation
      description: 'Start a new book generation job. Free users get one watermarked book of up to

        3 pages (FREE_MAX_PAGES_PER_BOOK in credits_service).'
      operationId: start_generation_api_generate_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GenerateRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartJobResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
      - HTTPBearer: []
      tags:
      - Generate
  /api/generate/quote:
    post:
      summary: Quote Generation
      description: 'Price a book before creating it. Never blocks the creation: if the balance or

        the plan lookup fails, answer with the price the request alone implies and let

        POST /api/generate (which re-checks credits and plan limits before spending

        anything) be the authority.'
      operationId: quote_generation_api_generate_quote_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GenerationQuoteRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenerationQuoteResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
      - HTTPBearer: []
      tags:
      - Generate
  /api/generate/{job_id}/status:
    get:
      summary: Job Status
      operationId: job_status_api_generate__job_id__status_get
      security:
      - HTTPBearer: []
      parameters:
      - name: job_id
        in: path
        required: true
        schema:
          type: string
          title: Job Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobStatusPayload'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      tags:
      - Generate
components:
  schemas:
    CoverQuoteSummary:
      properties:
        included:
          type: boolean
          title: Included
          default: true
        credits:
          type: integer
          title: Credits
        variant_count:
          type: integer
          title: Variant Count
          default: 1
      type: object
      required:
      - credits
      title: CoverQuoteSummary
    BookLength:
      type: string
      enum:
      - test
      - short
      - medium
      - long
      title: BookLength
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
            - type: string
            - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
      - loc
      - msg
      - type
      title: ValidationError
    CoverSummary:
      properties:
        cover_id:
          type: string
          title: Cover Id
        status:
          type: string
          title: Status
        title:
          type: string
          title: Title
        preview_url:
          anyOf:
          - type: string
          - type: 'null'
          title: Preview Url
        front_url:
          anyOf:
          - type: string
          - type: 'null'
          title: Front Url
        error_message:
          anyOf:
          - type: string
          - type: 'null'
          title: Error Message
        generation_elapsed_seconds:
          anyOf:
          - type: number
          - type: 'null'
          title: Generation Elapsed Seconds
        estimated_generation_seconds:
          anyOf:
          - type: number
          - type: 'null'
          title: Estimated Generation Seconds
        estimate_sample_count:
          type: integer
          title: Estimate Sample Count
          default: 0
      type: object
      required:
      - cover_id
      - status
      - title
      title: CoverSummary
    StartJobResponse:
      properties:
        job_id:
          type: string
          title: Job Id
        status:
          type: string
          title: Status
        progress:
          type: number
          maximum: 1.0
          minimum: 0.0
          title: Progress
        theme:
          type: string
          title: Theme
        title:
          type: string
          title: Title
        pages:
          type: integer
          title: Pages
        selected_style:
          type: string
          title: Selected Style
        images:
          items:
            $ref: '#/components/schemas/ImageStatus'
          type: array
          title: Images
        created_at:
          type: string
          title: Created At
        user_id:
          anyOf:
          - type: string
          - type: 'null'
          title: User Id
        watermarked:
          type: boolean
          title: Watermarked
          default: false
        brand_signature:
          anyOf:
          - type: string
          - type: 'null'
          title: Brand Signature
        language:
          type: string
          title: Language
          default: en
        is_shared:
          type: boolean
          title: Is Shared
          default: false
        amazon_url:
          anyOf:
          - type: string
          - type: 'null'
          title: Amazon Url
        shared_page_slots:
          anyOf:
          - items:
              type: integer
            type: array
          - type: 'null'
          title: Shared Page Slots
        cover:
          anyOf:
          - $ref: '#/components/schemas/CoverSummary'
          - type: 'null'
        message:
          type: string
          title: Message
      type: object
      required:
      - job_id
      - status
      - progress
      - theme
      - title
      - pages
      - selected_style
      - images
      - created_at
      - message
      title: StartJobResponse
    GenerationQuoteRequest:
      properties:
        theme:
          type: string
          title: Theme
          default: ''
        title:
          anyOf:
          - type: string
          - type: 'null'
          title: Title
        length:
          $ref: '#/components/schemas/BookLength'
          default: short
        pages:
          anyOf:
          - type: integer
          - type: 'null'
          title: Pages
        style_id:
          anyOf:
          - type: string
          - type: 'null'
          title: Style Id
        custom_style:
          anyOf:
          - type: string
          - type: 'null'
          title: Custom Style
        reference_prompt:
          anyOf:
          - type: string
          - type: 'null'
          title: Reference Prompt
        distribution_type:
          type: string
          enum:
          - progressive
          - bold_and_easy
          - cute_and_cozy
          title: Distribution Type
          default: progressive
        character_count:
          anyOf:
          - type: integer
          - type: 'null'
          title: Character Count
        language:
          type: string
          enum:
          - en
          - es
          - de
          - fr
          - it
          - pt
          title: Language
          default: en
        purpose:
          anyOf:
          - type: string
            enum:
            - kdp
            - gift
            - other
          - type: 'null'
          title: Purpose
        style_description:
          anyOf:
          - type: string
          - type: 'null'
          title: Style Description
        allow_text:
          type: boolean
          title: Allow Text
          default: false
        distribution:
          anyOf:
          - items:
              $ref: '#/components/schemas/DistributionRange'
            type: array
          - type: 'null'
          title: Distribution
        user_rules:
          anyOf:
          - type: string
          - type: 'null'
          title: User Rules
        include_copyright:
          type: boolean
          title: Include Copyright
          default: false
        include_tips:
          type: boolean
          title: Include Tips
          default: false
        include_review:
          type: boolean
          title: Include Review
          default: false
        include_test:
          type: boolean
          title: Include Test
          default: false
      type: object
      title: GenerationQuoteRequest
      description: 'Lenient twin of GenerateRequest, used only to price a book.


        The price must never be what stops a creation. POST /api/generate re-validates

        everything (moderation, plan limits, credits) before spending a single credit,

        so POST /api/generate/quote prices whatever the planner produced instead of

        answering 422 — a 422 the UI could only show as "Could not calculate the final

        price, try again", with the Create button stuck on its loading state forever.


        The price depends on ``pages`` and the front-matter flags alone, so every text

        field here drops its length bounds and the page count is clamped into the

        range /api/generate accepts rather than rejected.'
    JobStatusPayload:
      properties:
        job_id:
          type: string
          title: Job Id
        status:
          type: string
          title: Status
        progress:
          type: number
          maximum: 1.0
          minimum: 0.0
          title: Progress
        theme:
          type: string
          title: Theme
        title:
          type: string
          title: Title
        pages:
          type: integer
          title: Pages
        selected_style:
          type: string
          title: Selected Style
        images:
          items:
            $ref: '#/components/schemas/ImageStatus'
          type: array
          title: Images
        created_at:
          type: string
          title: Created At
        user_id:
          anyOf:
          - type: string
          - type: 'null'
          title: User Id
        watermarked:
          type: boolean
          title: Watermarked
          default: false
        brand_signature:
          anyOf:
          - type: string
          - type: 'null'
          title: Brand Signature
        language:
          type: string
          title: Language
          default: en
        is_shared:
          type: boolean
          title: Is Shared
          default: false
        amazon_url:
          anyOf:
          - type: string
          - type: 'null'
          title: Amazon Url
        shared_page_slots:
          anyOf:
          - items:
              type: integer
            type: array
          - type: 'null'
          title: Shared Page Slots
        cover:
          anyOf:
          - $ref: '#/components/schemas/CoverSummary'
          - type: 'null'
      type: object
      required:
      - job_id
      - status
      - progress
      - theme
      - title
      - pages
      - selected_style
      - images
      - created_at
      title: JobStatusPayload
    GenerateRequest:
      properties:
        theme:
          type: string
          maxLength: 200
          minLength: 1
          title: Theme
        title:
          anyOf:
          - type: string
            maxLength: 120
            minLength: 1
          - type: 'null'
          title: Title
        length:
          $ref: '#/components/schemas/BookLength'
        pages:
          anyOf:
          - type: integer
            maximum: 60.0
            minimum: 3.0
          - type: 'null'
          title: Pages
        style_id:
          anyOf:
          - type: string
          - type: 'null'
          title: Style Id
        custom_style:
          anyOf:
          - type: string
            maxLength: 2000
            minLength: 3
          - type: 'null'
          title: Custom Style
        reference_prompt:
          anyOf:
          - type: string
            maxLength: 2000
          - type: 'null'
          title: Reference Prompt
        distribution_type:
          type: string
          enum:
          - progressive
          - bold_and_easy
          - cute_and_cozy
          title: Distribution Type
          default: progressive
        character_count:
          anyOf:
          - type: integer
            maximum: 4.0
            minimum: 0.0
          - type: 'null'
          title: Character Count
        language:
          type: string
          enum:
          - en
          - es
          - de
          - fr
          - it
          - pt
          title: Language
          default: en
        purpose:
          anyOf:
          - type: string
            enum:
            - kdp
            - gift
            - other
          - type: 'null'
          title: Purpose
        style_description:
          anyOf:
          - type: string
            maxLength: 4000
          - type: 'null'
          title: Style Description
        allow_text:
          type: boolean
          title: Allow Text
          default: false
        distribution:
          anyOf:
          - items:
              $ref: '#/components/schemas/DistributionRange'
            type: array
          - type: 'null'
          title: Distribution
        user_rules:
          anyOf:
          - type: string
            maxLength: 1000
          - type: 'null'
          title: User Rules
        include_copyright:
          type: boolean
          title: Include Copyright
          default: false
        include_tips:
          type: boolean
          title: Include Tips
          default: false
        include_review:
          type: boolean
          title: Include Review
          default: false
        include_test:
          type: boolean
          title: Include Test
          default: false
      type: object
      required:
      - theme
      - length
      title: GenerateRequest
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    GenerationQuoteResponse:
      properties:
        title:
          type: string
          title: Title
        pages:
          type: integer
          title: Pages
        frontmatter_pages:
          type: integer
          title: Frontmatter Pages
        cover_credits:
          type: integer
          title: Cover Credits
        cover:
          $ref: '#/components/schemas/CoverQuoteSummary'
        required_credits:
          type: integer
          title: Required Credits
        credits_to_charge:
          type: integer
          title: Credits To Charge
        available_credits:
          type: integer
          title: Available Credits
        is_free:
          type: boolean
          title: Is Free
        can_create:
          type: boolean
          title: Can Create
        blocker_code:
          anyOf:
          - type: string
          - type: 'null'
          title: Blocker Code
        blocker_message:
          anyOf:
          - type: string
          - type: 'null'
          title: Blocker Message
      type: object
      required:
      - title
      - pages
      - frontmatter_pages
      - cover_credits
      - cover
      - required_credits
      - credits_to_charge
      - available_credits
      - is_free
      - can_create
      title: GenerationQuoteResponse
    DistributionRange:
      properties:
        start_page:
          type: integer
          minimum: 1.0
          title: Start Page
        end_page:
          type: integer
          minimum: 1.0
          title: End Page
        theme:
          type: string
          maxLength: 120
          minLength: 1
          title: Theme
        description:
          anyOf:
          - type: string
            maxLength: 600
          - type: 'null'
          title: Description
      type: object
      required:
      - start_page
      - end_page
      - theme
      title: DistributionRange
      description: 'One contiguous section of the book''s page plan.


        Shared contract with the frontend: ranges are contiguous and cover pages

        ``1..config.pages`` exactly. ``theme`` is a short user-facing label (in the

        user''s language); ``description`` is an optional English brief that is fed

        to the page-prompt generator.'
    ImageStatus:
      properties:
        slot:
          type: integer
          title: Slot
        status:
          type: string
          title: Status
        prompt:
          anyOf:
          - type: string
          - type: 'null'
          title: Prompt
        simple_prompt:
          anyOf:
          - type: string
          - type: 'null'
          title: Simple Prompt
        simple_prompt_es:
          anyOf:
          - type: string
          - type: 'null'
          title: Simple Prompt Es
        url:
          anyOf:
          - type: string
          - type: 'null'
          title: Url
        creative_brief:
          anyOf:
          - type: string
          - type: 'null'
          title: Creative Brief
        simple_creative_brief:
          anyOf:
          - type: string
          - type: 'null'
          title: Simple Creative Brief
        simple_creative_brief_es:
          anyOf:
          - type: string
          - type: 'null'
          title: Simple Creative Brief Es
        bw_image_path:
          anyOf:
          - type: string
          - type: 'null'
          title: Bw Image Path
        error:
          anyOf:
          - type: string
          - type: 'null'
          title: Error
        retries:
          type: integer
          title: Retries
          default: 0
        bw_image_prompt:
          anyOf:
          - type: string
          - type: 'null'
          title: Bw Image Prompt
        bw_image_model:
          anyOf:
          - type: string
          - type: 'null'
          title: Bw Image Model
        completed_at:
          anyOf:
          - type: string
          - type: 'null'
          title: Completed At
        framed:
          type: boolean
          title: Framed
          default: false
        page_type:
          type: string
          title: Page Type
          default: coloring
      type: object
      required:
      - slot
      - status
      title: ImageStatus
  securitySchemes:
    HTTPBearer:
      type: http
      scheme: bearer