KDP Coloring Book · Schema

PlannerTurn

One assistant turn. ``kind`` discriminates the shape: - ``question``: render ``message`` + ``options`` (chips) and/or a free-text box. - ``plan``: render ``message`` + ``summary`` bullets + the 3 invented ``style_candidates`` (rendered against one shared ``sample_scene`` so the user can compare looks and pick one), plus Approve / give-feedback CTAs (``config`` is hidden state).

CompanyArtificial IntelligenceColoring BooksAmazonKDPSelf-Publishing

Properties

Name Type Description
kind string
message string
options array
multi_select boolean
allow_free_text boolean
collected object
summary object
config object
style_candidates object
sample_scene object
distribution object
handled_requests array
help_topic object
View JSON Schema on GitHub

JSON Schema

kdpcoloringbook-com-planner-turn-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/kdpcoloringbook-com/json-schema/kdpcoloringbook-com-planner-turn-schema.json",
  "title": "PlannerTurn",
  "description": "One assistant turn. ``kind`` discriminates the shape:\n\n- ``question``: render ``message`` + ``options`` (chips) and/or a free-text box.\n- ``plan``: render ``message`` + ``summary`` bullets + the 3 invented\n  ``style_candidates`` (rendered against one shared ``sample_scene`` so the user\n  can compare looks and pick one), plus Approve / give-feedback CTAs (``config``\n  is hidden state).",
  "x-generated": "2026-11-13",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/kdpcoloringbook-com-openapi.json#/components/schemas/PlannerTurn",
  "properties": {
    "kind": {
      "type": "string",
      "enum": [
        "question",
        "plan"
      ],
      "title": "Kind"
    },
    "message": {
      "type": "string",
      "maxLength": 2000,
      "title": "Message"
    },
    "options": {
      "items": {
        "$ref": "#/$defs/PlannerOption"
      },
      "type": "array",
      "title": "Options"
    },
    "multi_select": {
      "type": "boolean",
      "title": "Multi Select",
      "default": false
    },
    "allow_free_text": {
      "type": "boolean",
      "title": "Allow Free Text",
      "default": true
    },
    "collected": {
      "anyOf": [
        {
          "additionalProperties": {
            "type": "string"
          },
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "title": "Collected"
    },
    "summary": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "title": "Summary"
    },
    "config": {
      "anyOf": [
        {
          "$ref": "#/$defs/BookPlanConfig"
        },
        {
          "type": "null"
        }
      ]
    },
    "style_candidates": {
      "anyOf": [
        {
          "items": {
            "$ref": "#/$defs/StyleCandidate"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "title": "Style Candidates"
    },
    "sample_scene": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Sample Scene"
    },
    "distribution": {
      "anyOf": [
        {
          "items": {
            "$ref": "#/$defs/DistributionRange"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "title": "Distribution"
    },
    "handled_requests": {
      "items": {
        "type": "string"
      },
      "type": "array",
      "title": "Handled Requests"
    },
    "help_topic": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Help Topic"
    }
  },
  "type": "object",
  "required": [
    "kind",
    "message"
  ],
  "$defs": {
    "BookLength": {
      "type": "string",
      "enum": [
        "test",
        "short",
        "medium",
        "long"
      ],
      "title": "BookLength"
    },
    "BookPlanConfig": {
      "properties": {
        "theme": {
          "type": "string",
          "maxLength": 200,
          "minLength": 1,
          "title": "Theme"
        },
        "length": {
          "$ref": "#/$defs/BookLength",
          "default": "short"
        },
        "pages": {
          "type": "integer",
          "maximum": 60.0,
          "minimum": 3.0,
          "title": "Pages",
          "default": 25
        },
        "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"
        },
        "style_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Style Id"
        },
        "style_description": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 4000
            },
            {
              "type": "null"
            }
          ],
          "title": "Style Description"
        },
        "allow_text": {
          "type": "boolean",
          "title": "Allow Text",
          "default": false
        },
        "user_rules": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 1000
            },
            {
              "type": "null"
            }
          ],
          "title": "User Rules"
        }
      },
      "type": "object",
      "required": [
        "theme"
      ],
      "title": "BookPlanConfig",
      "description": "The book the agent proposes — a superset compatible with GenerateRequest.\n\nOn approval the FE forwards this straight to POST /api/generate. ``pages`` is\nthe authoritative page count (the user picks it explicitly); ``length`` is only\na coarse label (the nearest LENGTH bucket) and is not used to derive pages."
    },
    "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.\n\nShared contract with the frontend: ranges are contiguous and cover pages\n``1..config.pages`` exactly. ``theme`` is a short user-facing label (in the\nuser's language); ``description`` is an optional English brief that is fed\nto the page-prompt generator."
    },
    "PlannerOption": {
      "properties": {
        "label": {
          "type": "string",
          "title": "Label"
        },
        "value": {
          "type": "string",
          "title": "Value"
        },
        "emoji": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Emoji"
        }
      },
      "type": "object",
      "required": [
        "label",
        "value"
      ],
      "title": "PlannerOption",
      "description": "A selectable chip for a multiple-choice question turn."
    },
    "StyleCandidate": {
      "properties": {
        "key": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Key"
        },
        "name": {
          "type": "string",
          "maxLength": 120,
          "minLength": 1,
          "title": "Name"
        },
        "description": {
          "type": "string",
          "maxLength": 2000,
          "minLength": 1,
          "title": "Description"
        },
        "name_local": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 120
            },
            {
              "type": "null"
            }
          ],
          "title": "Name Local"
        },
        "description_local": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 2000
            },
            {
              "type": "null"
            }
          ],
          "title": "Description Local"
        }
      },
      "type": "object",
      "required": [
        "name",
        "description"
      ],
      "title": "StyleCandidate",
      "description": "An AI-invented visual style for a planned book.\n\nThe planner model proposes these on a plan turn; it omits ``key`` and the\nserver slugifies ``name`` into a unique, stable key (see book_planner).\n\n``name``/``description`` stay in technical English (they feed the image\nmodel); ``name_local``/``description_local`` carry the same text translated\nto the user's chat language for display only."
    }
  }
}

Work with this as data

Every JSON Schema 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 schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • 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 JSON Schema
curl "https://apis.io/api/v1/json-schemas/kdpcoloringbook-com-planner-turn"
All schemas
curl "https://apis.io/api/v1/json-schemas?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.