Эндпоинты инструментов
Справочник по всем эндпоинтам /v1/tools, объекту инструмента и объекту запуска.
API инструментов позволяет просматривать, искать и запускать инструменты для данных. Запросы и ответы передаются в JSON. Базовый URL — https://lovelyrouter.com/v1.
Аутентификация. Эндпоинты каталога (список, получение, поиск и планирование) публичны. Для запуска инструментов и чтения запусков нужен API-ключ в заголовке Authorization: Bearer. Запуски инструментов оплачиваются с того же предоплаченного баланса, что и модели.
Ошибки. Неудачные запросы возвращают объект error с полями type и message. См. Ошибки.
Языки. Эндпоинты каталога принимают lang (zh или ja) для локализации названий и описаний инструментов — как параметр запроса в GET или как поле тела в POST.
curl https://lovelyrouter.com/v1/tools/runs \
-H "Authorization: Bearer $LOVELY_API_KEY"Объект инструмента#
Инструмент в каталоге. Эндпоинты списка и поиска возвращают сводные поля. Получение инструмента добавляет схему входных данных, пример входных данных, ограничение по времени и готовый запрос на запуск.
Атрибуты
idstringId инструмента, используется в путях запуска. Например, google-maps-places.
namestringОтображаемое название, локализуется через lang.
platformstringСайт или источник, из которого инструмент читает данные, например Google Maps или TikTok.
categorystringОдно из значений: social-media, search, ecommerce, lead-generation, reviews, jobs, travel, web.
descriptionstringЧто возвращает инструмент, локализуется через lang.
priceobjectАктуальная цена.
default_resultsintegerПредел числа результатов, который используется, если вы не задали max_results.
max_resultsintegerНаибольший предел числа результатов, который принимает запуск этого инструмента.
featuredbooleanОтмечен ли инструмент как популярный на странице инструментов.
input_schemaobjectJSON Schema для input запуска. Только при получении инструмента.
example_inputobjectВходные данные, которые работают как есть. Только при получении инструмента.
timeout_sintegerОграничение времени запуска в секундах. Запуск, превысивший его, завершается как timed_out. Только при получении инструмента.
runobjectГотовый запрос на запуск: method, path и body с примером входных данных и пределом по умолчанию. Только при получении инструмента.
{
"id": "google-maps-places",
"name": "Search Google Maps places",
"platform": "Google Maps",
"category": "search",
"description": "Find local businesses on Google Maps by keyword and location: name, address, phone, website, rating, review count, opening hours, coordinates.",
"price": {
"per_call_usd": 0.00075,
"per_result_usd": 0.000238,
"unit": "place",
"label": "$0.000238 / place + $0.00075 / call"
},
"default_results": 10,
"max_results": 200,
"featured": true
}Список инструментов#
/v1/toolsВозвращает все доступные инструменты. Ключ не нужен.
Параметры запроса
categorystringТолько инструменты этой категории, например reviews.
qstringКлючевые слова. Возвращает подходящие инструменты, упорядоченные по релевантности, до 100.
langstringПо умолчанию enzh или ja для локализации названий и описаний.
Возвращает объект списка с инструментами в data.
curl "https://lovelyrouter.com/v1/tools?category=reviews"{
"object": "list",
"data": [
{
"id": "google-maps-reviews",
"name": "Google Maps reviews",
"platform": "Google Maps",
"category": "reviews",
"description": "Reviews of a Google Maps place (by place ID or URL): text, stars, date, owner replies.",
"price": {
"per_call_usd": 0,
"per_result_usd": 0.000675,
"unit": "review",
"label": "$0.000675 / review"
},
"default_results": 20,
"max_results": 500,
"featured": false
}
]
}Получение инструмента#
/v1/tools/{id}Возвращает один инструмент с его input_schema, example_input, timeout_s и готовым запросом run. Ключ не нужен. Для неизвестного id возвращает 404.
Параметры пути
idstringОбязательноId инструмента.
Параметры запроса
langstringПо умолчанию enzh или ja для локализации названия и описания. Схемы входных данных остаются на английском.
curl https://lovelyrouter.com/v1/tools/trustpilot-reviews{
"id": "trustpilot-reviews",
"name": "Trustpilot reviews",
"platform": "Trustpilot",
"category": "reviews",
"description": "Trustpilot reviews of a company by domain: stars, text, date, reply.",
"price": {
"per_call_usd": 0.0075,
"per_result_usd": 0.0015,
"unit": "review",
"label": "$0.0015 / review + $0.0075 / call"
},
"default_results": 20,
"max_results": 500,
"featured": false,
"input_schema": {
"type": "object",
"properties": {
"companyUrls": {
"type": "array",
"title": "Company URLs or Domains",
"description": "Enter Trustpilot company URLs (e.g., https://www.trustpilot.com/review/example.com) or just the domain (e.g., example.com). One per line."
},
"maxReviewsPerCompany": {
"type": "integer",
"title": "Max reviews per company (reviews)",
"default": 0,
"minimum": 0
}
},
"required": ["companyUrls"]
},
"example_input": {
"companyUrls": ["pipedrive.com"],
"maxReviewsPerCompany": 20
},
"timeout_s": 300,
"run": {
"method": "POST",
"path": "/v1/tools/trustpilot-reviews/run",
"body": {
"input": { "companyUrls": ["pipedrive.com"], "maxReviewsPerCompany": 20 },
"max_results": 20
}
}
}Поиск инструментов#
/v1/tools/discoverПоиск по каталогу по ключевым словам. Возвращает лучшие совпадения, каждое с оценкой релевантности score. Ключ не нужен.
Параметры тела запроса
querystringОбязательноЧто вам нужно, в нескольких словах. Например, tiktok comments. Используются первые 1 000 символов.
limitintegerПо умолчанию 5Число результатов, от 1 до 40.
langstringПо умолчанию enzh или ja для локализации названий и описаний.
Возвращает query, count и results: объекты инструментов с полем score. Оценки позволяют сравнивать инструменты только в рамках одного запроса. Тело без query возвращает 400.
curl https://lovelyrouter.com/v1/tools/discover \
-H "content-type: application/json" \
-d '{"query": "google maps reviews", "limit": 2}'{
"query": "google maps reviews",
"count": 2,
"results": [
{
"id": "google-maps-reviews",
"name": "Google Maps reviews",
"platform": "Google Maps",
"category": "reviews",
"description": "Reviews of a Google Maps place (by place ID or URL): text, stars, date, owner replies.",
"price": { "per_call_usd": 0, "per_result_usd": 0.000675, "unit": "review", "label": "$0.000675 / review" },
"default_results": 20,
"max_results": 500,
"featured": false,
"score": 0.889
},
{
"id": "google-maps-places",
"name": "Search Google Maps places",
"platform": "Google Maps",
"category": "search",
"description": "Find local businesses on Google Maps by keyword and location: name, address, phone, website, rating, review count, opening hours, coordinates.",
"price": { "per_call_usd": 0.00075, "per_result_usd": 0.000238, "unit": "place", "label": "$0.000238 / place + $0.00075 / call" },
"default_results": 10,
"max_results": 200,
"featured": true,
"score": 0.717
}
]
}Планирование задачи#
/v1/tools/suggestОпишите задачу простыми словами и получите упорядоченный план: инструмент, который нужно запустить первым, необязательный второй инструмент и близкие альтернативы — каждый с примером входных данных и оценкой стоимости. Бесплатно, с лимитом 100 запросов в минуту на API-ключ. Вызовы без ключа делят общий пул в 100 запросов в минуту. При превышении лимита эндпоинт возвращает 429 с заголовком retry-after.
Параметры тела запроса
taskstringОбязательноЗадача, до 2 000 символов. Более длинные задачи возвращают 413.
limitintegerПо умолчанию 5Максимальное число предложений, от 1 до 8.
langstringПо умолчанию enzh или ja для локализации названий и описаний.
Возвращает
taskstringОтправленная вами задача.
sourcestringai — план от планировщика, keyword — совпадения по ключевым словам, когда планировщик недоступен.
cachedbooleanВзят ли план из кеша идентичных задач (хранится сутки).
countintegerЧисло предложений. 0, если ни один инструмент не подходит для задачи.
suggestionsarrayПлан по порядку. Каждая запись — объект инструмента плюс:
total_est_cost_usdnumberСумма шагов primary и next. Альтернативы не учитываются.
curl https://lovelyrouter.com/v1/tools/suggest \
-H "Authorization: Bearer $LOVELY_API_KEY" \
-H "content-type: application/json" \
-d '{"task": "Find vegan restaurants in Austin and summarize what their reviews complain about"}'{
"task": "Find vegan restaurants in Austin and summarize what their reviews complain about",
"source": "ai",
"cached": false,
"count": 2,
"suggestions": [
{
"step": 1,
"role": "primary",
"match": 0.961,
"id": "google-maps-places",
"name": "Search Google Maps places",
"platform": "Google Maps",
"category": "search",
"price": { "per_call_usd": 0.00075, "per_result_usd": 0.000238, "unit": "place", "label": "$0.000238 / place + $0.00075 / call" },
"input": {
"searchTerms": ["coffee shop"],
"location": "Austin, Texas, USA",
"maxResults": 3,
"language": "en"
},
"input_required": [],
"max_results": 10,
"est_cost_usd": 0.00313,
"run": {
"method": "POST",
"path": "/v1/tools/google-maps-places/run",
"body": { "input": { "searchTerms": ["coffee shop"], "location": "Austin, Texas, USA", "maxResults": 3, "language": "en" }, "max_results": 10 }
}
},
{
"step": 2,
"role": "next",
"match": 0.875,
"id": "google-maps-reviews",
"name": "Google Maps reviews",
"platform": "Google Maps",
"category": "reviews",
"price": { "per_call_usd": 0, "per_result_usd": 0.000675, "unit": "review", "label": "$0.000675 / review" },
"input": { "placeIds": ["ChIJN1t_tDeuEmsRUsoyG83frY4"], "maxReviews": 3, "reviewsSort": "newest" },
"input_required": [],
"max_results": 20,
"est_cost_usd": 0.0135,
"run": {
"method": "POST",
"path": "/v1/tools/google-maps-reviews/run",
"body": { "input": { "placeIds": ["ChIJN1t_tDeuEmsRUsoyG83frY4"], "maxReviews": 3, "reviewsSort": "newest" }, "max_results": 20 }
}
}
],
"total_est_cost_usd": 0.01663
}Объект запуска#
Запуск инструмента. Возвращается эндпоинтами запуска, получения, остановки и списка.
Атрибуты
idstringId запуска: run_ и 24 символа.
objectstringВсегда tool_run.
toolstringId инструмента.
tool_namestringОтображаемое название инструмента.
statusstringrunning, succeeded, failed, timed_out (достигнуто ограничение времени инструмента) или stopped (остановлен вами).
inputobject or nullВходные данные, с которыми выполнялся запуск: имена полей из прежних версий инструмента приведены к текущим, а поле лимита инструмента заполнено из предела числа результатов (с разбивкой по поискам у инструментов, чей лимит считается на каждый поиск). Используйте его, чтобы сопоставлять запуски со своими запросами, например после обрыва соединения. null для некоторых запусков, сделанных до 20 октября 2026 года.
resultsintegerЧисло возвращённых и оплаченных результатов. 0, пока запуск не завершён.
max_resultsintegerПредел числа результатов, действующий для этого запуска. Он может отличаться от запрошенного: понижается до максимума инструмента или повышается до минимального размера запуска инструмента.
charge_usdnumber or nullСколько стоил запуск. null, пока по запуску не произведён расчёт.
reserved_usdnumberСумма, зарезервированная на балансе, пока расчёт по запуску не произведён. После расчёта — 0.
errorstring or nullПочему запуск завершился досрочно. null для запусков в статусах running и succeeded.
created_atstringКогда запуск начался, в формате ISO 8601.
finished_atstring or nullКогда запуск завершился, в формате ISO 8601. null, пока он выполняется.
pollstringПуть для опроса результата. Только в ответах 202.
itemsarray or nullРезультаты в собственном формате инструмента. Только после завершения запуска и не в списке. null, если результаты временно недоступны; см. items_error.
offsetintegerИндекс первого результата в items. Только если у запуска есть результаты.
next_offsetinteger or nullСмещение следующей страницы результатов или null на последней странице.
items_errorstringПрисутствует, только когда items равно null. Запросите запуск ещё раз, чтобы загрузить результаты.
reportobjectСведения обо всём запуске, которые некоторые инструменты возвращают помимо items. Инструменты переходов с сайтов (site-referrals, site-outgoing): запрошенный site, period, число сайтов в списке sites, unattributed (переходы, не отнесённые ни к одному сайту, или null) и для site-referrals — monthly: общее число переходов на сайт по месяцам, например [{"month": "2026-04", "visits": 55133}] (у site-outgoing — null). У каждого их результата тоже есть monthly — посещения этого сайта по месяцам или null, если помесячных данных нет.
{
"id": "run_8c1f0e2a9b7d4f3e6a5c2b1d",
"object": "tool_run",
"tool": "google-maps-places",
"tool_name": "Search Google Maps places",
"status": "succeeded",
"input": {
"searchTerms": ["coffee shop"],
"location": "Austin, Texas, USA",
"maxResults": 20,
"language": "en",
"radius": 20
},
"results": 20,
"max_results": 20,
"charge_usd": 0.00551,
"reserved_usd": 0,
"error": null,
"created_at": "2026-10-11T15:02:11.204Z",
"finished_at": "2026-10-11T15:02:38.917Z",
"items": [
{
"title": "Godsent Coffee",
"categoryName": "Coffee shop",
"address": "9817 Anderson Mill Rd, Austin, TX 78750",
"totalScore": 5,
"reviewsCount": 237,
"placeId": "ChIJq7RZDGczW4YRyCS5Z0KiiDE"
}
],
"offset": 0,
"next_offset": null
}Запуск инструмента#
/v1/tools/{id}/runНачинает запуск и ждёт его до wait секунд. Максимальная стоимость запуска (плата за вызов плюс плата за результат, умноженная на предел) резервируется на балансе, а расчёт производится по завершении. Нужен API-ключ.
Возвращает 200 с завершённым объектом запуска и его items или 202 с выполняющимся запуском и путём poll. Ответ 200 может содержать запуск в статусе failed или timed_out: проверяйте status. Любой статус ошибки означает, что запуск не начался и ничего не списано.
Id инструмента можно передать и в теле: POST /v1/tools/run с "tool": "google-maps-places".
Запуск browser-agent вместо этого возвращает 202 и запуск браузера, где max_results — максимальное число шагов. См. Браузерный агент.
Параметры пути
idstringОбязательноId инструмента.
Параметры тела запроса
inputobjectПо умолчанию {}Входные данные инструмента в соответствии с его input_schema. Поля из input_schema.required обязательны. До 50 000 символов в виде JSON.
max_resultsintegerМаксимальное число результатов для возврата и оплаты, не больше max_results инструмента. По умолчанию — default_results инструмента, а для инструментов, которые принимают список записей с одним результатом на каждую, — длина списка.
waitintegerПо умолчанию 60Сколько секунд ждать завершения запуска, от 0 до 300. Также принимается как параметр запроса ?wait=.
curl https://lovelyrouter.com/v1/tools/google-maps-places/run \
-H "Authorization: Bearer $LOVELY_API_KEY" \
-H "content-type: application/json" \
-d '{
"input": {"searchTerms": ["coffee shop"], "location": "Austin, Texas, USA"},
"max_results": 20
}'{
"id": "run_8c1f0e2a9b7d4f3e6a5c2b1d",
"object": "tool_run",
"tool": "google-maps-places",
"tool_name": "Search Google Maps places",
"status": "running",
"results": 0,
"max_results": 20,
"charge_usd": null,
"reserved_usd": 0.00551,
"error": null,
"created_at": "2026-10-11T15:02:11.204Z",
"finished_at": null,
"poll": "/v1/tools/runs/run_8c1f0e2a9b7d4f3e6a5c2b1d?wait=60"
}Получение запуска#
/v1/tools/runs/{run_id}Возвращает запуск, при необходимости дожидаясь его завершения. Опрос завершённого запуска производит по нему расчёт, если тот ещё не был произведён. Возвращает 202, пока запуск выполняется, и 200 после его завершения, с результатами в items. Запуски другого аккаунта возвращают 404.
Для запуска browser-agent возвращается запуск браузера. См. Браузерный агент.
Параметры пути
run_idstringОбязательноId запуска.
Параметры запроса
waitintegerПо умолчанию 0Сколько секунд ждать завершения выполняющегося запуска, от 0 до 300.
offsetintegerПо умолчанию 0Индекс первого возвращаемого результата.
limitintegerЧисло возвращаемых результатов, от 1 до max_results запуска; это же значение используется по умолчанию.
curl "https://lovelyrouter.com/v1/tools/runs/run_8c1f0e2a9b7d4f3e6a5c2b1d?wait=60&offset=0&limit=50" \
-H "Authorization: Bearer $LOVELY_API_KEY"{
"id": "run_8c1f0e2a9b7d4f3e6a5c2b1d",
"object": "tool_run",
"tool": "google-maps-places",
"tool_name": "Search Google Maps places",
"status": "succeeded",
"results": 20,
"max_results": 20,
"charge_usd": 0.00551,
"reserved_usd": 0,
"error": null,
"created_at": "2026-10-11T15:02:11.204Z",
"finished_at": "2026-10-11T15:02:38.917Z",
"items": [
{ "title": "Godsent Coffee", "totalScore": 5, "reviewsCount": 237, "placeId": "ChIJq7RZDGczW4YRyCS5Z0KiiDE" }
],
"offset": 0,
"next_offset": null
}Остановка запуска#
/v1/tools/runs/{run_id}/stopОстанавливает выполняющийся запуск. Он завершается как stopped, и вы платите за результаты, полученные до остановки, по цене за результат, без платы за вызов. Возвращает запуск с произведённым расчётом и этими результатами или 202, если примерно через 10 секунд он всё ещё завершается. Остановка завершённого запуска возвращает его без изменений.
Параметры пути
run_idstringОбязательноId запуска.
curl -X POST https://lovelyrouter.com/v1/tools/runs/run_8c1f0e2a9b7d4f3e6a5c2b1d/stop \
-H "Authorization: Bearer $LOVELY_API_KEY"{
"id": "run_8c1f0e2a9b7d4f3e6a5c2b1d",
"object": "tool_run",
"tool": "google-maps-places",
"tool_name": "Search Google Maps places",
"status": "stopped",
"results": 4,
"max_results": 20,
"charge_usd": 0.018,
"reserved_usd": 0,
"error": "The run was stopped. You are billed only for results delivered before it stopped.",
"created_at": "2026-10-11T15:02:11.204Z",
"finished_at": "2026-10-11T15:02:19.630Z",
"items": [
{ "title": "Godsent Coffee", "totalScore": 5, "reviewsCount": 237, "placeId": "ChIJq7RZDGczW4YRyCS5Z0KiiDE" }
],
"offset": 0,
"next_offset": null
}Список запусков#
/v1/tools/runsВозвращает запуски вашего аккаунта, сначала новые, без их результатов. Включает запуски, начатые любым из ваших ключей.
Параметры запроса
limitintegerПо умолчанию 20Число запусков, от 1 до 100.
beforeintegerКурсор: значение next с предыдущей страницы.
Возвращает объект списка с объектами запусков в data и next — курсором следующей страницы или null, если запусков больше нет.
curl "https://lovelyrouter.com/v1/tools/runs?limit=2" \
-H "Authorization: Bearer $LOVELY_API_KEY"{
"object": "list",
"data": [
{
"id": "run_8c1f0e2a9b7d4f3e6a5c2b1d",
"object": "tool_run",
"tool": "google-maps-places",
"tool_name": "Search Google Maps places",
"status": "succeeded",
"results": 20,
"max_results": 20,
"charge_usd": 0.00551,
"reserved_usd": 0,
"error": null,
"created_at": "2026-10-11T15:02:11.204Z",
"finished_at": "2026-10-11T15:02:38.917Z"
},
{
"id": "run_51d0b9e4c3a2f1e0d9c8b7a6",
"object": "tool_run",
"tool": "trustpilot-reviews",
"tool_name": "Trustpilot reviews",
"status": "succeeded",
"results": 20,
"max_results": 20,
"charge_usd": 0.0375,
"reserved_usd": 0,
"error": null,
"created_at": "2026-10-11T14:48:03.512Z",
"finished_at": "2026-10-11T14:48:21.077Z"
}
],
"next": 1791730083512
}Ошибки#
Все ошибки имеют одинаковую структуру. type стабилен, и на него можно опираться в ветвлениях кода. message предназначен для людей и может меняться.
| Статус | type | Причина |
|---|---|---|
400 | invalid_request_error | Тело не является JSON, input не является объектом, отсутствует обязательное поле входных данных, инструмент отклонил входные данные или отсутствует query / task |
401 | authentication_error | API-ключ отсутствует, недействителен, отозван или просрочен |
402 | insufficient_quota | Баланса или лимита расходов ключа не хватает на резерв для запуска |
404 | not_found | Неизвестный id инструмента или в вашем аккаунте нет запуска с таким id |
413 | invalid_request_error | input длиннее 50 000 символов или task длиннее 2 000 |
429 | rate_limit_exceeded | В вашем аккаунте уже выполняются 10 запусков, или сработал лимит запросов планировщика |
500 | api_error | Непредвиденная ошибка. Повторите запрос. |
502 | tool_unavailable | Инструмент не удалось запустить. Плата не списана. Повторите попытку чуть позже. |
За запрос на запуск, вернувший ошибку, плата не взимается. Об ошибках API в целом см. Ошибки.
{
"error": {
"type": "invalid_request_error",
"message": "Missing required input: companyUrls. See GET /v1/tools/trustpilot-reviews."
}
}