Skip to content

How ImageStep works

ImageStep is the image step for your automations: a programmable pipeline — generate, edit, remove a background, upscale, resize, convert, render a template, read metadata — that a program calls and a person audits. The caller is a script, a workflow or an agent, so everything is built for that reader: one catalogue to read instead of a list to remember, a price before anything is spent, an error that says whether to retry, and results handed back as ids and URLs rather than bytes.

Four ideas, one API key

Assets
Every image is an asset with a stable id. Upload bytes or hand over a URL; carry the id from step to step; publish it and it gets a CDN URL that never changes.
Ops
Atomic operations — one thing each, a closed parameter set, all in one live catalogue. AI ops run on a model you can override and are charged per item; deterministic ones — resize, convert, crop and the rest — are free on paid plans.
Presets
Your own chain of ops, saved and versioned. Run a preset over a batch and every output looks the same — this month and next.
Jobs
Running an op or a preset over your assets makes a job: per-item progress, a dry run for the exact price, cancellation, resume, and a signed webhook when it is done.

Two more, for when you need them: templates render HTML and data into images — an OG image per post, a card per row — and the synchronous endpoints run a deterministic op on bytes you are holding and store nothing at all.

How a call goes

Every call carries your key as Authorization: ApiKey is_sk_… — you create one on /keys — and every piece of work goes the same four steps:

  1. Get the image inupload it, or give the service a URL to fetch — you get an asset id
  2. Price itthe same request with ?dryRun=true — the exact cost, creating nothing
  3. Run itone op or a saved preset, over one asset or five hundred — you get a job
  4. then take the result:
    • waitin the same call
    • pollthe job, until it settles
    • webhooksigned, when it ends

The dry run refuses a bad request exactly as the submit would, and says whether your balance covers it. Each output is a new asset: publish it for a permanent URL, or download the bytes.

Step 3 on every surface — one op on an asset you already have, waiting for the result in the same call:

// pnpm add imagestep
const job = await client.ops.removeBg("ast_1a2b", { wait: true });
const [out] = await client.jobs.outputs(job);

The quickstart does all four in five minutes — from the SDKs, the CLI, curl or an MCP client — and then shows the one-call road for when you only want the bytes back.

Ways to call it

Every surface enumerates the same catalogue and returns the same job and asset shapes, so what you learn in one carries to the next. Which one fits is a question of who makes the call:

Workflows & agents — a host makes the call

Your code — you write the call

An AI agent choosing between them — MCP, the CLI and its skill, or REST — starts on the agents page.

Reference

  • Ops & models — the live catalogue with every parameter and price.
  • Recipes — presets to copy: social sizes, product shots, web, print, looks.
  • Preset steps — the engine's registry, for a step no op covers.
  • Errors, retries & limits — the envelope, the closed code set, idempotency, rate limits.
  • Webhooks — signed job events, delivery and retries.
  • The console — what a person signs in to do, page by page, and the API call behind each.
  • API reference — every endpoint, generated from the service.

Plans, per-op prices and every model's price next to the provider's: /pricing.