API Компьютера Агента
Попробуйте в API Playground.
Базовый URL
Section titled “Базовый URL”https://api.rebyte.ai/v1Аутентификация
Section titled “Аутентификация”Каждый запрос требует заголовок API_KEY. Получите ваш ключ в Настройках > API Ключи.
curl https://api.rebyte.ai/v1/tasks \ -H "API_KEY: rbk_your_key_here"Имя заголовка нечувствительно к регистру. API_KEY, api-key и x-api-key — все работают.
Конечные точки
Section titled “Конечные точки”| Метод | Путь | Описание |
|---|---|---|
| POST | /tasks | Создать задачу |
| GET | /tasks | Перечислить задачи |
| GET | /tasks/:id | Получить задачу со статусом и историей запросов |
| POST | /tasks/:id/prompts | Отправить последующий запрос |
| PATCH | /tasks/:id/visibility | Изменить видимость задачи |
| DELETE | /tasks/:id | Мягкое удаление задачи |
| GET | /tasks/:id/events | SSE-поток событий выполнения |
| POST | /files | Получить подписанный URL для загрузки файла |
| POST | /webhooks | Зарегистрировать вебхук |
| GET | /webhooks | Перечислить вебхуки |
| GET | /webhooks/:id | Получить детали вебхука |
| DELETE | /webhooks/:id | Удалить вебхук |
Все пути относительны базового URL (https://api.rebyte.ai/v1). |
Задачи
Section titled “Задачи”Создать задачу
Section titled “Создать задачу”POST /tasksСоздает новую задачу. По умолчанию выделяет новую виртуальную машину (Компьютер Агента). Передайте workspaceId, чтобы запустить задачу на существующем рабочем пространстве — это пропускает выделение ресурсов и значительно быстрее.
Вызов блокируется до тех пор, пока виртуальная машина не будет выделена и первый запрос не будет отправлен.
Тело запроса:
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
prompt | string | Да | Описание задачи (макс. 100 000 символов) |
executor | string | Нет | claude (по умолчанию), gemini, codex, opencode |
model | string | Нет | Уровень модели для исполнителя. См. Модели. |
workspaceId | string | Нет | UUID существующего рабочего пространства для повторного использования |
files | object[] | Нет | Файлы из POST /files. Каждый: {"id": "...", "filename": "..."} |
skills | string[] | Нет | Слаги навыков (например, ["deep-research", "pdf"]) |
githubUrl | string | Нет | Репозиторий GitHub в формате владелец/репозиторий |
branchName | string | Нет | Имя ветки (по умолчанию: main) |
curl -X POST https://api.rebyte.ai/v1/tasks \ -H "API_KEY: rbk_xxx" \ -H "Content-Type: application/json" \ -d '{ "prompt": "Build a REST API with Express and add tests", "executor": "claude", "skills": ["deep-research"], "githubUrl": "your-org/your-repo" }'Ответ (201):
{ "id": "550e8400-e29b-41d4-a716-446655440000", "workspaceId": "660e8400-e29b-41d4-a716-446655440001", "url": "https://app.rebyte.ai/run/550e8400-e29b-41d4-a716-446655440000", "status": "running", "createdAt": "2026-01-28T12:00:00.000Z"}Сохраните workspaceId из ответа, чтобы создавать последующие задачи на том же Компьютере Агента:
# Первая задача — выделяет новую ВМRESP=$(curl -s -X POST https://api.rebyte.ai/v1/tasks \ -H "API_KEY: rbk_xxx" -H "Content-Type: application/json" \ -d '{"prompt": "Set up the project"}')WS_ID=$(echo $RESP | jq -r '.workspaceId')
# Вторая задача — повторно использует ту же ВМ (гораздо быстрее)curl -s -X POST https://api.rebyte.ai/v1/tasks \ -H "API_KEY: rbk_xxx" -H "Content-Type: application/json" \ -d "{\"prompt\": \"Now add tests\", \"workspaceId\": \"$WS_ID\"}"Модели
Section titled “Модели”Доступные модели зависят от исполнителя:
| Исполнитель | Доступные модели | По умолчанию |
|---|---|---|
claude | claude-sonnet-4.6, claude-opus-4.6, gemini-3.1-pro, gpt-5.3-codex, gpt-5.4, minimax-m2.7, kimi-k2.5, glm-5, gemini-3-flash | claude-sonnet-4.6 |
codex | gpt-5.4, gpt-5.3-codex | gpt-5.4 |
gemini | auto-gemini-3 (автоматически маршрутизирует между flash и pro) | auto-gemini-3 |
opencode | То же, что и claude | gemini-3.1-pro |
С BYOK (использование собственного API-ключа) доступны только нативные модели провайдера исполнителя (например, исполнитель claude с BYOK получает только claude-sonnet-4.6 и claude-opus-4.6).
Перечислить задачи
Section titled “Перечислить задачи”GET /tasks?limit=50&offset=0Возвращает задачи, созданные через API, отсортированные по времени создания (сначала новейшие).
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
limit | number | 50 | Результатов на страницу (макс. 100) |
offset | number | 0 | Смещение для пагинации |
curl "https://api.rebyte.ai/v1/tasks?limit=10" \ -H "API_KEY: rbk_xxx"Ответ:
{ "data": [ { "id": "550e8400-...", "url": "https://app.rebyte.ai/run/550e8400-...", "title": "Build REST API with Express", "executor": "claude", "model": "claude-sonnet-4.6", "createdAt": "2026-01-28T12:00:00.000000+00:00", "completedAt": "2026-01-28T12:05:00.000000+00:00" } ], "total": 42, "limit": 10, "offset": 0}Получить задачу
Section titled “Получить задачу”GET /tasks/:idВозвращает полные детали задачи, включая историю запросов и производный статус.
curl https://api.rebyte.ai/v1/tasks/550e8400-... \ -H "API_KEY: rbk_xxx"Ответ:
{ "id": "550e8400-...", "url": "https://app.rebyte.ai/run/550e8400-...", "status": "running", "title": "Build REST API with Express", "executor": "claude", "model": "claude-sonnet-4.6", "createdAt": "2026-01-28T12:00:00.000000+00:00", "completedAt": null, "prompts": [ { "id": "660e8400-...", "status": "running", "submittedAt": "2026-01-28T12:05:00.000000+00:00", "completedAt": null }, { "id": "550e8400-...", "status": "succeeded", "submittedAt": "2026-01-28T12:00:01.000000+00:00", "completedAt": "2026-01-28T12:03:00.000000+00:00" } ]}Статус задачи выводится из состояний запросов:
| Статус | Условие |
|---|---|
running | Любой запрос находится в состоянии pending или running |
completed | Все запросы завершены, последний succeeded |
failed | Все запросы завершены, последний failed |
canceled | Все запросы завершены, последний canceled |
Отправить последующий запрос
Section titled “Отправить последующий запрос”POST /tasks/:id/promptsОтправить последующий запрос к выполняющейся или завершенной задаче. Если ВМ остановлена, она автоматически возобновляется.
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
prompt | string | Да | Последующий запрос (макс. 100 000 символов) |
skills | string[] | Нет | Дополнительные слаги навыков для этого запроса |
curl -X POST https://api.rebyte.ai/v1/tasks/550e8400-.../prompts \ -H "API_KEY: rbk_xxx" \ -H "Content-Type: application/json" \ -d '{"prompt": "Now add authentication with JWT"}'Ответ (201):
{ "promptId": "770f9500-..."}Поток событий (SSE)
Section titled “Поток событий (SSE)”GET /tasks/:id/eventsОткрывает поток Server-Sent Events для последнего запроса задачи. События включают вывод агента (stdout, stderr), вызовы инструментов и сигналы завершения.
curl -N https://api.rebyte.ai/v1/tasks/550e8400-.../events \ -H "API_KEY: rbk_xxx"Поток генерирует два типа событий:
event— события выполнения (вывод агента, вызовы инструментов)done— финальное событие со статусом завершения, после чего поток закрывается
Изменить видимость
Section titled “Изменить видимость”PATCH /tasks/:id/visibility| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
visibility | string | Да | private, shared или public |
| Уровень | Кто может просматривать |
|---|---|
private | Только владелец API-ключа |
shared | Все члены организации (по умолчанию) |
public | Любой, у кого есть ссылка (только для чтения) |
curl -X PATCH https://api.rebyte.ai/v1/tasks/550e8400-.../visibility \ -H "API_KEY: rbk_xxx" \ -H "Content-Type: application/json" \ -d '{"visibility": "public"}'При установке public ответ включает shareUrl для неаутентифицированного доступа.
Удалить задачу
Section titled “Удалить задачу”DELETE /tasks/:idМягко удаляет задачу. Возвращает 204 No Content.
curl -X DELETE https://api.rebyte.ai/v1/tasks/550e8400-... \ -H "API_KEY: rbk_xxx"Загрузка файлов для прикрепления к задачам. Использует двухэтапный процесс с подписанным URL.
Шаг 1: Получить URL для загрузки
Section titled “Шаг 1: Получить URL для загрузки”POST /files| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
filename | string | Да | Имя файла (макс. 255 символов) |
contentType | string | Нет | Тип MIME (по умолчанию: application/octet-stream) |
Ответ (201):
{ "id": "550e8400-...", "filename": "data.csv", "uploadUrl": "https://storage.googleapis.com/...", "maxFileSize": 52428800}URL для загрузки истекает через 1 час.
Шаг 2: Загрузить файл
Section titled “Шаг 2: Загрузить файл”curl -X PUT "UPLOAD_URL_FROM_STEP_1" \ -H "Content-Type: application/octet-stream" \ --data-binary @data.csvШаг 3: Прикрепить к задаче
Section titled “Шаг 3: Прикрепить к задаче”Передайте id и filename из Шага 1 при создании задачи:
{ "prompt": "Analyze the uploaded data", "files": [ {"id": "550e8400-...", "filename": "data.csv"} ]}Файлы автоматически копируются в ВМ задачи при начале выполнения.
Вебхуки
Section titled “Вебхуки”Получайте HTTP POST уведомления при возникновении событий задачи. Вебхуки универсальны — они срабатывают для всех задач в вашей организации, независимо от того, созданы ли они через API, UI или любой другой канал.
События
Section titled “События”| Событие | Срабатывает, когда |
|---|---|
task.created | Создана новая задача |
task.running | Агент начинает выполнение |
task.completed | Задача успешно завершена |
task.failed | Задача завершается с ошибкой |
task.canceled | Задача отменена пользователем |
Создать вебхук
Section titled “Создать вебхук”POST /webhooks| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
url | string | Да | URL конечной точки HTTPS |
events | string[] | Да | События для подписки |
description | string | Нет | Человекочитаемая метка (макс. 500 символов) |
secret | string | Нет | Предварительно общий секрет (макс. 500 символов). При установке включается как заголовок X-Webhook-Secret в каждую доставку. |
# Вебхук без секретаcurl -X POST https://api.rebyte.ai/v1/webhooks \ -H "API_KEY: rbk_xxx" \ -H "Content-Type: application/json" \ -d '{ "url": "https://your-server.com/webhook", "events": ["task.completed", "task.failed"] }'
# Вебхук с предварительно общим секретомcurl -X POST https://api.rebyte.ai/v1/webhooks \ -H "API_KEY: rbk_xxx" \ -H "Content-Type: application/json" \ -d '{ "url": "https://your-server.com/webhook", "events": ["task.completed", "task.failed"], "secret": "my-shared-secret-value" }'Ответ (201):
{ "id": "880e8400-...", "url": "https://your-server.com/webhook", "events": ["task.completed", "task.failed"], "description": null, "hasSecret": true, "isActive": true, "createdAt": "2026-01-28T12:00:00.000Z", "lastTriggeredAt": null, "failureCount": 0}Примечания к поведению:
- Дублирующиеся URL: регистрация одного и того же URL дважды возвращает существующий вебхук (идемпотентно)
- Лимит: максимум 3 вебхука на организацию. 4-й возвращает
limit_exceeded. - Хранение секрета: значение секрета никогда не возвращается ни в одном ответе. Открывается только
hasSecret: true/false.
Перечислить вебхуки
Section titled “Перечислить вебхуки”GET /webhooksВозвращает все вебхуки для вашей организации с информацией о статусе (lastTriggeredAt, failureCount, isActive). Секреты никогда не раскрываются.
Получить вебхук
Section titled “Получить вебхук”GET /webhooks/:idУдалить вебхук
Section titled “Удалить вебхук”DELETE /webhooks/:idВозвращает 204 No Content. Удаленные вебхуки немедленно прекращают получать доставки.
Доставка
Section titled “Доставка”Когда событие задачи соответствует подписанным событиям вебхука, Rebyte отправляет HTTP POST на URL вебхука.
Полезная нагрузка:
{ "event": "task.completed", "taskId": "550e8400-e29b-41d4-a716-446655440000", "timestamp": 1706443200, "data": { "status": "succeeded", "taskUrl": "https://app.rebyte.ai/run/550e8400-...", "result": "Created CSV file with 10 Hacker News posts..." }}status— статус запроса:pending(task.created),running(task.running),succeeded(task.completed),failed(task.failed),canceled(task.canceled)taskUrl— прямая ссылка на задачу в пользовательском интерфейсе Rebyte (всегда присутствует)result— окончательный текстовый вывод ИИ (присутствует в терминальных событиях:task.completed,task.failed,task.canceled; отсутствует вtask.createdиtask.running)
Вызовите GET /tasks/:id для получения полных деталей задачи, включая историю запросов.
Заголовки доставки:
| Заголовок | Всегда присутствует | Описание |
|---|---|---|
Content-Type | Да | application/json |
X-Webhook-Signature | Да | Base64-кодированная подпись RSA-SHA256 |
X-Webhook-Timestamp | Да | Метка времени Unix (секунды) |
X-Webhook-Secret | Только если секрет настроен | Предварительно общее секретное значение, которое вы установили при создании |
Таймаут: доставка истекает через 10 секунд.
Обработка сбоев:
- Доставка осуществляется по принципу «отправил и забыл» — без автоматических повторных попыток при сбое
- Ответы, отличные от 2xx, увеличивают
failureCount - После 10 последовательных сбоев вебхук автоматически отключается (
isActive: false) - Успешные доставки сбрасывают
failureCountдо 0
Проверка подписи
Section titled “Проверка подписи”Каждая доставка подписывается парой ключей RSA-2048 вашей организации, независимо от того, настроен ли предварительно общий секрет.
Как это работает:
- Rebyte объединяет
{timestamp}.{body}(например,1706443200.{"event":"task.completed",...}) - Подписывает строку с помощью RSA-SHA256, используя закрытый ключ вашей организации
- Отправляет base64-кодированную подпись в
X-Webhook-Signature
Получите ваш публичный ключ: свяжитесь со службой поддержки или получите его из панели управления Rebyte. Пара ключей RSA-2048 генерируется автоматически при первом создании вебхука и сохраняется для организации.
Пример проверки (Node.js):
const crypto = require('crypto');
function verifyWebhook(rawBody, timestamp, signature, publicKey) { const payload = `${timestamp}.${rawBody}`; const verifier = crypto.createVerify('RSA-SHA256'); verifier.update(payload); return verifier.verify(publicKey, signature, 'base64');}
// В вашем обработчике вебхуков:app.post('/webhook', (req, res) => { const rawBody = req.body; // must be raw string, not parsed JSON const timestamp = req.headers['x-webhook-timestamp']; const signature = req.headers['x-webhook-signature'];
if (!verifyWebhook(rawBody, timestamp, signature, PUBLIC_KEY)) { return res.status(401).send('Invalid signature'); }
const event = JSON.parse(rawBody); console.log(`Task ${event.taskId}: ${event.event}`); res.status(200).send('OK');});Пример проверки (Python):
from cryptography.hazmat.primitives import hashes, serializationfrom cryptography.hazmat.primitives.asymmetric import paddingimport base64
def verify_webhook(raw_body: str, timestamp: str, signature: str, public_key_pem: str) -> bool: public_key = serialization.load_pem_public_key(public_key_pem.encode()) payload = f"{timestamp}.{raw_body}".encode() try: public_key.verify( base64.b64decode(signature), payload, padding.PKCS1v15(), hashes.SHA256() ) return True except Exception: return FalseДвухуровневая безопасность
Section titled “Двухуровневая безопасность”Вебхуки поддерживают два независимых метода проверки, которые могут использоваться вместе:
| Метод | Заголовок | Как это работает | Случай использования |
|---|---|---|---|
| Подпись RSA | X-Webhook-Signature | Криптографическое доказательство того, что полезная нагрузка пришла от Rebyte | Защищенная от подделки проверка |
| Предварительно общий секрет | X-Webhook-Secret | Статическая строка, которую вы устанавливаете при создании, возвращается в каждой доставке | Простая проверка общего секрета |
Подписи RSA всегда присутствуют. Предварительно общий секрет необязателен — установите его при создании вебхука, если вам нужен более простой путь проверки.
Пример опроса
Section titled “Пример опроса”Полный пример: создать задачу, опрашивать до завершения, затем отправить последующий запрос.
# Создать задачуTASK_ID=$(curl -s -X POST https://api.rebyte.ai/v1/tasks \ -H "API_KEY: rbk_xxx" \ -H "Content-Type: application/json" \ -d '{"prompt": "Write a Python CLI that converts CSV to JSON"}' | jq -r '.id')
echo "Task: https://app.rebyte.ai/run/$TASK_ID"
# Опрашивать до завершенияwhile true; do STATUS=$(curl -s https://api.rebyte.ai/v1/tasks/$TASK_ID \ -H "API_KEY: rbk_xxx" | jq -r '.status') echo "Status: $STATUS" [[ "$STATUS" == "completed" || "$STATUS" == "failed" ]] && break sleep 5done
# Отправить последующий запросcurl -s -X POST https://api.rebyte.ai/v1/tasks/$TASK_ID/prompts \ -H "API_KEY: rbk_xxx" \ -H "Content-Type: application/json" \ -d '{"prompt": "Now add support for nested JSON objects"}'Формат ошибок
Section titled “Формат ошибок”Все ошибки имеют следующую структуру:
{ "error": { "code": "validation_error", "message": "Invalid request body" }}| Код | HTTP Статус | Описание |
|---|---|---|
missing_api_key | 401 | Заголовок API_KEY не предоставлен |
invalid_api_key | 401 | Недействительный или истекший API-ключ |
validation_error | 400 | Тело запроса не прошло валидацию |
not_found | 404 | Ресурс не существует или недоступен |
limit_exceeded | 400 | Достигнут лимит организации (например, макс. количество вебхуков) |
agent_disabled | 403 | Запрошенный исполнитель отключен для этой организации |
internal_error | 500 | Сбой на стороне сервера |
Ограничение частоты запросов
Section titled “Ограничение частоты запросов”В настоящее время API не применяет ограничения частоты запросов для каждого ключа. Каждый POST /tasks выделяет реальную виртуальную машину, поэтому затраты масштабируются в зависимости от использования. Используйте вебхуки вместо агрессивного опроса для уменьшения ненужных запросов.