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

Get information on the contacts who opened the campaign.

Parameters
api_key (string)
limit (integer)

200 (success) returns

Field Description
data (array of structs) Details of each 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.
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.
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.
occurred_at (string) When the open 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

Field Description
code (string) The error code.
message (string) A description of the error.

Method-specific error codes

Code Description
CAMPAIGN_NOT_FOUND The campaign could not be found.
CAMPAIGN_NOT_SENT The campaign does not have a status of 'SENT'.
CAMPAIGN_FEATURE_DISABLED The campaign does not have open tracking enabled.

API-wide error codes

Code Description
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/opened?api_key=00000000-0000-0000-0000-000000000000

Example response

{
    "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:19+00:00"
            },
            "occurred_at": "2026-06-14T08:25:19+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"
            },
            "occurred_at": "2026-06-14T08:25:19+00:00"
        }
    ],
    "paging": []
}

Code samples

cURL

curl -X GET \
    https://emailoctopus.com/api/1.6/campaigns/00000000-0000-0000-0000-000000000000/reports/opened?api_key=00000000-0000-0000-0000-000000000000

PHP

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://emailoctopus.com/api/1.6/campaigns/00000000-0000-0000-0000-000000000000/reports/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);

Python

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/opened', params=params)

Node.js

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

Go

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/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)
    }
}