Local API
HTTP access to the same JobRunner path the composer uses. No account. No Stripe.
Create a figure
POST /api/v1/figures returns a job id and pollUrl. Poll until status is succeeded, failed, or canceled.
Create
curl -sS http://localhost:3000/api/v1/figures \
-H 'Content-Type: application/json' \
-d '{
"prompt": "Draw a labeled three-step PCR workflow.",
"mode": "illustration",
"offering": "fixture"
}'Poll
curl -sS http://localhost:3000/api/v1/figures/JOB_ID
Body
- prompt
- Text description. At least 8 characters unless you send image or tabularData.
- mode
- illustration (default), flowchart, or plot. Flowchart plans on the server, then drafts nodes. Plot accepts optional tabularData.
- image
- Optional source. Object with mimeType (image/png, image/jpeg, image/webp, or image/svg+xml) and base64 data — not a data URL.
- offering
- nano-banana (Gemini 2.5 Flash Image), nano-banana-pro (Gemini 3 Pro Image), nano-banana-2 (Gemini 3.1 Flash Image), or fixture. Those Nano Banana names are the official Gemini image models.
- modelProvider
- gemini or fixture. Omit to follow offering, then the server environment.
Optional image
{
"prompt": "Turn this sketch into a journal figure.",
"mode": "illustration",
"offering": "fixture",
"image": {
"mimeType": "image/png",
"data": "BASE64_BYTES"
}
}Response
Envelope is ok / data / requestId, same as the rest of the app. data.figure includes id, status, pollUrl, provider, and result when finished. Illustration and plot results are kind: image with a dataUrl. Flowchart results are kind: flowchart with the document.
Not the same as FigureLabs
- No hosted API product, billed keys, or vendor routing.
- Image models are Nano Banana / Nano Banana Pro / Nano Banana 2, or fixture.
- No 8K upscale, auth, teams, or Stripe.