Transaction Workflows

Import a transaction workflow

POST/transaction-workflows/import

Creates a workflow from a definition in the app's export format, as GET /transaction-workflows/{id}/export or the app returns it, and answers 201 with the workflow, its steps and a Location. Steps get new ids, with their fields, requirements, triggers and links; links and step ids in trigger config follow them. The workflow is never the default. An unknown className, a link to a step id not in steps, or confirmed_amount on more than one chain step returns 422.

Query parameters

  • dry_runboolean#

    Validate and run the call without committing it, returning what the real call would return with meta.dry_run set.

Headers

  • Idempotency-Keystring#

    Makes a retry safe. Send a new UUID for each new request and reuse it only to retry that request; the first response is replayed for 24 hours.

Request body

application/json, required · TransactionWorkflowExport

  • workflowobjectRequired#

    The workflow itself.

  • stepsobject[]Required#

    The steps, in order on export.

{
  "workflow": {
    "name": "standard-equity",
    "label": "Standard equity",
    "description": "Commit, then complete.",
    "status": "draft",
    "isDefault": false
  },
  "steps": [
    {
      "id": "step_0",
      "name": "committed",
      "label": "Committed",
      "description": "",
      "type": "default",
      "isProtected": true,
      "isFloating": false,
      "stepFields": [
        {
          "fieldKey": "effective_date",
          "required": true
        }
      ],
      "workflowCustomStepRequirements": [],
      "workflowCustomStepTriggers": [],
      "nextStepLinks": [
        {
          "fromStepId": "step_0",
          "toStepId": "step_1",
          "position": 1,
          "parallelPosition": 1
        }
      ]
    },
    {
      "id": "step_1",
      "name": "completed",
      "label": "Completed",
      "description": "",
      "type": "default",
      "isProtected": true,
      "isFloating": false,
      "stepFields": [],
      "workflowCustomStepRequirements": [
        {
          "className": "InternalUserOnly",
          "displayData": null,
          "optional": false,
          "leadingEdge": true
        }
      ],
      "workflowCustomStepTriggers": [],
      "nextStepLinks": [
        {
          "fromStepId": "step_1",
          "toStepId": null,
          "position": 2,
          "parallelPosition": 1
        }
      ]
    }
  ]
}

Responses

201

The workflow was imported.

TransactionWorkflow
{
  "data": {
    "id": "9a9d1c5e-4f2b-4c8e-9a7d-2f1e6b3c4d5a",
    "name": "string",
    "label": "string",
    "description": "string",
    "status": "draft",
    "is_default": true,
    "kyc_check_step_id": "9a9d1c5e-4f2b-4c8e-9a7d-2f1e6b3c4d5a",
    "steps": [
      {
        "id": "9a9d1c5e-4f2b-4c8e-9a7d-2f1e6b3c4d5a",
        "workflow_id": "9a9d1c5e-4f2b-4c8e-9a7d-2f1e6b3c4d5a",
        "name": "string",
        "label": "string",
        "type": "string",
        "kind": "linear",
        "description": "string",
        "is_protected": true,
        "is_floating": true,
        "order": 1,
        "has_custom_form": true,
        "is_internal_only": true,
        "show_default_internal_message": true,
        "document_upload": {},
        "minimum_investment": {},
        "document_release": {},
        "webhook": {},
        "posts_to_portfolio": true,
        "info_banner": {},
        "requirements": [],
        "triggers": [],
        "created_at": "2026-06-12T10:00:00+00:00",
        "updated_at": "2026-06-12T10:00:00+00:00"
      }
    ],
    "created_at": "2026-06-12T10:00:00+00:00",
    "updated_at": "2026-06-12T10:00:00+00:00"
  }
}
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

The request can't be processed (HTTP 422): validation_failed with one ErrorDetail per problem, or a code documented on the operation.

Error
429

Rate limit exceeded (error.code = rate_limited).

Error

Examples

curl -X POST https://your-org-domain/kong/core/api/v2/transaction-workflows/import\
  -H "Authorization: Bearer $HELM_API_KEY"\
  -H "Content-Type: application/json"\
  -d '{
  "workflow": {
    "name": "standard-equity",
    "label": "Standard equity",
    "description": "Commit, then complete.",
    "status": "draft",
    "isDefault": false
  },
  "steps": [
    {
      "id": "step_0",
      "name": "committed",
      "label": "Committed",
      "description": "",
      "type": "default",
      "isProtected": true,
      "isFloating": false,
      "stepFields": [
        {
          "fieldKey": "effective_date",
          "required": true
        }
      ],
      "workflowCustomStepRequirements": [],
      "workflowCustomStepTriggers": [],
      "nextStepLinks": [
        {
          "fromStepId": "step_0",
          "toStepId": "step_1",
          "position": 1,
          "parallelPosition": 1
        }
      ]
    },
    {
      "id": "step_1",
      "name": "completed",
      "label": "Completed",
      "description": "",
      "type": "default",
      "isProtected": true,
      "isFloating": false,
      "stepFields": [],
      "workflowCustomStepRequirements": [
        {
          "className": "InternalUserOnly",
          "displayData": null,
          "optional": false,
          "leadingEdge": true
        }
      ],
      "workflowCustomStepTriggers": [],
      "nextStepLinks": [
        {
          "fromStepId": "step_1",
          "toStepId": null,
          "position": 2,
          "parallelPosition": 1
        }
      ]
    }
  ]
}'