CyHUB
РусскийGet an API key

Recraft V2 API

Recraft V2 pictures and real SVG vectors from a description: logos, icons, flat illustrations. The cheapest Recraft engine, with preset styles: photorealism or illustration. Up to 6 results per run.

Developer: RecraftModel key in the API: recraft

For AI assistants:Download .mdAll documentation .mdOpen as text

Connect in three steps

  1. Get a keyCreate a key in the dashboard after you confirm your email. One key opens every model.
  2. Check the pricePOST /v1/price shows the cost of a run in advance, without charging you.
  3. Run a task and collect the resultPOST /v1/tasks starts a task, GET /v1/tasks/{id} shows its status and files.

Ready-to-use code

Replace YOUR_API_KEY with your key. The code starts a task and waits for the result. In cURL, repeat the second request with the id from the first response instead of TASK_ID until status becomes succeeded.

cURL
curl -X POST "https://api.cyhub.ai/v1/tasks" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "recraft",
  "settings": {
    "mode": "text_to_image",
    "prompt": "Деревянная вывеска кофейни с надписью «Утро», тёплый вечерний свет",
    "engine": "v2",
    "aspect_ratio": "3:2"
  }
}'

curl "https://api.cyhub.ai/v1/tasks/TASK_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"
Python
import time

import requests

API = "https://api.cyhub.ai/v1"
HEADERS = {"Authorization": "Bearer YOUR_API_KEY"}

body = {
    "model": "recraft",
    "settings": {
        "mode": "text_to_image",
        "prompt": "Деревянная вывеска кофейни с надписью «Утро», тёплый вечерний свет",
        "engine": "v2",
        "aspect_ratio": "3:2",
    },
}

response = requests.post(f"{API}/tasks", json=body, headers=HEADERS, timeout=60)
response.raise_for_status()
task = response.json()
while task["status"] in ("queued", "running"):
    time.sleep(5)
    task = requests.get(f"{API}/tasks/{task['id']}", headers=HEADERS, timeout=30).json()
print(task["status"], task["result"])
Node.js
const API = "https://api.cyhub.ai/v1";
const HEADERS = { Authorization: "Bearer YOUR_API_KEY", "Content-Type": "application/json" };

const body = {
  "model": "recraft",
  "settings": {
    "mode": "text_to_image",
    "prompt": "Деревянная вывеска кофейни с надписью «Утро», тёплый вечерний свет",
    "engine": "v2",
    "aspect_ratio": "3:2"
  }
};

async function main() {
  let response = await fetch(`${API}/tasks`, { method: "POST", headers: HEADERS, body: JSON.stringify(body) });
  if (!response.ok) throw new Error(await response.text());
  let task = await response.json();
  while (task.status === "queued" || task.status === "running") {
    await new Promise((resolve) => setTimeout(resolve, 5000));
    response = await fetch(`${API}/tasks/${task.id}`, { headers: HEADERS });
    task = await response.json();
  }
  console.log(task.status, task.result);
}

main();
Get a key

Price before the run

Prices as of 15.10.2026: from 4 ₽. POST /v1/price shows the exact price of your settings.

Send the same settings to POST /v1/price: the response shows the price of the run without charging you.

cURL
curl -X POST "https://api.cyhub.ai/v1/price" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "recraft",
  "settings": {
    "mode": "text_to_image",
    "prompt": "Деревянная вывеска кофейни с надписью «Утро», тёплый вечерний свет",
    "engine": "v2",
    "aspect_ratio": "3:2"
  }
}'
  • amount_minor: the price of the run in minor units (kopecks for rubles)
  • currency: the wallet currency
  • available_minor: how much your balance has for new tasks right now

Modes

Each mode has its own parameters and examples. The mode is set by the mode field.

Picture from a description

Draws a picture from scratch by the description. Recraft handles in-frame text well.

Value of the mode field: text_to_image

This page is about Recraft V2: send engine = v2. Without the engine field the task runs on v4_1.

Price in this mode from 4 ₽.

Parameters

Model parameters go inside settings. Omitted optional fields take their default values.

promptRequired

What to draw. Put the words that must appear on the picture in quotes. With the V3 and V2 engines no longer than 1000 characters.

Type: StringMinimum characters: 1Maximum characters: 2000
engineOptional

Engine; the price depends on it. V4.1: the best balance. V4.1 Pro: top quality, larger (a 2048 by 2048 square instead of 1024 by 1024) and noticeably pricier. V3: supports preset styles. V2: the cheapest.

Type: StringAllowed values: v2Default: "v4_1"
styleOptional

A preset style: photorealism or illustration. Only V3 and V2 have them; with V4.1 describe the manner in words.

