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

Get information on the performance of links in the campaign.

| Parameters |
| --- |
| api_key (string) | Your API key. |

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

|     |     |
| --- | --- |
| link (struct) | Details of the link:

|     |     |
| --- | --- |
| url (string) | The URL of the link. |
| clicked_total (int) | The number of total clicks. |
| clicked_unique (object) | The number of unique clicks. | | |
| 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'. |
| CAMPAIGN_FEATURE_DISABLED | The campaign does not have link tracking enabled. |

| 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/links?api_key=00000000-0000-0000-0000-000000000000 |

| Example response |
| --- |
| ```js<br>{<br>    "data": [<br>        {<br>            "url": "https://example.com/promo-1",<br>            "clicked_total": 90,<br>            "clicked_unique": 73<br>        },<br>        {<br>            "url": "https://example.com/promo-2",<br>            "clicked_total": 0,<br>            "clicked_unique": 0<br>        },<br>        {<br>            "url": "https://example.com/promo-3",<br>            "clicked_total": 10,<br>            "clicked_unique": 4<br>        }<br>    ],<br>    "paging": []<br>}<br>``` |

| Code sample<br>cURL<br>[copy](/content/api-documentation/campaigns/report/get-links#/index.html) |
| --- |
| ```<br>                    curl -X GET \<br>    https://emailoctopus.com/api/1.6/campaigns/00000000-0000-0000-0000-000000000000/reports/links?api_key=00000000-0000-0000-0000-000000000000<br>                <br>```<br>
```<br>                    $ch = curl_init();<br>curl_setopt($ch, CURLOPT_URL, 'https://emailoctopus.com/api/1.6/campaigns/00000000-0000-0000-0000-000000000000/reports/links?api_key=00000000-0000-0000-0000-000000000000');<br>curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br>curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');<br>$result = curl_exec($ch);<br>if (curl_errno($ch)) {<br>    echo 'Error:' . curl_error($ch);<br>}<br>curl_close($ch);<br>```<br>
```<br>                    import requests<br>params = (<br>    ('api_key', '00000000-0000-0000-0000-000000000000'),<br>)<br>response = requests.get('https://emailoctopus.com/api/1.6/campaigns/00000000-0000-0000-0000-000000000000/reports/links', params=params)<br>```<br>
```<br>                    var https = require('https');<br>var options = {<br>    hostname: 'emailoctopus.com',<br>    port: 443,<br>    path: '/api/1.6/campaigns/00000000-0000-0000-0000-000000000000/reports/links?api_key=00000000-0000-0000-0000-000000000000',<br>    method: 'GET',<br>};<br>var req = https.request(options);<br>req.end();<br>```<br>
```<br>                    package main<br>import (<br>    "io/ioutil"<br>    "log"<br>    "net/http"<br>)<br>func main() {<br>    client := &http.Client{}<br>    <br>    req, err := http.NewRequest("GET", "https://emailoctopus.com/api/1.6/campaigns/00000000-0000-0000-0000-000000000000/reports/links?api_key=00000000-0000-0000-0000-000000000000", nil)<br>    if err != nil {<br>        log.Fatal(err)<br>    }<br>    <br>    resp, err := client.Do(req)<br>    if err != nil {<br>        log.Fatal(err)<br>    }<br>    bodyText, err := ioutil.ReadAll(resp.Body)<br>    if err != nil {<br>        log.Fatal(err)<br>    }<br>}<br>```
