Перейти к содержимому

API Компьютера Агента

Попробуйте в API Playground.

https://api.rebyte.ai/v1

Каждый запрос требует заголовок API_KEY. Получите ваш ключ в Настройках > API Ключи.

Terminal window
curl https://api.rebyte.ai/v1/tasks \
-H "API_KEY: rbk_your_key_here"

Имя заголовка нечувствительно к регистру. API_KEY, api-key и x-api-key — все работают.


МетодПутьОписание
POST/tasksСоздать задачу
GET/tasksПеречислить задачи
GET/tasks/:idПолучить задачу со статусом и историей запросов
POST/tasks/:id/promptsОтправить последующий запрос
PATCH/tasks/:id/visibilityИзменить видимость задачи
DELETE/tasks/:idМягкое удаление задачи
GET/tasks/:id/eventsSSE-поток событий выполнения
POST/filesПолучить подписанный URL для загрузки файла
POST/webhooksЗарегистрировать вебхук
GET/webhooksПеречислить вебхуки
GET/webhooks/:idПолучить детали вебхука
DELETE/webhooks/:idУдалить вебхук
Все пути относительны базового URL (https://api.rebyte.ai/v1).

POST /tasks

Создает новую задачу. По умолчанию выделяет новую виртуальную машину (Компьютер Агента). Передайте workspaceId, чтобы запустить задачу на существующем рабочем пространстве — это пропускает выделение ресурсов и значительно быстрее.

Вызов блокируется до тех пор, пока виртуальная машина не будет выделена и первый запрос не будет отправлен.

Тело запроса:

ПолеТипОбязательноОписание
promptstringДаОписание задачи (макс. 100 000 символов)
executorstringНетclaude (по умолчанию), gemini, codex, opencode
modelstringНетУровень модели для исполнителя. См. Модели.
workspaceIdstringНетUUID существующего рабочего пространства для повторного использования
filesobject[]НетФайлы из POST /files. Каждый: {"id": "...", "filename": "..."}
skillsstring[]НетСлаги навыков (например, ["deep-research", "pdf"])
githubUrlstringНетРепозиторий GitHub в формате владелец/репозиторий
branchNamestringНетИмя ветки (по умолчанию: main)
Terminal window
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 из ответа, чтобы создавать последующие задачи на том же Компьютере Агента:

Terminal window
# Первая задача — выделяет новую ВМ
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\"}"

Доступные модели зависят от исполнителя:

ИсполнительДоступные моделиПо умолчанию
claudeclaude-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-flashclaude-sonnet-4.6
codexgpt-5.4, gpt-5.3-codexgpt-5.4
geminiauto-gemini-3 (автоматически маршрутизирует между flash и pro)auto-gemini-3
opencodeТо же, что и claudegemini-3.1-pro

С BYOK (использование собственного API-ключа) доступны только нативные модели провайдера исполнителя (например, исполнитель claude с BYOK получает только claude-sonnet-4.6 и claude-opus-4.6).

GET /tasks?limit=50&offset=0

Возвращает задачи, созданные через API, отсортированные по времени создания (сначала новейшие).

ПараметрТипПо умолчаниюОписание
limitnumber50Результатов на страницу (макс. 100)
offsetnumber0Смещение для пагинации
Terminal window
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
}
GET /tasks/:id

Возвращает полные детали задачи, включая историю запросов и производный статус.

Terminal window
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

Отправить последующий запрос к выполняющейся или завершенной задаче. Если ВМ остановлена, она автоматически возобновляется.

ПолеТипОбязательноОписание
promptstringДаПоследующий запрос (макс. 100 000 символов)
skillsstring[]НетДополнительные слаги навыков для этого запроса
Terminal window
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-..."
}
GET /tasks/:id/events

Открывает поток Server-Sent Events для последнего запроса задачи. События включают вывод агента (stdout, stderr), вызовы инструментов и сигналы завершения.

Terminal window
curl -N https://api.rebyte.ai/v1/tasks/550e8400-.../events \
-H "API_KEY: rbk_xxx"

Поток генерирует два типа событий:

  • event — события выполнения (вывод агента, вызовы инструментов)
  • done — финальное событие со статусом завершения, после чего поток закрывается
PATCH /tasks/:id/visibility
ПолеТипОбязательноОписание
visibilitystringДаprivate, shared или public
УровеньКто может просматривать
privateТолько владелец API-ключа
sharedВсе члены организации (по умолчанию)
publicЛюбой, у кого есть ссылка (только для чтения)
Terminal window
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 для неаутентифицированного доступа.

