imageatimageatDevelopers
ModelsHelpStatusAPI key
Developer documentation

Build with the imageat API

Generate images, videos, text, and multi-step creative workflows through one authenticated REST API.

Create an API key Start integrating
Base URLhttps://api.imageat.com/v1
Image, video, and text flowing through a unified generative media API

Image API

Create and edit production images

Workflow API

Run published creative pipelines

Video API

Generate Seedance videos

LLM API

Chat with Qwen 3.8 27B

MCP Server

Connect AI clients without code

Workflow API
IntroductionAuthenticationPricing overviewRun lifecycleCreate runPoll runServer-sent eventsCancel runOutputs & CDNWebhooksError codesCode examples
Image API
Image modelsGenerate imageParametersModel guideMidjourney V8
Video API
Video modelsCreate videoParametersPoll outputModel examples
LLM API
GPT-6 AstraQwen 3.8 27BChat completionOpenAI clientsReliabilityAgent configsParametersResponse & billing
MCP Server
OverviewInstall (Desktop)claude.ai & ChatGPTTools

Reference

Workflow API

Introduction

The Workflow API lets you trigger a published imageat workflow with a single HTTP request, poll for completion, and receive CDN-hosted outputs. Every run is metered and billed against the API key's owning account.

A typical integration is three calls: POST to create a run, GET (or subscribe via SSE) to track progress, and then read CDN URLs from the final response.

Authentication

All requests are authenticated with an API key sent as a Bearer token. Create keys from your Projects page. Keys start with iat_live_ (production) or iat_test_ (sandbox).

Header
Authorization: Bearer iat_live_xxxxxxxxxxxxxxxx

Keep your API key on the server. Never expose it in client-side code or commit it to source control. Revoke and rotate from the Projects page if a key is exposed.

Model pricing overview

API and MCP requests spend your website credits (subscription and purchased) at the same rates as the website. Once those run out, usage bills your prepaid USD API balance at the prices below, which match the API pricing page and show the minimum supported configuration.

ModelStarts atMinimum configuration
nano-banana-2-liteFrom $0.08 / image1 image · 512px
nano-banana-2.1From $0.16 / image1 image · 1K
nano-banana-2From $0.16 / image1 image · 1K
nano-banana-proFrom $0.40 / image1 image · 1K
midjourney-v8From $0.18 / 4 images4 images per run · 1K
gpt-image-2.5From $0.02 / image1 image · low quality · 1K
gpt-image-2From $0.02 / image1 image · low quality · 1K
seedream-5.0-proFrom $0.14 / image1 image · 1K
seedream-5.0-liteFrom $0.07 / image1 image · 1K
ideogram/remove-background$0.01 / image1 JPEG, PNG, or WebP · transparent PNG
minimax-h3-maxFrom $0.25 / video5 seconds · 480p
seedance25From $0.83 / video4 seconds · 480p
midjourney-v8From $0.18 / 4 videos4 × 5 seconds per run · 480p
pixverseFrom $0.09 / second720p · audio off
Qwen 3.8 family$0.00117/secondBilled by model execution time
Other LLM modelsUsage-basedFinal USD charge is returned in billing.amount_usd
How billing works: image prices multiply by numImages. Video cost changes with duration, resolution, audio, and mode. Qwen 3.8 is billed by model execution time. Requests reserve balance up front, refund the unused amount, and return the final charge in billing.amount_usd.
Image API

Image generation models

Generate new images or edit references through one JSON endpoint. Switch models without rebuilding your integration.

nano-banana-pro

Nano Banana Pro

High-fidelity generation and editing with up to 4K output.

From $0.40 / image

nano-banana-2.1

Nano Banana 2.1

Google's newest Nano Banana: up to 4K, extreme 8:1 to 1:8 ratios, up to 14 references, and optional web search grounding.

From $0.16 / image

nano-banana-2

Nano Banana 2

Fast, cost-efficient generation for iterative creative work.

From $0.16 / image

gpt-image-2.5

GPT Image 2.5

OpenAI's newest image model: five quality tiers, scoped edits, and transparent cut-outs. Add gpt-image-2.5-sunburst for the slower, finer-detail variant.

From $0.02 / image

midjourney-v8

Midjourney V8

Midjourney V8.2 with stylize, chaos, weird, and style references. Every run returns 4 images; native 2K HD optional.

From $0.18 / 4 images

gpt-image-2

GPT Image 2

Precise instruction following with selectable quality tiers.

From $0.02 / image

seedream-5.0-pro

Seedream 5 Pro

High-fidelity ByteDance generation and reference-guided editing.

From $0.14 / image

seedream-5.0-pro

Seedream V5 Pro Unrestricted

The catalog experience for Seedream V5 Pro; use the supported Pro model ID through the API.

From $0.14 / image

