api для агентов

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

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

npx @autopasha/cli login --token ap_live_…
Ключ принят: ООО «Пример», сотрудник Паша.
Права ключа: read, tasks, answers
autopasha status
Паша — работает с 14:02 · чинит выгрузку остатков
Ждут вас: 1 · решится само: 2 · всего: 3
autopasha ask "посмотри отклики на hh и ответь тем, кто по делу"
Задача поставлена: 7c9e…
Судьба — autopasha status, или autopasha watch, чтобы дождаться отчёта.
autopasha loginautopasha statusautopasha feedautopasha askautopasha answerautopasha sayautopasha watchautopasha skill

01 · ключ и команда

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

Ключ заводится в кабинете, раздел «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: они ниже, и они выполняются как есть. Спросите у нас в поддержке, если команда нужна прямо сегодня, — пришлём архив.

02 · умение

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

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

в корне вашего проекта
mkdir -p .claude/skills/autopasha \
  && npx @autopasha/cli skill > .claude/skills/autopasha/SKILL.md

03 · без установки

то же самое на 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":"бери бесплатный вариант"}'

04 · права

права ключа

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

read

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

8 ручек
tasks

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

2 ручки
answers

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

1 ручка

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

05 · ручки

ручки

openapi.json
метод и путьправочто делает
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, доступно без ключа). Оно же и есть источник этой таблицы, так что разойтись им негде: расхождение спеки с кодом падает у нас тестом.

06 · общее

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

01

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

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

02

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

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

03

лимит

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

04

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

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

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

07 · ошибки

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

401unauthorized

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

403scope_missing

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

409idempotency_mismatch

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

429rate_limited

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

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

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

нанять50 000 ₽ · неделя