One call generates.

The same models, the same prices, the same ledger — reachable from your own code.

Request
POST https://vistreo.saascode.ai/api/v1/connect/generate Authorization: Bearer vistreo_live_••••••••4a2f content-type: application/json { "modality": "image", "model_slug": "your-model-slug", "prompt": "a dancer mid-leap on a rooftop at dusk" }
Response
{ "ok": true, "result": { "job_id": "…", "state": "reserved", "modality": "image", "model_slug": "your-model-slug", "credits_reserved": …, "estimated_seconds": 12 } }
The asset the call produced

The whole studio.

POST /api/v1/connect/generateImage, video or audio — one verb, the modality is a field.
GET /api/jobs/{id}The state machine, event by event, same as the app shows.
POST your callbackWe call you when the job lands, so you do not poll.
GET /api/modelsThe live catalog with each model's price in credits.
GET /api/credits/ledgerThe ledger, entry by entry, including refunds.
MCP connect_generateThe same verb as an MCP tool, for an agent that already speaks it.
Callback contract
// on the request "callback_url": "https://your-app.example/hooks/generation" // on delivery POST https://your-app.example/hooks/generation x-vistreo-signature: sha256=<HMAC-SHA256 of the raw body, keyed with your secret> x-vistreo-event: job.completed content-type: application/json

The signature is computed over the raw body, so you verify it the way you would any webhook. Delivery is best-effort and never blocks the job: a job's state is always readable at GET /api/jobs/{id}.

A key takes one click.

Create it in settings, choose read or write, copy it once. No application, no approval.

Get a key
Local scripts
vistreo_live_••••••••4a2f
readwrite

Shown in full once, at creation. Masked everywhere after that.

Which plans include it

The API is a plan capability and it runs at the plan's own concurrency. A plan that does not include it yet is shown, not hidden.

Create with Vistreo MCP in Claude and Codex

The same generate call, as a tool inside your AI client. Connect once with a personal API key; every generation is priced and debited exactly as it is in the studio, and lands in your library with its lineage.

Claude Code and Claude Desktop
export VISTREO_API_KEY=vk_...   # a write-scope key from Settings > API keys
claude mcp add --transport http vistreo https://vistreo.saascode.ai/api/mcp   --header "Authorization: Bearer $VISTREO_API_KEY"
Codex CLI
# ~/.codex/config.toml
[mcp_servers.vistreo]
url = "https://vistreo.saascode.ai/api/mcp"
bearer_token_env_var = "VISTREO_API_KEY"

The key stays in an environment variable, never in the config you paste. Product API is included on Pro and Studio; the tool is connect_generate.

Get a key

Same credits. Same ledger.

A call from your code and a press of Generate write the same kind of entry — debited before the provider, returned in full if it fails.

From the app
your-model-slugstudio · 10:31Debit
From the API
your-model-slugapi · 14:20Debit

Identical in shape, because they are the same thing. There is no API balance and no API rate.

Try it on the free grant.

No card to find out whether it fits.