ideogram/remove-background

Ideogram Remove Background

Remove backgrounds while preserving hair, glass, text, and fine edges in a transparent PNG.

$0.01 / image

Browse all model pages →Endpoint: POST /v1/images

Generate or edit an image

Send a prompt for text-to-image. Add one or more public image URLs in images to edit or guide the result.

cURL
curl -X POST "https://api.imageat.com/v1/images" \
  -H "Authorization: Bearer $IMAGEAT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nano-banana-pro",
    "prompt": "A cinematic product photograph on sculpted stone",
    "aspectRatio": "1:1",
    "resolution": "2K",
    "outputFormat": "png",
    "numImages": 1
  }'
Response · 200
{
  "url": "https://cdn.imageat.com/generated/image.png",
  "urls": ["https://cdn.imageat.com/generated/image.png"],
  "prompt": "A cinematic product photograph on sculpted stone",
  "generationId": "generation_01...",
  "creditsUsed": 4
}

Image model guide

All image entries shown on Models use POST /v1/images. Copy the request above and choose the model ID below.

Model pageAPI model valueUseful controls
Nano Banana Pronano-banana-proresolution, aspectRatio, images, numImages
Nano Banana 2.1nano-banana-2.1resolution, aspectRatio (incl. 8:1–1:8, auto), up to 14 images, enableWebSearch
Nano Banana 2nano-banana-2resolution, aspectRatio, images, numImages
GPT Image 2.5gpt-image-2.5 or gpt-image-2.5-sunburstquality (low–max), resolution, up to 16 images, transparentBackground
Midjourney V8midjourney-v84 images per run, resolution (1K or 2K HD), aspectRatio, images, stylize, chaos, weird, seed, styleReferenceUrl
GPT Image 2gpt-image-2quality, resolution, images, outputFormat
Seedream 5seedream-5.0-pro or seedream-5.0-literesolution, aspectRatio, images
Seedream V5 Pro Unrestrictedseedream-5.0-proUse the supported Pro API route for this catalog entry
Switch image models
const response = await fetch("https://api.imageat.com/v1/images", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.IMAGEAT_API_KEY}`,
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    model: "gpt-image-2.5", // replace with any image model ID above
    prompt: "Editorial product photograph, soft studio light",
    resolution: "1K",
    quality: "low",
    aspectRatio: "1:1",
    numImages: 1
  })
})

const result = await response.json()

Image request parameters

ParameterDefaultDescription
modelnano-banana-pronano-banana-pro, nano-banana-2.1, nano-banana-2, gpt-image-2.5, gpt-image-2.5-sunburst, midjourney-v8, gpt-image-2, seedream-5.0-pro, or seedream-5.0-lite
promptrequiredGeneration or editing instructions
images—Optional public URLs or base64 data URLs, each under 10 MB
aspectRatio1:11:1, 16:9, 9:16, 4:3, 3:4, 3:2, or 2:3. GPT Image 2.5 renders it as exact pixels and squares off anything it cannot match. Nano Banana 2.1 also takes 21:9, 5:4, 4:5, 4:1, 1:4, 8:1, 1:8, and auto
resolution1K1K, 2K, or 4K
qualitymediumGPT Image 2: low, medium, or high. GPT Image 2.5 adds xhigh and max
transparentBackgroundfalseGPT Image 2.5 only: returns a cut-out with no background, in png or webp
outputFormatpngpng, jpeg, or webp
enableWebSearchfalseNano Banana models: ground the image in a live web search (Nano Banana 2.1 adds $0.03 per request)
numImages1Generate 1–4 outputs. Ignored by midjourney-v8, which always returns 4

The API keeps provider routing behind imageat. Your application uses the same model IDs, authentication, credits, and response shape.

Midjourney V8

Use midjourney-v8 (Midjourney V8.2) on both POST /v1/images and POST /v1/videos. No Midjourney subscription is needed. Every run returns 4 outputs, and the price covers all four, so read urls rather than url.

  • Images ($0.18 per run of 4, $0.26 at 2K HD): text-to-image, or pass an image in images[0] to re-imagine it. The request is synchronous and takes about two minutes. numImages is ignored.
  • Video ($0.18 per run of 4 at 480p, $0.52 at 720p): image-to-video only. Each run makes four 5-second clips from imageUrl.
ParameterApplies toDescription
promptimage (required), video (optional)Up to 1,024 characters
aspectRatioimage1:1, 9:16, 16:9, 4:3, 3:4, 2:3, 3:2, 9:21, or 21:9. Other ratios snap to the nearest one
resolutionimage1K, or 2K for native 2K HD
imagesimageOptional. images[0] is re-imagined (image-to-image); images[1] is used as a style reference
styleReferenceUrlimageOptional public URL of a style reference image (same as images[1])
stylize / chaos / weirdimageOptional, 0–1000 / 0–100 / 0–3000
seedimageOptional non-negative integer
imageUrlvideo (required)Public URL of the image to animate
resolutionvideo480p or 720p
motionvideolow or high
cURL · image
curl -X POST "https://api.imageat.com/v1/images" \
  -H "Authorization: Bearer $IMAGEAT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "midjourney-v8",
    "prompt": "A lighthouse on a basalt cliff at dusk, painterly, volumetric fog",
    "aspectRatio": "16:9",
    "resolution": "1K",
    "stylize": 250
  }'
Response · 200
{
  "url": "https://cdn.imageat.com/generated/mj-1.png",
  "urls": [
    "https://cdn.imageat.com/generated/mj-1.png",
    "https://cdn.imageat.com/generated/mj-2.png",
    "https://cdn.imageat.com/generated/mj-3.png",
    "https://cdn.imageat.com/generated/mj-4.png"
  ],
  "prompt": "A lighthouse on a basalt cliff at dusk, painterly, volumetric fog",
  "generationId": "generation_01...",
  "generationIds": ["generation_01...", "generation_02...", "generation_03...", "generation_04..."]
}
cURL · video
curl -X POST "https://api.imageat.com/v1/videos" \
  -H "Authorization: Bearer $IMAGEAT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "midjourney-v8",
    "imageUrl": "https://example.com/still.jpg",
    "prompt": "Slow push-in, fog drifting past the lighthouse",
    "resolution": "480p",
    "motion": "low"
  }'

The video request returns taskId and generationId like every other video model. When GET /v1/videos/status reports completed, urls holds all four clips (url is the first). Webhook payloads carry urls too.

Video API

Video generation models

Every video model shown on the Models page uses the same asynchronous endpoint and polling flow. Choose the model ID, then supply the controls supported by that model.

ModelModel IDPriceGuide
MiniMax H3 Max
5–15s · 480p/768p
minimax-h3-maxFrom $0.25Text, image, or first/last-frame video
Seedance 2.5
4–30s · 480p/720p
seedance25From $0.83Text, image, reference, or frame-controlled video
Midjourney V8
4 × 5s · 480p/720p
midjourney-v8From $0.18Image-to-video, 4 clips per run
Pixverse V6
1–15s · up to 1080p
pixverseFrom $0.09/secText/image video with optional audio
Open model playground →Browse all imageat models →
One endpoint, four guides. Use minimax-h3-max for 5–15 second text, image, and first/last-frame generation; seedance25 for 4–30 seconds and reference inputs; midjourney-v8 to animate one image into four 5-second clips; or pixverse for flexible 1–15 second video with optional audio.MiniMax H3 Max API page →Midjourney V8 model page →Pixverse V6 model page →

Create a Seedance 2.5 video

POST /v1/videos

The endpoint accepts JSON and returns a task ID. Keep the API key on your server and poll the status endpoint until a CDN video URL is returned.

cURL
curl -X POST "https://api.imageat.com/v1/videos"   -H "Authorization: Bearer $IMAGEAT_API_KEY"   -H "Content-Type: application/json"   -d '{
    "model": "seedance25",
    "providerVariant": "more",
    "prompt": "A paper airplane glides through a softly lit studio",
    "duration": "5s",
    "resolution": "720p",
    "aspectRatio": "adaptive",
    "generateAudio": true,
    "outputFormat": "mp4",
    "watermark": false
  }'
Response · 200
{
  "status": "pending",
  "taskId": "2750591",
  "generationId": "a45ooNh1FBLgv6bjy7My",
  "prompt": "A paper airplane glides through a softly lit studio"
}

For image-to-video, send imageUrl. For a directed transition, send both firstFrameUrl and lastFrameUrl.

Video model request examples

Change only the model-specific fields shown here. Every request returns either a completed URL or the taskId/generationId pair used by the polling example below.

MiniMax H3 Max
{
  "model": "minimax-h3-max",
  "prompt": "A slow cinematic dolly through a sunlit garden",
  "duration": "5s",
  "resolution": "480p",
  "aspectRatio": "16:9",
  "generateAudio": false
}
Seedance 2.5
{
  "model": "seedance25",
  "providerVariant": "more",
  "prompt": "A paper airplane glides through a softly lit studio",
  "duration": "5s",
  "resolution": "720p",
  "aspectRatio": "adaptive",
  "generateAudio": true
}
Midjourney V8 (4 clips per run)
{
  "model": "midjourney-v8",
  "imageUrl": "https://example.com/still.jpg",
  "prompt": "Slow push-in, fog drifting past the lighthouse",
  "resolution": "480p",
  "motion": "low"
}
Pixverse V6
{
  "model": "pixverse",
  "prompt": "Neon reflections ripple across a rainy city street",
  "duration": "5s",
  "resolution": "720p",
  "aspectRatio": "16:9",
  "generateAudio": false
}

Seedance 2.5 request parameters

ParameterDefaultDescription
modelrequiredUse seedance25
providerVariantstandardUse more for this Seedance 2.5 endpoint
promptrequiredScene, motion, camera, style, and audio direction
imageUrl—Optional first frame for image-to-video
firstFrameUrl / lastFrameUrl—Send both URLs for first-and-last-frame generation
duration5sWhole seconds from 4s through 30s
resolution720p480p or 720p
aspectRatioadaptiveadaptive, 16:9, 9:16, 4:3, 3:4, 1:1, or 21:9
generateAudiotrueGenerate synchronized audio; no additional credit surcharge
outputFormatmp4mp4 for broad compatibility or mov for compatible post-production workflows
watermarkfalseOptional boolean watermark control

Poll video status

GET /v1/videos/status?taskId={taskId}&generationId={generationId}

Poll every 5–10 seconds while status is pending. Reuse the same Bearer API key used to create the generation.

cURL
curl "https://api.imageat.com/v1/videos/status?taskId=2750591&generationId=a45ooNh1FBLgv6bjy7My"   -H "Authorization: Bearer $IMAGEAT_API_KEY"
Completed response
{
  "status": "completed",
  "url": "https://cdn.imageat.com/generated/video.mp4"
}

A failed task returns { "status": "failed", "error": "..." }. Failed provider generations are handled by the platform's refund workflow.

Cancel an unfinished task with POST /v1/videos/cancel and a JSON body containing both taskId and generationId. Ownership is verified before the provider task is cancelled and unused balance is refunded.

Pass a public HTTPS URL as webhook_url when creating a video to receive video.completed or video.failed. Optionally pass a 16–256 character webhook_secret; it is encrypted at rest and deliveries include an HMAC-SHA256 x-imageat-signature.

New · OpenAI

GPT-6 Astra

Use openai/gpt-6-astra for long-context reasoning, image input, web search, and native tool-calling workflows.

Open model guide
GPT-6 Astra
curl -X POST "https://api.imageat.com/v1/chat/completions" \
  -H "Authorization: Bearer $IMAGEAT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"openai/gpt-6-astra","messages":[{"role":"user","content":"Plan this agent workflow"}],"reasoning":"high","verbosity":"medium","web_search":true}'

Astra also accepts OpenAI-format tools, tool_choice, parallel_tool_calls, and image URL content parts. Maximum output is currently capped at 4,000 tokens by imageat.

LLM API

Chat completions

Generate chat and reasoning responses through an OpenAI-compatible endpoint using the same imageat API key. One endpoint serves every LLM in the catalog — switch models by changing the model field.

Flagship uncensored model: qwen/qwen3.8-27b-uncensored · Context window: 262,144 tokens · Output limit: 4,000 tokens

The same advanced thinking and sampling controls are supported by qwen/qwen3-8-27b, qwen/qwen3-8-27b-obliterated, and unsloth/qwen3-8-flash-next-gguf.

Model IDNameProvider
qwen/qwen3.8-27b-uncensoredQwen 3.8 27B UncensoredQwen
openai/gpt-6-astraGPT-6 AstraOpenAI
unsloth/qwen3-8-flash-next-ggufQwen 3.8 Flash Next GGUFUnsloth
qwen/qwen3-8-27b-obliteratedQwen 3.8 27B ObliteratedQwen
qwen/qwen3-8-27bQwen 3.8 27BQwen
google/gemini-3.8-flashGemini 3.8 FlashGoogle
google/gemini-3.7-flashGemini 3.7 FlashGoogle
openai/gpt-5-6-solGPT 5.6 SolOpenAI
openai/gpt-5-6-terraGPT 5.6 TerraOpenAI
openai/gpt-5-6-lunaGPT 5.6 LunaOpenAI
xai/grok-4-5Grok 4.5xAI
zhipu/glm-4.7-flashGLM 4.7 FlashZhipu AI
openai/gpt-oss-20bGPT-OSS 20BOpenAI
claude/sonnet-5Claude Sonnet 5Anthropic
claude/opus-5Claude Opus 5Anthropic

A request for an ID outside this list is rejected with 400 Unsupported model, and the response lists the accepted IDs.

Uncensored playground →27B playground →Obliterated playground →Flash Next GGUF playground →Browse all models →

Create a chat completion

POST /v1/chat/completions

The request follows the familiar OpenAI chat-completions shape. Set stream to true for a text/event-stream response, or omit it for a single JSON completion.

cURL
curl -X POST "https://api.imageat.com/v1/chat/completions" \
  -H "Authorization: Bearer $IMAGEAT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen/qwen3.8-27b-uncensored",
    "messages": [
      {"role": "system", "content": "You are a concise product strategist."},
      {"role": "user", "content": "Suggest three retention features for Imageat."}
    ],
    "enable_thinking": false,
    "temperature": 0.7,
    "max_tokens": 500
  }'

Long or thinking-enabled requests can take several minutes. Keep the HTTP connection open until the final completion is returned.

OpenAI-compatible clients

Any tool that speaks the OpenAI API — opencode, Cline, Continue, the OpenAI SDKs, the Vercel AI SDK — works by pointing its base URL at https://api.imageat.com/v1 and using the imageat key as the API key. Include the /v1: https://api.imageat.com on its own returns 404.

Environment
export OPENAI_BASE_URL="https://api.imageat.com/v1"
export OPENAI_API_KEY="$IMAGEAT_API_KEY"

GET /v1/models lists every model ID this endpoint accepts.

POST /v1/responses supports the newer Responses API shape, including instructions, input items, function tools, structured function-call output, and Responses-style SSE events. This is useful for Codex-style agents and SDKs that prefer Responses over Chat Completions.

Responses API
curl -X POST "https://api.imageat.com/v1/responses" \
  -H "Authorization: Bearer $IMAGEAT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen/qwen3.8-27b-uncensored",
    "input": "Give me a two-line launch checklist",
    "stream": true
  }'

Streaming responses are OpenAI-style chat.completion.chunk events terminated by data: [DONE]. The model runs as a batch task, so the text is buffered until it finishes and then streamed out; the connection is held open with SSE comment pings in the meantime.

Agent clients may send OpenAI-format tools and tool_choice. Function selections are returned as structured message.tool_calls (or streamed delta.tool_calls) with finish_reason: "tool_calls"; send the tool result back in a role: "tool" message to continue the loop.

For Responses API streams, consume typed events such as response.output_text.delta, response.function_call_arguments.done, and response.completed. To continue a tool loop, include the prior function_call and matching function_call_output items in the next request's input.

Stored Responses support previous_response_id, GET /v1/responses/{response_id}, DELETE /v1/responses/{response_id}, and POST /v1/responses/{response_id}/cancel. Set store: false for stateless requests.

Production reliability

Send a unique Idempotency-Key on non-streaming image, video, chat, and Responses requests. Keys are scoped to the credential and endpoint, retained for 24 hours, and replay the original response without charging twice.

Every v1 response includes x-request-id. You may supply x-client-request-id for correlation. Rate-limit responses include Retry-After and rate-limit headers.

Errors use an OpenAI-style { error: { message, type, param, code } } envelope on the new lifecycle and reliability paths. Token usage in Responses includes estimated input/output counts when the upstream provider does not expose tokenizer totals.

Download OpenAPI 3.1 schema →Image model discoveryVideo model discovery

Agent client configuration

OpenCode can use imageat as its model provider, while Claude, Cursor, VS Code/Copilot, Cline, Continue, and Roo Code can connect to the remote MCP server at https://mcp.imageat.com/mcp.

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "imageat": {
      "npm": "@ai-sdk/openai-compatible",
      "options": {
        "baseURL": "https://api.imageat.com/v1",
        "apiKey": "{env:IMAGEAT_API_KEY}"
      },
      "models": {
        "qwen/qwen3.8-27b-uncensored": { "name": "Qwen 3.8" }
      }
    }
  },
  "model": "imageat/qwen/qwen3.8-27b-uncensored"
}
.vscode/mcp.json
{
  "servers": {
    "imageat": {
      "type": "http",
      "url": "https://mcp.imageat.com/mcp"
    }
  }
}

MCP 0.4 exposes typed tool results, safety annotations, model/account/recent-generation resources, reusable prompts, and an experimental imageat_generate_video_task lifecycle alongside the backwards-compatible video status tool.

Request parameters

ParameterDefaultDescription
modelQwen model IDAny ID returned by GET /v1/models
messagesrequiredSystem, user, and assistant messages
streamfalsetrue returns OpenAI-style server-sent events
tools—OpenAI-format function definitions available to the model
tool_choiceautoauto, none, required, or a specific function
enable_thinkingtrueDeeper reasoning or shorter direct answers
temperature0.7Output randomness
top_p / top_k0.95 / 20Probability sampling controls
max_tokens1000Maximum output tokens; capped at 4,000
min_tokens0Minimum output-token target
repetition_penalty1.0Reduces repeated phrases and loops
length_penalty1.0Biases toward shorter or longer output
stop—String or array of stop sequences
seed123456Optional repeatability seed
quantization / do_sampletrue / trueEfficiency and sampling toggles
user / session_id—Optional conversation identifiers

model, messages, max_tokens, and stream apply to every model. The sampling controls below them — enable_thinking, temperature, top_p, top_k, the penalties, stop, seed, quantization, and do_sample — are available on the Qwen 3.8 family; other catalog models ignore them.

Response and credit billing

Response · 200
{
  "id": "chatcmpl_2747897",
  "object": "chat.completion",
  "model": "qwen/qwen3.8-27b-uncensored",
  "choices": [{
    "index": 0,
    "message": { "role": "assistant", "content": "..." },
    "finish_reason": "stop"
  }],
  "credits_used": 2,
  "billing": {
    "reserved_credits": 3,
    "provider_cost_usd": 0.0324,
    "elapsed_seconds": 54
  }
}

Read the generated text from choices[0].message.content.

Qwen 3.8 27B Uncensored reserves three credits and settles at 1–3 credits. The other Qwen 3.8 and catalog models reserve ten and settle at 1–10 credits. Unused reserved credits are returned automatically, and failed requests receive a full refund.

LLM errors include 400 for invalid messages or an unsupported model, 402 for insufficient balance, 429 for rate limits, and 502 when the provider request fails.

Browse the Qwen playgrounds →

Run lifecycle

A run moves through these states:

  • queued — accepted, waiting for a worker
  • running — worker executing nodes
  • completed — all outputs ready
  • failed — one or more nodes failed; check error
  • cancelled — cancelled before completion

Credits are reserved at run creation and settled (refund of unused portion) once the run completes or fails. The final response includes credits_used.

Create a run

POST /v1/workflows/{workflow_id}/runs — start a run of a published workflow.

Request
POST https://api.imageat.com/v1/workflows/wf_abc123/runs
Authorization: Bearer iat_live_...
Content-Type: application/json
Idempotency-Key: 8f3b... (optional)

{
  "nodes": [],
  "edges": [],
  "webhook": {
    "url": "https://your-app.com/webhook/imageat",
    "secret": "whsec_..."
  }
}

If you pass empty nodes/edges, the saved (published) workflow graph is used. Pass them to override inputs (e.g. a different prompt) per-run.

Response · 202
{
  "run_id": "run_01HX...",
  "status": "queued"
}

Idempotency: send the same Idempotency-Key to safely retry a request — the same run is returned instead of creating a duplicate.

Poll a run

GET /v1/runs/{run_id}

Response · 200
{
  "run_id": "run_01HX...",
  "status": "completed",
  "outputs": {
    "node_output_1": {
      "type": "image",
      "value": "https://cdn.imageat.com/runs/run_01HX.../node_output_1.png"
    }
  },
  "credits_used": 12,
  "created_at": "2026-05-22T10:01:24Z",
  "completed_at": "2026-05-22T10:01:38Z"
}

Poll every 1–2 seconds while the status is queued or running. For faster feedback, use SSE.

Server-sent events (live updates)

GET /v1/runs/{run_id}/events

Returns a text/event-stream. Each event is a JSON line emitted as nodes start, finish, or the run terminates. The stream closes after run_complete or run_failed.

Event examples
data: {"event":"node_start","node_id":"n1"}

data: {"event":"node_complete","node_id":"n1","output":{...}}

data: {"event":"run_complete","run_id":"run_01HX..."}

Cancel a run

POST /v1/runs/{run_id}/cancel

Cancels a queued or running run. Reserved credits are refunded; already-executed node costs are kept.

Response · 200
{ "ok": true }

Outputs & CDN URLs

Final outputs are mirrored to cdn.imageat.com so URLs are stable and fast. The path format is:

https://cdn.imageat.com/runs/{run_id}/{node_id}.{ext}

Each output entry has a type describing how to consume the value:

typevalue
imageSingle CDN image URL
imagesArray of image URLs
videoCDN video URL (mp4)
textPlain text (e.g. LLM output)

Webhooks

Pass a webhook object on run creation to receive a signed POST when the run terminates — no polling required.

Webhook payload
POST https://your-app.com/webhook/imageat
X-Imageat-Signature: t=1716372924,v1=sha256(...)
Content-Type: application/json

{
  "event": "run_complete",
  "run_id": "run_01HX...",
  "status": "completed",
  "outputs": { ... },
  "credits_used": 12
}

Verify X-Imageat-Signature using your webhook secret: compute HMAC-SHA256 over {timestamp}.{raw_body} and compare in constant time.

Error codes

statusmeaning
401Missing or invalid API key
402Insufficient credits — response includes balance and required
403Run belongs to a different account
404Workflow or run not found, or workflow not published
422Invalid request body (bad nodes/edges)
500Internal worker error — safe to retry with the same Idempotency-Key

Code examples

A full create → poll → read flow in three languages.

cURL
# 1. Create a run
RUN=$(curl -s -X POST https://api.imageat.com/v1/workflows/wf_abc123/runs \
  -H "Authorization: Bearer $IMAGEAT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"nodes": [], "edges": []}' | jq -r .run_id)

# 2. Poll until complete
while true; do
  RES=$(curl -s https://api.imageat.com/v1/runs/$RUN \
    -H "Authorization: Bearer $IMAGEAT_API_KEY")
  STATUS=$(echo "$RES" | jq -r .status)
  [ "$STATUS" = "completed" ] && echo "$RES" | jq .outputs && break
  [ "$STATUS" = "failed" ] && echo "$RES" | jq . && exit 1
  sleep 2
done
Node.js
const API_KEY = process.env.IMAGEAT_API_KEY!;
const BASE = "https://api.imageat.com/v1";

async function runWorkflow(workflowId: string) {
  const create = await fetch(`${BASE}/workflows/${workflowId}/runs`, {
    method: "POST",
    headers: {
      Authorization: `Bearer ${API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ nodes: [], edges: [] }),
  });
  if (!create.ok) throw new Error(`create failed: ${create.status}`);
  const { run_id } = await create.json();

  while (true) {
    await new Promise((r) => setTimeout(r, 1500));
    const poll = await fetch(`${BASE}/runs/${run_id}`, {
      headers: { Authorization: `Bearer ${API_KEY}` },
    });
    const data = await poll.json();
    if (data.status === "completed") return data;
    if (data.status === "failed") throw new Error(data.error);
  }
}

