> ## Documentation Index
> Fetch the complete documentation index at: https://www.recraft.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Recraft V4 Styles

Recraft V4 Styles is a dedicated model line for style-consistent generation, released in August 2026, and the state of the art in style matching. You define a style once, from one reference image or up to ten, and every generation after that holds to it — rendering technique, color, texture, and composition, not just the general impression.

There is no training or fine-tuning step: you upload the reference images, receive a `style_id`, and generate with it immediately. The references can come from anywhere — other generators, branding materials, or existing assets.

<Note>
  V4 Styles models **always** require a style. Every request must supply either `style_id` or style reference images. A request with neither is rejected.
</Note>

## Models

| Model                        | `model` value                 | Output      | Price per image |
| ---------------------------- | ----------------------------- | ----------- | --------------- |
| Recraft V4 Styles            | `recraftv4_styles`            | Raster, 1K  | \$0.035         |
| Recraft V4 Styles Vector     | `recraftv4_styles_vector`     | Vector, SVG | \$0.05          |
| Recraft V4 Styles Pro        | `recraftv4_styles_pro`        | Raster, 2K  | \$0.10          |
| Recraft V4 Styles Pro Vector | `recraftv4_styles_pro_vector` | Vector, SVG | \$0.12          |

Like the rest of the V4 line, V4 Styles is available in standard (1K) versions for everyday work and fast iteration, and Pro (2K) versions for print-ready assets and large-scale use. Both share the same style behavior.

## How to call it

There are two ways to work with the model. Use the two-step flow when a style is reused across many requests — the typical case for brand and campaign work. Use the one-step flow to go straight from references to an image.

### Option 1: create a style, then generate

<Steps>
  <Step title="Create the style">
    Upload your reference images to `/v1/styles`. The response returns a `style_id` you can reuse indefinitely.
  </Step>

  <Step title="Generate with that style_id">
    Pass `style_id` plus a V4 Styles model to `/v1/images/generations`. Repeat for every asset in the set.
  </Step>
</Steps>

**Step 1: create the style**

<CodeGroup>
  ```python Python (Multipart) theme={null}
  response = client.post(
      path='/styles',
      cast_to=object,
      options={'headers': {'Content-Type': 'multipart/form-data'}},
      body={'model': 'recraftv4_styles'},
      files={'file1': open('reference-1.png', 'rb')},
  )
  style_id = response['id']
  ```

  ```python Python (JSON) theme={null}
  response = client.post(
      path='/styles',
      cast_to=object,
      body={
          'model': 'recraftv4_styles',
          'image_urls': [
              'https://example.com/reference-1.png',
              'https://example.com/reference-2.png',
          ],
      },
  )
  style_id = response['id']
  ```

  ```bash cURL (Multipart) theme={null}
  curl -X POST https://external.api.recraft.ai/v1/styles \
    -H "Authorization: Bearer $RECRAFT_API_TOKEN" \
    -F "model=recraftv4_styles" \
    -F "file1=@reference-1.png"
  ```

  ```bash cURL (JSON) theme={null}
  curl -X POST https://external.api.recraft.ai/v1/styles \
    -H "Authorization: Bearer $RECRAFT_API_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "recraftv4_styles",
      "image_urls": [
        "https://example.com/reference-1.png",
        "https://example.com/reference-2.png"
      ]
    }'
  ```
</CodeGroup>

Response:

```json theme={null}
{
    "id": "229b2a75-05e4-4580-85f9-b47ee521a00d",
    "style": "any",
    "creation_time": "2026-08-20T00:00:00Z",
    "is_private": true,
    "credits": 5
}
```

**Step 2: generate against the style**

<CodeGroup>
  ```python Python theme={null}
  response = client.images.generate(
      prompt='product hero shot, bottle on a table',
      model='recraftv4_styles',
      extra_body={'style_id': style_id},
  )
  print(response.data[0].url)
  ```

  ```bash cURL theme={null}
  curl -X POST https://external.api.recraft.ai/v1/images/generations \
    -H "Authorization: Bearer $RECRAFT_API_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{
      "prompt": "product hero shot, bottle on a table",
      "model": "recraftv4_styles",
      "style_id": "229b2a75-05e4-4580-85f9-b47ee521a00d"
    }'
  ```
