Skip to navigation

On Execution Ended

View as Markdown

Fired when the execution is over. Nothing about it will change afterwards.

This is the event that closes your case, and the one to subscribe to if you subscribe to only one: it is the only event that says the results are there, the only one delivered for an execution that never got to run, and the only one the platform re-delivers if your endpoint was down.

1

Read the results

Nothing is pushed here — read it over the authenticated API. The financial or public global position gives you everything at once; the per-product endpoints give you one thing at a time.

2

Store what you need

On your side, in your own model. The results stay readable while the execution exists, which is not forever.

3

Delete the execution

Delete an Execution purges its records and documents. The less of somebody’s financial data sits anywhere, the better — including here.

status_reason says how it ended:

OutcomeWhat it means
COMPLETEDEvery requested feature answered.
PARTIALAlso finished. Some features answered and others did not — the state says which, feature by feature. Read what arrived; the rest will not come later.
FAILEDNothing could be retrieved.
ABORTEDCancelled — by you, by the platform, or by a timeout.
AUTH_ERROR · UNHANDLED_AUTH_ERRORThe session with the source could never be opened. The preceding auth_ended event carries the detail.
CONFIGURATION_ERRORThe request itself was not valid: parameters or configurations. The state lists the offending fields.
TEMPORARY_ERRORSomething on the way was unavailable. The execution is over, but the cause is transient: the same request may well succeed later.

This is the only event the platform re-delivers on its own. If your endpoint was unreachable when it fired, a background job tries again — so a deploy window does not cost you a case. The other three are delivered once.

The payload carries no records, and that is deliberate: an execution event is a notification, which is what keeps somebody’s financial data off a public endpoint. Anything that arrives in data today is empty.

Answer 2xx as soon as the payload reaches you, whatever your processing does with it afterwards: any other status is recorded as a failed delivery even though the event arrived. Answering a delivery has the handler to copy.

Payload

The payload of this webhook request is an object.
app_idstringRequiredformat: "object-id"

The application this execution was launched with — the one your secret belongs to. Worth keeping when your product uses more than one, a sandbox and a production app being the usual case: every record and every event we send carries it.

customer_idstringRequired

The customer_id you supplied when the execution was initialised, returned as you sent it — so an answer can be routed to the right case with no lookup on your side.

execution_idstringRequiredformat: "object-id"

The execution this belongs to — the value you poll for the state and address every results endpoint with. Always present here: an event exists because an execution does.

event"ended"Required

The event type: ended.

datestringRequiredformat: "datetime"

When the event was raised, in UTC. Deliveries can arrive out of order — a retry is delivered after whatever came next — so order your own records by this, not by arrival.

customer_availablebooleanRequired

Whether the execution was started as one a person can answer (customer_interaction_available). When false, a challenge from the source cannot be solved and the execution ends instead of waiting.

status_reasonenumRequired

The precise reason for the state at the moment of the event — one of the execution reasons, or a feature’s own when producer names a feature. Branch on this and not on the message: it is a stable code. Every reason by family.

session_idstring or nullOptionalformat: "object-id"
external_execution_idstring or nullOptional
locking_hashstring or nullOptional
event_class"ExecutionEvent"OptionalDefaults to ExecutionEvent

Payload class discriminator — always this value for an execution event. If the same endpoint also receives flow events, branch on it first.

producer"engine" or enumOptionalDefaults to engine

Who raised it: engine for the execution itself — the login, typically — or the feature’s own code when a single feature is what needs something. An action_required from the accounts reader says accounts_read, so you know what is being asked for before reading the form.

status_messagestring or nullOptional
datamap from strings to any or nullOptional

Response

200
Successful Response
422
Validation Error