Onboarding

List onboarding flows

GET/onboarding/flows
onboarding:readlist_compliancesRead-onlyDeprecatedSunset 2027-06-30

Cursor-paginated list of onboarding flows — the investor journeys (KYC, FCA classification, risk warnings, appropriateness) investors complete to join the platform. Flows are returned in every state (draft and published); pass ?status=PUBLISHED for only live flows. Flows are tenant-global, so every token on the tenant sees the same set. Filter by free-text name (q) and draft/published state (status). Create a flow with POST /onboarding/flows.

These are the firm-level flow definitions (reusable across investors), not per-investor runs. For an individual investor's onboarding progress, use GET /users/{userId}/onboarding. Deprecated: withdrawn on 2027-06-30. GET /onboarding-flows replaces it; the Link header names it.

Query parameters

  • limitinteger#

    Page size (1–100). Defaults to 25; values are clamped to the range.

    Default: 25
  • cursorstring#

    Opaque pagination cursor taken from a prior response's meta.next_cursor.

  • qstring#

    Free-text search on the flow name.

  • statusstring#

    Filter by flow state. DRAFT = editable, not yet live; PUBLISHED = live and collecting responses.

    One of: DRAFT, PUBLISHED
  • user_typestring#

    List flows available to this user type. Defaults to investor, so only investor flows are listed unless advisor is asked for.

    One of: investor, advisorDefault: "investor"

Responses

200

OK

{
  "data": [
    {
      "id": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
      "name": "Investor Suitability",
      "status": "published",
      "expiry_type": "TWELVE_MONTH",
      "mode_type": "Continuous",
      "definition": null,
      "forms_count": 2,
      "created_at": "2026-06-15T10:30:00+00:00",
      "updated_at": "2026-06-15T10:30:00+00:00"
    },
    {
      "id": "a3f1c2d4-5e6f-4071-8293-b4c5d6e7f809",
      "name": "KYC Onboarding",
      "status": "draft",
      "expiry_type": "NEVER_EXPIRE",
      "mode_type": "Versioned",
      "definition": null,
      "forms_count": 1,
      "created_at": "2026-06-10T09:15:00+00:00",
      "updated_at": "2026-06-14T14:22:00+00:00"
    }
  ],
  "links": {
    "first": null,
    "last": null,
    "prev": null,
    "next": "https://your-org-domain/kong/core/api/v2/onboarding/flows?cursor=eyJpZCI6MjUsIl9wb2ludHNUb05leHRJdGVtcyI6dHJ1ZX0"
  },
  "meta": {
    "path": "https://your-org-domain/kong/core/api/v2/onboarding/flows",
    "per_page": 25,
    "next_cursor": "eyJpZCI6MjUsIl9wb2ludHNUb05leHRJdGVtcyI6dHJ1ZX0",
    "prev_cursor": null
  }
}
401

Authentication failed. error.code is one of invalid_token, expired, revoked.

Error
403

Authorization failed. error.code is one of org_disabled, ip_blocked, missing_scope, scope_disabled, user_disabled.

Error
422

Request validation failed (HTTP 422). The body is either the Laravel validation envelope (message + field-keyed errors) or the API error envelope for domain rejections (e.g. form_type_not_supported, folder_locked, parent_not_found, folder_not_empty).

429

Rate limit exceeded (error.code = rate_limited).

Error

Examples

curl https://your-org-domain/kong/core/api/v2/onboarding/flows\
  -H "Authorization: Bearer $HELM_API_KEY"\
  -H "Content-Type: application/json"