---
title: "Рендер блок-схеми з коду"
method: POST
path: "/render"
---

# Рендер блок-схеми з коду

`POST /render`

## Request

- Base URL: `https://rombik.app/api/v1`
- URL: `https://rombik.app/api/v1/render`
- Auth: API key in header `X-API-Key`

Код → блок-схема у вибраному форматі. Потрібен тариф Pro (інакше 402 pro_required); 1 файл — 1 експорт місячного ліміту, інший формат того самого файлу безкоштовний (понад ліміт — 402 fair_use). Тіло — JSON {code,lang,…} або multipart-файл (-F file=@…). Типово повертає файл; з ?json=1 — JSON із полем content.

## Query parameters

- `json` boolean

## Request body

- RenderRequest: Потрібно або code, або url (взаємовиключно).
  - `code` string: Вихідний код програми (або задай url)
  - `url` string, uri: Завантажити код за посиланням замість code. Дозволені хости: raw.githubusercontent.com, gist.githubusercontent.com, gitlab.com, bitbucket.org, codeberg.org (github.com/.../blob/... авто-нормалізується в raw). Мова — за розширенням у URL, якщо lang не заданий.
  - `lang` 'python' | 'cpp' | 'c' | 'java' | 'csharp' | 'pascal' | 'javascript' | 'typescript' | 'php' | 'go' | 'rombik', required: Мова коду. Окреме значення "rombik" — рідний формат: замість коду поле code несе astJSON-дерево схеми (див. GET /rombik-format.md). ПОТРЕБУЄ активної Pro-підписки — інакше 402 pro_required.
  - `format` 'docx' | 'visio' | 'drawio' | 'typst' | 'excalidraw' | 'svg' | 'png' | 'jpeg' | 'webp' | 'gif' | 'gif_anim' | 'html' | 'pdf' | 'json' | 'poster': jpeg/webp/gif — той самий растр, що png, в іншому контейнері (webp — без втрат); gif_anim — анімований GIF, схема малюється блок за блоком; html — самодостатня сторінка: схема (вбудований SVG) + вихідний код із номерами рядків; з fragment=true — лише <div> зі схемою для вставки в готову сторінку
  - `mode` 'flow' | 'nsd': вид діаграми: flow — блок-схема (типово); nsd — структограма Насі-Шнайдермана
  - `split` boolean: розбивати високі схеми на частини конекторами А/Б; дефолт true для docx, pdf (багатосторінковий) і Typst-документа, явне true вмикає й для svg/png/excalidraw (false — суцільна, один аркуш)
  - `fn` string: Рендерити лише функцію з цим іменем
  - `perFunc` boolean: Кожна функція окремим файлом формату format, усе разом у ZIP (application/zip, імена 01-<функція>.<розширення>). Рахується як один експорт. З fn ігнорується; для poster недоступно
  - `scale` integer: Растр (png/jpeg/webp/gif/gif_anim): пікселів на pt, 1–4, типово 3. PNG — завжди на заданому масштабі, без обмеження розміру; JPEG/WebP/GIF зменшують масштаб, якщо картинка не влазить у межу формату (WebP — 16383 px по стороні, JPEG/GIF — 65535) або в памʼять сервера
  - `fragment` boolean: Typst: фрагмент CeTZ без преамбули; html: лише <div> із вбудованим SVG (без сторінки й CSS) — для вставки в готову сторінку
  - `font` string: Шрифт SVG (з allowlist)
  - `json` boolean: Відповідь JSON замість файлу
  - `preset` string: Пресет вигляду: default | classic (ланцюг умов сходинкою, цикли ромбом) | short | terminators — або код збереженого профілю (з посилання /app?m=КОД). options накладаються поверх; невідомий — 400 unknown_preset
  - `options` Options: Опції рушія (усі необов'язкові; порожні → ДСТУ-замовчування). Кастомні текстові значення (свої підписи гілок, слова вводу/виводу, термінатори, returnWord, forEachWord, capWord, capFormat, forFormat) потребують активного Pro на акаунті — інакше 402 pro_required. Тумблери, locale, font, scale, figStart — безкоштовні.
    - `locale` 'uk' | 'en': Мова написів за замовчуванням
    - `forFormat` 'comma' | 'range' | 'verbose': Формат лічильника циклу for. comma: i = 0, 9, 1; range: i = 0..9; verbose: i: 0 → 9
    - `labels` 'code' | 'math' | 'words': Текст блоків. code (дефолт): як у коді; math: без синтаксису мови — d = 0, b² − 4ac, √d, і/або; words: словами — «d дорівнює 0», «a менше 20», «Замінити a на b». Для lang rombik не застосовується: текст вузлів лишається як написано.
    - `singleEnd` boolean: Зводити всі кінці (return/break) до одного термінатора «Кінець». Типово вимкнено й це рекомендований режим: зі спільним «Кінцем» лінія раннього return усередині циклу мусить перетнути дугу повернення циклу (ДСТУ дозволяє обидва варіанти)
    - `mainOnlyTerminators` boolean: Показувати термінатори «Початок/Кінець» тільки для функції main, для інших — ховати
    - `callAsProcess` boolean: Малювати виклики функцій як звичайні прямокутники (процес) замість прямокутників із подвійними краями (підпрограма)
    - `stripTypes` boolean: Видаляти типи даних із коду всередині блоків (напр., int x = 5 → x = 5)
    - `returnAsIO` boolean: Малювати return як паралелограм (вивід) замість термінатора
    - `forAsWhile` boolean: Цикл for без шестикутника: блок ініціалізації, ромб з умовою, тіло і блок кроку (як while)
    - `doWhileLoopOnYes` boolean: Цикл do…while з умовою як у коді: гілка «Так» повертає в цикл, «Ні» — вихід. Типово ромб показує умову виходу («Так» — далі, «Ні» — повторити). Діє для C/C++, Java, C#, JS/TS, PHP; у lang rombik те саме задає поле вузла loopOnYes
    - `ifCascade` boolean: Ланцюг if/elif/…/else сходинкою: «Так» веде вниз у дію, «Ні» — праворуч до наступного ромба. Типово ромби стоять стовпчиком, «Так» — убік. Ланцюги з break/continue завжди стовпчиком
    - `yes` string: Текст над гілкою true (типово «Так»)
    - `no` string: Текст над гілкою false (типово «Ні»)
    - `inWord` string: Слово для операцій вводу (напр. cin >> x). Типово «Ввід»
    - `outWord` string: Слово для операцій виводу. Типово «Вивід»
    - `startText` string: Текст початкового термінатора для main (типово «Початок»)
    - `endText` string: Текст кінцевого термінатора для main (типово «Кінець»)
    - `entryText` string: Текст початкового термінатора для функцій (типово назва функції)
    - `exitText` string: Текст кінцевого термінатора для функцій (типово «Кінець»)
    - `returnWord` string: Слово в блоці return (типово «Повернути»)
    - `forEachWord` string: Знак/слово для ітераторів (типово «∈»)
    - `capWord` string: Слово підпису фігури (типово «Рисунок»)
    - `capFormat` string: Формат підпису (типово «Рисунок %d. %s»)
    - `figStart` integer: Номер першого рисунка (типово 1)
    - `noCaption` boolean: Без підпису «Рисунок N — …» під схемою (блок-схема й структограма)
  - `poster` Poster: Оформлення для format=poster: код ліворуч, схема праворуч, однією картинкою (PNG). Схему бере той самий конвеєр, тож mode=nsd дає постер зі структограми, а options.locale міняє мову підписів САМОЇ схеми. Усі поля необов'язкові.
    - `preset` 'post' | 'story' | 'slide' | 'doc': post 1200×630 (OG/LinkedIn) · story 1080×1350 (вертикальний) · slide 1920×1080 · doc 1600×900 (світлий, під друк)
    - `chrome` 'mac' | 'win' | 'linux' | 'retro' | 'none': Стиль «вікна» навколо коду
    - `bgStyle` 'gradient' | 'solid' | 'none': none — прозорий фон, коли постер лягає на власне тло (слайд, сторінка методички)
    - `accent` string: Акцент фону, лише #rgb або #rrggbb. Інші значення ігноруються (поле йде в атрибут SVG).
    - `title` string: Підпис зверху, до 120 символів
    - `desc` string: Абзац під панелями, до 600 символів. Переноситься автоматично; якщо не влазить — ріжеться з «…», щоб не зламати розкладку.
    - `source` string: Рядок «джерело» знизу зліва. Порожньо → «Джерело: rombik.app» мовою uiLang.
    - `file` string: Напис на вікні коду. Порожньо → main.<розширення мови>.
    - `uiLang` 'uk' | 'en': Мова написів НА КАРТИНЦІ — мова глядача. Не плутати з options.locale, що керує підписами самої схеми.
    - `columns` integer: Розкласти високу схему в кілька колонок (частини сполучаються конекторами А/Б). Блок-схема висока й вузька, тож у горизонтальному постері стискається до нечитабельного — колонки це лікують. Опція, а не автоматика: вона міняє вигляд схеми, і це рішення автора.

## Response `200`

Схема — файл або JSON (за ?json=1)

- RenderJSONResponse
  - `format` string
  - `lang` string
  - `filename` string
  - `encoding` 'utf-8' | 'base64'
  - `content` string: SVG/Typst/Excalidraw/HTML — рядок; PNG/JPEG/WebP/GIF/PDF — base64
  - `creditsLeft` integer: Скільки експортів лишилось цього місяця (назва поля — для сумісності)

## Other responses

- `400`: Помилка
- `401`: Помилка
- `402`: Помилка
- `413`: Помилка
- `422`: Помилка
- `500`: Помилка
- `503`: Помилка

---

[API](https://skmtc.dev/rombik/apis/rombik-api.md) · [All operations](https://skmtc.dev/rombik/apis/rombik-api/llms.txt) · [OpenAPI document](https://skmtc.dev/rombik/apis/rombik-api/revisions/acaa43ba308c?raw)
