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)`);
});

On this page