const result = await runWorkflow("wf_abc123");
console.log(result.outputs, result.credits_used);
Python
import os, time, requests

API_KEY = os.environ["IMAGEAT_API_KEY"]
BASE = "https://api.imageat.com/v1"
H = {"Authorization": f"Bearer {API_KEY}"}

def run_workflow(workflow_id: str) -> dict:
    r = requests.post(
        f"{BASE}/workflows/{workflow_id}/runs",
        headers={**H, "Content-Type": "application/json"},
        json={"nodes": [], "edges": []},
    )
    r.raise_for_status()
    run_id = r.json()["run_id"]

    while True:
        time.sleep(1.5)
        data = requests.get(f"{BASE}/runs/{run_id}", headers=H).json()
        if data["status"] == "completed":
            return data
        if data["status"] == "failed":
            raise RuntimeError(data.get("error", "run failed"))

result = run_workflow("wf_abc123")
print(result["outputs"], result["credits_used"])
MCP Server

imageat MCP Server

Use imageat directly from AI clients like Claude Desktop, Cursor, and any other tool that speaks the Model Context Protocol — no code required.

Overview

The @imageat/mcp package is a Model Context Protocol (MCP) server. Once connected, your AI client gains tools to generate images, generate video, and run every imageat edit feature — all billed against your account credits. Edit tools are discovered live, so new features appear automatically.

