# Aperçu de l'API

Authentification, point d'accès, erreurs et limites de débit.

## Aperçu de l’API

Un unique point d’accès JSON-RPC authentifié par des tokens API. Appelez n’importe quelle méthode par son nom.

> ℹ️ **Pas besoin de code ?**
> <p>
>     Les <a href="/fr/guides/overview">guides</a> configurent Formstep dans Zapier clic par clic, sans que vous ayez à appeler l'API
>     vous-même.
>   </p>

<h2 id="endpoint">Point d’accès</h2>
<p>
  Toutes les requêtes sont envoyées à une URL unique via <code>POST</code>. Passez le nom de la méthode et les paramètres en JSON.
</p>

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

<h2 id="auth">Authentification</h2>
<p>
  Passez votre token API en tant que bearer token dans l’en-tête <code>Authorization</code>. Les tokens sont associés à un espace de travail
  — créez-les depuis <strong>OAuth et clés API</strong> dans la barre latérale.
</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()
```

  

> ⚠️ **Gardez les tokens côté serveur**
> <p>N’intégrez jamais de tokens dans du code exécuté côté navigateur. Utilisez un proxy backend pour les appels côté client.</p>

<h2 id="request-format">Format de requête</h2>
<p>Chaque requête est un objet JSON avec deux champs :</p>

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

<h2 id="response-format">Format de réponse</h2>
<p>
  Chaque réponse est un objet JSON avec un champ <code>ok</code>. En cas de succès :
</p>

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

<h2 id="errors">Erreurs</h2>
<p>
  En cas d’échec, <code>ok</code> vaut <code>false</code> et un objet <code>error</code> contient un code lisible par machine et un message
  lisible par l’humain :
</p>

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

<p>Codes d’erreur courants :</p>
<ul>
  <li>
    <code>VALIDATION_ERROR</code> (400) — paramètres invalides ou manquants
  </li>
  <li>
    <code>UNAUTHORIZED</code> (401) — token API absent ou invalide
  </li>
  <li>
    <code>UPGRADE_REQUIRED</code> (402) — la fonctionnalité nécessite un abonnement de niveau supérieur
  </li>
  <li>
    <code>FORBIDDEN</code> (403) — le token n’a pas accès à la ressource
  </li>
  <li>
    <code>CONFLICT</code> (409) — conflit d’état de la ressource, par exemple un nom en doublon
  </li>
  <li>
    <code>NOT_FOUND</code> (404) — la ressource n’existe pas
  </li>
  <li>
    <code>METHOD_NOT_FOUND</code> (404) — nom de méthode inconnu
  </li>
  <li>
    <code>RATE_LIMITED</code> (429) — trop de requêtes
  </li>
  <li>
    <code>INTERNAL_ERROR</code> (500) — erreur serveur inattendue
  </li>
</ul>

<h2 id="rate-limits">Limites de débit</h2>
<p>
  Les requêtes API sont limitées à <strong>120 requêtes par minute</strong> par token. Dépasser cette limite renvoie{' '}
  <code>429 Too Many Requests</code>.
</p>

<h2 id="next-steps">Étapes suivantes</h2>
<div class="not-prose grid gap-3 sm:grid-cols-2">
  - [Méthodes API](/fr/developers/rest-api) — Liste complète des méthodes disponibles
  - [Tokens API](/fr/developers/api-tokens) — Créer et gérer vos tokens
  - [Référence webhooks](/fr/developers/webhooks-reference) — Schéma de payload et signature
  - [Serveur MCP](/fr/developers/mcp-server) — Utiliser Formstep depuis des agents IA
</div>
