Cold at nine. Still cold at five.
Double-walled steel keeps drinks cold for 24 hours and fits every cup holder on your route.
Send a product brief to the ad kit agent. It writes a headline and body copy with a text model, then makes a matching image. You get one task back, with every step and its charge.
Request
POST https://api.tovano.ai/v1/tasks Authorization: Bearer $TOVANO_API_KEY Content-Type: application/json X-Tovano-Customer: client-0482 Idempotency-Key: brief-2207-premium { "model": "agent/ad-kit-1", "input": { "product": "Insulated steel water bottle, 750 ml", "audience": "commuters", "tone": "premium" } }
Response
Waiting for the run to finish.
{
"id": "tsk_c87f0645b9a9",
"model": "agent/ad-kit-1",
"status": "completed",
"customer": "client-0482",
"unit": "run",
"output": {
"headline": "Cold at nine. Still cold at five.",
"body": "Double-walled steel keeps drinks cold for 24 hours and fits every cup holder on your route.",
"image": {
"url": "https://files.tovano.ai/tsk_c87f0645b9a9/image.png?sig=…",
"content_type": "image/png"
}
},
"charged_micro": 21596,
"steps": [
{
"id": "tsk_82a1c390de9f",
"name": "copy",
"model": "text/demo-chat-1",
"status": "completed",
"usage": {
"input_tokens": 412,
"output_tokens": 296
},
"charged_micro": 1596
},
{
"id": "tsk_56ea8312bafc",
"name": "image",
"model": "image/demo-1",
"status": "completed",
"unit": "image",
"units": 1,
"charged_micro": 20000
}
],
"created_at": "2026-11-12T09:14:03Z",
"completed_at": "2026-11-12T09:14:16Z"
}Tasks
6 tasks
Insulated steel water bottle
tsk_c87f0645b9a9 · copy + image
Merino travel sweater
tsk_e1f189be14e2 · copy + image
Cast-iron skillet, 28 cm
tsk_1ecd7c8f3afc · copy + image
Noise-cancelling headphones
tsk_282c5f2021c0 · copy + image
Leather card wallet
tsk_8d0c76c94268 · copy + image
Ceramic pour-over set
tsk_a67efa42d118 · copy + image
Output
Cold at nine. Still cold at five.
Double-walled steel keeps drinks cold for 24 hours and fits every cup holder on your route.
One layer. Every climate.
Fine merino that regulates heat on the plane and still looks right at the meeting.
Heat that stays where you put it.
Pre-seasoned cast iron for an even sear, from hob to oven to table.
Your commute, on mute.
Adaptive noise cancelling and 30 hours of battery for the week's journeys.
Six cards. No bulk.
Full-grain leather, hand-stitched, thin enough for a front pocket.
Slow coffee, done properly.
A stoneware dripper and carafe for a clean, bright cup every morning.
Events
A played-back run with realistic requests, responses and charges. No API call is made and no key is used. Times are compressed.
Cost of this run
| Model | Usage | Amount | |
|---|---|---|---|
| Demo Chat 1 text/demo-chat-12,396 input tokens × $1.00 / 1M input tokens | $0.002396 | ||
| Demo Chat 1 text/demo-chat-11,709 output tokens × $4.00 / 1M output tokens | $0.006836 | ||
| Demo Image 1 image/demo-16 images × $0.020 / image | $0.120 | ||
| Total | $0.129232 |
Unit prices from the model catalogue, in US dollars, excluding tax. Agent jobs are charged per step at each step model's price.
At your volume
List prices. Committed-volume pricing, invoicing and an SLA are agreed in your contract. Talk to sales
How it works
The agent runs a copy step on a text model, then an image step on an image model. You poll or receive one task.
The task lists its steps with their own model, units and charge. The total is the sum of the steps, with no fee for the agent itself.
text_model and image_model are inputs. Use a larger image model for hero placements and keep the fast one for the long tail.
The code
The same request in curl, TypeScript and Python. The TypeScript client is tovano on npm.
curl https://api.tovano.ai/v1/tasks \ -H "Authorization: Bearer $TOVANO_API_KEY" \ -H "Content-Type: application/json" \ -H "X-Tovano-Customer: client-0482" \ -H "Idempotency-Key: brief-2207-premium" \ -d '{ "model": "agent/ad-kit-1", "input": { "product": "Insulated steel water bottle, 750 ml", "audience": "commuters", "tone": "premium" } }' # Then GET /v1/tasks/{id}: output.headline, output.body, output.image and steps[] with each charge.
import Tovano from "tovano"; const tovano = new Tovano(); const kit = await tovano.tasks.run({ model: "agent/ad-kit-1", input: { product: "Insulated steel water bottle, 750 ml", audience: "commuters", tone: "premium", }, customer: "client-0482", }); console.log(kit.output.headline); for (const step of kit.steps ?? []) { console.log(step.name, step.model, step.charged_micro); }
import os, time, requests API = "https://api.tovano.ai/v1" HEADERS = {"Authorization": f"Bearer {os.environ['TOVANO_API_KEY']}"} task = requests.post(f"{API}/tasks", headers=HEADERS, json={ "model": "agent/ad-kit-1", "input": {"product": "Insulated steel water bottle, 750 ml", "audience": "commuters", "tone": "premium"}, "customer": "client-0482", }).json() while task["status"] in ("queued", "running"): time.sleep(1) task = requests.get(f"{API}/tasks/{task['id']}", headers=HEADERS).json() print(task["output"]["headline"]) for step in task["steps"]: print(step["name"], step["model"], step["charged_micro"])
More examples
Committed-volume pricing, monthly invoices, higher limits and a named contact for teams that run AI in production.