Developer API

Scientific figures, built for your product.

Generate publication-ready figures from text, sketches, or reference images—all through one API.

View API docs
create-figure.sh
curl https://api.figurelabs.ai/v1/images/generations \
  -H "Authorization: Bearer $FIGURELABS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "mode": "generations",
    "prompt": "PI3K–AKT signaling pathway"
  }'
202 Accepted · tsk_01JZ9F7KQ2 · processing

One API. Multiple workflows.

InputPrompt
Text-to-Figure input example
OutputScientific figure
Text-to-Figure output example
POST /v1/images/generations
{
  "mode": "generations",
  "prompt": "PI3K–AKT signaling pathway"
}
202 Accepted
{
  "task_id": "tsk_01JZ9F7KQ2",
  "status": "processing"
}
One endpoint. Automatic routing.View examples
Quickstart

Submit, poll, and retrieve

FigureLabs uses asynchronous tasks so your product stays responsive while complex figures are generated.

  1. 1Submit a generation request.
  2. 2Persist the returned task_id.
  3. 3Poll until the task reaches a final state.
  4. 4Download the output URL within seven days.
import os, time, requests

headers = {
  "Authorization": f"Bearer {os.environ['FIGURELABS_API_KEY']}"
}
task_response = requests.post(
  "https://api.figurelabs.ai/v1/images/generations",
  headers=headers,
  json={"mode":"generations","prompt":"PI3K–AKT pathway"}
)
task_response.raise_for_status()
task = task_response.json()

while True:
  result_response = requests.get(
    f"https://api.figurelabs.ai/v1/tasks/{task['task_id']}",
    headers=headers
  )
  result_response.raise_for_status()
  result = result_response.json()
  if result["status"] in {"succeeded", "failed", "rejected", "canceled"}:
    break
  time.sleep(3)

if result["status"] != "succeeded":
  raise RuntimeError(result.get("error") or result["status"])
print(result["output_url"])