на главную
api для агентов

ваш агент разговаривает с сотрудником напрямую

У вас работает АвтоПаша, и отдельно от него — ваши собственные агенты: Claude Code у разработчика, бот в телеграме, что-то своё на домашнем сервере. До этого API они не знали друг о друге ничего, и человек читал кабинет глазами и пересказывал одно другому руками. Дальше — как убрать этот пересказ.

подключение за минуту

Ключ заводится в кабинете, раздел «API»: имя, галочки прав, значение показывается один раз. Дальше три команды.

npx @autopasha/cli login --token ap_live_…
npx @autopasha/cli status
npx @autopasha/cli ask "посмотри отклики на hh и ответь тем, кто по делу"

Ключ ложится в ~/.autopasha/config.json с правами 0600. В CI вместо входа — переменная AUTOPASHA_TOKEN. Команда есть и без установки: она живёт в пакете @autopasha/cli, и npx ставит её на время вызова.

Пакет сейчас выкладывается в npm. Пока публикация не прошла, рабочий путь — те же запросы на curl: они ниже, и они выполняются как есть. Спросите у нас в поддержке, если команда нужна прямо сегодня, — пришлём архив.

умение для вашего агента

Сто строк markdown: когда звать сотрудника, семь команд с примерами, три типовые ошибки и что они значат. После этого агент сам решает, когда сходить за состоянием и когда отдать работу, — объяснять ему это в каждом разговоре не надо.

mkdir -p .claude/skills/autopasha \
  && npx @autopasha/cli skill > .claude/skills/autopasha/SKILL.md

то же самое на curl

База — https://autopasha.ru/api/v1. Ключ заголовком, ответ всегда JSON, время всегда UTC; часовой пояс клиента отдаётся отдельным полем в /me.

curl -s https://autopasha.ru/api/v1/status \
  -H "Authorization: Bearer ap_live_…"
curl -s https://autopasha.ru/api/v1/tasks \
  -H "Authorization: Bearer ap_live_…" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"text":"почини выгрузку остатков","why":"склад считает вручную с пятницы"}'
curl -s https://autopasha.ru/api/v1/questions/<id>/answer \
  -H "Authorization: Bearer ap_live_…" \
  -H "Content-Type: application/json" \
  -d '{"decision":"approved","comment":"бери бесплатный вариант"}'

права ключа

Прав три, и это осознанно: пятнадцать мелких никто не выставит правильно, а один общий даёт слишком много.

read

состояние, лента, дела, планы, вопросы, отчёты

tasks

ставить задачи, писать реплики в разговор

answers

отвечать на вопросы сотрудника

Чего в API нет и не будет: управления машиной (запуск, остановка, обновление, выкат) и доступа к вашим секретам. Утёкший ключ не должен давать чужому агенту пульт от машины сотрудника.

ручки

метод и путьправочто делает
GET /mereadКто я и куда попал
GET /statusreadЧем занят, что стоит, что спрашивает
GET /feedreadЛента событий по курсору
GET /tasksreadОчередь дел
POST /taskstasksПоставить задачу
GET /questionsreadОткрытые вопросы сотрудника
POST /questions/{id}/answeranswersОтветить на вопрос
POST /chattasksРеплика в разговор
GET /plansreadБольшие дела и их шаги
GET /reports/{id}readОтчёт целиком
GET /files/{id}readВложение отчёта

Машинное описание — /api/v1/openapi.json (OpenAPI 3.1, доступно без ключа). Оно же и есть источник этой таблицы, так что разойтись им негде: расхождение спеки с кодом падает у нас тестом.

правила, общие для всех ручек

повтор без второго срабатывания

Любой POST принимает Idempotency-Key. Повтор с тем же ключом в течение суток возвращает прежний ответ и ничего не делает второй раз. Агент ретраит охотнее человека: сеть моргнула — и в очереди две одинаковые задачи.

курсоры, а не страницы

У ленты ?since=<курсор>&limit=. Курсор берётся из прошлого ответа; разбирать его не надо. Пустая выдача возвращает прежний курсор, а не пустой — иначе агент, пришедший в тишину, терял бы своё место.

лимит

120 запросов в минуту на ключ, ответ 429 с заголовками RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset. Если вы опрашиваете нас в цикле — возьмите autopasha watch: он ждёт, а не спрашивает.

одна форма ошибки

Во всех ручках, включая ошибки, ответ — JSON. В каждом ответе есть requestId: он же уходит в наши логи, и по нему разбирается жалоба «у меня не работает».

{ "error": { "code": "scope_missing",
             "message": "ключу не хватает права tasks",
             "hint": "заведите ключ с правом tasks в кабинете, раздел «API»" },
  "requestId": "0f3c…" }

что вы увидите первым делом

401 unauthorized

ключа нет, он с чужим префиксом или отозван. Все три случая отвечают одинаково: по ответу нельзя понять, существовал ли такой ключ.

403 scope_missing

ключ есть, права не хватает. В hint названо, какого именно; расширить права нельзя, можно завести новый ключ.

409 idempotency_mismatch

тем же Idempotency-Key уже отправляли другой запрос. Ключ повтора одноразовый.

429 rate_limited

120 запросов в минуту на ключ. Обычно это опрос в цикле — вместо него берите autopasha watch.

ключа ещё нет?

Ключи заводит владелец в кабинете, в разделе «API». Кабинет открывается вместе с наймом сотрудника: 50 000 ₽ за неделю работы.