Step-by-step setup for Claude, ChatGPT, Cursor, OpenClaw, Hermes, and other clients: imageat MCP setup guide.

Published on npm: npmjs.com/package/@imageat/mcp

Grok Bot & terminal agents

Grok Bot: add a custom remote HTTPS MCP server named imageat at https://mcp.imageat.com/mcp, then complete the imageat sign-in and authorization. Ask the Bot to discover tools and check your balance before your first generation.

CLI: install Node.js 18+ and run npm i -g @imageat/mcp. Register imageat-mcp as a stdio server in your terminal agent's MCP settings, with your Projects API key in IMAGEAT_API_KEY. Restart or reload the agent to discover tools.

The command is an MCP server, so your agent manages its input and output. Authentication uses the API key; there is no separate imageat CLI login command. Built-in MCP workflow prompts include product visuals, image animation, and social campaigns.

Direct terminal API request
read -r -s IMAGEAT_API_KEY
export IMAGEAT_API_KEY
curl -X POST "https://api.imageat.com/v1/images" \
  -H "Authorization: Bearer $IMAGEAT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"seedream-5.0-pro","prompt":"A cinematic product photograph","resolution":"2K","numImages":1}'
unset IMAGEAT_API_KEY

This Bash/zsh example reads your key without echoing it, generates one paid image, and returns its URL. For videos, use the video API examples in this guide or the MCP video tools.

