# REST API ile istek gönderin

Bir API token'ı oluşturun, bir formun alan anahtarlarını okuyun ve HTTP çağrısı yapabilen herhangi bir araçtan curl ile önceden doldurulmuş bir istek oluşturun.

## REST API ile istek gönderin

HTTP adımı olan herhangi bir araç bir istek gönderebilir: Pipedream, sunucusuz bir fonksiyon, bir betik. Bu kılavuz bunu curl ile yapar, böylece her çağrıyı kendi kodunuza taşımadan önce görebilirsiniz.

<p>
  Yayınlanmış bir forma ihtiyacınız var. Bu kılavuz, <a href="/tr/guides/ai-agents/build-a-form">Bir yapay zeka ajanıyla form oluşturun</a>{' '}
  kılavuzunda oluşturulan formu kullanır: şirket adı, iletişim e-postası, KDV numarası, ödeme koşulları hakkında bir evet ya da hayır sorusu
  ve bir dosya yükleme. Burada kullanılan her metot ve seçenek <a href="/tr/developers/rest-api">API metodları</a> sayfasında anlatılır.
</p>

<h2 id="token">1. Bir API token'ı oluşturun</h2>

<p>
  formbase'de, çalışma alanı kenar çubuğunda <strong>OAuth ve API Anahtarları</strong>'nı açın ve{' '}
  <a href="/tr/developers/api-tokens#create">bir token oluşturun</a>. Değer yalnızca bir kez gösterilir. Kodunuzda değil bir ortam
  değişkeninde saklayın:
</p>

```
export FORMBASE_TOKEN='fb_...'
```

<p>
  Bir token, yalnızca oluşturulduğu tek çalışma alanına ulaşır. Aşağıdaki her çağrı, token'ı <code>Authorization</code> başlığında taşıyan
  aynı URL'ye yapılan bir <code>POST</code>'tur; gövde metodu ve parametrelerini adlandırır.
</p>

<h2 id="form-id">2. Form kimliğini bulun</h2>

<p>
  Formu düzenleyicide açın. Form kimliği, adresin <code>/forms/</code>'tan sonraki bölümüdür:
</p>

```
https://app.formbase.so/<workspace ID>/forms/jx75hdx8vb5hy1x85gm17nqgkn8f674g/edit
```

<p>Aşağıdaki komutlar bu kılavuzun form kimliğini kullanır. Kendi kimliğinizi onun yerine koyun.</p>

<h2 id="fields">3. Alan anahtarlarını listeleyin</h2>

<p>
  Bir istek soruları <a href="/tr/requests/field-keys">alan anahtarına</a> göre doldurur ve yanıtlar da aynı şekilde geri gelir. Anahtarları
  başlıklardan tahmin etmek yerine formdan isteyin:
</p>

```
curl -X POST https://api.formbase.so/api/v1 \
  -H "Authorization: Bearer $FORMBASE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"method": "fields.list", "params": {"formId": "jx75hdx8vb5hy1x85gm17nqgkn8f674g"}}'
```

<p>Yanıt, yayınlanmış formun her sorusunu listeler. Kısaltılmış hâli:</p>

```
{
  "ok": true,
  "data": {
    "published": true,
    "items": [
      { "key": "company_name", "type": "text", "title": "Company name", "required": true, "prefillable": true },
      { "key": "contact_email", "type": "email", "title": "Contact email", "required": true, "prefillable": true },
      { "key": "vat_number", "type": "text", "title": "VAT number", "required": false, "prefillable": true },
      {
        "key": "do_you_accept_our_30_day_payment_terms", "type": "radio", "title": "Do you accept our 30-day payment terms?", "required": true, "prefillable": true,
        "options": [{ "key": "yes", "label": "Yes" }, { "key": "no", "label": "No" }]
      },
      { "key": "certificate_of_incorporation", "type": "file", "title": "Certificate of incorporation", "required": true, "prefillable": false }
    ],
    "hasMore": false
  }
}
```

<p>
  Bir seçim sorusunu önceden doldurmak için seçeneğin <code>key</code>'ini gönderin, burada <code>"yes"</code>, etiketini değil. Dosya
  yüklemesi gibi <code>prefillable: false</code> olan bir soruyu yalnızca alıcı yanıtlayabilir. Diğer bayraklar{' '}
  <a href="/tr/developers/rest-api#fields-list">fields.list</a> altında açıklanmıştır.
</p>

<h2 id="create">4. Bir test isteği oluşturun</h2>

<p>
  İsteği, şirket adı doldurulmuş ve kilitli olarak Ada Lovelace'a gönderin. <code>test: true</code>, bunu bir{' '}
  <a href="/tr/requests/creating-requests#test-mode">test isteğine</a> dönüştürür: hiç kimseye e-posta göndermez ve hiçbir yerde sayılmaz,
  bu yüzden bu adımı her seferinde yeni bir <code>idempotencyKey</code> ile istediğiniz kadar tekrarlayabilirsiniz.
</p>

