
# Aan de slag met de API

Met de <span data-t="appName">DM Champ</span> REST API kun je je eigen integratie boven op je account bouwen. Je kunt contacten aanmaken en opzoeken, campagnes, veelgestelde vragen, taken en afspraken beheren, berichten versturen, webhooks registreren, analyses lezen en berichtenkanalen koppelen — alles wat het dashboard doet, aangestuurd door code.

Dit is de centrale pagina voor de API-documentatie. Als je <span data-t="appName">DM Champ</span> koppelt aan een tool die al een ingebouwde integratie heeft, heb je de API wellicht helemaal niet nodig. De API is bedoeld voor aangepaste integraties en automatisering op schaal.

::: note
**Let op:** Deze pagina's zijn geschreven voor ontwikkelaars. Als u geen ontwikkelaar bent, deel dit gedeelte dan met uw technische team.
:::


---

## Basis-URL

Elk verzoek gaat naar hetzelfde basiswebadres en alle paden in deze documentatie zijn hieraan gerelateerd:

```
https://api.dmchamp.com/v1
```

Dus het AI Agents-eindpunt is `https://api.dmchamp.com/v1/agents`, het contacten-eindpunt is `https://api.dmchamp.com/v1/contacts`, enzovoort.

Alle verzoeken moeten gebruikmaken van een beveiligde verbinding (HTTPS). Gewone HTTP-verzoeken worden geweigerd.

---

## Een API-sleutel verkrijgen

API-toegang is een **betaalde functie**. Als je abonnement dit niet bevat, retourneert elk verzoek een `403` met de volgende inhoud:

```json
{
  "success": false,
  "error_code": 403,
  "error": "This action requires the \"api_access\" feature, which is not enabled for this account."
}
```

Zodra API-toegang is ingeschakeld voor uw abonnement, kunt u een sleutel genereren via het dashboard. De volledige stapsgewijze handleiding vindt u in [API-toegang](../integrations/api-access.md) — kort gezegd: ga naar **Instellingen → Integraties → API-sleutel** om uw sleutel te genereren of opnieuw te genereren. API-sleutel is een eigen sectie onder Integraties, los van Webhooks, en verschijnt pas zodra API-toegang is ingeschakeld voor uw abonnement. Behandel de sleutel als een wachtwoord: deze verleent volledige toegang tot uw account.

---

## Authenticatie

Je kunt je API-sleutel op vier manieren verzenden. Ze werken allemaal op elk eindpunt dat authenticatie via een API-sleutel accepteert.

| Methode | Hoe | Beste voor |
|---|---|---|
| Queryparameter | `?apiKey=YOUR_API_KEY` | Snelle tests, browser-URL's, verouderde opstellingen |
| Header | `X-API-Key: YOUR_API_KEY` | Productie-integraties |
| Bearer-header | `Authorization: Bearer YOUR_API_KEY` | Productie-integraties |
| Firebase ID-token | `Authorization: Bearer <ID token>` | Alleen voor sessies van eigen apps |

Geef voor productie de voorkeur aan een van de header-vormen, zodat je sleutel nooit in een serverlogboek of browsergeschiedenis terechtkomt. De queryparameter-vorm werkt altijd en is het eenvoudigst voor een eenmalige test.

Zie [Authenticatie](authentication.md) voor een volledig overzicht van elke methode, met voorbeelden en richtlijnen over wanneer je welke methode gebruikt.

---

## Je eerste verzoek

Hier is een volledige, werkende aanroep die de AI Agents in je account weergeeft. Deze gebruikt je API-sleutel en retourneert een korte rij per Agent, met de nieuwste eerst.

**cURL**

```bash
curl "https://api.dmchamp.com/v1/agents?apiKey=YOUR_API_KEY&view=summary"
```

**JavaScript**

```javascript
const res = await fetch("https://api.dmchamp.com/v1/agents?view=summary", {
  headers: {
    "X-API-Key": "YOUR_API_KEY",
  },
});

const data = await res.json();
console.log(data.agents);
```

**Python**

```python
import requests

res = requests.get(
    "https://api.dmchamp.com/v1/agents",
    params={"view": "summary"},
    headers={"X-API-Key": "YOUR_API_KEY"},
)

data = res.json()
print(data["agents"])
```

