> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.laposta.org/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.laposta.org/_mcp/server.

# Resultaten van een campagne

GET https://api.laposta.nl/v2/report/{campaign_id}

Geeft de resultaten van een verzonden campagne terug: hoeveel er aankwamen, hoeveel relaties openden of klikten, en de verhoudingen daartussen.The results of a campaign.Gibt die Ergebnisse einer versendeten Kampagne zurück: wie viele angekommen sind, wie viele Abonnenten geöffnet oder geklickt haben, und die Verhältnisse dazwischen.Devuelve los resultados de una campaña enviada: cuántos correos llegaron, cuántos contactos abrieron o hicieron clic, y las proporciones entre esas cifras.

Reference: https://docs.laposta.org/resultaten/campagneresultaten-opvragen

## Authentication

- `Authorization` header (basic auth, required) — Vul je API-sleutel in bij `api_key` en laat `leave_empty` leeg. De API gebruikt basic auth, waarbij je sleutel de plaats van de gebruikersnaam inneemt. In curl schrijf je dat als `-u JOUW_SLEUTEL:`, met een dubbele punt en niets erachter.Enter your API key at `api_key` and leave `leave_empty` empty. The API uses basic auth, with your key in place of the username. In curl that reads `-u YOUR_KEY:`, with a colon and nothing after it.Trage deinen API-Schlüssel bei `api_key` ein und lass `leave_empty` leer. Die API nutzt Basic Auth, wobei dein Schlüssel an die Stelle des Benutzernamens tritt. In curl schreibst du das als `-u DEIN_SCHLUESSEL:`, mit einem Doppelpunkt und nichts dahinter.Introduce tu clave API en `api_key` y deja `leave_empty` vacío. La API usa basic auth, con tu clave en lugar del nombre de usuario. En curl se escribe como `-u TU_CLAVE:`, con dos puntos y nada después.

## Request

### Path parameters

- `campaign_id` (string, required) — Het id van de campagne. Dat vind je in het antwoord van [Alle campagnes opvragen](/campagnes/alle-campagnes-opvragen).The id of the campaign. You find it in the response of [Get all campaigns](/campagnes/alle-campagnes-opvragen).Die ID der Kampagne. Du findest sie in der Antwort von [Alle Kampagnen abrufen](/campagnes/alle-campagnes-opvragen).El id de la campaña. Lo encuentras en la respuesta de [Obtener todas las campañas](/campagnes/alle-campagnes-opvragen).

## Response

### 200

De aanvraag is gelukt.The request succeeded.Die Anfrage war erfolgreich.La solicitud se ha realizado correctamente.

- `report` (Report, optional) — Het report-objectThe report objectDas report-ObjektEl objeto report

## Errors

### 400 Bad Request Error

De aanvraag klopt niet. Het antwoord bevat een `type`, een `message` en meestal een `code` en de `parameter` die de fout veroorzaakte. Een object dat niet bestaat valt ook hieronder, met code 203.The request is not valid. The response contains a `type`, a `message` and usually a `code` plus the `parameter` that caused it. An object that does not exist also falls under this, with code 203.Die Anfrage stimmt nicht. Die Antwort enthält einen `type`, eine `message` und meistens einen `code` und den `parameter`, der den Fehler verursacht hat. Ein Objekt, das nicht existiert, fällt ebenfalls hierunter, mit Code 203.La solicitud no es correcta. La respuesta contiene un `type`, un `message` y normalmente un `code` y el `parameter` que ha causado el error. Un objeto que no existe también entra aquí, con el código 203.

- `error` (ErrorError, optional)

### 401 Unauthorized Error

Er is geen geldige API-sleutel meegestuurd, of dit endpoint staat niet aan voor dit account.No valid API key was provided, or this endpoint is not enabled for this account.Es wurde kein gültiger API-Schlüssel mitgeschickt, oder dieser Endpunkt ist für dieses Konto nicht aktiv.No se ha enviado una clave API válida, o este endpoint no está activado para esta cuenta.

- `error` (ErrorError, optional)

### 429 Too Many Requests Error

Je hebt te veel aanvragen in een minuut gedaan. De header `Retry-After` vertelt na hoeveel seconden het weer mag.Too many requests in one minute. The `Retry-After` header tells you how many seconds to wait.Du hast zu viele Anfragen in einer Minute gestellt. Der Header `Retry-After` sagt, nach wie vielen Sekunden es wieder erlaubt ist.Has hecho demasiadas solicitudes en un minuto. La cabecera `Retry-After` indica después de cuántos segundos puedes volver a intentarlo.

- `error` (ErrorError, optional)

## Types

### Report

Het report-objectThe report objectDas report-ObjektEl objeto report