</CodeGroup>

### Option 2: attach style references to the generation

Skip style creation and attach the references to the generation call itself. The server creates a private style from them, applies it, and returns the resolved `style_id` so later requests can reuse it.

<CodeGroup>
  ```python Python (Multipart) theme={null}
  response = client.post(
      path='/images/generations',
      cast_to=object,
      options={'headers': {'Content-Type': 'multipart/form-data'}},
      body={'prompt': 'product hero shot, bottle on a table', 'model': 'recraftv4_styles'},
      files={'style_references': open('reference-1.png', 'rb')},
  )
  print(response['data'][0]['url'])
  print(response['style_id'])
  ```

  ```python Python (JSON) theme={null}
  response = client.post(
      path='/images/generations',
      cast_to=object,
      body={
          'prompt': 'product hero shot, bottle on a table',
          'model': 'recraftv4_styles',
          'style_reference_urls': ['https://example.com/reference-1.png'],
      },
  )
  print(response['data'][0]['url'])
  print(response['style_id'])
  ```

  ```bash cURL (Multipart) theme={null}
  curl -X POST https://external.api.recraft.ai/v1/images/generations \
    -H "Authorization: Bearer $RECRAFT_API_TOKEN" \
    -F "prompt=product hero shot, bottle on a table" \
    -F "model=recraftv4_styles" \
    -F "style_references=@reference-1.png"
  ```

  ```bash cURL (JSON) theme={null}
  curl -X POST https://external.api.recraft.ai/v1/images/generations \
    -H "Authorization: Bearer $RECRAFT_API_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{
      "prompt": "product hero shot, bottle on a table",
      "model": "recraftv4_styles",
      "style_reference_urls": ["https://example.com/reference-1.png"]
    }'
  ```
</CodeGroup>

<Warning>
  `style_id` and style references are mutually exclusive. Sending both in one request is rejected.
</Warning>

## Reference images

| Constraint | Value                                                                                      |
| ---------- | ------------------------------------------------------------------------------------------ |
| Formats    | PNG, JPG, WEBP                                                                             |
| Count      | 1 to 10                                                                                    |
| Total size | 64 MB across all images, and under 10 MB per file                                          |
| Transport  | `files` / `style_references` for multipart, `image_urls` / `style_reference_urls` for JSON |

A single reference is enough. Adding more changes the result in a predictable way: similar references sharpen the match, varied references widen the range.

Unlike most models, which only work reliably with references created inside that same model, V4 Styles accepts references from anywhere: other generators, branding materials, or existing assets. There is no requirement that a reference was produced by the model you are generating with.

