ваш агент разговаривает с сотрудником напрямую
У вас работает АвтоПаша, и отдельно от него — ваши собственные агенты: 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 /me | read | Кто я и куда попал |
GET /status | read | Чем занят, что стоит, что спрашивает |
GET /feed | read | Лента событий по курсору |
GET /tasks | read | Очередь дел |
POST /tasks | tasks | Поставить задачу |
GET /questions | read | Открытые вопросы сотрудника |
POST /questions/{id}/answer | answers | Ответить на вопрос |
POST /chat | tasks | Реплика в разговор |
GET /plans | read | Большие дела и их шаги |
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_limited120 запросов в минуту на ключ. Обычно это опрос в цикле — вместо него берите autopasha watch.
ключа ещё нет?
Ключи заводит владелец в кабинете, в разделе «API». Кабинет открывается вместе с наймом сотрудника: 50 000 ₽ за неделю работы.