Copy the complete agent setup prompts →

Install

You only need Node.js 18+ and an API key from your Projects page. Add the server to your client's MCP config:

Claude Desktop · claude_desktop_config.json
{
  "mcpServers": {
    "imageat": {
      "command": "npx",
      "args": ["-y", "@imageat/mcp"],
      "env": {
        "IMAGEAT_API_KEY": "iat_live_xxxxxxxxxxxx"
      }
    }
  }
}

On macOS this file lives at ~/Library/Application Support/Claude/claude_desktop_config.json. Restart the client after editing. The imageat tools will appear in the tools menu.

env varnotes
IMAGEAT_API_KEYRequired. Your iat_live_ key.
IMAGEAT_BASE_URLOptional. Defaults to https://imageat.com.

claude.ai & ChatGPT (remote)

The npx setup above is a local process, so it works in desktop apps (Claude Desktop, Cursor). Browser clients like claude.ai and ChatGPT instead connect to a remote MCP endpoint over Streamable HTTP:

Remote MCP endpoint
https://mcp.imageat.com/mcp
ClientHow to add
claude.aiSettings → Connectors → Add custom connector → paste the URL above.
ChatGPTConnectors / Developer mode → add server → paste the URL above.

When the client asks for the connector's authorization, provide your iat_live_ key — it's sent as a Bearer token and scoped to your account's credits. Same tools, same billing as the desktop setup.

