# Queue Multiple Calls

{% hint style="success" %}
**-** **NEW! -  Interactive API docs, now live!**

Visit [api-docs.plumvoice.com](https://api-docs.plumvoice.com) to **read** Plum API documentation, **build and test requests** in our interactive API sandbox, **review** the responses, and **share** it all with your team.
{% endhint %}

## Queuing Multiple Outbound Calls

<mark style="color:green;">`POST`</mark> `https://fuse.plumvoice.com/api/apps/{application_id}/{deployment_id}/bulk_queue`

Queues outbound calls in batches from a CSV of contacts.

#### Path Parameters

| Name            | Type   | Description                                                                                                                                                                                              |
| --------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| application\_id | number | <p>Application ID number.</p><p></p><p>To find this number, <a href="/pages/-MJCrBvC0VgWv3SbsmEK#locating-the-application-and-deployment-id">see the following instructions from Outbound Calls</a>.</p> |
| deployment\_id  | number | <p>Deployment ID number.</p><p></p><p>To find this number, <a href="/pages/-MJCrBvC0VgWv3SbsmEK#locating-the-application-and-deployment-id">see the following instructions from Outbound Calls</a>.</p>  |

#### Headers

| Name         | Type   | Description                       |
| ------------ | ------ | --------------------------------- |
| Content-type | string | multipart/form-data               |
| Accept       | string | application/xml, application/json |

#### Request Body

| Name             | Type    | Description                                                                                                                                                                                                                                                                                                                                                                                                                   |
| ---------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| csv              | string  | CSV file of contacts to receive the outbound calls.                                                                                                                                                                                                                                                                                                                                                                           |
| start\_timestamp | string  | Unix timestamp indicating when to begin the outbound dialing attempts. If not specified, the calls go out immediately.                                                                                                                                                                                                                                                                                                        |
| end\_timestamp   | string  | Unix timestamp indicating when to stop attempting outbound calls.                                                                                                                                                                                                                                                                                                                                                             |
| max\_attempts    | integer | Total number of times (between 1-10) to attempt calling a specific number (if previous attempts are not completed successfully). This field requires *reattempt\_wait* field to be set.                                                                                                                                                                                                                                       |
| reattempt\_wait  | integer | Interval (in seconds) to wait before retrying the outbound call after a failure. This is only required when the *max\_attempts* value is set to a number greater than one, indicating additional retry attempts. Valid values range from 60 to 86400 (1 minute to 1 day).                                                                                                                                                     |
| result\_url      | string  | <p>Callback URL to your REST service that processes the call status results when the call is completed, canceled, or all attempts have been exhausted. The POST body matches the format of the <em>call\_details</em> attribute from the outbound call status API response.</p><p></p><p>For more information on <em>result\_url</em>, see documentation <a href="/pages/-M58QnLYb72U7xZvis9d#result-callbacks">here</a>.</p> |
| is\_pci          | integer | For customers who have been granted access to our HIPAA / PCI compliant secure environment setting this flag to 1 will cause connected outbound calls to execute within that secure environment. (Integer 0 or 1).                                                                                                                                                                                                            |

{% tabs %}
{% tab title="200 Success Response" %}
{% tabs %}
{% tab title="JSON" %}

```javascript
{"calls_queued":1}
```

{% endtab %}

{% tab title="XML" %}

```markup
<?xml version="1.0"?>
<result>
  <calls_queued>1</calls_queued>
</result>
```

{% endtab %}
{% endtabs %}
{% endtab %}

{% tab title="400 On Failure (multiple attempts were set without a retry interval):" %}
{% tabs %}
{% tab title="JSON" %}

```javascript
{"error":"The reattempt_wait parameter must be supplied when max_attempts is greater than 1."}
```

{% endtab %}

{% tab title="XML" %}

```markup
<?xml version="1.0"?>
<result>
  <error>The reattempt_wait parameter must be supplied when max_attempts is greater than 1.</error>
</result>
```

{% endtab %}
{% endtabs %}
{% endtab %}
{% endtabs %}

### **Possible Response Codes**

* **200**: success, calls successfully queued
* **400**: supplied data improperly formatted or invalid
* **401**: authentication headers invalid or the account is inactive
* **403**: the user attempting to queue the outbound call does not have appropriate permissions
* **404**: deployment not found
* **405**: invalid HTTP method supplied (only POST allowed)
* **409**: user, deployment, or application previously deleted
* **500**: database error

The return structure will contain the following item(s):

| Name          | Data Type | Always Present | Description                                                                 |
| ------------- | --------- | -------------- | --------------------------------------------------------------------------- |
| calls\_queued | integer   | no             | This represents the total number of calls queued when the HTTP code is 200. |
| error         | string    | no             | Indicates what went wrong when an HTTP code other than 200 is returned.     |

### **Sample Code**

This sample PHP code makes a request to queue multiple outbound calls (with a queue.csv file in the same working directory as the script):

```php
<?php
// account and application settings
$email = '<your_email_address>';
$developer_key = '<your_developer_key>';
$application_id = '<your_application_id>';
$deployment_id = '<your_deployment_id>';
$phone_numbers_file = '/path/to/csv/file.csv';

// build the URL and POST parameters
$url = 'https://fuse.plumvoice.com/api/apps/'.$application_id.'/'.$deployment_id.'/bulk_queue';
$params = array(
  'csv' => curl_file_create($phone_numbers_file),
  'start_timestamp' => strtotime('+1 minutes'),
  'end_timestamp' => strtotime('+1 hour'),
  'max_attempts' => 1
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_USERPWD, $email.':'.$developer_key);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Accept: application/json", "Content-type: multipart/form-data"));
$result = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
var_dump($result);
var_dump($http_code);
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.plumvoice.com/fuse/apis/outbound-calls/multiple-outbound-calls.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