Een geslaagd antwoord ziet er als volgt uit:

```json
{
  "success": true,
  "campaigns": [
    {
      "id": "NBCXrhqGPSFsd6MV7pRo",
      "name": "Inbound WhatsApp Leads",
      "type": "Incoming from Unknown Contacts",
      "status": "Live",
      "enabled": true,
      "archived": false,
      "created_at": 1700000000000,
      "ai_mode": true,
      "language": "en",
      "enabled_channels": ["whatsapp", "instagram"]
    }
  ],
  "next_cursor": null
}
```

---

## Succes- en foutmeldingen

Elk JSON-antwoord bevat een `success`-vlag, zodat je hierop kunt vertakken zonder statuscodes te hoeven parseren.

Een geslaagd antwoord is `success: true` plus de gegevens voor dat eindpunt (de veldnaam varieert — `campaigns`, `contacts`, `data`, enzovoort):

```json
{
  "success": true,
  "campaigns": []
}
```

Een mislukt antwoord is `success: false` met een leesbaar `error`-bericht en een numerieke `error_code` die overeenkomt met de HTTP-status:

```json
{
  "success": false,
  "error": "Invalid cursor",
  "error_code": 400
}
```

Controleer altijd `success` (of de HTTP-status) voordat je de gegevens leest. Zie [Fouten & Paginering](errors-and-pagination.md) voor de volledige tabel met statuscodes en hoe je door grote resultatensets bladert.

---

## Snelheidslimieten

Geverifieerde verzoeken zijn beperkt tot **300 verzoeken per minuut** per API-sleutel. Er is ook een ruimer plafond van **1.200 verzoeken per minuut per account**, waarbij elk geverifieerd verzoek voor dat account wordt meegeteld.

::: master-only
Agentschappen: het tweede getal is het getal om rekening mee te houden. Verzoeken die u doet met uw agentschapssleutel worden in mindering gebracht op uw agentschapsaccount, zelfs wanneer ze gericht zijn op een sub-account met `sub_account_id`, dus een provisioning-burst over vele klanten deelt één budget. Als een klant een eigen budget nodig heeft, gebruik dan de API-sleutel van dat sub-account.
:::

Als u een van beide limieten overschrijdt, ontvangt u een `429`-antwoord:

```json
{
  "success": false,
  "error_code": 429,
  "error": "Rate limit exceeded. Please try again later."
}
```

Wacht even en probeer het na een korte pauze opnieuw. Je kunt je huidige verbruik ook op elk gewenst moment controleren met `GET https://api.dmchamp.com/v1/api-keys/usage`, die teruggeeft hoeveel verzoeken je in het huidige venster hebt gebruikt en wanneer dit wordt gereset — handig voor het bouwen van client-side throttling. Zie [API-sleutels](api-keys.md).

---

## Resourcegidsen

De onderstaande resourcegroepen hebben elk hun eigen handleiding met de exacte paden, aanvraagvelden en antwoordstructuren.

