API

qr-code

Работает в вашем собственном браузере: мы выдаём заказ-наряд, агент открывает страницу тула и выполняет `recipe`, а запуск закрывается, когда файл сохранён. Картинку рисует и сохраняет ваш браузер.

v1 beta browser · 1 ток.

Цена (browser): 1 ток. за вызов. Точная сумма для вашего файла: POST /v1/tools/qr-code/estimate.

Вызов

POST https://timbrica.com/v1/tools/qr-code/runs
Authorization: Bearer $TIMBRICA_KEY
Idempotency-Key: <ваш ключ для безопасного повтора>
Content-Type: application/json

Вход

ПолеТипОбязательноеПояснение
data string да Что закодировать — адрес при type=url, произвольный текст при type=text.
макс. длина: 2000
type string нет
одно из: url, text
по умолчанию: url
format string нет Формат файла.
одно из: png, svg
по умолчанию: png

Рецепт для браузера

Этот тул работает в вашем собственном браузере. Заказ-наряд, который вы получите, несёт этот рецепт с подставленными значениями; селекторы ниже — версионированный контракт, а не деталь реализации: без новой версии они не меняются.

{
    "engine": "dom",
    "steps": [
        {
            "action": "click",
            "selector": "[data-tmb-api=\"type-{{type}}\"]"
        },
        {
            "action": "fill",
            "selector": "[data-tmb-api=\"input-{{type}}\"]",
            "value": "{{data}}"
        },
        {
            "action": "wait",
            "selector": "[data-tmb-api=\"result\"]",
            "timeout_s": 15
        },
        {
            "action": "click",
            "selector": "[data-tmb-api=\"download-{{format}}\"]"
        }
    ],
    "result": {
        "kind": "download",
        "settles": "automatically"
    }
}

Что обязывает сделать каждое действие — других рецепты не используют:

uploadПоложите входной файл в поле выбора файла, найденное по `selector` (оно может быть скрыто — задайте файл напрямую, например setInputFiles в Playwright). Файл должен подходить под `accept`.
clickНажмите элемент, когда он виден И доступен. Если элемент так и остаётся недоступным, предыдущий шаг не сработал.
fillЗамените значение текстового поля на `value`, вызвав события input/change, как при наборе.
selectВыберите в <select> вариант со значением `value`.
waitДождитесь, пока элемент станет видимым, не дольше `timeout_s` секунд (по умолчанию 30).

На каждом шаге проверяйте селектор abort_when из заказ-наряда (html[data-tmb-run="failed"]). Если он сработал, тул отказался от задачи — например, видео не стало бы меньше. Остановитесь и запросите запуск через GET: error.detail скажет почему. Токены не списываются.

Какие ошибки может вернуть

validation_failed  insufficient_tokens 

История

  • v1 — 2026-07-30 — Initial release (browser lane).

Контракт не может измениться без новой версии и строки выше: тест сверяет опубликованную схему, цены и лимиты с закоммиченным lock-файлом и иначе роняет сборку. Подпишитесь на /v1/changelog, чтобы узнавать об изменениях.