Flows: API Console и A2A запуск
Полная инструкция по модалке API Console в редакторе Flows: где взять endpoint, как читать A2A JSON-RPC body, как запускать Streaming/Sync/Async и как разбирать реальные ответы API.
Шаг 1. Открываем API Console из редактора flow¶
API Console открывается из редактора flow кнопкой API в верхней панели. Это не отдельный тестовый
стенд и не пример "примерно как надо": модалка строит endpoint, branch, JSON body, headers и code
samples из текущего flow_id, активной ветки и текущих переменных flow.
Кнопки в шапке модалки:
Инструкцияоткрывает эту страницу документации в/documentation/scenarios/flows/api-console/.Копировать JSON bodyкопирует текущий A2A JSON-RPC body для выбранного режима.Fullscreenразворачивает модалку, когда нужно читать большие JSON/SSE ответы.Closeзакрывает модалку и возвращает в редактор.
Левая колонка всегда остается навигацией: карточка endpoint показывает, куда отправлять POST,
какой branch_id выбран, какой протокол используется и какой режим активен. Ниже четыре вкладки:
Старт, Примеры, Поля A2A, Запуск.

Шаг 2. Разбираем вкладку Старт и режимы A2A¶
Вкладка Старт отвечает на вопрос "что мне отправить самым первым запросом".
В верхнем блоке:
flow_idпоказывает точный ID агента из URL и endpoint.branch_idпоказывает ветку выполнения. Для базовой ветки UI показываетdefault.contextIdпоказывает пример ID диалога. Повторяйте один и тот жеcontextId, чтобы продолжать разговор; создавайте новый, чтобы начать чистую сессию.- счетчик переменных показывает, сколько flow variables есть у текущей ветки.
Переключатель режима меняет весь пример сразу:
Streamingиспользуетmethod: "message/stream"иAccept: text/event-stream.Syncиспользуетmethod: "message/send"иAccept: application/json.Asyncиспользуетmethod: "message/send"плюсmetadata.execution_mode: "async".
Ниже карточки режимов и таблица методов A2A. В обычной интеграции чаще всего нужны
message/stream, message/send и tasks/get; остальные методы нужны для отмены, resubscribe,
Agent Card и push notification config.

Шаг 3. Берем готовые curl, Python и JS примеры¶
Вкладка Примеры дает готовые варианты для внешнего клиента.
Что здесь есть:
- языки
curl,Python,JS; переключение меняет только код, но не смысл запроса; - кнопка
Копироватькопирует текущий пример целиком; - блок
Текущий JSON bodyпоказывает тот же payload, который уйдет в live-run; - блок
Файлыпоказывает A2Afilepart. URI-файл передается сnameиmimeType, а backend нормализует его вstate.files; audio-file дополнительно проходит STT, если voice runtime настроен.
Минимальный JSON-RPC body:
jsonrpc: "2.0"всегда фиксирован.idнужен клиенту, чтобы сопоставить ответ с запросом.methodзависит от режима.params.message.messageIdуникален для входного сообщения.params.message.roleобычноuser.params.message.partsсодержитtext,fileилиdata.params.message.contextIdсвязывает сообщения в один диалог.params.metadata.branchвыбирает ветку выполнения.params.metadata.variablesпередает runtime variables только для этого запуска.

Шаг 4. Проверяем каждое поле A2A и правила variables¶
Вкладка Поля A2A нужна, когда непонятно, зачем конкретное поле существует.
Главные нюансы:
metadata.branchвыбирает ветку графа. Если выбрать base в UI, API получаетdefault.metadata.variablesпередает данные в запуск flow и не используется для выбора ветки.metadata.versionвыбирает версию flow, но query?v=...имеет приоритет.metadata.execution_modeвmessage/sendсо значениемasyncилиbackgroundвключает асинхронный запуск.metadata.breakpointsиmetadata.triggersнужны редактору/debug/trigger runtime; обычному публичному клиенту они чаще всего не нужны.
Переменные:
metadata.variablesперекрывают flow variables только на время одного запуска.- Значение может быть примитивом, объектом или массивом.
- Строки с
@var:keyрезолвятся через company VariablesService; поддерживается вложенный JSON и рекурсивные ссылки вроде@var:api_endpoint, если сама переменная содержит@var:base_url. - Если передать объект формата flow variable (
value,secret,public,title,description), runtime используетvalue, а остальные поля служат для UI/документации. secretскрывает значение в UI, но не меняет поведение runtime.publicпоказывает переменную в Agent Card как параметр, который должен заполнить внешний клиент.
Системные переменные (user_id, company_id, active_namespace и другие) добавляет backend из
авторизованного HTTP-контекста после клиентских variables, поэтому внешний клиент не может подделать
пользователя или компанию через metadata.variables.