DELETE /tasks/:id

Мягко удаляет задачу. Возвращает 204 No Content.

Terminal window
curl -X DELETE https://api.rebyte.ai/v1/tasks/550e8400-... \
-H "API_KEY: rbk_xxx"

Загрузка файлов для прикрепления к задачам. Использует двухэтапный процесс с подписанным URL.

Шаг 1: Получить URL для загрузки

Section titled “Шаг 1: Получить URL для загрузки”
POST /files
ПолеТипОбязательноОписание
filenamestringДаИмя файла (макс. 255 символов)
contentTypestringНетТип MIME (по умолчанию: application/octet-stream)

Ответ (201):

{
"id": "550e8400-...",
"filename": "data.csv",
"uploadUrl": "https://storage.googleapis.com/...",
"maxFileSize": 52428800
}

URL для загрузки истекает через 1 час.

Terminal window
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"}
]
}

Файлы автоматически копируются в ВМ задачи при начале выполнения.


Получайте HTTP POST уведомления при возникновении событий задачи. Вебхуки универсальны — они срабатывают для всех задач в вашей организации, независимо от того, созданы ли они через API, UI или любой другой канал.

СобытиеСрабатывает, когда
task.createdСоздана новая задача
task.runningАгент начинает выполнение
task.completedЗадача успешно завершена
task.failedЗадача завершается с ошибкой
task.canceledЗадача отменена пользователем
POST /webhooks
ПолеТипОбязательноОписание
urlstringДаURL конечной точки HTTPS
eventsstring[]ДаСобытия для подписки
descriptionstringНетЧеловекочитаемая метка (макс. 500 символов)
secretstringНетПредварительно общий секрет (макс. 500 символов). При установке включается как заголовок X-Webhook-Secret в каждую доставку.
Terminal window
# Вебхук без секрета
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.
GET /webhooks

Возвращает все вебхуки для вашей организации с информацией о статусе (lastTriggeredAt, failureCount, isActive). Секреты никогда не раскрываются.

GET /webhooks/:id
DELETE /webhooks/:id

Возвращает 204 No Content. Удаленные вебхуки немедленно прекращают получать доставки.

Когда событие задачи соответствует подписанным событиям вебхука, 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

Каждая доставка подписывается парой ключей RSA-2048 вашей организации, независимо от того, настроен ли предварительно общий секрет.

Как это работает:

  1. Rebyte объединяет {timestamp}.{body} (например, 1706443200.{"event":"task.completed",...})
  2. Подписывает строку с помощью RSA-SHA256, используя закрытый ключ вашей организации
  3. Отправляет 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, serialization
from cryptography.hazmat.primitives.asymmetric import padding
import 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 “Двухуровневая безопасность”

Вебхуки поддерживают два независимых метода проверки, которые могут использоваться вместе:

МетодЗаголовокКак это работаетСлучай использования
Подпись RSAX-Webhook-SignatureКриптографическое доказательство того, что полезная нагрузка пришла от RebyteЗащищенная от подделки проверка
Предварительно общий секретX-Webhook-SecretСтатическая строка, которую вы устанавливаете при создании, возвращается в каждой доставкеПростая проверка общего секрета

Подписи RSA всегда присутствуют. Предварительно общий секрет необязателен — установите его при создании вебхука, если вам нужен более простой путь проверки.


Полный пример: создать задачу, опрашивать до завершения, затем отправить последующий запрос.

Terminal window
# Создать задачу
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 5
done
# Отправить последующий запрос
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"}'

Все ошибки имеют следующую структуру:

{
"error": {
"code": "validation_error",
"message": "Invalid request body"
}
}
КодHTTP СтатусОписание
missing_api_key401Заголовок API_KEY не предоставлен
invalid_api_key401Недействительный или истекший API-ключ
validation_error400Тело запроса не прошло валидацию
not_found404Ресурс не существует или недоступен
limit_exceeded400Достигнут лимит организации (например, макс. количество вебхуков)
agent_disabled403Запрошенный исполнитель отключен для этой организации
internal_error500Сбой на стороне сервера

Ограничение частоты запросов

Section titled “Ограничение частоты запросов”

В настоящее время API не применяет ограничения частоты запросов для каждого ключа. Каждый POST /tasks выделяет реальную виртуальную машину, поэтому затраты масштабируются в зависимости от использования. Используйте вебхуки вместо агрессивного опроса для уменьшения ненужных запросов.