5-MINUTE QUICKSTART

Generate your first scientific figure

You only need an API key and two request fields. Follow these steps to submit a figure, check its progress, and download the result.

1Fund your walletAdd at least $10 through Stripe.
2Create an API keyCopy it when it appears. It is shown once.
3Use a server or terminalNever expose the key in browser code.
1

Save your API key

Replace fl_live_... with the key from your console. An environment variable keeps it out of your code.

export FIGURELABS_API_KEY="fl_live_..."
2

Submit a generation request

This minimal request asks FigureLabs to create a new figure from text.

curl -X POST https://api.figurelabs.ai/v1/images/generations \
  -H "Authorization: Bearer $FIGURELABS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt":"Create a clean scientific figure of the PI3K-AKT signaling pathway",
    "mode":"generations"
  }'
promptrequired

Describe the figure you want. English prompts usually give the most predictable labels and scientific detail.

modeoptional

Use generations for common image workflows. It is also the default when mode is omitted.

3

Save the task ID

Generation runs in the background. The first response confirms that your task was accepted; it does not contain the final image yet.

HTTP/1.1 202 Accepted
{
  "task_id": "tsk_01JZ9F7KQ2",
  "status": "processing",
  "estimated_price": 80,
  "currency": "USD"
}
Price fields use cents. A value of 80 means $0.80, not $80.
4

Check the result

Use the returned task_id. Check every 2–5 seconds until the status reaches a final state.

curl https://api.figurelabs.ai/v1/tasks/tsk_01JZ9F7KQ2 \
  -H "Authorization: Bearer $FIGURELABS_API_KEY"
pending / processingWait and check again.
succeededDownload output_url.
failed / rejectedRead error. You are not charged.
5

Download the figure

When the task succeeds, save the file from output_url. Signed result URLs remain available for seven days.

{
  "status": "succeeded",
  "output_url": "https://files.figurelabs.ai/presigned/...",
  "output_type": "image/png",
  "actual_price": 80
}
Next: Open Choose a workflow to edit an image, recolor a figure, upscale it, or generate an SVG flowchart.
GUIDE

Generation capabilities

All common image generation and editing tasks use POST /v1/images/generations. The generations mode lets FigureLabs infer the user intent from the prompt, source files, palette, and target ratio.

Public mode values

modeWhen to use itRequired input
generationsText generation, sketch conversion, reference generation, enhancement, recoloring, and aspect-ratio editing. This is the default when mode is omitted.Prompt and/or source files, depending on the task.
region_redrawForce the regional-redraw processing path.Prompt, original image, and one mask.
white_backgroundForce the white-background processing path.Image or sessionId; prompt is optional.

Capabilities inferred inside generations

Text to FigurePrompt only; creates a new scientific figure.AUTO-ROUTED
Sketch to FigurePrompt plus a rough sketch image.AUTO-ROUTED
Reference to FigurePrompt plus a visual or layout reference.AUTO-ROUTED
EnhanceExisting image plus an enhancement instruction.AUTO-ROUTED
RecolorExisting image, recolor instruction, and optional colorPalette.AUTO-ROUTED
Aspect RatioExisting image and optional targetRatio. If omitted, FigureLabs selects a suitable ratio for the task.AUTO-ROUTED

Example

{
  "mode": "generations",
  "prompt": "Recolor this pathway using a restrained blue and green palette",
  "files": ["file_image123"],
  "colorPalette": "#2563EB,#14B8A6"
}
Fixed mode values are safe to reuse. Unlike an Idempotency-Key, mode=generations is only a routing value. Every POST request still creates a new task.
GUIDE

File uploads and storage

Upload a local image or document to receive a file_id, then pass that ID to a generation or flowchart request. Uploaded files are temporary API inputs, not permanent cloud storage.

Self-serve storage tiers

A new self-serve account starts with 0 storage until its first successful wallet top-up. A successful top-up moves the account to the matching storage tier. The achieved quota does not decrease when API usage later reduces the wallet balance. All API keys under the same account share this limit.

Wallet total after top-upFile storage
$0 before first top-up0 GB
More than $0 and up to $101 GB
More than $10 and up to $502 GB
More than $50 and below $2005 GB
$200 or more20 GB

Enterprise accounts

Enterprise storage allowance is defined in the enterprise agreement and is not calculated from wallet balance. If the agreement does not specify a custom allowance, the default is 50 GB. Contact enterprise support to confirm or change the contracted allowance.

File validity and deletion

