# API genel bakış

Kimlik doğrulama, uç nokta, hatalar ve hız sınırları.

## API genel bakış

API token’larıyla kimlik doğrulaması yapılan tek bir JSON-RPC uç noktası. İstediğin metodu adıyla çağır.

> ℹ️ **Kod yazmaya gerek yok mu?**
> <p>
>     <a href="/tr/guides/overview">Kılavuzlar</a> Formstep'i Zapier'de API'yi kendin çağırmadan tıklama tıklama kurar.
>   </p>

<h2 id="endpoint">Uç Nokta</h2>
<p>
  Tüm istekler tek bir URL’ye <code>POST</code> ile gönderilir. Metot adını ve parametreleri JSON olarak ilet.
</p>

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

<h2 id="auth">Kimlik Doğrulama</h2>
<p>
  API token’ını <code>Authorization</code> başlığında bearer token olarak ilet. Token’lar bir çalışma alanıyla ilişkilidir — kenar
  çubuğundaki <strong>OAuth ve API Anahtarları</strong> bölümünden oluşturabilirsin.
</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()
```

  

> ⚠️ **Token’ları sunucu tarafında tut**
> <p>Token’ları asla tarayıcı koduna yerleştirme. İstemci taraflı çağrılar için bir backend proxy kullan.</p>

<h2 id="request-format">İstek formatı</h2>
<p>Her istek iki alanlı bir JSON nesnesidir:</p>

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

<h2 id="response-format">Yanıt formatı</h2>
<p>
  Her yanıt, <code>ok</code> alanı içeren bir JSON nesnesidir. Başarılı durumda:
</p>

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

<h2 id="errors">Hatalar</h2>
<p>
  Hata durumunda <code>ok</code> değeri <code>false</code> olur ve <code>error</code> nesnesi makine tarafından okunabilir bir kod ile
  kullanıcı dostu bir mesaj içerir:
</p>

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

<p>Yaygın hata kodları:</p>
<ul>
  <li>
    <code>VALIDATION_ERROR</code> (400) — geçersiz veya eksik parametreler
  </li>
  <li>
    <code>UNAUTHORIZED</code> (401) — eksik veya geçersiz API token’ı
  </li>
  <li>
    <code>UPGRADE_REQUIRED</code> (402) — bu özellik daha yüksek bir abonelik katmanı gerektirir
  </li>
  <li>
    <code>FORBIDDEN</code> (403) — token’ın kaynağa erişim yetkisi yok
  </li>
  <li>
    <code>CONFLICT</code> (409) — kaynak durum çakışması, örneğin yinelenen bir ad
  </li>
  <li>
    <code>NOT_FOUND</code> (404) — kaynak mevcut değil
  </li>
  <li>
    <code>METHOD_NOT_FOUND</code> (404) — bilinmeyen metot adı
  </li>
  <li>
    <code>RATE_LIMITED</code> (429) — çok fazla istek gönderildi
  </li>
  <li>
    <code>INTERNAL_ERROR</code> (500) — beklenmeyen sunucu hatası
  </li>
</ul>

<h2 id="rate-limits">Hız sınırları</h2>
<p>
  API istekleri token başına dakikada <strong>120 istekle</strong> sınırlıdır. Sınırı aşmak <code>429 Too Many Requests</code> döndürür.
</p>

<h2 id="next-steps">Sonraki adımlar</h2>
<div class="not-prose grid gap-3 sm:grid-cols-2">
  - [API metotları](/tr/developers/rest-api) — Kullanılabilir tüm metotların listesi
  - [API token’ları](/tr/developers/api-tokens) — Token oluştur ve yönet
  - [Webhooks referansı](/tr/developers/webhooks-reference) — Payload şeması ve imzalama
  - [MCP server](/tr/developers/mcp-server) — Formstep’i AI agent’lardan kullan
</div>
