Developers · Submission API Developer
API REFERENCE

Submission API

Start an interaction and submit flow content to the Digital Experience Platform (DXP) programmatically, without the UI (headless). Run Automated AML, Decisions, and Client Creation or Updates straight from your systems.

Base URL · Auth · Examples
Base URL https://api.gateway.assentify.com/webapi/v1/Manager Auth x-api-key (Submission claim) Format application/json

Introduction

The Submission API is an endpoint that submits the content of a flow without proceeding through the Web. Developers use it to execute Assentify DXP processes such as running Automated AML, Decisions, Client Creation and Updates, and more. Working with the API is a two-call sequence: initialize the flow with Start, then send the flow data with Submit.

Two calls per interactionCall Start once to initialize the flow and receive its identifiers, step map, and output keys. Then build a submission model from those keys and POST it to Submit.

Start then Submit

To begin using the Submission API, the developer must initialize the flow. This is done with the Start endpoint. The Start response returns the Step Definition for each step in the flow, along with the identifiers you pass back as headers on Submit. Build the submission model from the Start response, then POST it to Submit.

  1. Call Start with the flow hash to initialize the interaction and receive the EngagementInstance.
  2. Read the identifiers you will need for Submit: flowInstanceId, tenantIdentifier, blockIdentifier, flowIdentifier, and instanceId.
  3. Build the submission model from the StepDefinitions returned by Start, using the keys found in each step's OutputProperties.
  4. POST the model to Submit with the required headers set from the Start identifiers.

Start

Initializes the flow and returns an EngagementInstance describing the flow, its steps, and the identifiers you use on Submit.

GET/webapi/v1/Manager/Start/{hashString}
NameInTypeDescription
hashStringpathstringThe flow link hash that identifies the interaction to initialize.
x-api-keyheaderstringAn API key provided to the developer. The API key must possess the Submission claim.
x-user-agentheaderstringThe user device user agent that is submitting the request.
x-source-agentheaderstringThe source from which the request originates. The Submission API should use the SDK value.

Request

curl --location \
  'https://api.gateway.assentify.com/webapi/v1/Manager/Start/C6A974227F7274A361A73EB6B43F5996DCFB0C60A7087E3281981C24F00E2494' \
  --header 'x-api-key: {API-KEY}' \
  --header 'x-user-agent: {USERAGENT}' \
  --header 'x-source-agent: SDK'

Response · EngagementInstance

{
  "stepId": 0,
  "flowName": "",
  "blockName": "",
  "instanceHash": "",
  "stepDefinition": null,
  "flowInstanceId": "",
  "tenantIdentifier": "",
  "blockIdentifier": "",
  "flowIdentifier": "",
  "customProperties": {},
  "defaultLanguageId": 0,
  "nextBlockIdentifier": "",
  "stepDefinitions": [
    {
      "stepId": 0,
      "stepDefinition": "",
      "customization": {
        "summaryMessage": "",
        "header": "",
        "type": "",
        "stepName": "",
        "stepTypeDto": {
          "id": 0,
          "name": "",
          "definition": "",
          "aBlockType": 0
        },
        "outputProperties": [
          { "id": 0, "key": "", "displayName": "", "type": 0 }
        ],
        "inputProperties": []
      },
      "inputProperties": [],
      "outputProperties": [
        { "id": 0, "key": "", "displayName": "", "type": 0 }
      ]
    }
  ],
  "stepMap": [
    {
      "id": 0,
      "stepType": 0,
      "stepName": "",
      "stepDefinition": "",
      "parentStepId": null,
      "branches": null,
      "numberOfBranches": null,
      "isVirtual": true
    }
  ],
  "instanceId": "",
  "applicationId": "",
  "chatEnabled": false
}

Once you have called the Start endpoint, you will receive key information used on Submit:

FieldInTypeDescription
flowInstanceIdbodystringIdentifier of this flow instance. Sent back on Submit as X-Flow-Instance-Id.
tenantIdentifierbodystringTenant identifier. Sent back on Submit as X-Tenant-Identifier.
blockIdentifierbodystringBlock identifier. Sent back on Submit as X-Block-Identifier.
flowIdentifierbodystringFlow identifier. Sent back on Submit as X-Flow-Identifier.
instanceIdbodystringInteraction instance identifier. Sent back on Submit as X-Instance-Id.
instanceHashbodystringInstance hash. Sent back on Submit as X-Instance-Hash.
stepDefinitionsbodyarrayThe Step Definition for each step in the flow. Provides the outputProperties keys used to build the submission model.

