Эндпоинты браузера
Все эндпоинты /v1/browser для запусков, секретов в хранилище, файлов и профилей — с параметрами, лимитами, ответами и ошибками.
API браузерного агента находится под https://lovelyrouter.com/v1/browser. Аутентифицируйте каждый запрос API-ключом в виде Authorization: Bearer $LOVELY_API_KEY (Аутентификация). Тела запросов и ответов — JSON, кроме загрузки файлов и скриншотов. Запуски оплачиваются с предоплаченного баланса; см. Режимы, модели и цены.
Пошаговое введение — в обзоре браузерного агента.
Объект запуска#
Запуск — это одна задача для агента. Каждый эндпоинт запусков возвращает этот объект. Поля с пометкой только API отсутствуют в данных вебхуков.
Атрибуты
idstringУникальный id: brun_ и 24 символа.
objectstringВсегда browser_run.
statusstringrunning, waiting_for_human, succeeded, failed, timed_out или stopped.
goalstringОтправленная вами цель.
start_urlstringURL, с которого начался запуск.
enginestringВсегда chromium.
modestringfast или accurate.
modelstring | nullМодель, выбранная через model, или null для включённых моделей.
model_usdnumberТолько если вы выбрали model: сколько уже стоили её токены, включая надбавку 20%.
stepsintegerЗаписанные на данный момент шаги, включая паузы для человека. Паузы не тарифицируются.
max_stepsintegerЛимит шагов запуска.
billable_time_sintegerСекунды сверх включённой минуты каждого шага и каждой паузы на данный момент.
time_usdnumberСтоимость billable_time_s по $0.005 за минуту.
current_urlstringСтраница, на которой находится браузер или находился в момент завершения запуска.
answerstring | nullОтвет агента после завершения. Запуски, дошедшие до max_steps, тоже получают ответ по последней странице.
dataobject | array | nullСтруктурированный вывод после завершения запуска, если вы передали output_schema или цель просила структуру. См. Структурированный вывод.
data_errorstringЕсть только при сбое структурированного вывода, с причиной.
errorstring | nullПочему запуск не завершился успешно, например reached the step limit (50), blocked by the website, no human response within 30 minutes, stopped by the user.
needsobject | nullЧего ждёт запуск, когда status равен waiting_for_human. Иначе null.
profile_savedobject | nullС save_profile — профиль, сохранённый при завершении запуска: id, name и cookies (число сохранённых cookie).
usageobjectdecision_calls и llm_calls: сколько вызовов моделей сделал агент. Для информации; входит в цену шага.
created_atstringКогда начался запуск (ISO 8601).
finished_atstring | nullКогда запуск завершился.
tracearrayТолько с ?trace=1. По записи на шаг: step, url, action (например click:e12, type:e3, choose:e5, secret:e4:shop_password, upload:e9, back, done, или ask, approval, handoff для пауз), description, ms (длительность) и error (null или причина сбоя шага).
charge_usdnumber | nullТолько API. Стоимость запуска после расчёта, который происходит через несколько секунд после его завершения. До этого null.
reserved_usdnumberТолько API. Сумма, зарезервированная, пока запуск идёт; 0 после расчёта.
{
"id": "brun_3f9a1c7e0b2d4e6f8a9b0c1d",
"object": "browser_run",
"status": "succeeded",
"goal": "Find the price of the book \"A Light in the Attic\" and whether it is in stock.",
"start_url": "https://books.toscrape.com/",
"engine": "chromium",
"mode": "fast",
"model": null,
"steps": 2,
"max_steps": 50,
"billable_time_s": 0,
"time_usd": 0,
"current_url": "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html",
"answer": "\"A Light in the Attic\" costs £51.77 and is in stock (22 available).",
"data": null,
"error": null,
"needs": null,
"profile_saved": null,
"usage": { "decision_calls": 3, "llm_calls": 1 },
"created_at": "2026-10-11T09:30:00.000Z",
"finished_at": "2026-10-11T09:30:07.000Z",
"trace": [
{
"step": 1,
"url": "https://books.toscrape.com/",
"action": "click:e54",
"description": "click link \"A Light in the ...\" → https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html",
"ms": 2140,
"error": null
},
{
"step": 2,
"url": "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html",
"action": "done",
"description": "Read the result and wrote the answer",
"ms": 2875,
"error": null
}
],
"charge_usd": 0.012,
"reserved_usd": 0
}Создание запуска#
/v1/browser/runsНачинает запуск и сразу возвращает 202 с объектом запуска. Агент работает в фоне; следите за ним через поток событий, Получение запуска или вебхук. Старт запуска резервирует его максимальную стоимость на вашем балансе (как работает резерв).
В ответе также есть poll — готовый путь для проверки статуса с ?wait=30, events — поток событий запуска, и webhook_secret, если вы передали webhook. webhook_secret возвращается только здесь (или в первом событии потокового старта).
С "stream": true ответ вместо этого — 200 с потоком событий запуска от начала и до завершения. См. События и экран в реальном времени.
Параметры тела запроса
goalstringОбязательноЧто сделать, простыми словами, со всеми значениями, которые нужны задаче. До 4 000 символов. См. Как писать работающие цели.
start_urlstringОбязательноПервая страница, которую нужно открыть. URL http или https.
modestringПо умолчанию fastfast ($0.006 за шаг) или accurate ($0.012 за шаг: при сомнениях также смотрит на скриншоты и может выполнять код страницы только для чтения). См. Режимы.
max_stepsintegerПо умолчанию 50Лимит шагов, от 1 до 100. Значения вне диапазона приводятся к его границам. Запуск оплачивается только за сделанные шаги.
output_schemaobjectJSON Schema (draft 2020-12) или сокращённая запись вроде {"title": "string", "items": [{"name": "string"}]} для JSON в data. До 20 КБ.
approvestringПо умолчанию riskyКогда делать паузу для подтверждения перед действием, которое что-то отправляет (кнопка отправки, кнопка покупки/бронирования/оплаты/отправки/удаления или Enter в форме, не являющейся поиском): risky (только покупки, заказы, отправка, удаление, заявки), submit (каждое такое действие) или none. Любое другое значение возвращает 400.
humanbooleanПо умолчанию trueМожет ли агент задавать вопросы и передавать браузер человеку. Задайте false для запусков без присмотра.
human_timeout_minutesnumberПо умолчанию 30` (`5` для запускаСколько каждая пауза ждёт ответа, от 1 до 1 440 минут. Значения вне диапазона приводятся к его границам. Затем запуск завершается как timed_out.
secretsarrayИмена секретов из хранилища, которые агент может вводить.
ephemeral_secretsobjectСекреты только для этого запуска, удаляются при его завершении. Отображение имени (те же правила, что для имён в хранилище) в:
filesarray | stringИмена или id загруженных файлов, которые агент может прикреплять, или "*" для всех.
profilestringИмя или id сохранённого профиля, с которого нужно начать.
save_profilestringСохранить cookie и локальное хранилище сессии под этим именем при завершении запуска. До 64 символов.
allowed_domainsarrayИмена хостов, которые может посещать браузер, например "example.com" или "*.example.com". До 50.
webhookstringURL https, который получает события run.waiting и run.finished.
modelstringId модели из GET /v1/models, например claude-sonnet-5.5, для рассуждений, написания текста и извлечения данных агентом. Её токены оплачиваются по обычной цене плюс 20%.
max_model_usdnumberС model: максимум, который могут стоить её токены, включая надбавку. По умолчанию — оценка по max_steps и ценам модели.
streambooleanПо умолчанию falsetrue возвращает поток событий запуска (text/event-stream) вместо JSON с 202.
screenbooleanПо умолчанию falseСо stream: добавить события frame с экраном браузера.
curl https://lovelyrouter.com/v1/browser/runs \
-H "Authorization: Bearer $LOVELY_API_KEY" \
-H "content-type: application/json" \
-d '{
"goal": "Find the price of the book \"A Light in the Attic\" and whether it is in stock.",
"start_url": "https://books.toscrape.com/"
}'{
"id": "brun_3f9a1c7e0b2d4e6f8a9b0c1d",
"object": "browser_run",
"status": "running",
"goal": "Find the price of the book \"A Light in the Attic\" and whether it is in stock.",
"start_url": "https://books.toscrape.com/",
"engine": "chromium",
"mode": "fast",
"model": null,
"steps": 0,
"max_steps": 50,
"billable_time_s": 0,
"time_usd": 0,
"current_url": "https://books.toscrape.com/",
"answer": null,
"data": null,
"error": null,
"needs": null,
"profile_saved": null,
"usage": { "decision_calls": 0, "llm_calls": 0 },
"created_at": "2026-10-11T09:30:00.000Z",
"finished_at": null,
"poll": "/v1/browser/runs/brun_3f9a1c7e0b2d4e6f8a9b0c1d?wait=30",
"events": "/v1/browser/runs/brun_3f9a1c7e0b2d4e6f8a9b0c1d/events",
"charge_usd": null,
"reserved_usd": 0.445
}Получение запуска#
/v1/browser/runs/{id}Возвращает объект запуска. С wait запрос удерживается, пока не изменится статус запуска (или вид паузы) либо пока не пройдёт wait секунд, а затем возвращает текущее состояние. Пока запуск в состоянии waiting_for_human, ответ приходит сразу.
Параметры запроса
waitintegerПо умолчанию 0Сколько секунд удерживать запрос, пока запуск в состоянии running, до 50.
tracestring1 добавляет trace — список шагов на данный момент.
curl "https://lovelyrouter.com/v1/browser/runs/brun_3f9a1c7e0b2d4e6f8a9b0c1d?wait=30&trace=1" \
-H "Authorization: Bearer $LOVELY_API_KEY"Ответ — объект запуска, с trace, если вы передали trace=1.
Поток событий запуска#
/v1/browser/runs/{id}/eventsВозвращает события запуска в реальном времени как Server-Sent Events (text/event-stream), пока запуск не завершится. Первое событие — объект запуска с trace; затем activity (что агент делает сейчас), step (каждый завершённый шаг), run (после каждого шага, а также при начале и конце паузы) и, со screen, frame (экран браузера). Последние события — завершённый запуск с charge_usd и end. Уже завершённый запуск сразу присылает своё событие run и end. Строки, начинающиеся с :, — комментарии для поддержания соединения. См. События и экран в реальном времени.
Параметры запроса
screenstring1 добавляет события frame: data (JPEG браузера в base64) и at. Одно при подключении, затем при каждом изменении страницы, не чаще примерно 4 в секунду.
| Событие | data |
|---|---|
run | Объект запуска с charge_usd и reserved_usd; в первом есть trace |
activity | step, kind (starting, reading, waiting, deciding, thinking, checking, acting, answering, extracting) и text |
step | Одна запись trace |
frame | data (JPEG в base64) и at |
end | id |
curl -N "https://lovelyrouter.com/v1/browser/runs/brun_3f9a1c7e0b2d4e6f8a9b0c1d/events?screen=1" \
-H "Authorization: Bearer $LOVELY_API_KEY"event: run
data: {"id":"brun_3f9a1c7e0b2d4e6f8a9b0c1d","object":"browser_run","status":"running","steps":1,"trace":[…],…}
event: frame
data: {"data":"/9j/4AAQSkZJRgABAQ…","at":"2026-10-11T09:30:03.120Z"}
event: activity
data: {"step":2,"kind":"answering","text":"Reading the result and writing the answer"}
event: step
data: {"step":2,"url":"https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html","action":"done","description":"Read the result and wrote the answer","ms":2875,"error":null}
event: run
data: {"id":"brun_3f9a1c7e0b2d4e6f8a9b0c1d","status":"succeeded","answer":"\"A Light in the Attic\" costs £51.77 and is in stock (22 available).","charge_usd":0.012,…}
event: end
data: {"id":"brun_3f9a1c7e0b2d4e6f8a9b0c1d"}Список запусков#
/v1/browser/runsВозвращает 50 последних запусков браузерного агента, сначала новые, в краткой форме. Полное состояние даёт получение запуска.
| Поле | Значение |
|---|---|
id | Id запуска |
billing_status | running, пока запуск не рассчитан, затем succeeded, failed, timed_out или stopped |
goal | Первые 200 символов цели |
steps | Оплаченные шаги, 0, пока запуск не рассчитан |
created_at | Когда начался запуск |
curl https://lovelyrouter.com/v1/browser/runs \
-H "Authorization: Bearer $LOVELY_API_KEY"{
"object": "list",
"data": [
{
"id": "brun_3f9a1c7e0b2d4e6f8a9b0c1d",
"billing_status": "succeeded",
"goal": "Find the price of the book \"A Light in the Attic\" and whether it is in stock.",
"steps": 2,
"created_at": "2026-10-11T09:30:00.000Z"
}
]
}Ответ запуску#
/v1/browser/runs/{id}/replyОтвечает запуску в состоянии waiting_for_human. Отправляйте ровно один вид ответа, соответствующий needs.kind. Возвращает 200 с объектом запуска, status которого снова running. См. Человек в контуре.
Параметры тела запроса
answerstringДля question: текст, который прочитает агент. До 2 000 символов.
secretstringДля question: значение, которое агент введёт на текущем сайте, не видя его. До 4 096 символов. Его можно ввести в любое текстовое поле на этом сайте, включая поля пароля и PIN.
approvebooleanДля approval: true — разрешить агенту нажать кнопку, false — отказать.
denybooleanДля approval: true равнозначно "approve": false.
reasonstringПри отказе: почему, чтобы агент прочитал. До 500 символов.
donebooleanДля takeover: true, когда человек закончил. Агент продолжает с текущей страницы.
failedbooleanДля takeover: true, когда человек не смог закончить.
notestringС done или failed: что сделал человек, чтобы агент прочитал. До 500 символов.
Ошибки: 400, если тело не соответствует ни одной форме ответа, 409 This run is not waiting for a reply и 409 This run is waiting for a reply of kind "question" (или approval, takeover), если ответ не соответствует паузе.
curl https://lovelyrouter.com/v1/browser/runs/brun_5b7d9f1a3c5e7a9b1d3f5a7c/reply \
-H "Authorization: Bearer $LOVELY_API_KEY" \
-H "content-type: application/json" \
-d '{"secret": "481923"}'{"answer": "Use the billing address."}
{"approve": true}
{"approve": false, "reason": "Wrong delivery date"}
{"done": true, "note": "Solved the CAPTCHA"}
{"failed": true, "note": "The site asked for a phone call"}Перехват управления#
/v1/browser/runs/{id}/takeoverПросит запуск передать вам браузер после текущего шага. Возвращает 202 с объектом запуска. Следующий статус показывает waiting_for_human с needs.kind, равным takeover, и live_view_url. Верните управление ответом {"done": true}.
Если запуск ждёт ответа на вопрос или подтверждения, перехват начнётся после того, как вы ответите. Завершённый запуск возвращает 409 с This run has finished.
Параметры тела запроса
instructionsstringПоказывается как prompt паузы. До 500 символов. По умолчанию: The user asked to take over the browser.
curl https://lovelyrouter.com/v1/browser/runs/brun_5b7d9f1a3c5e7a9b1d3f5a7c/takeover \
-H "Authorization: Bearer $LOVELY_API_KEY" \
-H "content-type: application/json" \
-d '{"instructions": "I will pick the delivery slot myself."}'Остановка запуска#
/v1/browser/runs/{id}/stopОстанавливает запуск. Он завершается как stopped на границе следующего шага или сразу, если ждёт человека. Возвращает 202 с объектом запуска в прежнем состоянии; следующий статус показывает stopped. Остановленный запуск оплачивает сделанные шаги и не возвращает data.
curl -X POST https://lovelyrouter.com/v1/browser/runs/brun_3f9a1c7e0b2d4e6f8a9b0c1d/stop \
-H "Authorization: Bearer $LOVELY_API_KEY"Получение скриншота#
/v1/browser/runs/{id}/screenshotВозвращает JPEG (image/jpeg) браузера. Пока у запуска открыт браузер, это экран в текущий момент; иначе — последний сохранённый: страница в момент начала паузы для человека или финальная страница завершённого запуска. Этот путь содержится в needs.screenshot. Если скриншота нет, возвращает 404 с No screenshot yet. Чтобы следить за экраном непрерывно, подпишитесь на поток событий запуска с screen=1.
curl https://lovelyrouter.com/v1/browser/runs/brun_5b7d9f1a3c5e7a9b1d3f5a7c/screenshot \
-H "Authorization: Bearer $LOVELY_API_KEY" \
-o screen.jpgСохранение секрета#
/v1/browser/vault/{name}Сохраняет секрет, доступный только для записи, или заменяет секрет с этим именем. Агент может вводить его только на перечисленных origin, а модель никогда его не видит. См. Логины, секреты и профили.
Параметры пути
namestringОбязательноОт 1 до 64 символов: строчные a-z, 0-9, _, ., -, начиная с буквы или цифры.
Параметры тела запроса
valuestringОбязательноСекрет, до 4 КБ (для больших значений возвращается 413). Для totp: seed в base32 (16+ символов из A-Z, 2-7).
kindstringПо умолчанию passwordpassword (только поля пароля), username или text (текстовые поля, но не поля пароля) либо totp (вводится как текущий 6-значный код).
originsarrayОбязательноОт 1 до 20 origin, например https://github.com или https://*.example.com. Только https, кроме http://localhost и http://127.0.0.1.
curl -X PUT https://lovelyrouter.com/v1/browser/vault/github_password \
-H "Authorization: Bearer $LOVELY_API_KEY" \
-H "content-type: application/json" \
-d '{"value": "correct-horse-battery-staple", "kind": "password", "origins": ["https://github.com"]}'{ "name": "github_password", "kind": "password", "origins": ["https://github.com"], "stored": true }curl https://lovelyrouter.com/v1/browser/vault \
-H "Authorization: Bearer $LOVELY_API_KEY"{
"object": "list",
"data": [
{
"name": "github_password",
"kind": "password",
"origins": ["https://github.com"],
"created_at": "2026-10-11T09:00:00.000Z",
"updated_at": "2026-10-11T09:00:00.000Z",
"last_used_at": "2026-10-11T09:12:31.000Z"
}
]
}Удаление секрета#
/v1/browser/vault/{name}Удаляет секрет. Запуски, в которых он указан, больше не смогут его вводить. Если секрета нет, возвращает 404 с No such secret.
curl -X DELETE https://lovelyrouter.com/v1/browser/vault/github_password \
-H "Authorization: Bearer $LOVELY_API_KEY"{ "deleted": "github_password" }Загрузка файла#
/v1/browser/files/{name}Загружает файл, который агент может прикреплять к формам, или заменяет файл с этим именем (сохраняя его id). Отправьте «сырые» байты в теле, а тип файла — в Content-Type. См. Загрузка файлов.
Параметры пути и запроса
namestringОбязательноВ пути, в URL-кодировке. От 1 до 128 символов: буквы, цифры, пробелы и . _ - ( ) + ,, начиная с буквы, цифры или _.
descriptionstringПараметр запроса. Что это за файл, чтобы агенту было проще выбрать. До 300 символов.
Файлы ограничены 10 МБ (413) и 100 штуками на аккаунт (409 file limit reached (100); delete some first).
curl -X PUT "https://lovelyrouter.com/v1/browser/files/Maria_Garcia_CV_2026.pdf?description=Resume" \
-H "Authorization: Bearer $LOVELY_API_KEY" \
-H "content-type: application/pdf" \
--data-binary @Maria_Garcia_CV_2026.pdf{
"id": "file_7a3c9e1b5d2f8a4c6e0b",
"name": "Maria_Garcia_CV_2026.pdf",
"mime": "application/pdf",
"bytes": 84213,
"sha256": "5f2b8c…",
"description": "Resume",
"created_at": "2026-10-11T09:20:44.000Z",
"last_used_at": null
}Загрузка файла через форму#
/v1/browser/filesТо же, что Загрузка файла, но как multipart/form-data. Возвращает тот же объект файла.
Поля формы
filefileОбязательноСам файл. Его тип берётся из типа содержимого части.
namestringИмя, под которым его сохранить. По умолчанию — имя загруженного файла.
descriptionstringЧто это за файл. До 300 символов.
curl https://lovelyrouter.com/v1/browser/files \
-H "Authorization: Bearer $LOVELY_API_KEY" \
-F "file=@Maria_Garcia_CV_2026.pdf;type=application/pdf" \
-F "description=Resume"Список файлов#
/v1/browser/filesВыводит ваши загруженные файлы, отсортированные по имени. last_used_at — когда запуск в последний раз прикреплял файл.
curl https://lovelyrouter.com/v1/browser/files \
-H "Authorization: Bearer $LOVELY_API_KEY"{
"object": "list",
"data": [
{
"id": "file_7a3c9e1b5d2f8a4c6e0b",
"name": "Maria_Garcia_CV_2026.pdf",
"mime": "application/pdf",
"bytes": 84213,
"sha256": "5f2b8c…",
"description": "Resume",
"created_at": "2026-10-11T09:20:44.000Z",
"last_used_at": "2026-10-11T09:47:10.000Z"
}
]
}Удаление файла#
/v1/browser/files/{name}Удаляет файл по имени или id. Если файла нет, возвращает 404 с No such file.
curl -X DELETE https://lovelyrouter.com/v1/browser/files/Maria_Garcia_CV_2026.pdf \
-H "Authorization: Bearer $LOVELY_API_KEY"{ "deleted": "Maria_Garcia_CV_2026.pdf" }Список профилей#
/v1/browser/profilesВыводит ваши сохранённые сессии, сначала недавно обновлённые. Запуск создаёт или обновляет профиль через save_profile и начинает с профиля через profile. origins — сайты, для которых в профиле есть cookie или локальное хранилище; bytes — его размер.
curl https://lovelyrouter.com/v1/browser/profiles \
-H "Authorization: Bearer $LOVELY_API_KEY"{
"object": "list",
"data": [
{
"id": "prof_4c1e9a7b2d0f3e5a8b6c",
"name": "shop-login",
"origins": ["https://shop.example.com"],
"bytes": 18342,
"created_at": "2026-10-10T16:02:11.000Z",
"updated_at": "2026-10-11T09:15:40.000Z",
"last_used_at": "2026-10-11T09:14:58.000Z"
}
]
}Удаление профиля#
/v1/browser/profiles/{id}Удаляет профиль по id или имени. Если профиля нет, возвращает 404 с No such profile.
curl -X DELETE https://lovelyrouter.com/v1/browser/profiles/shop-login \
-H "Authorization: Bearer $LOVELY_API_KEY"{ "deleted": "shop-login" }Ошибки#
Ошибки возвращают JSON-тело с type и понятным человеку message. В сообщениях указано поле, в котором ошибка. См. также Ошибки.
| Статус | type | Когда |
|---|---|---|
400 | invalid_request_error | Тело или параметр некорректны, например "goal" is required (max 4,000 characters), Unknown vault secret(s): …, Unknown file(s): …, Unknown profile "…". |
401 | authentication_error | API-ключ отсутствует, недействителен, отозван или просрочен. |
402 | insufficient_quota | Баланс меньше резерва запуска, или резерв превысит лимит расходов ключа. |
404 | not_found | В вашем аккаунте нет такого запуска, секрета, файла, профиля или скриншота. |
409 | invalid_request_error | Запуск не ждёт этого ответа, уже завершился, или у вас уже 100 файлов. |
413 | invalid_request_error | Файл больше 10 МБ или секрет в хранилище больше 4 КБ. |
429 | rate_limit_exceeded | Уже идут 10 запусков (браузерного агента и инструментов данных вместе). |
502 | tool_unavailable | Запуск не удалось начать. Плата не взята; попробуйте снова. |
503 | tool_unavailable | Браузерный агент временно недоступен. |
{
"error": {
"type": "invalid_request_error",
"message": "\"start_url\" must be an http(s) URL"
}
}