# API-overzicht

Authenticatie, endpoint, fouten en limieten.

## API-overzicht

Een enkel JSON-RPC-endpoint dat werkt met API-tokens. Roep elke methode aan bij naam.

> ℹ️ **Geen code nodig?**
> <p>
>     De <a href="/nl/guides/overview">Handleidingen</a> stellen Formstep klik voor klik in Zapier in, zonder dat je zelf de API hoeft aan te
>     roepen.
>   </p>

<h2 id="endpoint">Endpoint</h2>
<p>
  Alle verzoeken gaan naar één URL via <code>POST</code>. Geef de methodenaam en parameters mee als JSON.
</p>

```
POST https://api.formstep.io/api/v1
```

<h2 id="auth">Authenticatie</h2>
<p>
  Stuur je API-token mee als bearer token in de <code>Authorization</code>-header. Tokens zijn gekoppeld aan een workspace — maak ze aan via{' '}
  <strong>OAuth en API-sleutels</strong> in de zijbalk.
</p>

  
    
```
curl -X POST https://api.formstep.io/api/v1 \
  -H "Authorization: Bearer fb_..." \
  -H "Content-Type: application/json" \
  -d '{"method": "forms.list", "params": {}}'
```

  
  
    
```
const res = await fetch('https://api.formstep.io/api/v1', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.FORMSTEP_TOKEN}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ method: 'forms.list', params: {} }),
})
const data = await res.json()
```

  
  
    
```
import os, requests
res = requests.post(
    "https://api.formstep.io/api/v1",
    headers={"Authorization": f"Bearer {os.environ['FORMSTEP_TOKEN']}"},
    json={"method": "forms.list", "params": {}},
)
data = res.json()
```

  

> ⚠️ **Houd tokens server-side**
> <p>Verwerk tokens nooit in browsercode. Gebruik een backend-proxy voor client-side aanroepen.</p>

<h2 id="request-format">Verzoekformaat</h2>
<p>Elk verzoek is een JSON-object met twee velden:</p>

```
{
  "method": "forms.list",
  "params": {
    "workspaceId": "abc123..."
  }
}
```

<h2 id="response-format">Antwoordformaat</h2>
<p>
  Elk antwoord is een JSON-object met een <code>ok</code>-veld. Bij succes:
</p>

```
{
  "ok": true,
  "data": { ... }
}
```

<h2 id="errors">Fouten</h2>
<p>
  Bij een fout is <code>ok</code> gelijk aan <code>false</code> en bevat een <code>error</code>-object een machineleesbare code en een
  leesbare melding:
</p>

```
{
  "ok": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Field 'name' is required."
  }
}
```

<p>Veelvoorkomende foutcodes:</p>
<ul>
  <li>
    <code>VALIDATION_ERROR</code> (400) — ongeldige of ontbrekende parameters
  </li>
  <li>
    <code>UNAUTHORIZED</code> (401) — ontbrekend of ongeldig API-token
  </li>
  <li>
    <code>UPGRADE_REQUIRED</code> (402) — de functie vereist een hoger abonnementsniveau
  </li>
  <li>
    <code>FORBIDDEN</code> (403) — token heeft geen toegang tot de resource
  </li>
  <li>
    <code>CONFLICT</code> (409) — resourcetoestandconflict, zoals een dubbele naam
  </li>
  <li>
    <code>NOT_FOUND</code> (404) — resource bestaat niet
  </li>
  <li>
    <code>METHOD_NOT_FOUND</code> (404) — onbekende methodenaam
  </li>
  <li>
    <code>RATE_LIMITED</code> (429) — te veel verzoeken
  </li>
  <li>
    <code>INTERNAL_ERROR</code> (500) — onverwachte serverfout
  </li>
</ul>

<h2 id="rate-limits">Limieten</h2>
<p>
  API-verzoeken zijn beperkt tot <strong>120 verzoeken per minuut</strong> per token. Als je de limiet overschrijdt, krijg je{' '}
  <code>429 Too Many Requests</code> terug.
</p>

<h2 id="next-steps">Volgende stappen</h2>
<div class="not-prose grid gap-3 sm:grid-cols-2">
  - [API-methoden](/nl/developers/rest-api) — Volledige lijst van beschikbare methoden
  - [API-tokens](/nl/developers/api-tokens) — Tokens aanmaken en beheren
  - [Webhooks-referentie](/nl/developers/webhooks-reference) — Payload-schema en ondertekening
  - [MCP-server](/nl/developers/mcp-server) — Gebruik Formstep vanuit AI-agents
</div>