Prepare the Submission Model

The Start endpoint provides the developer with the Step Definition for each step in the flow. To submit the information to the Submit API call, generate the following model for each step. The model is populated from the data retrieved in the Start > StepDefinitions property.

{
  "StepId": 0,
  "StepDefinition": "",
  "ExtractedInformation": {
    "key1": "value1",
    "key2": "value2"
  }
}
NameInTypeDescription
StepIdbodyintegerThe step's identifier, taken from the matching Start step definition.
StepDefinitionbodystringThe step definition name, for example BlockLoader or WrapUp, from the Start step definition.
ExtractedInformationbodyobjectKey and value pairs. Each key is an Output Property key from the step's OutputProperties; the value is the data you are submitting for that property.
  1. For each step, fetch the StepId and StepDefinition from the Start step definition.
  2. Read the keys from the OutputProperties of each StepDefinition. These become the keys inside ExtractedInformation.
  3. Populate each key with the value you want to submit for that property.
  4. Assemble one object per step into an array to form the request body.

Example submission model

[
  {
    "StepId": 3444,
    "StepDefinition": "BlockLoader",
    "ExtractedInformation": {
      "aca994ae-3de7-4348-9e01-fb09a70bd75d_OnBoardMe_BlockLoader_DeviceName": "iPhone",
      "72b16780-2aae-4d1b-90f3-661888e14265_OnBoardMe_BlockLoader_FlowName": "{EngagementInstance.FlowName}",
      "a08b62cb-6825-4c25-8322-c8bc0917a15c_OnBoardMe_BlockLoader_TimeStarted": "{Datetime UTC (DD/MM/YYYY)}",
      "26d161af-d9e1-44fa-9331-65cf4ad00b69_OnBoardMe_BlockLoader_Application": "{EngagementInstance.ApplicationId}",
      "4ff3de21-3588-4236-8fed-325694d39637_OnBoardMe_BlockLoader_Interaction": "{EngagementInstance.InstanceId}",
      "1bf06f51-3606-47cb-8fca-28ce575d2c86_OnBoardMe_BlockLoader_UserAgent": "{USER-AGENT-HERE}",
      "fb013fb4-485b-48f6-a4b6-5282d85e194d_OnBoardMe_BlockLoader_InstanceHash": "{EngagementInstance.InstanceHash}",
      "0e8c286b-b66b-4e45-b4d3-1e0372ad42ca_OnBoardMe_Property_requestId": "{YOUR-REQUEST-ID}",
      "11d8801a-307d-4f38-9889-d9ae558dace4_OnBoardMe_Property_fullName": "Ali El Chawiche"
    }
  },
  {
    "StepId": 3445,
    "StepDefinition": "WrapUp",
    "ExtractedInformation": {
      "51a741d5-06c0-4363-99b8-9a1966908b04_OnBoardMe_WrapUp_TimeEnded": "{Datetime UTC (DD/MM/YYYY)}"
    }
  }
]

Submit

Submits the prepared model to run the flow. The identifiers returned by Start are passed as headers.

POST/webapi/v1/Manager/Submit
NameInTypeDescription
X-User-AgentheaderstringThe user device user agent submitting the request.
X-Flow-Instance-IdheaderstringThe flowInstanceId returned by Start.
X-Tenant-IdentifierheaderstringThe tenantIdentifier returned by Start.
X-Block-IdentifierheaderstringThe blockIdentifier returned by Start.
X-Instance-IdheaderstringThe instanceId returned by Start.
X-Flow-IdentifierheaderstringThe flowIdentifier returned by Start.
X-Instance-HashheaderstringThe instanceHash returned by Start.
Accept-LanguageheaderstringLanguage for the request, for example en.
Content-Typeheaderstringapplication/json.
bodybodyarrayThe submission model: an array of step objects (StepId, StepDefinition, ExtractedInformation).

Request

