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 · ExamplesIntroduction
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.
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.
- Call Start with the flow hash to initialize the interaction and receive the EngagementInstance.
- Read the identifiers you will need for Submit:
flowInstanceId,tenantIdentifier,blockIdentifier,flowIdentifier, andinstanceId. - Build the submission model from the
StepDefinitionsreturned by Start, using the keys found in each step'sOutputProperties. - 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.
| Name | In | Type | Description |
|---|---|---|---|
| hashString | path | string | The flow link hash that identifies the interaction to initialize. |
| x-api-key | header | string | An API key provided to the developer. The API key must possess the Submission claim. |
| x-user-agent | header | string | The user device user agent that is submitting the request. |
| x-source-agent | header | string | The 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:
| Field | In | Type | Description |
|---|---|---|---|
| flowInstanceId | body | string | Identifier of this flow instance. Sent back on Submit as X-Flow-Instance-Id. |
| tenantIdentifier | body | string | Tenant identifier. Sent back on Submit as X-Tenant-Identifier. |
| blockIdentifier | body | string | Block identifier. Sent back on Submit as X-Block-Identifier. |
| flowIdentifier | body | string | Flow identifier. Sent back on Submit as X-Flow-Identifier. |
| instanceId | body | string | Interaction instance identifier. Sent back on Submit as X-Instance-Id. |
| instanceHash | body | string | Instance hash. Sent back on Submit as X-Instance-Hash. |
| stepDefinitions | body | array | The 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"
}
}
| Name | In | Type | Description |
|---|---|---|---|
| StepId | body | integer | The step's identifier, taken from the matching Start step definition. |
| StepDefinition | body | string | The step definition name, for example BlockLoader or WrapUp, from the Start step definition. |
| ExtractedInformation | body | object | Key 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. |
- For each step, fetch the
StepIdandStepDefinitionfrom the Start step definition. - Read the keys from the
OutputPropertiesof each StepDefinition. These become the keys insideExtractedInformation. - Populate each key with the value you want to submit for that property.
- 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.
| Name | In | Type | Description |
|---|---|---|---|
| X-User-Agent | header | string | The user device user agent submitting the request. |
| X-Flow-Instance-Id | header | string | The flowInstanceId returned by Start. |
| X-Tenant-Identifier | header | string | The tenantIdentifier returned by Start. |
| X-Block-Identifier | header | string | The blockIdentifier returned by Start. |
| X-Instance-Id | header | string | The instanceId returned by Start. |
| X-Flow-Identifier | header | string | The flowIdentifier returned by Start. |
| X-Instance-Hash | header | string | The instanceHash returned by Start. |
| Accept-Language | header | string | Language for the request, for example en. |
| Content-Type | header | string | application/json. |
| body | body | array | The 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
Status Codes
| Code | Meaning |
|---|---|
| 204 | The submission is successful. |
| 404 | The step definition defined in the model was not found. |
| 409 | The flow link is no longer valid. |
| 422 | Validation 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. |
| 500 | The 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 suffix | Description |
|---|---|
| ..._Property_transactionId | Unique transaction identifier. |
| ..._Property_senderName | Sender name. |
| ..._Property_receiverName | Receiver name. |
| ..._Property_amount | Transaction amount. |
| ..._Property_currency | Transaction currency. |
| ..._Property_purpose | Purpose 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"
}
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
- Start the flow to get identifiers, step map, and output keys, used to build the submission payload.
- Build the Submit payload; include BlockLoader custom properties for transaction data.
- Submit with the required headers:
X-Flow-Instance-Id,X-Tenant-Identifier,X-Block-Identifier,X-Instance-Id,X-Flow-Identifier,X-Instance-Hash. - The flow executes AML screening, then either takes an auto-decision or fires a webhook for manual review.
- 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
- Keep transaction property keys aligned with your flow's OutputProperties to avoid typos and mismatches.
- Always pass the exact identifiers returned by Start in the Submit headers.
- Normalize names (trim, casing) at the edge to improve AML matching quality.
- Include a unique
transactionIdandrequestIdfor traceability. The examples already show..._Property_requestIdusage.