Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: Jabbertoon tools for AI assistants and developers Build API
version: '1'
summary: Read Jabbertoon's guide, moves, characters and looks, check a cartoon, a move or a character you write, and make a jabbertoon.com link that opens a move or a character, or the cartoon in the studio.
description: 'The same tools as Jabbertoon''s MCP server (https://jabbertoon.com/mcp), over plain HTTP. No key and no account. GET answers the read tools whose arguments are plain values; POST a JSON object of arguments to any tool. Nothing sent to validate or share_link is stored or logged; report_problem keeps its report for a person to read. Errors are {code, where, says, fix, url}, with did_you_mean and an RFC 6902 patch when the fix is certain. Making the video is done on your own computer, by the jabbertoon tool (preview, render_video). The block language: https://jabbertoon.com/docs/language/'
contact:
name: Jabbertoon
email: hello@jabbertoon.com
url: https://jabbertoon.com/for-ai/
license:
name: Proprietary, 1211 Holding LLC
url: https://jabbertoon.com/license/
servers:
- url: https://jabbertoon.com
security: []
tags:
- name: Build
paths:
/api/build:
post:
operationId: build
summary: Build a thing in the 3D builder from steps, and link it
description: 'Builds anything (a character, an animal, a car, a house) in Jabbertoon''s 3D builder from steps, as its buttons do: spine, grow, bone (a skeleton, a bone at a time), add a ready part (leg, arm, head, wing, wheel, hat ...), set, copy, remove, look. Checks every step, says what was made (its parts and size) and gives a jabbertoon.com/forge/ link that opens it in the Forge, to change and use in a cartoon, world or game. Over MCP the answer also shows a picture of it from four sides. Steps that start {"op": "new", "kind": "move"} make a move from keys, {"op": "new", "kind": "world"} a world (a level is played to check it), and a game, every one in 3D: "walk" a place to walk at real size (played on foot: told what cannot be reached), or "trench", "space", "surface" or "sky" a game to fly. A refused step says where, why and how to fix it. export_link opens Export, free: STL/3MF to 3D print, glTF (Blender, Unity, Godot), SVG, Minecraft .schem. The steps: get_guide {"topic": "build"}, a game''s {"topic": "game"}.'
security: []
responses:
'200':
description: What build answers. ok is false when what you sent has problems; they are listed with where, says and fix.
content:
application/json:
schema:
type: object
required:
- ok
- url
properties:
ok:
type: boolean
url:
type: string
description: The jabbertoon.com page the link opens, or the page that explains a refusal.
link:
type: string
description: 'The link to give the person: it opens the build in the Forge.'
code:
type: string
description: 'The share code after #build= (a "1." code: docs/links/).'
length:
type: integer
description: The link's length in characters.
made:
type: object
description: 'What was built: name, parts, drawn (a pair twice), roles (the parts as drawn, by role), legs, blocks {length, height, width}.'
names:
type: object
description: Each name a step gave (as), and the part it names.
build:
type: object
description: 'The build the steps made (or as far as they went): send it back with more steps to change it.'
blueprint:
type: object
description: 'With arguments.blueprint: id, walls (each wall step: wall, mean_cm and worst_cm from the plan''s ink), mean_cm, off (the walls more than 20 cm off), and on the REST door picture (a JPEG, base64).'
errors:
type: array
items:
$ref: '#/components/schemas/Problem'
description: The refused step or the build's problems, in order.
error_count:
type: integer
description: How many errors the checks found.
warnings:
type: array
items:
$ref: '#/components/schemas/Problem'
warning_count:
type: integer
description: How many warnings the checks found.
engine:
$ref: '#/components/schemas/Engine'
notes:
type: array
items:
type: string
error:
$ref: '#/components/schemas/Problem'
4XX:
$ref: '#/components/responses/Problem'
5XX:
$ref: '#/components/responses/Problem'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
steps:
type: array
maxItems: 400
description: 'The steps, in order: {op: spine | grow | bone | add | set | copy | remove | look, on (a part, or a name an earlier step gave with as), ...}.'
build:
type: object
description: A build to change (the build an answer gave); without it the steps start from a new spine.
blueprint:
type: object
minProperties: 1
additionalProperties: false
example:
steps:
- op: look
name: Sam
- op: add
'on': spine
preset: head
as: head
- op: add
'on': head
preset: hat
style: crown
- op: add
'on': spine
preset: arm
- op: add
'on': spine
preset: leg
tags:
- Build
components:
schemas:
Problem:
type: object
required:
- code
- where
- says
- fix
properties:
code:
type: string
where:
type:
- string
- 'null'
says:
type: string
fix:
type:
- string
- 'null'
url:
type: string
description: The code's entry on https://jabbertoon.com/docs/errors/.
did_you_mean:
type: array
items:
type: string
patch:
type: array
items:
type: object
description: RFC 6902 operations on what you sent that make the fix, given only when the fix is certain.
Engine:
type: object
properties:
version:
type: string
description: The block language's version.
git:
type: string
description: The git tree id of the engine that answered (the same on every door).
responses:
Problem:
description: 'A request the server cannot use (400 bad_arguments, 404 not_found, 405, 413 too_large, 415, 503 busy or timeout: try again after Retry-After).'
content:
application/json:
schema:
type: object
required:
- ok
- url
- error
properties:
ok:
const: false
url:
type: string
error:
$ref: '#/components/schemas/Problem'
externalDocs:
description: 'Developers: quickstart in curl, Python and JavaScript'
url: https://jabbertoon.com/developers/
x-mcp:
url: https://jabbertoon.com/mcp
transport: streamable-http