---
title: "Remix an ad"
description: "Analyze one ad, storyboard the same structure with your own product and person, and render it.\n\nSend exactly one source (`ad_url`, `discover_item_id` or `source_generation_id`) and the `product_id` the remix must sell. Add `avatar_id` to cast your own person, `variants` to render two takes instead of one, and `note` to steer it.\n\n`discover_item_id` is how a Discover creative enters a remix: it is the analysis source, and it is the only field that admits one. The same creative sent as `ad_url`, or reached through `source_generation_id`, is refused with `discover_source_not_allowed` — a competitor ad is something you read and re-create, never something you edit.\n\nThis is the typed door onto the `roasos:remix-ad` 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 remix you say nothing about quotes the board and waits. 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/runWorkflowRemix
---

# Remix an ad

Analyze one ad, storyboard the same structure with your own product and person, and render it.

Send exactly one source (`ad_url`, `discover_item_id` or `source_generation_id`) and the `product_id` the remix must sell. Add `avatar_id` to cast your own person, `variants` to render two takes instead of one, and `note` to steer it.

`discover_item_id` is how a Discover creative enters a remix: it is the analysis source, and it is the only field that admits one. The same creative sent as `ad_url`, or reached through `source_generation_id`, is refused with `discover_source_not_allowed` — a competitor ad is something you read and re-create, never something you edit.

This is the typed door onto the `roasos:remix-ad` 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 remix you say nothing about quotes the board and waits. 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/remix`

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

Remix an ad

Analyze one ad, storyboard the same structure with your own product and person, and render it.

Send exactly one source (`ad_url`, `discover_item_id` or `source_generation_id`) and the `product_id` the remix must sell. Add `avatar_id` to cast your own person, `variants` to render two takes instead of one, and `note` to steer it.

`discover_item_id` is how a Discover creative enters a remix: it is the analysis source, and it is the only field that admits one. The same creative sent as `ad_url`, or reached through `source_generation_id`, is refused with `discover_source_not_allowed` — a competitor ad is something you read and re-create, never something you edit.

This is the typed door onto the `roasos:remix-ad` 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 remix you say nothing about quotes the board and waits. 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, discover_source_not_allowed, 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, avatar, or source generation 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
- `503`: The run could not be recorded or started safely

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