Прочитати виконання та його трасування

Читайте статус виконання, поки воно йде, і його трасування по вузлах, коли воно просунулося.

Виконання — це один запит, пройдений через флоу. Його відкриває запит до флоу — POST /v1/operations/execute, — і воно зберігає версію флоу, на якій почалося. Операції цієї сторінки його читають: його статус, на який чекає клієнт, і його трасування по вузлах. Консоль показує те саме трасування на сторінці виконання, яку відкривають із вкладки Виконання флоу.

Статус і трасування

  • GET /v1/executions/{id}/status відповідає полями відповіді на запит: status, output, error_code, error_message, cost, cache, waiting_on і trace_url. Поки виконання не закінчилося, він додає retry_after_seconds — паузу, яку Slen радить зробити перед наступним читанням. Читайте його, щоб дочекатися виконання.

  • GET /v1/executions/{id} відповідає трасуванням: виконання з його флоу — flow_name — це назва флоу, якою вона є зараз, — його версією, часом початку й кінця та двома списками — nodes і events.

Обидві операції потребують дозволу read. Ключ читає виконання свого проєкту. Виконання іншого проєкту або неіснуюче відповідає 404 з кодом flow_execution_not_found. Виконання одного флоу перелічено в статті Флоу.

Що містить трасування

  • У nodes є рядок для кожного вузла, який виконання пройшло: порт, через який він вийшов, в output_port, його вартість, скільки він тривав. Вузол записується, коли він закінчений, тому вузла, біля якого виконання чекає, там ще немає. У вузла, який завершує шлях, — Повернути відповідь, Відхилити запит — порту немає, і output_port дорівнює null.

  • Рядок ще називає вузол і те, що він вирішив. label — назва, яку автор дав вузлу в цій версії, null, якщо її немає. code — власне рішення вузла — відмова Перевірка бюджету, код Відхилити запит, approved у погодження — і може відрізнятися від error_code виконання: той код отримав той, хто викликав. model — модель останньої спроби вузла AI-модель або модель, для якої Перевірка бюджету прочитав бюджет вузла.

  • Виклик моделі перелічує свої спроби в рядку свого вузла AI-модель: одна спроба на кожне підключення провайдера, яке він пробував, з підключенням, пулом, надісланою моделлю (model_code) і тим, чим вона закінчилася.

  • events розповідає про прохід по порядку, з номерами в seq: оцінки й холди, відповіді та збої провайдерів, паузи й рішення. Подія несе суми, id і рішення — ніколи не промпт, не вхід флоу й не відповідь моделі.

Події трасування зберігаються 30 днів, а виконання з його вузлами — 90 днів, якщо сервіс не налаштовано інакше.

Чим закінчилося виконання

status каже, чим закінчився запит, а стаття Що каже відповідь перелічує всі статуси. error_code і error_message кажуть, чому виконання не завершилося успішно. Крім кодів API, середовище виконання закриває виконання, яке більше не може пройти, власним кодом — Коди помилок показують, який вигляд має таке виконання.

  • uncertain — невідомо, чим закінчився виклик моделі цього виконання: провайдер не відповів вчасно, або про виклик, який він виконував у фоні, більше не можна було запитати. error_code дорівнює operation_uncertain. Холд виклику лишається, доки не спливе, бо провайдерові могли заплатити, і Slen виклик не повторює. Стаття Коли результат невідомий каже, що робити.

  • failed з background_hold_expired — виклик моделі йшов у фоні, і його холд закрило інше списання, поки він чекав. Виклик закінчився, не запитавши в провайдера відповідь, і провайдер усе ще може виставити за нього рахунок.

  • failed з execution_timeout — у проходу вийшов час. Якщо модель уже відповіла, її виклик оплачено, і cost.actual усе одно прийде.

Вартість виконання

cost.estimated — сума оцінок, за якими авторизовано виклики моделей цього виконання. cost.actual — те, на що їх списано, і воно приходить після відповіді: виклики розраховуються у фоні, зазвичай протягом хвилини-двох.

  • cost.actual лишається null, поки виконання йде і поки хоча б один його виклик чекає на списання, тому виконання з двома викликами моделі ніколи не показує вартість одного.

  • Воно лишається null назавжди, коли нічого не списано: відмова, відповідь із кешу, збій у провайдера.

  • Коли його задано, воно більше не змінюється.

Читання трасування надолужує вартість, розрахунок якої було пропущено, тому трасування, прочитане після розрахунку, її показує.

Операції

Описи операцій і полів подано англійською.

Трасування одного запуску флоу

GET /v1/executions/{id}

  • Дозвіл: read
  • Доступно в SDK для PHP і Node.js

Node by node, event by event, with the cost on each.

Параметри

ПараметрОпис
id обовʼязково

pathId

Snowflake identifier, as a string.

  • Шаблон: ^\d+$
  • Приклад: 74438200973594624

Відповіді

200

The execution trace