| Resource | Wat het dekt |
|---|---|
| [AI Agents](agents.md) | AI-agents maken en configureren: instellingen, actieve uren, kennis, tagregels, tools, media en concepten |
| [Entry Points](entry-points.md) | Bepalen welke AI-agent een nieuw gesprek beantwoordt: kanaalinstellingen, één agent per WhatsApp-nummer, trefwoord-, opmerking- en volgersregels |
| [Broadcasts](broadcasts.md) | Eenmalige verzendingen naar een contactenlijst maken, prijzen, starten, pauzeren en dupliceren |
| [Campaigns](campaigns.md) | Campagnes en hun botconfiguratie maken, bijwerken, dupliceren, inschakelen, archiveren en inspecteren |
| [Contacts](contacts.md) | Contacten maken, opzoeken, weergeven, bijwerken, importeren, taggen en verwijderen |
| [FAQs](faqs.md) | De vraag-en-antwoord-items beheren die je AI-assistent gebruikt en deze koppelen aan campagnes |
| [Knowledge Base](knowledge-base.md) | Websites en documenten importeren in de kennis van je AI en FAQ's bundelen in groepen |
| [Tasks](tasks.md) | CRM-taken, bordfasen en taaktypen maken en beheren |
| [Messages](messages.md) | Uitgaande berichten verzenden en gespreksgeschiedenis lezen |
| [Appointments](appointments.md) | Afspraken boeken, verzetten, annuleren en verwijderen |
| [Channels](channels.md) | Berichtenkanalen verbinden en verbreken, nummers kopen en instellen welke AI-agent nieuwe gesprekken op elk kanaal beantwoordt |
| [Templates](templates.md) | WhatsApp-berichtsjablonen maken, indienen en de goedkeuringsstatus controleren |
| [Analytics](analytics.md) | Dagelijkse statistieken van berichtgebeurtenissen, kredietverbruik en AI-kostenoverzichten lezen |
| [Webhooks](webhooks.md) | Eindpunten registreren om realtime gebeurtenismeldingen te ontvangen |
| [Team](team.md) | Teamleden, uitnodigingen, rollen, machtigingen en afdelingen beheren |
| [API Keys](api-keys.md) | Je API-sleutel inspecteren, roteren en intrekken, het gebruik van limieten controleren en extra sleutels met beperkte toegang maken |

### Agents, Toegangspunten en Uitzendingen

AI Agents, Entry Points en Broadcasts staan allemaal in de gepubliceerde OpenAPI-specificatie, zodat je hun exacte velden kunt bekijken en live verzoeken kunt uitvoeren in de [API explorer](reference.md). Elk heeft zijn eigen handleiding: [AI Agents](agents.md), [Entry Points](entry-points.md) en [Broadcasts](broadcasts.md).

::: master-only
Omdat ze in de specificatie staan, verschijnen deze eindpunten ook als tools voor elke AI-assistent die je [via MCP verbindt](../integrations/connect-ai-clients.md).
:::

---

## Deze documentatie lezen als Markdown

Elke pagina in deze documentatie heeft een Markdown-tegenhanger: neem het adres van de pagina en voeg `/index.md` toe aan het einde. Deze pagina is dus ook beschikbaar op `https://docs.dmchamp.com/api/getting-started/index.md` en wordt als platte tekst geretourneerd in plaats van als webpagina — handig wanneer je een pagina in een AI-assistent wilt plakken of in een script wilt ophalen.

Voor een AI-assistent of een script dat de hele set moet lezen, zijn er twee kant-en-klare bestanden:

- `https://docs.dmchamp.com/llms.txt` — de index: elke pagina met een samenvatting van één regel en een link naar de Markdown-tegenhanger, gegroepeerd zoals in de zijbalk.
- `https://docs.dmchamp.com/llms-full.txt` — de volledige documentatie in één Markdown-bestand. Elke pagina begint met de titel en een `Source:`-regel met het pagina-adres, zodat een assistent kan citeren waar een antwoord vandaan komt.

Beide bestaan ook voor elke taal, onder het taalvoorvoegsel (`https://docs.dmchamp.com/nl/llms.txt`, `https://docs.dmchamp.com/es/llms-full.txt`, enzovoort). Geef je assistent het `llms.txt`-adres en deze haalt de benodigde pagina's op, of geef het `llms-full.txt` wanneer het alles in één keer in de context moet hebben. Ze worden bij elke wijziging in de documentatie opnieuw opgebouwd, dus ze raken nooit verouderd.

Om zelf door de pagina's te bladeren, kun je `https://docs.dmchamp.com/sitemap.xml` gebruiken, waarin elke pagina die we publiceren wordt vermeld. De documentatie wordt bewust buiten zoekmachines gehouden, dus het direct ophalen van deze adressen is de manier om er vanuit code bij te komen.

Hiervoor is geen API-sleutel nodig: de Markdown-tegenhangers, de twee `llms`-bestanden en de sitemap vormen de volledige interface.

---

## Volgende stappen

- [Authentication](authentication.md) — kies de juiste authenticatiemethode voor je integratie.
- [Errors & Pagination](errors-and-pagination.md) — fouten afhandelen en door resultaten bladeren.
- [API Access](../integrations/api-access.md) — je sleutel genereren en uitgewerkte voorbeelden bekijken.