Type: StringAllowed values: nonerealistic_imagedigital_illustrationDefault: "none"
aspect_ratioOptional

Aspect ratio of the frame.

Type: StringAllowed values: 1:13:22:34:33:416:99:162:11:2Default: "1:1"
countOptional

How many variants to make at once, 1 to 6. Each one is paid separately.

Type: IntegerMinimum: 1Maximum: 6Default: 1

Parameters not listed here are not accepted: the response is 422 unknown_setting.

Input

    Request example

    Send this JSON to POST /v1/tasks with your API key. To check the price first, send the same JSON to POST /v1/price.

    A sign with lettering

    JSON
    {
      "model": "recraft",
      "settings": {
        "mode": "text_to_image",
        "prompt": "Деревянная вывеска кофейни с надписью «Утро», тёплый вечерний свет",
        "engine": "v2",
        "aspect_ratio": "3:2"
      }
    }

    The price is calculated when the task is accepted, currency RUB.

    Complete generation example

    Output

    • Usually ready in a few seconds to a minute.
    • The pictures come as lossless WebP files, as many as set in count.
    KindFormatsHow manyNote
    imagewebp1 to 6As many as set in count.

    A finished task as GET /v1/tasks/{id} returns it (some fields left out). The caption may sit on the task or on a single file and may be empty; the model picks the file name.

    JSON
    {
      "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
      "status": "succeeded",
      "finished_at": "2026-10-01T12:03:41+00:00",
      "result": {
        "caption": "Caption of the result: the model and its settings",
        "texts": [],
        "files_expire_at": "2026-10-08T12:03:41+00:00",
        "files_expired": false,
        "artifacts": [
          {
            "index": 0,
            "kind": "image",
            "filename": "image.webp",
            "size": 1843200,
            "caption": "",
            "download_path": "/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/artifacts/0"
          }
        ]
      }
    }
    How to read the result and download files

    Vector from a description

    Draws a real SVG vector from scratch: logos, icons, flat illustrations.

    Value of the mode field: text_to_vector

    This page is about Recraft V2: send engine = v2. Without the engine field the task runs on v4_1.

    Price in this mode from 7 ₽.

    Parameters

    Model parameters go inside settings. Omitted optional fields take their default values.

    promptRequired

    What to draw. Put the words that must appear on the picture in quotes. With the V3 and V2 engines no longer than 1000 characters.

    Type: StringMinimum characters: 1Maximum characters: 2000
    engineOptional

    Engine; the price depends on it. V4.1: the best balance. V4.1 Pro: top quality, noticeably pricier. V3: the previous generation. V2: the cheapest.

    Type: StringAllowed values: v2Default: "v4_1"
    aspect_ratioOptional

    Aspect ratio of the frame.

    Type: StringAllowed values: 1:13:22:34:33:416:99:162:11:2Default: "1:1"
    countOptional

    How many variants to make at once, 1 to 6. Each one is paid separately.

    Type: IntegerMinimum: 1Maximum: 6Default: 1

    Parameters not listed here are not accepted: the response is 422 unknown_setting.

    Input

      Request example

      Send this JSON to POST /v1/tasks with your API key. To check the price first, send the same JSON to POST /v1/price.

      An icon

      JSON
      {
        "model": "recraft",
        "settings": {
          "mode": "text_to_vector",
          "prompt": "Плоская иконка ракеты в два цвета, толстый контур",
          "engine": "v2",
          "aspect_ratio": "1:1"
        }
      }

      The price is calculated when the task is accepted, currency RUB.

      Complete generation example

      Output

      • Usually ready in a few seconds to a minute.
      • The result is SVG: a real vector that scales without loss and opens in an editor. As many files as set in count.
      KindFormatsHow manyNote
      documentsvg1 to 6As many as set in count.

      A finished task as GET /v1/tasks/{id} returns it (some fields left out). The caption may sit on the task or on a single file and may be empty; the model picks the file name.

      JSON
      {
        "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
        "status": "succeeded",
        "finished_at": "2026-10-01T12:03:41+00:00",
        "result": {
          "caption": "Caption of the result: the model and its settings",
          "texts": [],
          "files_expire_at": "2026-10-08T12:03:41+00:00",
          "files_expired": false,
          "artifacts": [
            {
              "index": 0,
              "kind": "document",
              "filename": "result.svg",
              "size": 2097152,
              "caption": "",
              "download_path": "/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/artifacts/0"
            }
          ]
        }
      }
      How to read the result and download files

      See also

      Try Recraft V2 through the API

      One key opens every CyHUB model. Payment in rubles, and you see the price before the run.

      Get an API key