---
# @generated by sylphx-gen 0.1.0 from contracts@e145cc7cf1bc9605f2b27439e5e17ed76a1a2fd7e7021906a013f7565e4a0cd5. Do not edit.
title: "Generate an asset"
description: "`assets.assets.generate` (POST /v1/{parent}/assets:generate): Records the recipes as assets and generates the variants that are missing."
type: reference
product: assets
summary: "Records the recipes as assets and generates the variants that are missing."
updated: 2026-09-28
nav: false
---

> **This method is not served on the public API.** `api.sylphx.com` does not route this call: its backend is not deployed behind the public API, or does not implement the call. This page documents the contract. It is kept out of the sidebar and of search engines.

Records the recipes as assets and generates the variants that are missing. Each call is idempotent and works within a bounded time; call again until `pending` is 0.

**Not available yet.** Sylphx Generated Assets is declared in the registry but no backend serves it: every call answers `501` with the problem code `UNIMPLEMENTED`.

- **Path** `POST https://api.sylphx.com/v1/orgs/acme/projects/shop/envs/production/assets:generate`
- **Scope** `assets:write`
- **Effect** `write` — a successful call changes state.
- **Collection** [assets](/docs/api/assets)

## Request

| Field | Type | What it is |
| --- | --- | --- |
| `parent` | `string` | The environment to generate in. Required. |
| `recipes` | `AssetRecipe[]` | The recipes the code declares; 1 to 1000. Required. |
| `validate_only` | `bool` | Validate the recipes and return the counts without writing or generating anything. |

### AssetRecipe

| Field | Type | What it is |
| --- | --- | --- |
| `kind` | `AssetKind` | What kind of asset to make. Required. One of `image`, `sfx`, `music`, `video`, `character`, `voice`. |
| `prompt` | `string` | What to make, at most 8000 bytes. Empty only for `ASSET_KIND_CHARACTER`. Required. |
| `locale` | `string` | The locale of the asset, a BCP 47 tag; empty for images. |
| `character_id` | `string` | The character this asset shows; only for `ASSET_KIND_CHARACTER`, encoded in the canonical text as `id=`. |
| `params` | `map<string, string>` | Kind-specific parameters in canonical text form, such as `"2"`, `"1024x768"`, `"true"` or a 16-hex key. At most 16 pairs; keys are `[a-z_]` up to 32 characters, values up to 256 characters. |
| `key` | `string` | The key the caller computed, 16 lowercase hex characters. When it differs from the server's, the call is refused with `INVALID_FIELD` and the problem carries the server's canonical text, which catches encoder drift. |

## Response

| Field | Type | What it is |
| --- | --- | --- |
| `created` | `int32` | Assets new in this call. |
| `unchanged` | `int32` | Assets that already existed with the same key. |
| `generated` | `int32` | Variants stored by this call. |
| `pending` | `int32` | Variants still to generate; call again until it is 0. |
| `failed` | `int32` | Assets whose slots still fail after their attempts. |
| `refused` | `int32` | Assets refused, for example by moderation. |
| `unsupported` | `int32` | Assets of a kind the service does not generate yet. |
| `assets` | `AssetSummary[]` | One summary per recipe, in the order sent. |
| `usage` | `Usage` | What this call used. |

### AssetSummary

| Field | Type | What it is |
| --- | --- | --- |
| `key` | `string` | The logical key. |
| `name` | `string` | The asset's resource name. |
| `state` | `AssetState` | Where the asset is in its life. Output only. One of `pending`, `ready`, `approved`, `failed`, `refused`, `unsupported`. |
| `variants_ready` | `int32` | How many variants are stored. |
| `variants_wanted` | `int32` | How many variants the recipe asks for. |

### Usage

| Field | Type | What it is |
| --- | --- | --- |
| `images` | `int64` | Images stored by this call, the billed quantity. |

## Errors

- [`UNAUTHENTICATED`](/docs/api/errors/UNAUTHENTICATED) — No valid key or token was presented.
- [`PERMISSION_DENIED`](/docs/api/errors/PERMISSION_DENIED) — The key lacks the method's permission.
- [`RESOURCE_NOT_FOUND`](/docs/api/errors/RESOURCE_NOT_FOUND) — The named Resource does not exist or is not visible.
- [`INVALID_FIELD`](/docs/api/errors/INVALID_FIELD) — A field failed validation.
- [`RATE_LIMITED`](/docs/api/errors/RATE_LIMITED) — The rate limit is reached; see Retry-After.
- [`SPEND_LIMIT_REACHED`](/docs/api/errors/SPEND_LIMIT_REACHED) — The org's spend limit is reached.
- [`IDEMPOTENCY_KEY_REUSED`](/docs/api/errors/IDEMPOTENCY_KEY_REUSED) — An Idempotency-Key was reused with another body.
- [`IDEMPOTENCY_IN_PROGRESS`](/docs/api/errors/IDEMPOTENCY_IN_PROGRESS) — The first call with this Idempotency-Key is still running.

Every error arrives in the body [Errors](/docs/platform/errors) describes.

## Examples

**cURL**

```curl
curl -X POST "https://api.sylphx.com/v1/orgs/acme/projects/shop/envs/production/assets:generate" \
  -H "Authorization: Bearer $SYLPHX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"recipes":[{"kind":"image","prompt":"…"}]}'
```

**TypeScript**

```ts
const response = await sylphx.assets.assets.generate({ parent: 'orgs/acme/projects/shop/envs/production', recipes: [{ kind: 'image', prompt: '…' }] })
```

**Rust**

```rust
let mut req = sylphx::assets::GenerateAssetsRequest::default();
req.parent = "orgs/acme/projects/shop/envs/production".to_string();
req.recipes = vec![Default::default()];
let response = sx.assets().assets().generate(req).await?;
```

**CLI**

```bash
sylphx assets assets generate orgs/acme/projects/shop/envs/production
```

**MCP**

```json
{ "method_id": "assets.assets.generate", "args": {"parent":"orgs/acme/projects/shop/envs/production","recipes":[{"kind":"image","prompt":"…"}]} }
```
