Workflows API
Workflows API
Помимо визуального редактора, ML-пайплайны Arka AI доступны для программного управления через REST API. Это позволяет автоматизировать создание пайплайнов, запускать их из скриптов и CI/CD, а также встраивать выполнение пайплайнов в ваши backend-сервисы.
API следует стандартным соглашениям Arka AI: аутентификация через Bearer-токен, ответы в формате JSON, поддержка пагинации для списочных эндпоинтов.
Аутентификация
Все запросы к API требуют авторизации. Передавайте API-ключ в заголовке Authorization:
Authorization: Bearer <ваш_api_ключ>
API-ключ можно создать в разделе управления токенами (/{username}/dashboard/settings/tokens). При создании ключа укажите разрешение на ресурс workflows для доступа к эндпоинтам этой группы.
Подробнее об управлении ключами — в разделе API-ключи.
Основные эндпоинты
| Метод | Эндпоинт | Назначение |
|---|---|---|
| GET | /api/workflows | Получить список всех пайплайнов пользователя |
| POST | /api/workflows | Создать новый пайплайн |
| GET | /api/workflows/{workflow_id} | Получить детали конкретного пайплайна |
| PATCH | /api/workflows/{workflow_id} | Обновить конфигурацию пайплайна |
| DELETE | /api/workflows/{workflow_id} | Удалить пайплайн |
| POST | /api/workflows/{workflow_id}/run | Запустить выполнение пайплайна |
| GET | /api/workflows/{workflow_id}/runs | Получить историю запусков пайплайна |
| GET | /api/workflows/{workflow_id}/runs/{run_id} | Получить детали конкретного запуска (статус, логи) |
Списочные эндпоинты (GET /api/workflows, GET /api/workflows/{id}/runs) поддерживают query-параметры: page (номер страницы), per_page (элементов на странице, по умолчанию 20), search (поиск по названию).
Примеры
Создание пайплайна
curl -X POST "https://api.arka-ai.ru/api/workflows" \
-H "Authorization: Bearer <ваш_api_ключ>" \
-H "Content-Type: application/json" \
-d '{
"name": "Мой первый пайплайн",
"description": "Чат-бот с фильтрацией ответов",
"nodes": [
{"id": "input_1", "type": "text_input", "config": {"variable": "user_message"}},
{"id": "model_1", "type": "llm_call", "config": {"model": "DeepSeek-R1", "temperature": 0.7}},
{"id": "output_1", "type": "text_output", "config": {"format": "plain"}}
],
"edges": [
{"from": "input_1", "to": "model_1"},
{"from": "model_1", "to": "output_1"}
]
}'
Python: создание и запуск
import requests
import time
BASE_URL = "https://api.arka-ai.ru/api"
HEADERS = {
"Authorization": "Bearer <ваш_api_ключ>",
"Content-Type": "application/json"
}
# Создание пайплайна
payload = {
"name": "Чат-бот",
"description": "Простой чат-бот с LLM",
"nodes": [
{"id": "in", "type": "text_input", "config": {"variable": "prompt"}},
{"id": "llm", "type": "llm_call", "config": {"model": "DeepSeek-R1", "temperature": 0.7, "max_tokens": 500}},
{"id": "out", "type": "text_output", "config": {"format": "plain"}}
],
"edges": [
{"from": "in", "to": "llm"},
{"from": "llm", "to": "out"}
]
}
resp = requests.post(f"{BASE_URL}/workflows", json=payload, headers=HEADERS)
workflow = resp.json()["data"]
workflow_id = workflow["id"]
# Запуск
run_resp = requests.post(
f"{BASE_URL}/workflows/{workflow_id}/run",
json={"inputs": {"prompt": "Объясни квантовую запутанность простыми словами"}},
headers=HEADERS
)
run = run_resp.json()["data"]
print(f"Запуск создан: {run['id']}, статус: {run['status']}")
# Мониторинг статуса (опрос)
run_id = run["id"]
while True:
status_resp = requests.get(f"{BASE_URL}/workflows/{workflow_id}/runs/{run_id}", headers=HEADERS)
status = status_resp.json()["data"]
print(f"Статус: {status['status']}")
if status["status"] in ("completed", "failed"):
break
time.sleep(2)
if status["status"] == "completed":
print("Результат:", status["output"])
else:
print("Ошибка:", status.get("error"))
JavaScript: получение истории запусков
const BASE_URL = 'https://api.arka-ai.ru/api';
const HEADERS = {
Authorization: 'Bearer <ваш_api_ключ>',
'Content-Type': 'application/json',
};
// Получение списка пайплайнов
const workflowsResp = await fetch(`${BASE_URL}/workflows`, {
headers: HEADERS,
});
const { data: workflows } = await workflowsResp.json();
const workflowId = workflows[0].id;
// Получение истории запусков
const runsResp = await fetch(
`${BASE_URL}/workflows/${workflowId}/runs?page=1&per_page=10`,
{ headers: HEADERS },
);
const { data: runs } = await runsResp.json();
runs.forEach((run) => {
console.log(`${run.id}: ${run.status} (${run.duration}s)`);
});