```
curl -X POST https://api.formbase.so/api/v1 \
  -H "Authorization: Bearer $FORMBASE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "method": "requests.create",
    "params": {
      "formId": "jx75hdx8vb5hy1x85gm17nqgkn8f674g",
      "recipient": { "email": "ada@acme.example", "name": "Ada Lovelace" },
      "prefill": { "company_name": "Analytical Engines Ltd" },
      "readonly": ["company_name"],
      "externalId": "supplier-2043",
      "idempotencyKey": "supplier-2043",
      "test": true
    }
  }'
```

<ul>
  <li>
    <strong>prefill</strong>, alıcının hâlâ değiştirebileceği yanıtları doldurur. <strong>readonly</strong> içindeki bir anahtar ayrıca{' '}
    <a href="/tr/requests/creating-requests#locked-fields">kilitlidir</a>.
  </li>
  <li>
    <strong>externalId</strong>, bu iş parçası için kendi kimliğinizdir — bir tedarikçi numarası gibi. Her okumada ve geri çağırmada geri
    gelir.
  </li>
  <li>
    <strong>idempotencyKey</strong>, bir yeniden denemeyi güvenli kılar. Kodunuz aynı çağrıyı iki kez gönderirse formbase, ikinci bir istek
    oluşturmak yerine <code>deduplicated: true</code> ile ilk isteği döndürür.
  </li>
</ul>

<p>Yanıt, istek kimliğini ve alıcı için bağlantıyı taşır:</p>

```
{
  "ok": true,
  "data": {
    "id": "m17ayhcnj9xvzkff3atek49bdd8f6872",
    "status": "pending",
    "url": "https://form.formbase.so/r/rq_...",
    "deliveryStatus": "not_requested",
    "externalId": "supplier-2043",
    "deduplicated": false,
    "createdAt": 1790539225370,
    "expiresAt": 1793131225370
  }
}
```

<p>
  <code>deliveryStatus: "not_requested"</code>, formbase'in hiçbir e-posta göndermediği anlamına gelir; bağlantıyı siz kendiniz teslim
  edersiniz. formbase'in daveti ve hatırlatmaları göndermesi için, Pro veya Business plan gerektiren <code>"delivery": "email"</code>{' '}
  ekleyin. Bkz. <a href="/tr/requests/invitations-and-reminders">Davetler, hatırlatmalar ve süre dolumu</a>. Formda{' '}
  <strong>Hatırlatma gönder</strong> açıksa, bir alıcı e-postasına sahip gerçek bir istek yine de zamanlanmış hatırlatmaları alır; hiç
  göndermemek için <code>"reminders": []</code> ekleyin.
</p>

> ℹ️ **Test istekleri gözden uzak kalır**
> <p>
>     <strong>İstekler</strong> sayfası test isteklerini yalnızca <strong>Test isteklerini göster</strong> filtresini açtığınızda listeler.
>     Onu tamamlamak için <code>url</code>'yi kendiniz açın. Gerçek olanı gönderirken <code>test</code>'i bırakın.
>   </p>

<h2 id="read">5. Tamamlayın ve yanıtları okuyun</h2>

<p>
  <code>url</code>'yi bir tarayıcıda açın. Şirket adı doldurulmuş ve kilitlidir; gerisini yanıtlayın ve gönderin. Ardından isteği kimliğiyle
  geri okuyun:
</p>

```
curl -X POST https://api.formbase.so/api/v1 \
  -H "Authorization: Bearer $FORMBASE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"method": "requests.get", "params": {"requestId": "m17ayhcnj9xvzkff3atek49bdd8f6872"}}'
```

<p>
  <code>status</code> <code>completed</code> olduğunda, yanıt alan anahtarına göre anahtarlanmış iki harita taşır. <code>answers</code> kod
  içindir: bir seçim yanıtı seçenek anahtarıdır, bir dosya yanıtı indirme URL'leri olan bir dosya listesidir. <code>display</code> insanlar
  içindir: etiketler ve dosya adları.
</p>

```
"answers": {
  "company_name": "Analytical Engines Ltd",
  "do_you_accept_our_30_day_payment_terms": "yes",
  "certificate_of_incorporation": [{ "name": "certificate-of-incorporation.pdf", "type": "application/pdf", "size": 635, "url": "https://api.formbase.so/api/storage/..." }]
},
"display": {
  "company_name": "Analytical Engines Ltd",
  "do_you_accept_our_30_day_payment_terms": "Yes",
  "certificate_of_incorporation": "certificate-of-incorporation.pdf"
}
```

<p>
  Durum değişene kadar tekrar tekrar sormak bir test için işe yarar, ama üretimde işe yaramaz. İsteğe bir <code>callbackUrl</code> verin,
  formbase bittiğinde sizi çağırır; sıradaki kılavuz bunu kurar.
</p>

<h2 id="next">Sırada</h2>

<div class="not-prose grid gap-3 sm:grid-cols-2 mb-8">
  - [Geri çağırmayı alın ve doğrulayın](/tr/guides/rest-api/verify-the-callback) — Yanıtları uç noktanıza gönderin ve formbase'in onları gönderdiğini kontrol edin.
  - [Bir istek oluşturmak](/tr/requests/creating-requests) — Bir isteğin aldığı her seçenek: bağlam, metadata, belgeler, süre dolumu.
</div>