Uploaded files are valid for 7 days. After 7 days, a file can no longer be used through the external API by file_id and is not counted toward file storage.

  • Deleting a file makes its file ID unavailable immediately and removes it from the storage calculation.
  • The console shows metadata and a Delete action only. It does not preview, open, or download uploaded file content.

Upload and use a local file

curl -X POST https://api.figurelabs.ai/v1/files \
  -H "Authorization: Bearer $FIGURELABS_API_KEY" \
  -F "file=@./reference.png" \
  -F "purpose=image_generation"
{ "id": "file_abc123", "expires_at": "2026-08-11T10:22:00Z" }
{
  "mode": "generations",
  "prompt": "Redraw this as a clean publication figure",
  "files": ["file_abc123"]
}
GUIDE

Models, speed & aspect ratios

Use the optional model field to lock a model. If omitted, FigureLabs selects a recommended model allowed by your API key and compatible with the workflow and ratio.

For your first integration: omit model. Specify it only when you need stable model behavior, reproducibility, or model comparisons.
Model valueDisplay nameApprox. timeSupported targetRatio values
gemini-3-pro-image-previewNano Banana Pro~30 sec16:9, 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 21:9
nano-banana-2Nano Banana 2~30 sec16:9, 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 21:9
gpt-image-2GPT Image 2~90 sec16:9, 1:1, 2:3, 3:2, 4:5, 5:4, 9:16
nano-bananaNano Banana~15 sec16:9, 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 21:9
gpt-image-1GPT Image 1.5~90 sec3:2, 1:1, 2:3
seedream-5-0-260128Seedream 5.0 Lite~120 sec16:9, 1:1, 2:3, 3:4, 9:16, 3:2, 4:3, 21:9
seedream-4-5-251128Seedream 4.5~30 sec16:9, 1:1, 2:3, 3:4, 9:16, 3:2, 4:3, 21:9
flux-kontext-maxFlux.2 Max~15 sec4:3, 1:1, 16:9, 9:16, 21:9, 2:3, 5:1, 3:2, 3:7, 7:3
sora-imageSora~90 sec3:2, 1:1, 2:3

How ratio selection works

Image generation uses targetRatio; Flowcharts uses ratio. Use colon notation such as 16:9, not pixels or a display label.

16:91:12:33:23:44:34:55:49:1621:9
  • If a model is specified, choose one of its supported ratios.
  • If no targetRatio is sent, FigureLabs determines a suitable output ratio from the prompt, source files, and generation task.
  • If no model is sent, FigureLabs selects a compatible model using the prompt, input type, requested targetRatio, and available models for the API key.
403 MODEL_NOT_ALLOWED means the API key cannot use that model. 422 MODEL_MODE_NOT_SUPPORTED means the selected model cannot perform the workflow.
GUIDE

Control generated output

A basic generation needs a prompt and workflow. Add model, ratio, style, palette, format, or session fields only when you need more control.

promptconditional

Maximum 2,000 characters. Required for generation and edit modes that need instructions.

modeoptional

Defaults to generations. Public values are generations, region_redraw, and white_background.

modeloptional

Lock a model. Omit it to use the recommended compatible model.

targetRatioconditional

Optional. Send a supported ratio to force the output shape; omit it to let FigureLabs choose a suitable ratio from the generation task.

styleoptional

Flat, 3D, 2.5D, hand_drawn, or line_art. Default: Flat.

formatoptional

png by default. vector generates then vectorizes to SVG.

qualityoptional

V1 supports only high. It is the default and does not change price.

sessionIdoptional

Continue an existing conversation. Omit it to create a new session.

colorPaletteoptional

Pass 1–8 comma-separated colors in #RRGGBB format. The palette guides the model, especially for recolor, but does not strictly limit every output color. Omit it or pass an empty string to let the model choose.

Example

{
  "model": "nano-banana",
  "prompt": "Create a publication-ready mitochondrial pathway figure",
  "mode": "generations",
  "style": "Flat",
  "targetRatio": "16:9",
  "colorPalette": "#0F172A,#2563EB,#14B8A6",
  "format": "png"
}
API REFERENCE

Generate & edit images

Use one endpoint for text generation, sketch and reference workflows, enhancement, regional redraw, recoloring, white background, and aspect-ratio editing.

POST/v1/images/generations202 Accepted
Request bodyapplication/json
Standard price$0.80; vector total $1.30
OutputPNG or SVG
Naming compatibility: this endpoint keeps camelCase fields such as targetRatio, sessionId, and colorPalette. Responses use snake_case.

Request parameters

