# API-oversikt

Autentisering, endepunkt, feil og hastighetsbegrensninger.

## API-oversikt

Et enkelt JSON-RPC-endepunkt autentisert med API-tokens. Kall hvilken som helst metode ved navn.

> ℹ️ **Ingen kode nødvendig?**
> <p>
>     <a href="/no/guides/overview">Guidene</a> setter opp Formstep i Zapier klikk for klikk, uten at du trenger å kalle på API-et selv.
>   </p>

<h2 id="endpoint">Endepunkt</h2>
<p>
  Alle forespørsler sendes til én URL via <code>POST</code>. Send metodenavnet og parametrene som JSON.
</p>

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

<h2 id="auth">Autentisering</h2>
<p>
  Send API-tokenet ditt som et bearer-token i <code>Authorization</code>-headeren. Tokens er koblet til et arbeidsområde — opprett dem fra{' '}
  <strong>OAuth og API-nøkler</strong> i sidepanelet.
</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()
```

  

> ⚠️ **Hold tokens på serversiden**
> <p>Ikke legg tokens inn i kode som kjører i nettleseren. Bruk en backend-proxy for kall fra klientsiden.</p>

<h2 id="request-format">Forespørselsformat</h2>
<p>Hver forespørsel er et JSON-objekt med to felter:</p>

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

<h2 id="response-format">Svarformat</h2>
<p>
  Hvert svar er et JSON-objekt med et <code>ok</code>-felt. Ved suksess:
</p>

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

<h2 id="errors">Feil</h2>
<p>
  Ved feil er <code>ok</code> lik <code>false</code>, og et <code>error</code>-objekt inneholder en maskinlesbar kode og en menneskelig
  lesbar melding:
</p>

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

<p>Vanlige feilkoder:</p>
<ul>
  <li>
    <code>VALIDATION_ERROR</code> (400) — ugyldige eller manglende parametere
  </li>
  <li>
    <code>UNAUTHORIZED</code> (401) — manglende eller ugyldig API-token
  </li>
  <li>
    <code>UPGRADE_REQUIRED</code> (402) — funksjonen krever et høyere abonnementsnivå
  </li>
  <li>
    <code>FORBIDDEN</code> (403) — tokenet mangler tilgang til ressursen
  </li>
  <li>
    <code>CONFLICT</code> (409) — ressursstatuskonflikt, for eksempel et duplikert navn
  </li>
  <li>
    <code>NOT_FOUND</code> (404) — ressursen finnes ikke
  </li>
  <li>
    <code>METHOD_NOT_FOUND</code> (404) — ukjent metodenavn
  </li>
  <li>
    <code>RATE_LIMITED</code> (429) — for mange forespørsler
  </li>
  <li>
    <code>INTERNAL_ERROR</code> (500) — uventet serverfeil
  </li>
</ul>

<h2 id="rate-limits">Hastighetsbegrensninger</h2>
<p>
  API-forespørsler er begrenset til <strong>120 forespørsler per minutt</strong> per token. Overskrides grensen, returneres{' '}
  <code>429 Too Many Requests</code>.
</p>

<h2 id="next-steps">Neste steg</h2>
<div class="not-prose grid gap-3 sm:grid-cols-2">
  - [API-metoder](/no/developers/rest-api) — Fullstendig liste over tilgjengelige metoder
  - [API-tokens](/no/developers/api-tokens) — Opprett og administrer tokens
  - [Webhooks-referanse](/no/developers/webhooks-reference) — Nyttelastskjema og signering
  - [MCP-server](/no/developers/mcp-server) — Bruk Formstep fra AI-agenter
</div>
