# Call Closing

When a call is terminated, an event is sent to the integrator with the details of the closure.
All LiveID+ events are available via the client-side callback and the redirect parameter. However, only call closing events (`close` and `error`) are also forwarded to the `liveid_servercallback` URL.

The events that can be received are:

| Event | Description |
|  --- | --- |
| `close` | Fired when the video identification process is closed by the operator. |
| `error` | Fired when the video identification process is closed due to unexpected errors (e.g., operator disconnection). |


## Event Parameters

For each event, an object containing the following properties is provided:

| Parameter | Description |
|  --- | --- |
| `callID` | Unique identifier for the LiveID+ video identification process. |
| `message` | JSON object containing additional parameters. |
| `message.closeStatus` | Indicates how the video identification process was closed: - `N`: Successfully completed. - `S`: Suspended by the operator. - `A`: Aborted by the operator due to an error. - `K`: Terminated by the system due to unexpected errors. |
| `message.note` | A note provided by the operator at the time of closure. |
| `message.processId` | Identifier of the associated process workflow. |
| `message.self` | Boolean indicating if the process is a self-identification process. |
| `message.abortCode` | Code corresponding to predefined closure reasons (only present when `closeStatus=A`). |
| `message.nextProcess` | Identifier of a follow-up video identification process, if applicable. *Not included for `error` events.* |
| `message.token` | Authentication token for LiveID+ API features. *Not included for `error` events.* |
| `message.additionalData` | JSON object containing custom data added by the end script. *Not included for `error` events.* |


## Abort Codes

The abort codes can be customized per process upon request.

The default codes are:

| Code | Description |
|  --- | --- |
| `E_CONN` | Problem starting the call, stuck on "Connecting..." |
| `E_DISCONNECT` | User disconnected |
| `E_ANSWER_TIMEOUT` | Connection timeout |
| `E_OTHER_NO_TECH` | Other non-technical issue not listed (specify) |
| `E_OTHER_TECH` | Other technical problem not listed (specify) |
| `E_PHOTO` | Problem taking photo after switched camera on mobile |
| `E_QUAL` | Problem with video quality |
| `E_REC` | Problem recording call |
| `E_SWITCH` | Problem switching camera on mobile device |
| `E_VIDEO` | Video issues for customer and/or operator |
| `E_SOUND` | Audio issues for customer and/or operator |
| `E_DATA` | Incorrect data |
| `E_THIRDP` | Presence of unauthorized third party |
| `E_DOC` | Missing or invalid (unreadable, expired, etc...) document |
| `E_CONN_LOW` | Poor and/or unstable connection |




## Call Closing Strategy

Each customer organization should define a strategy for handling video identification process closures. Some examples:

- **Organization A**: Sends an email containing all identification data as a ZIP file attachment.
- **Organization B**: Calls an exposed service to retrieve the video identification status and related details.


Since there are no predefined standard procedures, organizations must define their own processes based on their requirements.

### Recommended Workflow

A typical call closing integration workflow would be:

1. Receive the `close` or `error` event (via client-side callback, redirect, or server-side callback).
2. Extract the `callID` (conference ID) and `closeStatus` from the event payload.
3. If `closeStatus` is `N` (success), use the `message.token` to retrieve identification data via the [Data Retrieval](/it/products/liveidplus/enterprise/get-started/data-retrieval) APIs.
4. If `closeStatus` is `A` (aborted), check the `abortCode` for the specific reason and handle accordingly.
5. Store the results in your system for further processing.