Tools

The server exposes these tools to the connected client:

toolwhat it does
imageat_generate_imageText-to-image / image-to-image. Returns CDN image URL(s).
imageat_generate_videoText-to-video / image-to-video. Returns a CDN mp4 URL.
imageat_check_creditsSpendable balance — subscription credits and prepaid API balance.
imageat_edit_*One tool per edit feature — remove background, object eraser, relight, virtual try-on, city teleport, inpaint, and more. Fetched live, so new features appear automatically.

Same auth and billing as the REST API — every call is metered against the API key's account, and errors return clear messages (e.g. 402 with your balance when out of credits).

Need help? Visit the help center.Get an API key →
imageat

Transform your ideas into photos and videos with imageat. Our agentic AI generates visuals from text descriptions — chain models, add logic, and build production-ready workflows.

Trustpilot

Product

  • AI Image Generator
  • AI Wallpaper Generator
  • AI Image Generators
  • AI Stock Image Generator
  • AI Portrait Director
  • AI Photo Retakes
  • AI Art Generator
  • AI Illustration Generator
  • AI Logo Generator
  • AI Poster Generator
  • AI Book Cover Generator
  • AI QR Code Generator
  • AI Illusion Generator
  • Instagram Post Generator
  • Instagram Story Generator
  • LinkedIn Post Generator
  • AI TikTok Video Generator
  • AI Instagram Reels Generator
  • AI YouTube Shorts Generator
  • AI Photo Generator
  • AI Video Generator
  • Higgsfield Genjutsu
  • Image to Video AI
  • AI Product Photo Generator
  • AI Product Post Generator
  • AI Photo Editor
  • AI Text Remover
  • AI Tattoo Generator
  • AI Relight
  • AI Angles
  • AI Video Edit
  • AI Edit Tools
  • Editor
  • Remove Background
  • AI Avatar
  • Image Upscaler
  • Face Swap Generator
  • AI Dance Video Generator
  • AI Motion Transfer
  • Seedance 2.5 Video Generator
  • Seedance 2.0 Video Generator
  • AI Headshot Generator
  • Headshot Styles
  • Prompt Generator
  • Plastic Surgery AI
  • AI Haircut Generator
  • Wedding Bride Selfie
  • Flash Car Nightlife
  • GTA 6 AI Photo Generator
  • Halloween Backgrounds
  • Halloween AI Photos
  • Renaissance Pet Portrait
  • Vintage Photobooth Strip
  • AI Voice Generator
  • AI Song Generator
  • AI Podcast Generator
  • AI Lip Sync
  • AI UGC Generator
  • Trend Studio
  • AI Infographic Generator
  • AI Influencer Generator
  • AI Influencer Studio
  • Marketing Studio
  • AI Tools

Resources

  • AI Photo Packs
  • Blog
  • Community
  • Explore
  • Characters
  • Trends
  • World Cup 2026 Videos
  • Prompts
  • Templates
  • AI Benchmark
  • Compare

Company

  • Features
  • Pricing
  • Enterprise
  • About
  • Affiliate Program
  • Affiliate Terms
  • API
  • AI Models
  • MCP Server
  • Agent Skill
  • GPT Dots × imageat
  • Image Generation API
  • Video Generation API
  • MCP Image Generator
  • MCP Video Generator
  • Help Center
  • Status
  • Contact

Discover

Free Tools

  • Image Resizer
  • Image Compressor
  • Image Converter
  • Metadata Remover
  • Watermark Remover
  • Image to JSON

Popular Packs

  • AI Dating Photos
  • LinkedIn Headshots
  • CEO Headshots
  • Actor Headshots
  • Instagram Photos
  • AI Selfies
  • Old Money Photos
  • Wedding Photos
  • AI Makeup Try-On

© 2026 imageat, a service operated by INFINITE PHASE LLC. All rights reserved.

INFINITE PHASE LLC, 8 The Green, Suite A, Dover, DE 19901 USA

Help CenterPrivacyTermsRefundSite DirectoryAll systems operational
imageat