---
title: "Authenticatie"
icon: "lock"
visibility: "public"
---

De API maakt gebruik van Bearer token authenticatie. Voor de meeste endpoints wissel je eenmalig je credentials in voor een tijdelijk token dat je meestuurt bij elke aanroep. In enkele specifieke gevallen, zoals de WordPress plugin, wordt direct een API key gebruikt zonder token-uitwisseling.

## 1 Bearer token (aanbevolen)

Voor de meeste endpoints gebruik je een **Bearer token**.

### Token ophalen

```
POST /api/authenticate
Content-Type: application/json
```

```json
{
  "client_id": "jouw-client-id",
  "client_secret": "jouw-client-secret",
  "apikey": "jouw-apikey"
}
```

**Succesresponse:**

```json
{
  "message": "Authenticated successfully",
  "token": "12|abc...",
  "token_type": "Bearer",
  "token_expires": 1780000000,
  "establishment": {
    "id": "9f2c1b7e-...",
    "franchiseId": "114931",
    "name": "Vakgarage De Liesbosch",
    "created_at": "2026-04-11T21:35:06.000000Z",
    "updated_at": "2026-08-24T17:11:29.000000Z"
  }
}
```

`token_expires` is een unix-timestamp, geen datumnotatie. Het `establishment`-blok
komt alleen mee bij een sleutel van het type `establishment`; een `global` sleutel
krijgt het niet.

> Tokens zijn **2 uur** geldig. Bij verlopen haal je een nieuw token op door opnieuw te authenticeren.

### Token gebruiken

Stuur de token mee als `Authorization` header bij elke API-aanroep:

```
Authorization: Bearer eyJ...
```

---

## 2 X-API-KEY header

Voor enkele endpoints wordt de `apikey` rechtstreeks als `X-API-KEY` header meegegeven in plaats van een Bearer token. Zie de [API-referentie](/api/vakgarage) voor welke endpoints deze header vereisen.

---

## Client types

| Type | Beschrijving |
|---|---|
| `establishment` | Gekoppeld aan één vestiging, kan alleen die vestiging aanroepen |
| `global` | Toegang tot alle vestigingen |

Het type van je client bepaalt welke `{franchiseId}` waarden je kunt gebruiken in franchise-gebonden endpoints.

---

## API-referentie

De [API-referentie](/api/vakgarage) ontgrendel je met je `apikey`. Endpoints waarvoor je geen permissie hebt, staan daar op slot.