curl --location 'https://api.gateway.assentify.com/webapi/v1/Manager/Submit' \
  --header 'X-User-Agent;' \
  --header 'X-Flow-Instance-Id: 2ae3776982044cc5a0ce51082bc9a643' \
  --header 'X-Tenant-Identifier: 282fe85a-627a-4767-d91a-08dc85ed07b5' \
  --header 'X-Block-Identifier: 65136f31-b657-42c1-9d87-b303e09025b1' \
  --header 'X-Instance-Id: 5ca16bdf4e874be3ad6bee25e2354790' \
  --header 'X-Flow-Identifier: 50654991-a41c-4b3a-8b1b-2f33bf08615a' \
  --header 'X-Instance-Hash: C6A974227F7274A361A73EB6B43F5996DCFB0C60A7087E3281981C24F00E2494' \
  --header 'Accept-Language: en' \
  --header 'Content-Type: application/json' \
  --data '[
    {
      "StepId": 3444,
      "StepDefinition": "BlockLoader",
      "ExtractedInformation": {
        "aca994ae-3de7-4348-9e01-fb09a70bd75d_OnBoardMe_BlockLoader_DeviceName": "iPhone",
        "72b16780-2aae-4d1b-90f3-661888e14265_OnBoardMe_BlockLoader_FlowName": "{EngagementInstance.FlowName}",
        "a08b62cb-6825-4c25-8322-c8bc0917a15c_OnBoardMe_BlockLoader_TimeStarted": "{Datetime UTC (DD/MM/YYYY)}",
        "26d161af-d9e1-44fa-9331-65cf4ad00b69_OnBoardMe_BlockLoader_Application": "{EngagementInstance.ApplicationId}",
        "4ff3de21-3588-4236-8fed-325694d39637_OnBoardMe_BlockLoader_Interaction": "{EngagementInstance.InstanceId}",
        "1bf06f51-3606-47cb-8fca-28ce575d2c86_OnBoardMe_BlockLoader_UserAgent": "{USER-AGENT-HERE}",
        "fb013fb4-485b-48f6-a4b6-5282d85e194d_OnBoardMe_BlockLoader_InstanceHash": "{EngagementInstance.InstanceHash}",
        "0e8c286b-b66b-4e45-b4d3-1e0372ad42ca_OnBoardMe_Property_requestId": "{YOUR-REQUEST-ID}",
        "11d8801a-307d-4f38-9889-d9ae558dace4_OnBoardMe_Property_fullName": "Ali El Chawiche"
      }
    },
    {
      "StepId": 3445,
      "StepDefinition": "WrapUp",
      "ExtractedInformation": {
        "51a741d5-06c0-4363-99b8-9a1966908b04_OnBoardMe_WrapUp_TimeEnded": "{Datetime UTC (DD/MM/YYYY)}"
      }
    }
]'

Response

HTTP/1.1 204 No Content
Fill in values correctlyMake sure to fill in the data correctly and ensure that correct values are used for each Output Property key.

Status Codes

CodeMeaning
204The submission is successful.
404The step definition defined in the model was not found.
409The flow link is no longer valid.
422Validation error if any of the keys are populated with data that is not supported by the set data type. The submitted entity cannot be processed.
500The data submitted to the endpoint cannot be processed due to the structural integrity of the submitted model.

Using the Submission API for Transaction Processing

Leverage the headless Submission API to submit transaction metadata (for example, sender and receiver), trigger automatic AML screening, and drive auto-decisions or human review via webhooks. When transactions are stopped because they are flagged by the AML system, a human can review each transaction and decide manually, which triggers the rest of the automated flow. Flows are still initialized with Start and completed with Submit as described earlier.

1) Send transaction data via Block Loader (custom properties)

On each submission, include transaction attributes inside the BlockLoader step's ExtractedInformation using your flow's Output Property keys. Use the keys provided by your flow's OutputProperties for BlockLoader (from the Start response). Typical fields:

Property key suffixDescription
..._Property_transactionIdUnique transaction identifier.
..._Property_senderNameSender name.
..._Property_receiverNameReceiver name.
..._Property_amountTransaction amount.
..._Property_currencyTransaction currency.
..._Property_purposePurpose of the transaction.

Example (excerpt of the Submit body)

