---
title: "Submit a flow"
method: POST
path: "/flows/{id}"
tags: ["public"]
---

# Submit a flow

`POST /flows/{id}`

Submits credentials or a method selection for the given authentication flow.

## Path parameters

- `id` string, required

## Request body

- object

## Response `200`

flow is the response envelope for GET/POST /flows/:id.

- Flow — ConnectionID are mutually exclusive — `state` tells the client which.
  - `connection_id` string
  - `error` string
  - `error_url` string
  - `flow_id` string
  - `identity` object
  - `provider` ProviderInfo — ProviderInfo is the branding subset exposed in the flow response. Mirrors public catalog fields only; auth/proxy stay server-side.
    - `display_name` string
    - `id` string
    - `logo_url` string
  - `redirect_browser_to` string
  - `restart_url` string
  - `return_to` string
  - `state` string
  - `ui` UIContainer — UIContainer is the top-level form payload for a flow step. Matches kratos/ui/container.Container plus a Hekate-only Headline used by strategies that want to override the renderer's default per-step title (e.g. an option-picker step that wants "Select your account type" instead of "Connect <Provider>").
    - `action` string
    - `headline` string
    - `messages` Message[]
      - `context` object — Context carries i18n interpolation parameters.
      - `id` integer — ID is the message catalog key.
      - `text` string — Text is the literal English fallback.
      - `type` string — Type is "info", "error", or "success".
    - `method` string
    - `nodes` Node[]
      - `attributes` Attributes — Kratos uses a tagged union via NodeType discrimination; we do the same.
        - `id` string — ID returns the attribute's logical id (e.g. the form field name).
        - `nodeType` string
      - `group` string — Group disambiguates nodes that belong to different "subflows" within the same UI container (e.g. an oauth2 button alongside an api_key form). Mirrors Kratos's node.Group.
      - `messages` Message[]
        - `context` object — Context carries i18n interpolation parameters.
        - `id` integer — ID is the message catalog key.
        - `text` string — Text is the literal English fallback.
        - `type` string — Type is "info", "error", or "success".
      - `meta` NodeMeta — Kratos puts Label here for non-input nodes; we follow the same pattern.
        - `label` Text
          - `context` object — Context carries i18n interpolation parameters.
          - `id` integer — ID is the message catalog key. Tenant SDKs use this to localize. IDs are currently assigned ad-hoc; a later revision can centralize a catalog.
          - `text` string — Text is the literal English fallback.
          - `type` string — Type discriminates info/error/success.
      - `type` string

## Other responses

- `400` — errorGeneric wraps the error model as a response.
- `500` — errorGeneric wraps the error model as a response.

---

[API](https://skmtc.net/hintoric/apis/contains-the-generated-openapi-specification-for-hekate.md) · [All operations](https://skmtc.net/hintoric/apis/contains-the-generated-openapi-specification-for-hekate/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/hintoric/contains-the-generated-openapi-specification-for-hekate/revisions/72bd83b55019/schema)