FieldTypeRequired?Description
modelstringOptionalModel value from Models & ratios. Omit for recommended routing.
promptstringConditionalMaximum 2,000 characters. Required for generation and instruction-driven edits.
sessionIdstringOptionalContinue an existing session; a new session is created when omitted.
modestringOptionalRouting mode. Default: generations. Other values: region_redraw and white_background.
stylestringOptionalFlat, 3D, 2.5D, hand_drawn, or line_art. Default: Flat.
colorPalettestringOptional1–8 comma-separated #RRGGBB colors used as visual guidance.
imageUrlstring / object / arrayOptionalLegacy-compatible reference input: URL, Data URI, file object, file ID, or array.
filesstring / object / arrayOptionalImage or document inputs. Merged with imageUrl.
maskstring / objectConditionalOne image; required and only valid for region_redraw.
targetRatiostringConditionalOptional ratio such as 16:9. Omit it to let FigureLabs choose a suitable ratio for the generation task.
formatstringOptionalpng (default) or vector. Vector runs generation plus SVG conversion.
qualitystringOptionalV1 supports only high; default high; no price change.
quoteMessageIdnumberOptionalMessage to edit. Requires sessionId; otherwise ignored.
safetyIdentifierstringOptionalYour non-sensitive end-user reference for safety auditing.

Routing modes

modeBehaviorInput requirements
generationsAgent automatically identifies text, sketch, reference, enhance, recolor, or aspect-ratio intent.Prompt and/or source files. Default when omitted.
region_redrawFixed regional-redraw processing.Prompt, original image, and one mask.
white_backgroundFixed white-background processing.Image or sessionId; prompt optional.

Request examples

Text to figure
{
  "model": "gpt-image-2",
  "prompt": "A publication-ready mitochondrial metabolism pathway",
  "mode": "generations",
  "style": "Flat",
  "colorPalette": "#111111,#2F80ED,#27AE60",
  "targetRatio": "16:9",
  "format": "png"
}
Reference image
{
  "model": "nano-banana",
  "prompt": "Redraw this as a clean Nature-style schematic",
  "mode": "generations",
  "imageUrl": "https://example.com/input/figure.png",
  "targetRatio": "4:3"
}
Regional redraw with mask
{
  "prompt": "Redraw the masked area as a microscope panel",
  "mode": "region_redraw",
  "files": ["file_image123"],
  "mask": "file_mask123"
}

Creation response

FieldTypeMeaning
task_idstringSave this ID and query Tasks.
session_idstringUse it to continue the same session.
statusstringUsually processing.
estimated_pricenumberEstimated hold in USD cents.
currencystringUSD in V1.
API REFERENCE

Upscale an image

Increase one raster image to a 2K, 4K, or 8K target. The successful task output is PNG.

POST/v1/images/upscale202 Accepted
InputFirst valid bitmap image
Target2K, 4K, or 8K
Outputimage/png

Request parameters

FieldTypeRequired?Description
image_urlstring / object / arrayRequiredURL, Data URI, file object, or file ID. If an array is sent, the first valid image is used.
target_sizestringOptional2k, 4k, 8k, or width x height such as 4096x2048. Default: 2K tier.
safety_identifierstringOptionalYour non-sensitive end-user reference.

Target tiers & pricing

ValueTarget long edgeStandard price
2k or omittedApproximately 2,048 px$0.02
4kApproximately 4,096 px$0.04
8kApproximately 8,192 px$0.08
4096x2048Larger dimension selects the tier$0.04
Recommended: send 2k, 4k, or 8k. Preset tiers avoid ambiguity when custom dimensions are converted to pricing tiers.

Example

{
  "image_url": "https://example.com/input/source.png",
  "target_size": "4k",
  "safety_identifier": "user_12345"
}
{ "task_id": "tsk_...", "session_id": "ses_...", "status": "processing", "estimated_price": 4, "currency": "USD" }
API REFERENCE

Vectorize an image

Convert one raster image to scalable SVG. V1 processes one image per task.

POST/v1/images/vectorize202 Accepted
InputOne raster image
Standard price$0.50
Outputimage/svg+xml

Request parameters

FieldTypeRequired?Description
image_urlstring / objectRequiredOne bitmap URL, Data URI, file object, or file ID.
safety_identifierstringOptionalYour non-sensitive end-user reference.
Do not rely on the historical image_urls batch field. Public V1 returns one output URL and supports one image per task.

Example

