API rombik
Генеруй блок-схеми з коду прямо зі скриптів, CI чи власних застосунків — той самий рушій, що й на сайті, по HTTP.
Готовий скіл для Claude Code та інших агентів — щоб самі робили запити чи писали автоматизацію.
Працюй з API прямо з терміналу — render, batch, баланс, поповнення. «rombik auth» логінить через браузер. Ключ зберігається локально, не передається в промпт.
curl -fsSL https://rombik.app/install.sh | shirm https://rombik.app/install.ps1 | iexАбо завантаж бінарник напряму:
Для AI-клієнтів без зручного терміналу (Claude Desktop, Cursor, Cline…). «rombik mcp» (та сама програма) піднімає MCP через stdio — агент дістає інструменти render_flowchart (схема приходить картинкою прямо в чат), balance, products, topup_link і gift_credits. Авторизація спільна: один раз «rombik auth».
Постав CLI (вище), зроби «rombik auth», тоді під’єднай у клієнті (спосіб залежить від клієнта):
claude mcp add rombik -- rombik mcp{
"mcpServers": {
"rombik": { "command": "rombik", "args": ["mcp"] }
}
}1. Авторизація
Кожен запит підписується API-ключем (rk_…). Створюється в акаунті — показується один раз, далі лише префікс. Заголовок (будь-який із двох):
X-API-Key: rk_ВАШ_КЛЮЧ
Authorization: Bearer rk_ВАШ_КЛЮЧ2. POST /render
Код → блок-схема файлом. Списує 1 кредит за кожну схему (3 схеми у файлі — 3 кредити).
JSON із кодом
curl -X POST https://rombik.app/api/v1/render \
-H "X-API-Key: rk_ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{"code":"def f(a):\n return a*2","lang":"python","format":"svg"}' \
-o schema.svgАбо завантажити файл
curl -X POST https://rombik.app/api/v1/render \
-H "X-API-Key: rk_ВАШ_КЛЮЧ" \
-F [email protected] -F format=pdf \
-o schema.pdfАбо за посиланням (url)
curl -X POST https://rombik.app/api/v1/render \
-H "X-API-Key: rk_ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{"url":"https://raw.githubusercontent.com/user/repo/main/app.py","format":"svg"}' \
-o schema.svg3. Параметри render
| Поле | Тип | Обов. | Опис |
|---|---|---|---|
| code | string | ✔* | Вихідний код (для JSON-тіла). Або файл через -F file=@…, або url |
| url | string | — | Замість code: посилання на файл (raw.githubusercontent · gist · gitlab · bitbucket · codeberg; github blob → raw). Мова — за розширенням |
| lang | string | ✔ | python · cpp · c · java · csharp · pascal. Для файлу — за розширенням |
| format | string | — | docx (Word, нативні фігури) · typst · excalidraw · svg (типово) · png · pdf · json |
| fn | string | — | Рендерити лише функцію з цим іменем |
| scale | int | — | PNG: масштаб (zoom), типово 3 |
| fragment | bool | — | Typst: фрагмент CeTZ без преамбули документа |
| split | bool | — | розбивка на сторінки конекторами А/Б; типово true для docx/pdf/typst-документа, явне true вмикає й для svg/png/excalidraw (false — суцільна) |
| font | string | — | Шрифт SVG (з allowlist; інакше — дефолтний Times) |
| json | bool | — | ?json=1 або {"json":true} — відповідь JSON замість файлу |
| options | object | — | Опції рушія (див. нижче) — слова схеми, формат for, підпис тощо |
* code обов’язковий для JSON-тіла; при завантаженні файлу замість нього — file.
Поля options
| Поле | Тип | Опис |
|---|---|---|
| locale | string | "uk" (типово) · "en" — мова вставок схеми (крок/Виняток…) |
| forFormat | string | comma · range · verbose — вигляд лічильникового for |
| singleEnd | bool | Один «Кінець» замість на кожен вихід |
| mainOnlyTerminators | bool | Початок/Кінець лише для main; підпрограми — Вхід/Вихід |
| callAsProcess | bool | Виклик функції як «Процес», а не «Підпрограма» |
| stripTypes | bool | Прибрати типи з оголошень |
| returnAsIO | bool | return як блок виводу |
| yes / no | string | Підписи гілок (Так/Ні) |
| inWord / outWord | string | Слова вводу/виводу (Ввід/Вивід) |
| startText / endText | string | Термінатори main (Початок/Кінець) |
| entryText / exitText | string | Термінатори підпрограм (Вхід/Вихід) |
| returnWord | string | Слово перед return (Повернути) |
| forEachWord | string | Роздільник foreach (∈) |
| capWord | string | Слово підпису (Рисунок) |
| capFormat | string | Шаблон підпису: {word} {num} — {text} |
| figStart | int | З якого номера нумерувати схеми |
Кастомні значення (свої слова гілок, вводу/виводу, термінатори, returnWord, forEachWord, capWord, capFormat, forFormat) потребують активного Pro на акаунті — інакше 402 pro_required (поле proFeatures перелічує які). Тумблери, locale, font, scale, figStart — безкоштовні.
4. Відповідь render
Типово — файл (потік байтів + Content-Disposition):
HTTP/1.1 200 OK
Content-Type: image/svg+xml
Content-Disposition: attachment; filename=rombik.svg
<svg xmlns="http://www.w3.org/2000/svg" …>…</svg>?json=1 — JSON (поля нижче):
{
"format": "svg",
"lang": "python",
"filename": "rombik.svg",
"encoding": "utf-8", // або "base64" для png/pdf
"content": "<svg …>…</svg>",
"creditsLeft": 41
}format / lang— що відрендереноfilename— запропонована назва файлуencoding—utf-8(svg/typst/excalidraw/json) абоbase64(docx/png/pdf)content— сам результат (рядок або base64)creditsLeft— скільки кредитів лишилось
5. JSON-режим
Зручно для пайплайнів — не файл, а JSON із content. Бінарні (docx/png/pdf) приходять у base64.
curl -X POST "https://rombik.app/api/v1/render?json=1" \
-H "X-API-Key: rk_ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{"code":"...","lang":"cpp","format":"png","scale":3}'6. GET /me
Баланс кредитів і статус Pro за ключем — без браузера.
curl https://rombik.app/api/v1/me \
-H "X-API-Key: rk_ВАШ_КЛЮЧ"Відповідь:
{
"email": "[email protected]",
"name": "You",
"credits": 42,
"pro": true,
"proUntil": "2026-07-01T00:00:00Z" // "" якщо без Pro
}7. Поповнення
POST /topup
Уперся в «немає кредитів»? Отримай лінк на оплату прямо зі скрипта — jarUrl уже з сумою й кодом. Поштучно (credits_unit + qty), пакетом (credits + id) або Pro (pro + id); id — з каталогу на сайті.
curl -X POST https://rombik.app/api/v1/topup \
-H "X-API-Key: rk_ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{"kind":"credits_unit","qty":10}'
# → {"jarUrl":"https://send.monobank.ua/jar/…?a=30&t=rk_cr_…","amountUah":30,…}8. Формати й кредити
Формати: docx · typst · excalidraw · svg · png · pdf · json.
Кожен виклик /render = 1 кредит за кожну схему (сервер рендерить сам, тож без винятків для PNG). Поповнити — у акаунті.
9. Ліміти й помилки
Платний /render — без ліміту (його обмежують кредити). Безкоштовні (/me) — 60 запитів/хв на ключ (понад → 429). Помилки: {"error":"…"}.
| Код | Що означає |
|---|---|
| 200 | OK — файл (або JSON, якщо json=1) |
| 400 | Поганий запит — невідома мова/формат, зламаний JSON або недоступний url (bad_source) |
| 401 | Невідомий або відсутній API-ключ |
| 402 | Немає кредитів (no_credits) або Pro-опції без активного Pro (pro_required) |
| 429 | Ліміт безкоштовних запитів (лише /me): 60/хв на ключ |
| 500 | Помилка рендеру на сервері |
10. Подарунок кредитів
POST /gift
Подаруй кредити експорту другові прямо зі скрипта — вкажи його email і кількість. Списується з твого балансу, нараховується йому (акаунт створиться за email, якщо треба). Він отримає лист і сповіщення в акаунті.
curl -X POST https://rombik.app/api/v1/gift \
-H "X-API-Key: rk_ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]","qty":5}'
# → {"ok":true,"credits":37}11. POST /render/batch
POST /render/batch
Багато джерел за один виклик — кожен елемент це code або url. Списує 1 кредит за кожну схему серед успішних елементів (на балансі — щонайменше за кількістю елементів). format:"pdf" → один багатосторінковий PDF (сторінка на елемент); інші формати → zip із файлом на елемент. До 100 елементів. З ?json=1 — звіт по кожному елементу.
curl -X POST https://rombik.app/api/v1/render/batch \
-H "X-API-Key: rk_ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{"format":"pdf","items":[
{"url":"https://raw.githubusercontent.com/user/repo/main/a.py"},
{"code":"def f(x):\n return x*2","lang":"python","name":"double"}
]}' \
-o project.pdf12. Рідний формат rombik
Для мов, які rombik не парсить (асемблер, псевдокод…), або коли схема не відповідає жодному коду — постав lang:"rombik" і поклади в code дерево схеми як astJSON. Парсер пропускається, але layout сам додає ДСТУ-форми, термінатори Початок/Кінець, мітки Так/Ні й нумерацію. Це повний ручний контроль схеми — лише з активним Pro (інакше 402 pro_required). Усі формати експорту й options працюють як звичайно.
Структура: масив функцій (кожна → окрема схема)
[{ "name": "grade", "main": true, "block": { "kind": "block", "stmts": [
{ "kind": "io", "text": "Ввід s" },
{ "kind": "if", "cond": "s >= 60",
"then": { "stmts": [ { "kind": "io", "text": "Вивід: Залік" } ] },
"else": { "stmts": [ { "kind": "io", "text": "Вивід: Незалік" } ] } },
{ "kind": "for", "cond": "i := 1, n",
"body": { "stmts": [ { "kind": "call", "text": "обробити(i)" } ] } }
] }}]Види вузлів
| kind | Форма | Опис |
|---|---|---|
| process | прямокутник | дія; потрібен text |
| io | паралелограм | ввід/вивід; почни text з «Ввід»/«Вивід» — спрацює локаль/Pro-слова |
| call | підпрограма | виклик; потрібен text |
| terminal | термінатор | окремий; Початок/Кінець навколо функції додаються самі |
| if | ромб | cond + then/else (блоки) |
| for | шестикутник | специфікація у полі cond (напр. «i := 1, n») + body |
| while / dowhile | ромб циклу | cond + body (перед-/постумова) |
| infloop | цикл | нескінченний; body |
| break / continue | — | лише всередині циклу |
| connector | коло | text — мітка; jump:true — goto-стрибок |
Поля вузла: { kind, text?, cond?, then?, else?, body?, stmts?, jump? }. then/else/body — це блок-вузли {"stmts":[…]} (kind можна не вказувати), порожня гілка — {"stmts":[]}. У for специфікація йде в полі cond (не text), формат «змінна := старт, кінець[, крок]», напр. «i := 1, n». Початок/Кінець/Так/Ні вручну не малюй — їх ставить layout. Помилки валідації повертаються текстом (виправ і повтори): невідомий kind, if/while/for без cond, process/io/call без text, break поза циклом, ліміти (≤2000 вузлів, глибина ≤100).
Повний приклад — пошук максимуму в масиві
[
{ "name": "findMax", "main": true, "block": { "kind": "block", "stmts": [
{ "kind": "io", "text": "Ввід a, n" },
{ "kind": "process", "text": "m := a[0]" },
{ "kind": "for", "cond": "i := 1, n-1", "body": { "stmts": [
{ "kind": "if", "cond": "a[i] > m",
"then": { "stmts": [ { "kind": "process", "text": "m := a[i]" } ] },
"else": { "stmts": [] } }
] } },
{ "kind": "io", "text": "Вивід m" },
{ "kind": "terminal", "text": "Повернути m" }
] } }
]Виклик (CLI або MCP render_flowchart з lang:"rombik")
rombik render schema.json --lang rombik -f pdf -o out.pdfГотовий почати?