[
  {
    "StepId": 3444,
    "StepDefinition": "BlockLoader",
    "ExtractedInformation": {
      "aca994ae-..._OnBoardMe_BlockLoader_DeviceName": "iPhone",
      "0e8c286b-..._OnBoardMe_Property_transactionId": "TXN-2025-10-21-001",
      "11d8801a-..._OnBoardMe_Property_senderName": "Riad Salam",
      "a7b2d901-..._OnBoardMe_Property_receiverName": "Global Supplies Ltd",
      "b55a1104-..._OnBoardMe_Property_amount": "12500.00",
      "c9012abc-..._OnBoardMe_Property_currency": "USD",
      "d7e3ff77-..._OnBoardMe_Property_purpose": "Invoice 7842 - equipment"
    }
  }
]

The structure matches the BlockLoader example. Replace the keys with those returned by your Start call.

2) Sender and receiver name handling

You can populate sender, receiver, or both in BlockLoader custom properties. Your downstream AML flow will use whichever properties your DXP flow is configured to read.

3) Configure the flow to auto-screen AML

In the DXP flow, add steps and logic that read the above BlockLoader properties and invoke AML screening. The Start response contains the step definitions and output keys you need to build the submission model accurately.

4) Automated decisions or human review (webhooks)

Configure automated decision rules in the flow. Auto-approve or decline when the AML score or risk meets thresholds. If there are matches or uncertainty, trigger a webhook to your compliance system so an officer can decide manually.

Example "AML Match to Review" webhook payload (suggested)

{
  "event": "aml.review_required",
  "transactionId": "TXN-2025-10-21-001",
  "flowInstanceId": "2ae3776982044cc5a0ce51082bc9a643",
  "tenantIdentifier": "282fe85a-627a-4767-d91a-08dc85ed07b5",
  "riskSummary": { "matches": 2, "topScore": 92, "rules": ["PEP", "SanctionsPartial"] },
  "senderName": "Riad Salam",
  "receiverName": "Global Supplies Ltd",
  "amount": "12500.00",
  "currency": "USD",
  "reviewUrl": "https://your-compliance-app/tx/TXN-2025-10-21-001"
}
Where identifiers come fromIDs like flowInstanceId and tenantIdentifier are provided by Start and sent back via headers during Submit.

5) Post-decision notifications

When a decision is taken (auto or manual), emit a webhook to your API (or send an email) with the outcome and key attributes so downstream systems (core banking, ledger, ERP) can post the result.

Example "Decision Finalized" webhook payload (suggested)

{
  "event": "transaction.decision",
  "transactionId": "TXN-2025-10-21-001",
  "decision": "APPROVED",
  "reason": "No AML matches above threshold",
  "flowInstanceId": "2ae3776982044cc5a0ce51082bc9a643",
  "decidedAtUtc": "2025-10-21T20:14:22Z"
}

End-to-End Sequence

  1. Start the flow to get identifiers, step map, and output keys, used to build the submission payload.
  2. Build the Submit payload; include BlockLoader custom properties for transaction data.
  3. Submit with the required headers: X-Flow-Instance-Id, X-Tenant-Identifier, X-Block-Identifier, X-Instance-Id, X-Flow-Identifier, X-Instance-Hash.
  4. The flow executes AML screening, then either takes an auto-decision or fires a webhook for manual review.
  5. A final webhook notification is sent to your system, API, or email.

Example Submit headers (subset)

X-Flow-Instance-Id: 2ae3776982044cc5a0ce51082bc9a643
X-Tenant-Identifier: 282fe85a-627a-4767-d91a-08dc85ed07b5
X-Block-Identifier: 65136f31-b657-42c1-9d87-b303e09025b1
X-Instance-Id: 5ca16bdf4e874be3ad6bee25e2354790
X-Flow-Identifier: 50654991-a41c-4b3a-8b1b-2f33bf08615a
X-Instance-Hash: C6A97422...F00E2494

The body is the BlockLoader excerpt with transaction fields shown in the transaction processing section. The structure mirrors the sample model.

Best Practices

  1. Keep transaction property keys aligned with your flow's OutputProperties to avoid typos and mismatches.
  2. Always pass the exact identifiers returned by Start in the Submit headers.
  3. Normalize names (trim, casing) at the edge to improve AML matching quality.
  4. Include a unique transactionId and requestId for traceability. The examples already show ..._Property_requestId usage.