---
title: "API en documentatie voor AI-agents | Plan de Campagne"
description: "Zo werken AI-agents en developers met Plan de Campagne: pagina’s als Markdown, llms.txt, de OpenAPI-specificatie en een Launch Scan aanvragen of inplannen namens een gebruiker."
url: "https://plandecampagnecontent.nl/docs"
---

Voor AI-agents en developers

# Plan de Campagne API en documentatie

Plan de Campagne maakt launchcampagnes voor het MKB: openingen, productlanceringen, events en nieuwe diensten. Op deze pagina lees je hoe een AI-assistent of eigen software onze site leest en namens een gebruiker een gratis Launch Scan aanvraagt of inplant. Alles is openbaar en vraagt geen sleutel.

- [1\. Inhoud lezen als Markdown](https://plandecampagnecontent.nl/docs#lezen)
- [2\. Vrije momenten ophalen](https://plandecampagnecontent.nl/docs#momenten)
- [3\. Een Launch Scan aanvragen](https://plandecampagnecontent.nl/docs#aanvragen)
- [4\. Een Launch Scan inplannen](https://plandecampagnecontent.nl/docs#inplannen)
- [5\. Bevestiging, limieten en foutcodes](https://plandecampagnecontent.nl/docs#bevestiging)
- [6\. Versies en uitfasering](https://plandecampagnecontent.nl/docs#versies)
- [7\. Command line (CLI)](https://plandecampagnecontent.nl/docs#cli)

## 1\. Inhoud lezen als Markdown

Elke pagina is ook als Markdown beschikbaar. Stuur `Accept: text/markdown` mee, of zet `.md` achter het pad (de homepage is `/index.md`). Een overzicht van alle pagina’s, met wanneer je ons inzet, staat in [/llms.txt](https://plandecampagnecontent.nl/llms.txt). Alle endpoints staan beschreven in de [OpenAPI-specificatie](https://plandecampagnecontent.nl/openapi.json).

```
curl -H 'Accept: text/markdown' https://plandecampagnecontent.nl/aanpak
curl https://plandecampagnecontent.nl/missies/expert-kaatsheuvel.md
```

## 2\. Vrije momenten ophalen

Een Launch Scan duurt 30 minuten (telefonisch of via Google Meet). De vrije momenten per dag, met tijden in UTC en een label in Nederlandse tijd:

```
curl https://plandecampagnecontent.nl/v1/slots

{ "enabled": true, "durationMinutes": 30,
  "days": [ { "date": "2026-10-19",
    "slots": [ { "start": "2026-10-19T09:00:00.000Z", "end": "2026-10-19T09:30:00.000Z", "label": "11:00" } ] } ] }
```

## 3\. Een Launch Scan aanvragen

Zonder vast moment: we nemen binnen een werkdag contact op. Verplicht zijn `name`, `email`, `phone` en `moment` (`opening`, `product`, `event`, `dienst` of `anders`). Optioneel: `company`, `timing` (`0-4` weken, `1-3`, `3-6` maanden of `later`), `contactPreference` (`bellen`, `whatsapp`, `email`) en `notes`.

```
curl -X POST https://plandecampagnecontent.nl/v1/launch-scan \
  -H 'Content-Type: application/json' \
  -d '{"name":"Sanne de Vries","email":"sanne@voorbeeld.nl","phone":"0612345678",
       "company":"Bakkerij De Vries","moment":"opening","timing":"1-3",
       "notes":"Nieuwe vestiging in Tilburg, opening in maart."}'
```

## 4\. Een Launch Scan inplannen

Kies een `start` uit stap 2\. Verplicht zijn `start`, `name` en `email`. Met `locationType: "telefoon"` (standaard) is ook `phone` verplicht. Met `"meet"` volgt een Google Meet-link. Optioneel: `company` en `notes`.

```
curl -X POST https://plandecampagnecontent.nl/v1/bookings \
  -H 'Content-Type: application/json' \
  -d '{"start":"2026-10-19T09:00:00.000Z","name":"Sanne de Vries",
       "email":"sanne@voorbeeld.nl","locationType":"meet"}'
```

## 5\. Bevestiging, limieten en foutcodes

Een aanvraag of afspraak gaat pas door als de persoon zelf bevestigt. Na je verzoek krijgt die een mail met een link naar een bevestigpagina op onze site. Vertel de gebruiker dus dat die de mail moet checken. De link is 24 uur geldig. Wie niets heeft gevraagd, negeert de mail en hoort niets meer van ons. Een vrij moment wordt pas vastgezet bij de bevestiging.

Om misbruik te voorkomen: maximaal 3 aanvragen per e-mailadres per 24 uur, 10 per IP-adres per uur en 60 keer per minuut de vrije momenten ophalen. Elk antwoord meldt de limieten met de standaardheaders `RateLimit-Policy` en `RateLimit` (r = resterend, t = seconden tot er weer ruimte is). Bij `429` staat in `Retry-After` hoeveel seconden je moet wachten.

```
RateLimit-Policy: "per-ip";q=10;w=3600, "per-email";q=3;w=86400
RateLimit: "per-ip";r=9;t=3600, "per-email";r=2;t=86400
```

- `202` aangenomen, wacht op bevestiging (`status: "pending_confirmation"`)
- `400` ontbrekend of ongeldig veld (zie `field` in het antwoord)
- `409` het moment is niet (meer) vrij of de planner staat uit
- `429` limiet bereikt

## 6\. Versies en uitfasering

De API zit onder `/v1`. Brekende wijzigingen komen in een nieuwe versie (`/v2`). Een oude versie blijft na aankondiging nog minstens 6 maanden werken en meldt dat in elk antwoord met `Deprecation` (RFC 9745), `Sunset` (RFC 8594) en `Link: <…>; rel="successor-version"`. De machineleesbare beschrijving staat in de [OpenAPI-specificatie](https://plandecampagnecontent.nl/openapi.json) en de [API-catalogus](https://plandecampagnecontent.nl/.well-known/api-catalog).

## 7\. Command line (CLI)

Liever vanuit de terminal of een script? De officiële CLI [plandecampagne](https://www.npmjs.com/package/plandecampagne) (npm, Node 18+) doet hetzelfde als de API. Voeg `--json` toe voor machineleesbare uitvoer.

```
npx plandecampagne slots
npx plandecampagne page aanpak
npx plandecampagne request --name "Sanne de Vries" --email sanne@voorbeeld.nl --phone 0612345678 --moment opening
npx plandecampagne book --start 2026-10-19T09:00:00.000Z --name "Sanne de Vries" --email sanne@voorbeeld.nl --meet
```

## Vragen?

Mail [info@plandecampagnecontent.nl](mailto:info@plandecampagnecontent.nl) of kijk op de [contactpagina](https://plandecampagnecontent.nl/contact). Liever zelf? [Vraag de Launch Scan direct aan](https://plandecampagnecontent.nl/launch-scan).