The [Create style](/docs/api-reference/endpoints#create-style) endpoint also accepts `image_weights`: per-image weights, one per uploaded image, to bias the style toward specific references.

## Style match

Every style stores a `match` value, set with the `match` parameter at style creation, that controls how closely generated images follow the style:

* **`precise`** (the default) — follows the style meticulously, holding every detail: rendering technique, color, composition, and lighting.
* **`flexible`** — matches the general vibe, giving the model slightly more liberty — for when the mood matters more than the exact blueprint.

Passing `style_match` in a generation request overrides the stored value for that style. See [Style match](/docs/api-reference/styles#style-match) for details.

### Example

Two generations with the same style references — one `precise`, one `flexible`:

<CodeGroup>
  ```python Python (Multipart) theme={null}
  precise = client.post(
      path='/images/generations',
      cast_to=object,
      options={'headers': {'Content-Type': 'multipart/form-data'}},
      body={
          'prompt': 'product hero shot, bottle on a table',
          'model': 'recraftv4_styles',
          'style_match': 'precise',
      },
      files={'style_references': open('reference-1.png', 'rb')},
  )

  flexible = client.post(
      path='/images/generations',
      cast_to=object,
      options={'headers': {'Content-Type': 'multipart/form-data'}},
      body={
          'prompt': 'product hero shot, bottle on a table',
          'model': 'recraftv4_styles',
          'style_match': 'flexible',
      },
      files={'style_references': open('reference-1.png', 'rb')},
  )

  print(precise['data'][0]['url'])
  print(flexible['data'][0]['url'])
  ```

  ```python Python (JSON) theme={null}
  precise = client.post(
      path='/images/generations',
      cast_to=object,
      body={
          'prompt': 'product hero shot, bottle on a table',
          'model': 'recraftv4_styles',
          'style_reference_urls': ['https://example.com/reference-1.png'],
          'style_match': 'precise',
      },
  )

  flexible = client.post(
      path='/images/generations',
      cast_to=object,
      body={
          'prompt': 'product hero shot, bottle on a table',
          'model': 'recraftv4_styles',
          'style_reference_urls': ['https://example.com/reference-1.png'],
          'style_match': 'flexible',
      },
  )

  print(precise['data'][0]['url'])
  print(flexible['data'][0]['url'])
  ```

  ```bash cURL (Multipart) theme={null}
  # precise: follows the style meticulously
  curl -X POST https://external.api.recraft.ai/v1/images/generations \
    -H "Authorization: Bearer $RECRAFT_API_TOKEN" \
    -F "prompt=product hero shot, bottle on a table" \
    -F "model=recraftv4_styles" \
    -F "style_match=precise" \
    -F "style_references=@reference-1.png"

  # flexible: matches the general vibe
  curl -X POST https://external.api.recraft.ai/v1/images/generations \
    -H "Authorization: Bearer $RECRAFT_API_TOKEN" \
    -F "prompt=product hero shot, bottle on a table" \
    -F "model=recraftv4_styles" \
    -F "style_match=flexible" \
    -F "style_references=@reference-1.png"
  ```

  ```bash cURL (JSON) theme={null}
  # precise: follows the style meticulously
  curl -X POST https://external.api.recraft.ai/v1/images/generations \
    -H "Authorization: Bearer $RECRAFT_API_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{
      "prompt": "product hero shot, bottle on a table",
      "model": "recraftv4_styles",
      "style_match": "precise",
      "style_reference_urls": ["https://example.com/reference-1.png"]
    }'

  # flexible: matches the general vibe
  curl -X POST https://external.api.recraft.ai/v1/images/generations \
    -H "Authorization: Bearer $RECRAFT_API_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{
      "prompt": "product hero shot, bottle on a table",
      "model": "recraftv4_styles",
      "style_match": "flexible",
      "style_reference_urls": ["https://example.com/reference-1.png"]
    }'
  ```
</CodeGroup>

## Pro or Vector generation

Style-consistent generation is not limited to the standard raster model. The line includes Pro (2K raster) and Vector (SVG) variants, and a style applies the same way on each of them: use `recraftv4_styles_pro` for print-ready 2K raster assets, and `recraftv4_styles_vector` or `recraftv4_styles_pro_vector` for editable SVG output.

### Example

Generating an SVG with the Pro Vector model and style references:

<CodeGroup>
  ```python Python (Multipart) theme={null}
  response = client.post(
      path='/images/generations',
      cast_to=object,
      options={'headers': {'Content-Type': 'multipart/form-data'}},
      body={
          'prompt': 'coffee shop logo, cup with steam',
          'model': 'recraftv4_styles_pro_vector',
      },
      files={'style_references': open('reference-1.png', 'rb')},
  )
  print(response['data'][0]['url'])
  print(response['style_id'])
  ```

  ```python Python (JSON) theme={null}
  response = client.post(
      path='/images/generations',
      cast_to=object,
      body={
          'prompt': 'coffee shop logo, cup with steam',
          'model': 'recraftv4_styles_pro_vector',
          'style_reference_urls': ['https://example.com/reference-1.png'],
      },
  )
  print(response['data'][0]['url'])
  print(response['style_id'])
  ```

  ```bash cURL (Multipart) theme={null}
  curl -X POST https://external.api.recraft.ai/v1/images/generations \
    -H "Authorization: Bearer $RECRAFT_API_TOKEN" \
    -F "prompt=coffee shop logo, cup with steam" \
    -F "model=recraftv4_styles_pro_vector" \
    -F "style_references=@reference-1.png"
  ```

  ```bash cURL (JSON) theme={null}
  curl -X POST https://external.api.recraft.ai/v1/images/generations \
    -H "Authorization: Bearer $RECRAFT_API_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{
      "prompt": "coffee shop logo, cup with steam",
      "model": "recraftv4_styles_pro_vector",
      "style_reference_urls": ["https://example.com/reference-1.png"]
    }'
  ```
</CodeGroup>

## Supported operations

* [Generate image](/docs/api-reference/endpoints#generate-image) — a style is always required.
* [Create style](/docs/api-reference/endpoints#create-style) — `recraftv4_styles` is the default model when no `model` is specified.

## Pricing

Generation and style creation are billed separately. Among the models that support styles, the V4 Styles line has the most attractive pricing for style-consistent generation.

| Service                                         | Cost    | API units | Basis       |
| ----------------------------------------------- | ------- | --------- | ----------- |
| Raster generation, Recraft V4 Styles            | \$0.035 | 35        | Per image   |
| Raster generation, Recraft V4 Styles Pro        | \$0.10  | 100       | Per image   |
| Vector generation, Recraft V4 Styles Vector     | \$0.05  | 50        | Per image   |
| Vector generation, Recraft V4 Styles Pro Vector | \$0.12  | 120       | Per image   |
| Style creation                                  | \$0.005 | 5         | Per request |

API units are purchased in advance: \$1.00 buys 1,000 units.

**Composite billing on attached references.** When you attach style references to a generation instead of passing a `style_id`, the style creation is charged once on top of the per-image generation cost. The `credits` field in the response is the sum of both.

**Worked example.** A style created once, then a 10-image set generation:

|                  | Standard    | Pro         |
| ---------------- | ----------- | ----------- |
| Style creation   | \$0.005     | \$0.005     |
| 10 raster images | \$0.35      | \$1.00      |
| **Total**        | **\$0.355** | **\$1.005** |

Reusing that `style_id` on later sets costs generation only, with no further style-creation charge.

## Styles on other V4 models

Styles are not limited to the V4 Styles models. Every V4 and V4.1 model accepts a `style_id` or attached style references on `/v1/images/generations`. Generation stays at that model's own price: applying a style does not change it. Style creation is billed separately at \$0.005 per request either way.

The difference is that V4 Styles is purpose-built for style consistency and always requires a style, while the other V4 models treat a style as an optional input.

See [Pricing](/docs/api-reference/pricing) for generation prices of the other models.

## Errors and rejections

| Condition                                            | Result                                   |
| ---------------------------------------------------- | ---------------------------------------- |
| V4 Styles model with no `style_id` and no references | Rejected                                 |
| `style_id` and style references in the same request  | Rejected                                 |
| More than 10 reference images, or over 64 MB total   | Rejected                                 |
| Reference in a format other than PNG, JPG, WEBP      | Rejected                                 |
| Style references with no `model` specified           | Accepted, defaults to `recraftv4_styles` |

<Warning>
  Requests with style references and no `model` default to `recraftv4_styles`. To generate with a different model, set `model` explicitly.
</Warning>

## Related

<CardGroup cols={2}>
  <Card title="Getting started" href="/docs/api-reference/getting-started">
    Authentication and your first generation request.
  </Card>

  <Card title="Endpoints" href="/docs/api-reference/endpoints">
    Full parameter reference for generate image and create style.
  </Card>

  <Card title="Styles" href="/docs/api-reference/styles">
    How styles work across models: custom styles and style match.
  </Card>

  <Card title="Pricing" href="/docs/api-reference/pricing">
    Complete API unit charges across every model and operation.
  </Card>
</CardGroup>