Шаг 5. Запускаем Streaming и видим настоящий ответ API¶
Вкладка Запуск — рабочий стол тестирования реального API.
Левая колонка:
Режимвыбирает Streaming/Sync/Async и сразу перестраивает method, Accept header и JSON body.contextIdзадает диалог. Оставьте его тем же для продолжения, нажмитеНовый contextIdдля чистой сессии.Сообщениестановитсяparams.message.parts[0].text.metadata.variables JSONпопадает вparams.metadata.variables.Runотправляет настоящий запрос в текущий/flows/api/v1/{flow_id}с текущей browser-сессией.Предпросмотр запросапоказывает HTTP method, Accept, Content-Type, credentials и полный body.
Для Streaming UI отправляет message/stream, читает реальные SSE frames и собирает ответ агента из
этих событий. Это режим по умолчанию для чатового UX: пользователь видит ответ по мере генерации,
а разработчик может смотреть каждое событие отдельно.

Шаг 6. Открываем инспектор ответа: JSON, SSE, headers, raw и полный result¶
Инспектор ответа показывает не только итоговый текст, но весь API-ответ.
Верхняя полоска статуса:
HTTP statusиContent-Typeприходят из реального HTTP response.task_idсоздается backend и нужен дляtasks/get,tasks/cancel,tasks/resubscribe.context_idподтверждает, в какой диалог попал запрос.Состояние A2Aпоказываетsubmitted,working,input-required,completed,failedи другие состояния task.SSE событияпоказывает количество stream frames.
Вкладки инспектора:
JSON-ответ— нормализованный JSON body для текущего режима.SSE события— массив реальных stream events: status updates, artifact updates, final states.Заголовки— HTTP headers ответа.Raw-ответ— исходный текст ответа без нормализации.Async опросы— запросы/ответыtasks/get, которые UI делал после async-submit.Полный result— полный объект, который вернул frontend resource: request envelope, response envelope, parsed body, raw text, frames, polls, extracted text и ошибки.

Шаг 7. Проверяем синхронный режим message/send¶
Sync нужен, когда внешний клиент хочет один HTTP response без чтения SSE.
UI отправляет:
method: "message/send";Accept: application/json;- без
metadata.execution_mode: "async".
HTTP-запрос ждет завершения flow и возвращает JSON-RPC response с финальным A2A Task. Этот режим проще для backend-to-backend интеграций, cron jobs и коротких deterministic flow. Если flow может работать долго, лучше использовать Streaming или Async, чтобы не держать HTTP request открытым.

Шаг 8. Проверяем async submit и последующие tasks/get опросы¶
Async нужен для долгих задач и фоновых запусков.
UI отправляет:
method: "message/send";Accept: application/json;metadata.execution_mode: "async".
Первый ответ должен вернуться быстро со state submitted и task_id. После этого результат получают
через tasks/get по task_id или contextId. В этой модалке Async опросы показывает, какие
tasks/get запросы были сделаны и какой финальный Task вернулся.
Типовые сценарии:
- Первый запрос: создайте новый
contextId, заполните сообщение и нажмитеRun. - Продолжение диалога: оставьте прежний
contextId, отправьте следующее сообщение. - Ветка: меняйте ветку в редакторе; API использует
metadata.branch. - Runtime variables: заполните
metadata.variables JSON, например{"customer_name":"Anna"}. - Переменные-секреты: передавайте
@var:secret_key, если значение лежит в VariablesService. - Ошибка
failed: смотритеJSON-ответ,Raw-ответиПолный result. - Ошибка
input-required: task ждет пользовательский ввод; отправьте следующее сообщение с тем жеcontextId.
