# Asynchronous Calls

In addition to synchronous calls — where the customer initiates a call and is immediately redirected to the platform test and then to an available operator — LiveID+ also supports asynchronous calls.

In this mode, the customer submits their information to request a video identification, which an operator will handle at a later time (e.g., through a scheduled appointment). This is the **recommended integration method** as it provides better control over the call flow.

br
## How It Works

The asynchronous call flow uses two methods:

1. **`pushAsyncCall`**: Queues a video identification call in the system without immediately routing it to an operator.
2. **`service-asyncall`**: Retrieves the queued call and starts the actual video identification session.


### Workflow


```
1. Your system calls POST /api/service/pushAsyncCall
   → Returns a unique ID (uId)

2. Later, the customer opens GET /app/service-asyncall?uId=<uId>
   → Redirects to compatibility test, then to an available operator

3. Your system can monitor the status via GET /api/v2/getAsyncRequestInfo?uId=<uId>
   → Returns all calls linked to the async request with their statuses
```

br
## Creating an Asynchronous Call

**Endpoint:** `POST /api/service/pushAsyncCall`

**Request Body:**

| Parameter | Type | Required | Description |
|  --- | --- | --- | --- |
| `b64Data` | string (Base64) | Yes | UTF-8 Base64 encoded JSON with call configuration (see below) |
| `method` | string | No | The method used to start the call: `"start"` (preferred) or `"live"`. Default: `"live"` |
| `expire` | string (date) | No | Expiration date for the call. After this date, the call is removed from the system. |


**The `b64Data` JSON structure (before Base64 encoding):**

The object must follow the same structure used by the [`service-start`](/products/liveidplus/enterprise/developer-documentation/api-definition/app/servicestart) API:


```json
{
  "id_organization": "ORG_CODE",
  "id_process": "process-uuid",
  "json": {
    "lang": "en",
    "liveid_email": "john.doe@example.com",
    "liveid_name": "John",
    "liveid_surname": "Doe",
    "liveid_servercallback": {
      "url": "https://your-system.com/callback",
      "otherParams": {
        "custom_reference": "REF-12345"
      }
    },
    "data": {
      "fiscal_code": {
        "datatype": "text",
        "label": "Fiscal Code",
        "value": "RSSMRA85M01H501Z"
      }
    }
  }
}
```

**Note:** Given that all data is already encoded in `b64Data`, the `json` parameter should **not** be Base64 encoded separately when using `method=start` — it is passed directly as a JSON object.

**Success Response:**


```json
{
  "success": true,
  "uId": "unique-async-call-id"
}
```

The returned `uId` is used to initiate the call later and to track its status.

br
## Initiating the Call

**Endpoint:** `GET /app/service-asyncall`

This endpoint retrieves the queued call and redirects the customer to the video identification platform. It can be provided as a direct link to the customer (e.g., in a confirmation email).

| Parameter | Type | Required | Description |
|  --- | --- | --- | --- |
| `uId` | string | Yes | Unique ID returned by `pushAsyncCall` |
| `noDel` | string | No | If `"1"`, the async call is not removed after the link is used. Default: `"0"` (call is removed after page load). |
| `id_operator2Call` | string (UUID) | No | Route call to a specific operator by ID |
| `email_operator2Call` | string (email) | No | Route call to a specific operator by email |
| `extId_operator2Call` | string | No | Route call to a specific operator by external ID |


**Note:** `id_operator2Call`, `email_operator2Call`, and `extId_operator2Call` are mutually exclusive.

**Example link:**


```
https://liveid.namirialtsp.com/app/service-asyncall?uId=abc123-def456
```

br
## Monitoring Async Call Status

### Get All Calls for an Async Request

**Endpoint:** `GET /api/v2/getAsyncRequestInfo`

**Authentication:** API Key (header `apikey`)

| Parameter | Type | Required | Description |
|  --- | --- | --- | --- |
| `uId` | string | Yes | Unique ID returned by `pushAsyncCall` |


**Success Response:**


```json
{
  "success": true,
  "create_date": "2026-01-15T10:00:00.000Z",
  "expire_date": "2026-01-20T23:59:59.000Z",
  "customer_name": "John",
  "customer_surname": "Doe",
  "customer_email": "john.doe@example.com",
  "calls": [
    {
      "start_date": "2026-01-15T14:30:00.000Z",
      "answer_date": "2026-01-15T14:32:00.000Z",
      "end_date": "2026-01-15T14:45:00.000Z",
      "id": "conference-uuid",
      "status": "N",
      "call_status": "ACTIVE"
    }
  ]
}
```

The `call_status` field can be: `WAITING`, `ACTIVE`, `EXPIRED`, or `CANCELLED`.

### Get Last Call for an Async Request

**Endpoint:** `POST /api/service/getCallInfoUID`

| Parameter | Type | Required | Description |
|  --- | --- | --- | --- |
| `uId` | string | Yes | Unique ID returned by `pushAsyncCall` |


This returns details about the most recent call linked to the async UID. For all calls, use `getAsyncRequestInfo` instead.

br
## Deleting an Asynchronous Call

**Endpoint:** `DELETE /api/service/delAsyncCall`

| Parameter | Type | Required | Description |
|  --- | --- | --- | --- |
| `uId` | string | Yes | Unique ID of the call to delete |


**Success Response:**


```json
{
  "success": true
}
```