{
  "image_url": "https://example.com/input/chart.png"
}
{ "task_id": "tsk_...", "session_id": "ses_...", "status": "processing", "estimated_price": 50, "currency": "USD" }
New generation: use format=vector in Generate & edit to generate and vectorize in one task. The standard total is $1.30.
API REFERENCE

Generate a flowchart

Create an SVG research workflow from a prompt and optional image or document inputs.

POST/v1/flowcharts202 Accepted
InputPrompt; optional files
Standard price$0.80
OutputSVG

Request parameters

FieldTypeRequired?Description
promptstringRequiredNon-empty flowchart instruction.
session_idstringOptionalContinue an existing session; creates a new session when omitted.
ratiostringOptionalOutput ratio such as 16:9 or 1:1.
file_urlstring / object / arrayOptionalLegacy single-file field; also accepts file object, file ID, or array.
filesstring / object / arrayOptionalURL, Data URI, file object, or file ID array. Merged with file_url.

Example

{
  "prompt": "Draw a single-cell RNA-seq workflow from tissue dissociation to marker annotation",
  "ratio": "16:9"
}

With a source file

{
  "prompt": "Convert this rough process sketch into a polished SVG flowchart",
  "ratio": "4:3",
  "files": ["file_sketch123"]
}
{ "task_id": "tsk_...", "session_id": "ses_...", "status": "processing", "estimated_price": 80, "currency": "USD" }
API REFERENCE

Files

Upload temporary task inputs and manage uploaded-file metadata from the developer console.

POST/v1/files201 Created
Request bodymultipart/form-data
Image limit16 MiB per file
Document limit32 MiB per file

Upload requirements

Uploads must pass authentication, file-type, file-size, and account storage-limit checks. Rejected uploads are not stored or counted toward account usage.

Form fields

FieldTypeRequired?Description
filefileRequiredImage or document. Video and audio are not supported.
purposestringOptionalgeneral, image_generation, flowchart, or mask. Default: general.

Response fields

FieldDescription
idFile ID to pass to a task request.
file_name, mime_type, sizeUploaded-file metadata.
created_at, expires_atUTC upload time and the 7-day external expiry time.

Upload example

curl -X POST https://api.figurelabs.ai/v1/files \
  -H "Authorization: Bearer $FIGURELABS_API_KEY" \
  -F "file=@./reference.pdf" \
  -F "purpose=image_generation"
{
  "id": "file_abc123",
  "file_name": "reference.pdf",
  "mime_type": "application/pdf",
  "size": 204800,
  "created_at": "2026-08-04T10:22:00Z",
  "expires_at": "2026-08-11T10:22:00Z"
}

Manage and delete files

Open Developer console → Files to review uploaded-file metadata or delete a file. Deletion requires confirmation.

After deletion, the file_id becomes unavailable immediately and the file no longer counts toward file storage. Already-submitted tasks continue. Data retention follows the FigureLabs privacy policy.

Storage-limit errors

HTTPerrorCodeMeaning
413STORAGE_QUOTA_EXCEEDEDThe new file would exceed the account's file storage limit.
Free space: delete files from Developer console → Files, wait for old uploads to expire, or increase the applicable account quota. Self-serve quotas can only move up after a successful top-up; enterprise quotas are managed by operations.
API REFERENCE

Query a task result

Use the shared task endpoint for Generate, Upscale, Vectorize, and Flowchart tasks. A key can query only tasks owned by its account.

GET/v1/tasks/{task_id}200 OK

Path parameter

ParameterTypeRequired?Description
task_idstringRequiredID returned by a task creation endpoint; usually starts with tsk_.

Response fields

FieldTypeDescription
task_idstringTask ID.
session_idstringSession ID for follow-up generation.
statusstringpending, processing, succeeded, failed, rejected, or canceled.
output_urlstring / nullSeven-day signed result URL after success.
output_typestring / nullFor example image/png, image/svg+xml, png, or svg.
errorobject / nullError details for failed or rejected tasks.
error.codestringPublic task error code.
error.messagestringHuman-readable task error.
actual_pricenumber / nullFinal charge in USD cents after success.
estimated_pricenumber / nullEstimated hold in USD cents.
currencystring / nullUSD in V1.
created_atstring / nullUTC RFC 3339 time, ending in Z.
finished_atstring / nullCompletion time; null until finished.

Polling recommendations

  • Poll every 2–5 seconds.
  • Use a longer interval for slower models such as gpt-image-2 and seedream-5-0-260128.
  • Stop when status is succeeded, failed, rejected, or canceled.
  • Persist task_id so a network interruption does not lose the result lookup.
