GET https://emailoctopus.com/api/1.6/campaigns/:campaignId/reports/bounced

Get information on the contacts who the campaign was sent to but bounced.

| Parameters           | 
|----------------------|  
| api_key (string)    | Your API key.  
| limit (integer)      | The number of records to return per page, up to a maximum of 100. Defaults to 100.

| 200 (success) returns |  
|----------------------|  
| data (array of structs) | Details of each bounce:

|                      |                      |  
|----------------------|----------------------|
| contact (struct)     | Details of the contact:  
|                      |                      |  
| id (string)         | The identifier of the contact.  
| email_address (string)| The email address of the contact.  
| fields (object)      | An object containing key/value pairs of field values, using the field's tag as the key.  
| tags (array)         | An array of tags associated with the contact.  
| status (string)      | The status of the contact: `SUBSCRIBED`, `UNSUBSCRIBED` or `PENDING`.  
| deleted (boolean)    | If the contact has since been deleted. If `true`, all other fields apart from `id` will be NULL.  
| created_at (string)  | When the contact was created, in ISO 8601 format.  
| last_updated_at (string)| When the contact was last updated, in ISO 8601 format.|  
| type (string)        | The type of bounce [HARD/SOFT].  
| occurred_at (string) | When the bounce occurred, in ISO 8601 format.|  
| paging (struct/array) | If there is more data available, an object is returned in the following format:

|                      |                      |  
|----------------------|----------------------|
| next (string)        | A link for the immediate next page of results.

If there is no more data to page, an empty array is returned.

| Non-200 (error) returns |  
|----------------------|  
| Details of the error:

|                      |                      |  
|----------------------|----------------------|
| code (string)        | The error code.  
| message (string)     | A description of the error.

| Method-specific error codes |  
|----------------------|  
| CAMPAIGN_NOT_FOUND   | The campaign could not be found.  
| CAMPAIGN_NOT_SENT    | The campaign does not have a status of 'SENT'.

| API-wide error codes  |  
|----------------------|  
| INVALID_PARAMETERS    | Parameters are missing or invalid.  
| API_KEY_INVALID       | Your API key is invalid.  
| UNAUTHORISED          | You're not authorised to perform that action.  
| NOT_FOUND             | The requested endpoint does not exist.  
| UNKNOWN               | An unknown error has occurred.

| Example request       |  
|----------------------|  
| /api/1.6/campaigns/00000000-0000-0000-0000-000000000000/reports/bounced?api_key=00000000-0000-0000-0000-000000000000

| Example response      |  
|----------------------|  
| ```js  
{  
    "data": [  
        {  
            "contact": {  
                "id": "00000000-0000-0000-0000-000000000000",  
                "email_address": "john.doe@example.com",  
                "fields": {  
                    "FirstName": "John",  
                    "LastName": "Doe",  
                    "Birthday": "2000-12-20"  
                },  
                "tags": [  
                    "vip"  
                ],  
                "status": "UNSUBSCRIBED",  
                "created_at": "2026-06-14T00:00:00+00:00",  
                "last_updated_at": "2026-06-15T08:25:18+00:00"  
            },  
            "type": "HARD",  
            "occurred_at": "2026-06-14T08:25:18+00:00"  
        },  
        {  
            "contact": {  
                "id": "00000000-0000-0000-0000-000000000001",  
                "email_address": "jane.doe@example.com",  
                "fields": {  
                    "FirstName": "Jane",  
                    "LastName": "Doe",  
                    "Birthday": "2000-12-20"  
                },  
                "tags": [  
                    "vip"  
                ],  
                "status": "UNSUBSCRIBED",  
                "created_at": "2026-06-14T00:00:00+00:00"  
            },  
            "type": "SOFT",  
            "occurred_at": "2026-06-14T08:25:18+00:00"  
        }  
    ],  
    "paging": []  
}  
```

| Code sample           |  
|----------------------|  
| cURL                 |  
| ```  
                    curl -X GET \  
	https://emailoctopus.com/api/1.6/campaigns/00000000-0000-0000-0000-000000000000/reports/bounced?api_key=00000000-0000-0000-0000-000000000000
                ```

| ```  
                    $ch = curl_init();  
curl_setopt($ch, CURLOPT_URL, 'https://emailoctopus.com/api/1.6/campaigns/00000000-0000-0000-0000-000000000000/reports/bounced?api_key=00000000-0000-0000-0000-000000000000');  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');  
$result = curl_exec($ch);  
if (curl_errno($ch)) {  
    echo 'Error:' . curl_error($ch);  
}  
curl_close($ch);  
                ```

| ```  
                    import requests  
params = (  
	('api_key', '00000000-0000-0000-0000-000000000000'),  
)  
response = requests.get('https://emailoctopus.com/api/1.6/campaigns/00000000-0000-0000-0000-000000000000/reports/bounced', params=params)  
                ```

| ```  
                    var https = require('https');  
var options = {  
    hostname: 'emailoctopus.com',  
    port: 443,  
    path: '/api/1.6/campaigns/00000000-0000-0000-0000-000000000000/reports/bounced?api_key=00000000-0000-0000-0000-000000000000',  
    method: 'GET',  
};  
var req = https.request(options);  
req.end();  
                ```

| ```  
                    package main  
import (  
	"io/ioutil"  
	"log"  
	"net/http"  
)  
func main() {  
    client := &http.Client{}  
    
    req, err := http.NewRequest("GET", "https://emailoctopus.com/api/1.6/campaigns/00000000-0000-0000-0000-000000000000/reports/bounced?api_key=00000000-0000-0000-0000-000000000000", nil)  
    if err != nil {  
        log.Fatal(err)  
    }  
    
    resp, err := client.Do(req)  
    if err != nil {  
        log.Fatal(err)  
    }  
    bodyText, err := ioutil.ReadAll(resp.Body)  
    if err != nil {  
        log.Fatal(err)  
    }  
}  
                ```