application/json
{
  "data": {
    "execution_id": "74438200973594624",
    "flow_id": "74438200973594624",
    "flow_version_id": "74438200973594624",
    "operation": "generate_email",
    "operation_id": "74438200973594624",
    "status": "running",
    "error_code": "string",
    "error_message": "string",
    "cost": {
      "estimated": "0.02700000",
      "actual": "0.02700000"
    },
    "cache": {
      "hit": true,
      "cached_at": "2026-10-02T09:30:00Z"
    },
    "started_at": "2026-10-02T09:30:00Z",
    "finished_at": "2026-10-02T09:30:00Z",
    "duration_ms": 1,
    "flow_name": "string",
    "nodes": [
      {
        "node_key": "string",
        "node_type": "sdk_request",
        "status": "completed",
        "output_port": "string",
        "cost": "0.02700000",
        "duration_ms": 1,
        "started_at": "2026-10-02T09:30:00Z",
        "finished_at": "2026-10-02T09:30:00Z",
        "metadata": {},
        "attempts": [
          {
            "attempt_id": "74438200973594624",
            "attempt_number": 1,
            "connection_id": "74438200973594624",
            "pool_id": "74438200973594624",
            "status": "string",
            "error_code": "string",
            "latency_ms": 1,
            "cost": "0.02700000",
            "provider_request_id": "74438200973594624",
            "model_code": "gpt-4o-mini"
          }
        ],
        "label": "string",
        "model": "gpt-4o-mini",
        "code": "string"
      }
    ],
    "events": [
      {
        "seq": 1,
        "type": "accepted",
        "node_key": "string",
        "occurred_at": "2026-10-02T09:30:00Z",
        "payload": {}
      }
    ]
  }
}

Помилки

СтатусКодиКоли
401

No credential, or one that is not valid

403

Authenticated, but not allowed: scope (insufficient_scope), policy or tenant (not_a_member); a blocked end customer (customer_blocked); an act only a signed-in person may take (session_required); the role rule on members and invitations (member_forbidden, invite_forbidden); a write to the organization's own rows, or a read of the audit journal, by a caller that does not reach every project (project_access_restricted)

404

No such resource for this tenant. Somebody else's resource — and a resource of a project the caller does not reach — answers the same way on purpose: the two must not be distinguishable.

Заголовки

  • X-Request-Id

Тіло кожної помилки — конверт помилки.

Статус запуску флоу для опитування

GET /v1/executions/{id}/status

  • Дозвіл: read
  • Доступно в SDK для PHP і Node.js

Status, cost, what the run waits on, and the answer once there is one — the endpoint an SDK polls. Answered from a Redis snapshot when there is one and from the row otherwise, byte for byte the same either way. A run of a project the caller does not reach is 404 either way — the snapshot carries its project. Use GET /v1/executions/{id} for the node-by-node trace.

Параметри

ПараметрОпис
id обовʼязково

pathId

Snowflake identifier, as a string.

  • Шаблон: ^\d+$
  • Приклад: 74438200973594624

Відповіді

200

The current state of the execution

application/json
{
  "data": {
    "execution_id": "74438200973594624",
    "status": "running",
    "operation": "generate_email",
    "output": {},
    "error_code": "string",
    "error_message": "string",
    "cost": {
      "estimated": "0.02700000",
      "actual": "0.02700000"
    },
    "cache": {
      "hit": true,
      "cached_at": "2026-10-02T09:30:00Z"
    },
    "waiting_on": {
      "node_key": "string",
      "type": "queue_node",
      "resume_at": "2026-10-02T09:30:00Z"
    },
    "trace_url": "string",
    "retry_after_seconds": 1
  }
}

Помилки

СтатусКодиКоли
401

No credential, or one that is not valid

403

Authenticated, but not allowed: scope (insufficient_scope), policy or tenant (not_a_member); a blocked end customer (customer_blocked); an act only a signed-in person may take (session_required); the role rule on members and invitations (member_forbidden, invite_forbidden); a write to the organization's own rows, or a read of the audit journal, by a caller that does not reach every project (project_access_restricted)

404

No such resource for this tenant. Somebody else's resource — and a resource of a project the caller does not reach — answers the same way on purpose: the two must not be distinguishable.

Заголовки

  • X-Request-Id

Тіло кожної помилки — конверт помилки.

Приклади

Прочитати трасування

id — це execution_id відповіді на запит. Відповідь — виконання з його nodes і events у формі, яку описує блок вище.

Terminal
curl https://api.slen.ai/api/v1/executions/74438200973594700 \
  -H "Authorization: Bearer $SLEN_API_KEY"

Прочитати статус

Виконання чекає біля свого вузла review на рішення людини. resume_at немає, а retry_after_seconds радить, коли прочитати знову.

Terminal
curl https://api.slen.ai/api/v1/executions/74443028719599616/status \
  -H "Authorization: Bearer $SLEN_API_KEY"
200 OK
{
  "data": {
    "execution_id": "74443028719599616",
    "status": "waiting",
    "operation": "generate_email",
    "output": null,
    "error_code": null,
    "error_message": null,
    "cost": {
      "estimated": null,
      "actual": null
    },
    "cache": {
      "hit": false,
      "cached_at": null
    },
    "waiting_on": {
      "node_key": "review",
      "type": "approval",
      "resume_at": null
    },
    "trace_url": "/v1/executions/74443028719599616",
    "retry_after_seconds": 30
  }
}

Що читати далі

Зібрано з openapi b070e1f, sdk contract 5cc7055, php ae4a53b, node 84bc62d