- `account_id` (string, optional) — Het id van dit account.The ID of this accountDie ID dieses Kontos.El ID de esta cuenta.
- `campaign_id` (string, optional) — Het id van de campagne.The ID of the campaignDie ID der Kampagne.El ID de la campaña.
- `sent` (integer, optional) — Het aantal verzonden e-mails.The number of emails sentDie Anzahl der versendeten E-Mails.El número de correos enviados.
- `accepted` (integer, optional) — Het aantal e-mails dat door de ontvangende mailservers is geaccepteerd.The number of emails accepted by the recipient mail serversDie Anzahl der E-Mails, die von den empfangenden Mailservern akzeptiert wurden.El número de correos que han aceptado los servidores de correo receptores.
- `cleaned` (integer, optional) — Het aantal relaties dat is opgeschoond omdat bezorgen structureel mislukte.The number of deleted subscribersDie Anzahl der Abonnenten, die bereinigt wurden, weil die Zustellung dauerhaft fehlschlug.El número de contactos que se han depurado porque la entrega fallaba de forma estructural.
- `complained` (integer, optional) — Het aantal relaties dat de e-mail als spam markeerde.The number of spam complaints (by clicking on the spam button in the email program)Die Anzahl der Abonnenten, die die E-Mail als Spam markiert haben.El número de contactos que han marcado el correo como spam.
- `hardbounced` (integer, optional) — Het aantal hard-bounces.The number of hard-bouncesDie Anzahl der Hard Bounces.El número de hard bounces.
- `unsubscribed` (integer, optional) — Het aantal afmeldingen.The number of unsubscriptionsDie Anzahl der Abmeldungen.El número de bajas.
- `opened_unique` (integer, optional) — Het aantal relaties dat de e-mail minstens een keer opende.The number of subscribers who have opened the email once or moreDie Anzahl der Abonnenten, die die E-Mail mindestens ein Mal geöffnet haben.El número de contactos que han abierto el correo al menos una vez.
- `clicked_unique` (integer, optional) — Het aantal relaties dat minstens een keer klikte.The number of subscribers who have clicked on the email once or moreDie Anzahl der Abonnenten, die mindestens ein Mal geklickt haben.El número de contactos que han hecho clic al menos una vez.
- `webversion_unique` (integer, optional) — Het aantal relaties dat de webversie bekeek.The number of subscribers who have requested the web versionDie Anzahl der Abonnenten, die die Webversion angesehen haben.El número de contactos que han visto la versión web.
- `accepted_ratio` (double, optional) — De verhouding geaccepteerde e-mails t.o.v. het aantal verzonden e-mails.The ratio of accepted emails to the number of sent emailsDas Verhältnis der akzeptierten E-Mails zur Anzahl der versendeten E-Mails.La proporción de correos aceptados respecto al número de correos enviados.
- `opened_ratio` (double, optional) — De verhouding één keer of meer geopende e-mail t.o.v. het aantal geaccepteerde e-mails.The ratio of emails opened once or more to the number of accepted emailsDas Verhältnis der ein Mal oder öfter geöffneten E-Mails zur Anzahl der akzeptierten E-Mails.La proporción de correos abiertos una vez o más respecto al número de correos aceptados.
- `clicked_ratio` (double, optional) — De verhouding e-mails waarin één keer of meer geklikt is t.o.v. het aantal geaccepteerde e-mails.The ratio of emails that have been clicked once or more to the number of accepted emailsDas Verhältnis der E-Mails, in denen ein Mal oder öfter geklickt wurde, zur Anzahl der akzeptierten E-Mails.La proporción de correos en los que se ha hecho clic una vez o más respecto al número de correos aceptados.
- `from_automation` (boolean, optional) — Of deze verzending uit een automation komt.Whether this delivery came from an automation.Ob dieser Versand aus einer Automation stammt.Si este envío procede de una automation.

### ErrorError

- `type` (enum, required)
  - Allowed values: `invalid_request`, `invalid_input`, `internal`
- `message` (string, required)
- `code` (integer, optional)
- `parameter` (string, optional)

## Examples

**Response**

```json
{
  "report": {
    "account_id": "wFiUS4HL4e",
    "campaign_id": "njhgaf61ye",
    "sent": 1,
    "accepted": 1,
    "cleaned": 1,
    "complained": 1,
    "hardbounced": 1,
    "unsubscribed": 1,
    "opened_unique": 1,
    "clicked_unique": 1,
    "webversion_unique": 1,
    "accepted_ratio": 1.1,
    "opened_ratio": 1.1,
    "clicked_ratio": 1.1,
    "from_automation": true
  }
}
```

**SDK Code**

```python
import requests

url = "https://api.laposta.nl/v2/report/njhgaf61ye"

response = requests.get(url, auth=("<api_key>", "<leave_empty>"))

print(response.json())
```

```javascript
const url = 'https://api.laposta.nl/v2/report/njhgaf61ye';
const credentials = btoa("<api_key>:<leave_empty>");

const options = {method: 'GET', headers: {Authorization: `Basic ${credentials}`}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.laposta.nl/v2/report/njhgaf61ye"

	req, _ := http.NewRequest("GET", url, nil)

	req.SetBasicAuth("<api_key>", "<leave_empty>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.laposta.nl/v2/report/njhgaf61ye")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request.basic_auth("<api_key>", "<leave_empty>")

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.laposta.nl/v2/report/njhgaf61ye")
  .basicAuth("<api_key>", "<leave_empty>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.laposta.nl/v2/report/njhgaf61ye', [
  'headers' => [
  ],
    'auth' => ['<api_key>', '<leave_empty>'],
]);

echo $response->getBody();
```

```csharp
using RestSharp;
using RestSharp.Authenticators;

var client = new RestClient("https://api.laposta.nl/v2/report/njhgaf61ye");
client.Authenticator = new HttpBasicAuthenticator("<api_key>", "<leave_empty>");
var request = new RestRequest(Method.GET);

IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let credentials = Data("<api_key>:<leave_empty>".utf8).base64EncodedString()

let headers = ["Authorization": "Basic \(credentials)"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.laposta.nl/v2/report/njhgaf61ye")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```