GET https://emailoctopus.com/api/1.6/campaigns/:campaignId/reports/not-opened

Get information on the contacts who didn't open the campaign.

| 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) | The contacts that didn't open:

|     |     |
| --- | --- |
| 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.<br> 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. | | |
| 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/not-opened?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": "SUBSCRIBED",  
                "created_at": "2026-06-14T00:00:00+00:00",  
                "last_updated_at": "2026-06-15T08:25:24+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": "SUBSCRIBED",  
                "created_at": "2026-06-14T00:00:00+00:00"  
            }  
        }  
    ],  
    "paging": []  
}  
``` |

| Code sample
| cURL
| ```
                    curl -X GET \
    https://emailoctopus.com/api/1.6/campaigns/00000000-0000-0000-0000-000000000000/reports/not-opened?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/not-opened?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/not-opened', params=params)
                ```
| ```
                    var https = require('https');
var options = {
    hostname: 'emailoctopus.com',
    port: 443,
    path: '/api/1.6/campaigns/00000000-0000-0000-0000-000000000000/reports/not-opened?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/not-opened?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)
    }
}
                ```