Download promptly: output_url is a signed URL valid for seven days. Copy the file to your own permanent storage.

Successful result

{
  "task_id": "tsk_01JZ9F7KQ2",
  "status": "succeeded",
  "output_url": "https://files.figurelabs.ai/presigned/...",
  "output_type": "image/png",
  "error": null,
  "actual_price": 80,
  "estimated_price": 80,
  "currency": "USD",
  "created_at": "2026-07-31T10:20:30Z",
  "finished_at": "2026-07-31T10:21:02Z"
}

Failed or rejected tasks

actual_price is null and the estimated hold is released. Use UPSTREAM_FAILED for processing failure and UPSTREAM_SAFETY_REJECTED for a safety refusal.

RESOURCES

Error handling

Handle errors differently depending on whether FigureLabs created a task.

HTTP error

Authentication, balance, permission, or validation failed before task creation. Read the top-level error response.

Task error

A task exists but finishes as failed or rejected. Query Tasks and read its error object. It is not charged.

HTTP error format

{
  "code": 401000,
  "errorCode": "INVALID_API_KEY",
  "message": "Invalid API key.",
  "requestId": "req_abc123"
}

Common HTTP errors

HTTPerrorCodeWhat it meansRecommended action
401INVALID_API_KEYKey missing, malformed, or unknown.Check the Authorization header.
401API_KEY_REVOKEDThe key was permanently revoked.Create and use a new key.
403API_KEY_DISABLEDThe key is disabled.Enable it or use another key.
403CUSTOMER_DISABLEDThe customer account cannot make calls.Contact account support.
403MODEL_NOT_ALLOWEDThe key cannot use the selected model.Change model or allowed-model settings.
402INSUFFICIENT_BALANCEThe wallet cannot cover the task.Add funds and submit again.
402BILLING_FAILEDThe billing hold or charge failed.Retry later or contact support.
409IDEMPOTENCY_KEY_CONFLICTThe same key was reused with a different body.Use a new Idempotency-Key.
429RATE_LIMITEDRequest rate exceeded.Wait and retry with backoff.
429CONCURRENT_TASK_LIMIT_EXCEEDEDToo many tasks are running.Wait for active tasks to finish.
422INVALID_PROMPTPrompt or required field validation failed.Review required fields and limits.
422MODEL_MODE_NOT_SUPPORTEDThe model cannot perform this workflow.Omit model or choose another model.
400 / 4221001011026File, target size, or task parameter is invalid.Review request fields and values.
400 / 4221001011051The file ID does not exist.Upload again or use a valid file ID.
4031001011052The file belongs to another account.Use a file uploaded by this account.
400 / 4221001011053Unsupported file type.Use an accepted image or document.
400 / 4221001011054More than five ordinary input files.Reduce the number of inputs.
400 / 4221001011055Decoded file size exceeds the limit.Compress or resize the file.
5001001011056File upload or reading failed.Retry the upload.
4041001011019Task missing or owned by another account.Check task_id and API key account.
500INTERNAL_ERRORFigureLabs platform error.Retry with backoff; contact support if persistent.

Task terminal errors

Task statuserror.codeMeaningCharged?
failedUPSTREAM_FAILEDGeneration or processing failed.No
rejectedUPSTREAM_SAFETY_REJECTEDThe safety policy refused the request.No

Rate-limit response headers

HeaderMeaning
X-RateLimit-LimitCurrent rate limit.
X-RateLimit-RemainingRequests remaining in the current window.
X-RateLimit-ResetSuggested wait in seconds.
Retry-AfterHow long to wait before retrying.

File storage errors

HTTPerrorCodeRecommended action
413STORAGE_QUOTA_EXCEEDEDDelete files from the console, wait for expiry, or increase the account quota.
RESOURCES

Model policies

FigureLabs and the selected model provider apply safety checks to prompts and uploaded content.

If a request is rejected

The task returns status=rejected with a concise reason. Show that reason to your user, let them revise the input, and do not retry the same content automatically.

Rejected tasks are not billed. A technical processing problem returns status=failed, which is also not billed.

For applications with end users

Pass a non-sensitive user reference in safetyIdentifier. Do not send names, email addresses, or other personal data.

RESOURCES

llms.txt

Give coding agents a concise index of supported endpoints, authentication, task polling, and error handling.

Location

https://developer.figurelabs.ai/llms.txt

Use it with an agent

Read https://developer.figurelabs.ai/llms.txt and build a server-side integration that generates a scientific figure, polls the task, and handles rejected requests.
Back to Quickstart ↑