---
title: "Authenticatie · EenFactuurMaken.nl"
description: "Zo authenticeer je bij de EenFactuurMaken.nl REST API met een API-sleutel (Bearer of X-API-Key), wat een sleutel niet mag en hoe je sleutels veilig houdt."
url: "https://eenfactuurmaken.nl/docs/api/authentication"
markdown_url: "https://eenfactuurmaken.nl/docs/api/authentication.md"
language: "nl-NL"
---

# Authenticatie

Zo authenticeer je bij de EenFactuurMaken.nl REST API met een API-sleutel (Bearer of X-API-Key), wat een sleutel niet mag en hoe je sleutels veilig houdt.

Elk API-verzoek heeft een **API-sleutel** nodig. Maak er een bij **Instellingen → API & AI** (zie [API-sleutels en apps](https://eenfactuurmaken.nl/docs/security/api-keys)). Een sleutel begint met `efm_`.

## De sleutel meesturen

Gebruik bij voorkeur de `Authorization`\-header:

```bash
curl https://eenfactuurmaken.nl/api/v1/invoices \
  -H "Authorization: Bearer efm_jouw_sleutel"
```

Kan je tool geen Bearer-tokens sturen? Gebruik dan `X-API-Key`:

```bash
curl https://eenfactuurmaken.nl/api/v1/invoices \
  -H "X-API-Key: efm_jouw_sleutel"
```

In JavaScript (Node 18 of nieuwer):

```js
const res = await fetch('https://eenfactuurmaken.nl/api/v1/me', {
  headers: { Authorization: `Bearer ${process.env.EENFACTUURMAKEN_API_KEY}` },
})
if (!res.ok) throw new Error((await res.json()).data?.code)
console.log(await res.json())
```

In Python:

```python
import os, requests

r = requests.get(
    "https://eenfactuurmaken.nl/api/v1/me",
    headers={"Authorization": f"Bearer {os.environ['EENFACTUURMAKEN_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())
```

## Fouten bij authenticatie

| Status | Code | Betekenis |
| --- | --- | --- |
| 401 | `unauthenticated` | Geen sleutel meegestuurd. |
| 401 | `invalid_api_key` | De sleutel klopt niet, is ingetrokken of verlopen. |
| 403 | `session_required` | Dit kan alleen in de web-app (zie hieronder). |
| 429 | `rate_limited` | Meer dan 120 verzoeken per minuut met deze sleutel. Wacht het aantal seconden uit de header `Retry-After`. |

## Wat kan alleen in de web-app?

Om je te beschermen als een sleutel uitlekt, werken deze acties niet met een API-sleutel (`403 session_required`):

- betaalgegevens wijzigen: `iban`, `bic`, `bankAccountName`, `email` (antwoordadres) en `defaultPaymentLink` via `PATCH /business`;
- je abonnement afsluiten, opzeggen of hervatten;
- beveiliging (wachtwoord, 2FA, passkeys, apparaten, beveiligingslog, API-sleutels, verbonden apps) en je account verwijderen;
- de welkomstgids.

## Sessies en OAuth

- De web-app gebruikt een sessiecookie. Daarvoor geldt een extra controle op de `Origin`\-header (`403 bad_origin`) tegen CSRF. Met een API-sleutel heb je daar geen last van.
- OAuth-tokens zijn alleen voor de MCP-server. Zie [MCP-server](https://eenfactuurmaken.nl/docs/mcp#oauth).

## Veilig werken

- Zet de sleutel in een omgevingsvariabele of secrets-store, nooit in je code of in een openbare repository.
- Gebruik de API alleen vanaf je server, niet vanuit een browser: dan ligt je sleutel op straat.
- Maak per koppeling een eigen sleutel, met een verloopdatum. Dan kun je er één intrekken zonder de rest te raken.
- Lekt er een sleutel uit? [Trek hem meteen in](https://eenfactuurmaken.nl/docs/security/api-keys#revoke).

Laatst bijgewerkt op 13 oktober 2026
