---
title: "Make statics"
description: "Turn one product into a set of static ads.\n\nSend the `product_id` the ads must sell. Add `brief` to steer the angle, `variants` to render more than three takes, `aspect_ratio` to pick the frame, `lane` to choose how the image is built, and `avatar_id` to put your own person in the picture.\n\nThe two lanes differ in how the product reaches the canvas. `scene` renders the whole static in one call. `product` places your product kit's verified cutout into the scene, which holds the product's shape and label exactly.\n\nThe headline, the sub-head and the call to action are rendered **by the image model** from exact strings, with your logo passed as a reference and your brand colours passed as hex values. Read that limit before you build on it: the model cannot guarantee your exact typeface, and a wrong glyph is a regenerate, not a refund.\n\nThis is the typed door onto the `roasos:statics-factory` skill, so it is an agent run and not a job. `generation_spend_cap_credits` is what lets the run render without asking a person; it defaults to 0, so a statics call you say nothing about quotes the work and waits. `variants` stops at 8, because that is how many quotes one approval card can carry. Send `quote_only: true` to see the ceiling for free, then send the same body with the returned `quote_id`.\n\nRead the run at `/v1/agent-runs/{id}`. Anything the run could not auto-approve waits in `pending_approvals`; release it at `/v1/agent-runs/{id}/gates/{gate_id}/approve`."
url: https://docs.roasos.com/api-reference/workflows/runWorkflowStatics
---

# Make statics

Turn one product into a set of static ads.

Send the `product_id` the ads must sell. Add `brief` to steer the angle, `variants` to render more than three takes, `aspect_ratio` to pick the frame, `lane` to choose how the image is built, and `avatar_id` to put your own person in the picture.

The two lanes differ in how the product reaches the canvas. `scene` renders the whole static in one call. `product` places your product kit's verified cutout into the scene, which holds the product's shape and label exactly.

The headline, the sub-head and the call to action are rendered **by the image model** from exact strings, with your logo passed as a reference and your brand colours passed as hex values. Read that limit before you build on it: the model cannot guarantee your exact typeface, and a wrong glyph is a regenerate, not a refund.

This is the typed door onto the `roasos:statics-factory` skill, so it is an agent run and not a job. `generation_spend_cap_credits` is what lets the run render without asking a person; it defaults to 0, so a statics call you say nothing about quotes the work and waits. `variants` stops at 8, because that is how many quotes one approval card can carry. Send `quote_only: true` to see the ceiling for free, then send the same body with the returned `quote_id`.

Read the run at `/v1/agent-runs/{id}`. Anything the run could not auto-approve waits in `pending_approvals`; release it at `/v1/agent-runs/{id}/gates/{gate_id}/approve`.

## `POST /v1/workflows/statics`

Endpoint: `POST https://api.roasos.com/v1/workflows/statics`

Make statics

Turn one product into a set of static ads.

Send the `product_id` the ads must sell. Add `brief` to steer the angle, `variants` to render more than three takes, `aspect_ratio` to pick the frame, `lane` to choose how the image is built, and `avatar_id` to put your own person in the picture.

The two lanes differ in how the product reaches the canvas. `scene` renders the whole static in one call. `product` places your product kit's verified cutout into the scene, which holds the product's shape and label exactly.

The headline, the sub-head and the call to action are rendered **by the image model** from exact strings, with your logo passed as a reference and your brand colours passed as hex values. Read that limit before you build on it: the model cannot guarantee your exact typeface, and a wrong glyph is a regenerate, not a refund.

This is the typed door onto the `roasos:statics-factory` skill, so it is an agent run and not a job. `generation_spend_cap_credits` is what lets the run render without asking a person; it defaults to 0, so a statics call you say nothing about quotes the work and waits. `variants` stops at 8, because that is how many quotes one approval card can carry. Send `quote_only: true` to see the ceiling for free, then send the same body with the returned `quote_id`.

Read the run at `/v1/agent-runs/{id}`. Anything the run could not auto-approve waits in `pending_approvals`; release it at `/v1/agent-runs/{id}/gates/{gate_id}/approve`.

### Parameters

- `undefined`
- `undefined`
- `undefined`

### Request body

Content type: `application/json`

### Responses

- `200`: A ceiling quote. Nothing is reserved and nothing runs.
- `202`: Run accepted. Poll /v1/agent-runs/{id}/status.
- `400`: validation_error, quote_required, a missing Idempotency-Key, more than 8 variants, or spend_cap_exceeds_policy
- `402`: insufficient_credits, or approval_required when a cap exceeds this key's unattended limit
- `403`: The API key is not authorized to start agent runs
- `404`: The product or avatar was not found in this workspace
- `409`: The idempotency key was reused with different request data
- `410`: quote_expired: the quote must be replaced under a new idempotency key
- `429`: rate_limit_exceeded, or a daily or monthly credit budget
- `501`: not_implemented: the statics factory is contracted and not live yet
- `503`: The run could not be claimed safely

Read the full reference at https://docs.roasos.com/api-reference/workflows/runWorkflowStatics.
