formbasedocs
Uygulamaya gitUygulama

Geliştiriciler

API metodları

formbase REST API tarafından sunulan her metodun tam referansı. Her metod, parametrelerini, örnek istekleri ve yanıt yapılarını gösterir.


Tek uç nokta, çok sayıda metod

Her metod, {"method": "...", "params": {...}} JSON gövdesiyle ve bir Authorization: Bearer fb_… başlığıyla POST https://api.formbase.so/api/v1 adresine gönderilir. Kimlik doğrulama ve hata yönetimi için API genel bakış sayfasına, token’ın kendisi için de API token’ları sayfasına bakın.

Kurallar

  • params atlanabilir; varsayılanı {} olur. Bilinmeyen bir metod 404 METHOD_NOT_FOUND döner.

  • Bir token tek bir çalışma alanına bağlıdır. Başka bir çalışma alanını, ya da içindeki bir formu adlandırmak, ikisine de üye olsanız bile 403 FORBIDDEN döner.

  • Sayfalama. Liste metodları { items, nextCursor, hasMore } döner; çoğu ayrıca canPaginate döner; bu, hasMore true olduğu halde devam ettirecek bir imleç bulunamadığında (bulanık arama) false olur. nextCursor’ı cursor olarak geri gönderin. limit 1–100 arasıdır, varsayılanı 20’dir — requests.list hariç, onun varsayılanı 25’tir.

  • Hız sınırları. Token başına dakikada 120 çağrı, MCP sunucusu ile paylaşılır; requests.create’in kendi sınırı dakikada 60’tır. Başarısız kimlik doğrulama ayrıca sınırlandırılır, IP başına 15 dakikada 30; bu sınır aşıldığında kötü token’lar UNAUTHORIZED yerine RATE_LIMITED görür.

  • Gövde boyutu. 1 MiB. Daha büyük gövdeler VALIDATION_ERROR ile reddedilir.

  • Sürümleme. Sürümü yol taşır. Kırıcı değişiklikler /api/v2 olarak yayınlanır; yeni metodlar ve yeni yanıt alanları öyle değildir.

Formlar

forms.list

Bir çalışma alanındaki formları listeler. İmleç tabanlı sayfalama ve isteğe bağlı bulanık ad aramasını destekler.

POSThttps://api.formbase.so/api/v1
Parametreler5
workspaceIdstringrequired

Çalışma alanı kimliği.

folderIdstring | nulloptional

Klasöre göre filtrele. Yalnızca kök düzeyindeki formlar için null gönder. Tamamını listelemek için belirtme.

querystringoptional

Bulanık ad araması. Sonuçlar limit değeriyle sınırlandırılır; imleç tabanlı sayfalama uygulanmaz.

limitnumberoptionaldefault: 20

Sayfa boyutu (1–100).

cursorstringoptional

Önceki yanıttan gelen sayfalama imleci.

bash
curl -X POST https://api.formbase.so/api/v1 \
  -H "Authorization: Bearer fb_..." \
  -H "Content-Type: application/json" \
  -d '{
    "method": "forms.list",
    "params": { "workspaceId": "ws_abc123" }
  }'
200Başarılı
json
{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "frm_abc123",
        "name": "Contact Form",
        "folderId": null,
        "workspaceId": "ws_abc123",
        "isPublished": true,
        "publishedAt": 1714041851000,
        "unpublishedAt": null,
        "createdAt": 1714041800000,
        "lastEditedAt": 1714042000000,
        "emoji": null
      }
    ],
    "nextCursor": null,
    "hasMore": false,
    "canPaginate": false
  }
}
400workspaceId eksik
401Geçersiz veya eksik API token’ı
429Hız sınırı aşıldı

forms.get

Tek bir form için sorular, kapak, logo ve önizleme URL’si dahil tüm ayrıntıları getirir.

POSThttps://api.formbase.so/api/v1
Parametreler1
formIdstringrequired

Form kimliği.

bash
curl -X POST https://api.formbase.so/api/v1 \
  -H "Authorization: Bearer fb_..." \
  -H "Content-Type: application/json" \
  -d '{
    "method": "forms.get",
    "params": { "formId": "frm_abc123" }
  }'
200Başarılı
json
{
  "ok": true,
  "data": {
    "id": "frm_abc123",
    "name": "Event Feedback",
    "folderId": null,
    "workspaceId": "ws_abc123",
    "isPublished": true,
    "publishedAt": 1714041851000,
    "unpublishedAt": null,
    "createdAt": 1714041800000,
    "lastEditedAt": 1714042000000,
    "emoji": null,
    "questions": [
      {
        "id": "q_1",
        "type": "email-input",
        "inputType": "email",
        "title": "Your email",
        "metadata": null
      },
      {
        "id": "q_2",
        "type": "rating-input",
        "inputType": "rating",
        "title": "Overall experience",
        "metadata": { "kind": "rating", "maxStars": 5 }
      }
    ],
    "hasContent": true,
    "cover": null,
    "logo": null,
    "isDeleted": false,
    "trashedAt": null,
    "previewUrl": "https://formbase.so/preview/abc..."
  }
}
400formId eksik
404Form bulunamadı

forms.create

Yeni bir boş form oluşturur. Formu ve bir önizleme URL’sini döndürür.

POSThttps://api.formbase.so/api/v1
Parametreler3
namestringrequired

Form adı (1–255 karakter).

workspaceIdstringrequired

Çalışma alanı kimliği.

folderIdstringoptional

Formu bir klasöre yerleştir. Çalışma alanı kökünde oluşturmak için belirtme.

200Form oluşturuldu
json
{
  "ok": true,
  "data": {
    "id": "frm_new123",
    "name": "Contact",
    "workspaceId": "ws_abc123",
    "folderId": null,
    "isPublished": false,
    "createdAt": 1714041851000,
    "previewUrl": "https://formbase.so/preview/abc..."
  }
}
400name veya workspaceId eksik
401Geçersiz veya eksik API token’ı

forms.update

Form meta verilerini günceller: ad, klasör, emoji, kapak veya logo. Form içeriğini güncellemez (bunun için editör araçlarını kullanın).

POSThttps://api.formbase.so/api/v1
Parametreler6
formIdstringrequired

Form kimliği.

namestringoptional

Yeni form adı (1–255 karakter).

folderIdstring | nulloptional

Formu bir klasöre taşı. Çalışma alanı köküne taşımak için null gönder.

emojistring | nulloptional

Form emojisi (en fazla 10 karakter). Temizlemek için null gönder.

coverobjectoptional

Kapak. {"type": "color", "color": "#ffffff"}, {"type": "image", "url": "https://...", "offsetY": 50} ( offsetY 0–100, varsayılan 50), ya da kaldırmak için {"type": "none"}. Görsel URL’leri http(s) ya da bir data:image URI’si olmalıdır.

logoobjectoptional

Logo. {"type": "icon", "name": "HeartIcon"}, {"type": "image", "url": "https://..."} ya da kaldırmak için {"type": "none"}. Simge adları sabittir: QuestionMarkIcon, ListBulletsIcon, ChartBarIcon, ClockCountdownIcon, HeartIcon, LightbulbIcon, CheckCircleIcon, MagnifyingGlassIcon, TrendUpIcon, EnvelopeIcon, PhoneIcon, CalendarIcon, LinkIcon, UsersIcon.

Güncellenebilir beş alandan en az birini gönderin. Form içeriğini değiştirmez — bunun için MCP editör araçlarını kullanın.

bash
curl -X POST https://api.formbase.so/api/v1 \
  -H "Authorization: Bearer fb_..." \
  -H "Content-Type: application/json" \
  -d '{
    "method": "forms.update",
    "params": {
      "formId": "frm_abc123",
      "name": "Updated Name",
      "emoji": "📋"
    }
  }'
200Form güncellendi
json
{
  "ok": true,
  "data": {
    "id": "frm_abc123",
    "name": "Updated Name",
    "folderId": null,
    "emoji": "📋"
  }
}

cover ve logo yalnızca siz gönderdiğinizde geri döner. Skaler her alanda geçerli durumla eşleşen bir istek gövdesi noChange: true ekler.

forms.publish

Bir formu yanıt kabul edebilmesi için yayınlar ve alan anahtarlarını yeni bir anlık görüntüye dondurur. Idempotent: zaten yayınlanmış bir form alreadyPublished: true ile başarı döner, yayından kaldırılmış bir form ise son anlık görüntüsünden yeniden yayınlanır.

POSThttps://api.formbase.so/api/v1
Parametreler1
formIdstringrequired

Form kimliği.

İçerik blokları olan ama sorusu olmayan bir form bir uyarıyla birlikte yayınlanır. Hiç içeriği olmayan bir form yayınlanamaz. Yayınlamak genel bir URL oluşturmaz — bunun için shareLinks.create’i çağırın.

forms.unpublish

Bir formu çevrimdışı yapar. Yanıtlayıcılar artık onu açamaz. Idempotent — yayınlanmamış bir form alreadyUnpublished: true döner. forms.publish ile geri alınabilir.

POSThttps://api.formbase.so/api/v1
Parametreler1
formIdstringrequired

Form kimliği.

forms.delete

Bir formu çöp kutusuna taşır. Etkin paylaşım bağlantıları iptal edilir, böylece genel URL’leri hizmet vermeyi durdurur.

POSThttps://api.formbase.so/api/v1
Parametreler1
formIdstringrequired

Form kimliği.

forms.restore

Bir formu çöp kutusundan geri yükler.

POSThttps://api.formbase.so/api/v1
Parametreler2
formIdstringrequired

Form kimliği.

folderIdstring | nulloptional

Nereye geri yükleneceği. Orijinal klasörü için belirtme, çalışma alanı kökü için null, ya da bir klasör kimliği.

Çöp kutusunda olmayan bir form alreadyRestored: true döner.

formSettings.get

Bir formun davranış ayarlarını okur.

POSThttps://api.formbase.so/api/v1
Parametreler1
formIdstringrequired

Form kimliği.

{ settings, isDefault, availableEmailDomains, defaultFromAddress, payment } döner. Form henüz kaydedilmiş bir ayar satırına sahip değilse ve varsayılanları görüyorsanız isDefault true olur. availableEmailDomains, emailDomainId olarak geçirebileceğiniz doğrulanmış alan adı kimliklerini tutar, payment ise Stripe’ın bağlı olup olmadığını bildirir (bağlamak bir kontrol paneli adımıdır).

formSettings.update

Bir formun davranış ayarlarını günceller. Kısmi bir güncelleme: yalnızca gönderdiğiniz alanlar yazılır.

POSThttps://api.formbase.so/api/v1
Parametreler8
formIdstringrequired

Form kimliği.

Accessgroupoptional

language (BCP-47, varsayılan “en”), requireAuthentication, showBranding, captchaEnabled, passwordEnabled, password (4 karakter veya daha fazla; bir metin passwordEnabled: true anlamına gelir, null kapıyı temizler).

Owner notificationsgroupoptional

notifyOnSubmission, notificationEmails (dizi), selfNotificationSubject, selfNotificationEmailBody, pdfGenerationEnabled, showViewSubmissionButton. Sahip e-postaları çevrilemez — bunları istediğiniz dilde yazın.

Respondent notificationsgroupoptional

respondentNotificationEnabled, respondentNotificationTo (bir e-posta sorusunun alan kimliği, ya da null), respondentNotificationSubject, respondentNotificationBody, respondentNotificationPdfEnabled.

Remindersgroupoptional

respondentReminderEnabled, respondentReminderTo, respondentReminderSubject, respondentReminderBody, respondentReminderRequiredFieldIds ve reminderSteps — [“1d”,“3d”,“1w”] gibi boşta kalma ötelemeleri, en fazla 5, kayıtta sıralanır ve yinelenenler kaldırılır, hiçbiri için []. Program, terk edilmiş genel bağlantı yanıtlarına ve isteklere aynı şekilde uygulanır. Pro.

After submitgroupoptional

redirectUrl (http(s); null veya “” temizler), redirectQueryParams ( [{ paramName, fieldId }]), allowAnotherResponse (bir yönlendirmeyle birlikte kullanılamaz), maxSubmissionsPerRespondent (0 = sınırsız, azami 1000), editAfterSubmit, maxEdits (azami 3; 0, Pro ve Business’ta sınırsız anlamına gelir, Free’de 3).

Retentiongroupoptional

draftRetentionDays ve submissionRetentionDays (0–36500, null varsayılana döner). Gönderim saklama süresi Business’tır ve ayarlanması, düzenleyicide yapılandırılmış sabit bir silme tarihini temizler.

emailDomainIdstring | nulloptional

Özel bir Kimden adresi için formSettings.get’ten doğrulanmış bir e-posta alan adı kimliği. null, varsayılan gönderene sıfırlar.

Konular ve gövdeler düz metindir ve {{variable}} yer tutucularını kabul eder; yeni satırlar paragraf olur. Bir yanıtlayıcı konusunu veya gövdesini özelleştirmek onu çevrilebilir kılar, böylece anahtarları hemen translations.listEntries ’te görünür.

Gönderimler

submissions.list

Bir formun gönderimlerini, en yeni sayfa önce olacak şekilde imleç tabanlı sayfalamayla listeler.

POSThttps://api.formbase.so/api/v1
Parametreler5
formIdstringrequired

Form kimliği.

includeDraftsbooleanoptionaldefault: true

Başlatılmış ama hiç gönderilmemiş yanıtları dahil eder. Taslaklar bir Pro özelliğidir: Ücretsiz’de yalnızca tamamlanmış gönderiler listelenir.

translationLanguagestringoptional

Yanıtların kaydedilmiş AI çevirilerini items[].translation.display altında, display ile aynı anahtarlarla ekler. items[].answers ve items[].display her zaman orijinal kalır.

limitnumberoptionaldefault: 20

Sayfa boyutu (1–100).

cursorstringoptional

Önceki yanıttan gelen sayfalama imleci.

200Başarılı
json
{
  "ok": true,
  "data": {
    "formId": "frm_abc123",
    "formName": "Event Feedback",
    "items": [
      {
        "id": "sub_xyz789",
        "submittedAt": "2026-05-18 18:02:28",
        "isCompleted": true,
        "createdAt": "2026-05-18 18:02:19",
        "answers": {
          "email": "user@example.com",
          "plan": "pro",
          "contacts": [{ "name": "Ada" }, { "name": "Grace" }]
        },
        "display": {
          "email": "user@example.com",
          "plan": "Pro",
          "contacts": "Ada, Grace"
        }
      }
    ],
    "nextCursor": null,
    "hasMore": false,
    "canPaginate": false
  }
}

Webhook ve callback’lerle aynı yanıtlar

Her öğe, alan anahtarına göre anahtarlanmış answers ve okunabilir metin olarak aynı anahtarlara sahip display taşır — bir webhook yükünün, bir istek geri çağırmasının ve requests.get’in taşıdığı biçim. Bir seçim yanıtı kendi seçenek anahtarıdır, tekrarlanan bir grup ise bir örnek dizisidir. Her anahtarın başlığı ve seçenek etiketleri için fields.list’i çağırın. Bu metod toplam döndürmez.

submissions.pdf

Bir gönderimin PDF’sine bir bağlantı getirir. Zapier bağlayıcısı için oluşturulmuştur: yalnızca formda PDF’i dahil edecek şekilde yapılandırılmış etkin bir Zapier entegrasyonu varsa ve PDF saklandıysa bir sonuç döner.

POSThttps://api.formbase.so/api/v1
Parametreler2
formIdstringrequired

Form kimliği.

submissionIdstringrequired

Gönderim kimliği. O forma ait ve tamamlanmış olmalıdır.

200Başarılı
json
{
  "ok": true,
  "data": {
    "url": "https://api.formbase.so/api/storage/...",
    "filename": "formbase-submission-sub_xyz789.pdf",
    "contentType": "application/pdf",
    "byteLength": 148213
  }
}
404Bu gönderimde bir Zapier entegrasyonu için saklanmış PDF yok

submissions.sample

Bir form için gerçek veri olmadan örnek bir gönderim yükü oluşturur. Bu, bir genel bağlantı gönderimi teslimatının taşıdığı tam biçimdir, bu yüzden bağlayıcılar onu alan keşfi için kullanır; bir istekten doğan bir gönderim ise bir aboneliğe bunun yerine request.completed olarak ulaşır, bu da

requests.sample’ın örneklediği şeydir. data.form.snapshotId, formun güncel yayımlanmış sürümüdür, canlı olayların taşıdığı aynı kimliktir; form yayımlanmamışken ise null’dur.

POSThttps://api.formbase.so/api/v1
Parametreler1
formIdstringrequired

Form kimliği.

200Örnek oluşturuldu
json
{
  "ok": true,
  "data": {
    "id": "evt_example000000000000",
    "type": "submission.completed",
    "createdAt": "2026-05-18T19:00:00.000Z",
    "apiVersion": "2026-09-24",
    "test": true,
    "data": {
      "form": { "id": "frm_abc123", "name": "Event Feedback", "snapshotId": "js7abc123" },
      "submission": {
        "id": "sub_example000000000000",
        "respondentEmail": "respondent@example.com",
        "submittedAt": "2026-05-18T19:00:00.000Z",
        "updatedAt": null,
        "editCount": 0,
        "pdfUrl": null,
        "language": "en"
      },
      "answers": { "your_email": "john@example.com" },
      "display": { "your_email": "john@example.com" }
    }
  }
}

Alan ve yük anlambilimi tek bir yerde, webhooks referansında belgelenmiştir.

Alanlar

fields.list

Bir formun geçerli yayınlanmış sürümündeki her alanı, her birini adreslemek için kullanılacak anahtarla birlikte listeler. Anahtarları koda gömmek yerine bunu requests.create’ten önce çağırın. Bkz. Alan anahtarları.

POSThttps://api.formbase.so/api/v1
Parametreler1
formIdstringrequired

Form kimliği. Hiç yayınlanmamış bir formun henüz alan anahtarı yoktur ve hiçbir öğe olmadan published: false döner.

bash
curl -X POST https://api.formbase.so/api/v1 \
  -H "Authorization: Bearer fb_..." \
  -H "Content-Type: application/json" \
  -d '{
    "method": "fields.list",
    "params": { "formId": "j57..." }
  }'
200Başarılı
json
{
  "ok": true,
  "data": {
    "published": true,
    "items": [
      { "key": "company_name", "type": "text", "title": "Company", "required": true, "prefillable": true },
      {
        "key": "company_size", "type": "select", "title": "Company size", "required": false, "prefillable": true,
        "options": [
          { "key": "1_50", "label": "1–50" },
          { "key": "51_200", "label": "51–200" }
        ]
      },
      {
        "key": "satisfaction", "type": "matrix", "title": "How did we do?", "required": false, "prefillable": true,
        "rows": [{ "key": "delivery_speed", "label": "Delivery speed" }],
        "columns": [{ "key": "very_good", "label": "Very good" }, { "key": "poor", "label": "Poor" }]
      },
      { "key": "case_id", "type": "hidden", "title": "Case", "required": false, "prefillable": false, "context": true },
      { "key": "total", "type": "number", "title": "Total", "required": false, "prefillable": false, "calculated": true }
    ],
    "hasMore": false
  }
}

Bayrakları okumak

context: true gizli bir alandır — değeri context’e gider, asla prefill’e değil. prefillable: false, kimsenin değer sağlayamayacağı bir alanı işaretler (dosya, imza, ödeme, randevu, belgeler). Bir seçim sorusu için etiketi değil, seçeneğin key’ini gönderin; bir matris rows ve columns’ını aynı şekilde listeler ve { "row_key": "column_key" } alır. calculated: true hesaplanan bir alandır: form değerini hesaplar, onu answers’te geri okursunuz ve hiçbir şey onu gönderemez.

Tekrarlanan bir grup, repeating: true ve bir members dizisiyle birlikte type: “group”’dur. Bir Belgeler bloğu type: “documents”’tir ve her yanıtlayıcının zaten gördüğü, yazarın eklediği dosyaları taşıyan documents: [{ name }]’i içerir.

400formId eksik
404Form bulunamadı

İstekler

Bir istek, yayınlanmış bir formu bir kişiye atar ve sona erdiğinde sizi geri çağırır. Kavramsal kılavuz Bir istek oluşturmak sayfasındadır; burası parametre listesidir.

requests.create

Bir istek oluşturur. Alıcı yanıtlasın ya da yanıtlamasın, çalışma alanının aylık kotasından bir birim harcar.

POSThttps://api.formbase.so/api/v1
Parametreler16
formIdstringrequired

Atanacak yayınlanmış form.

recipientobjectoptional

{ email?, name? }. delivery “email” olduğunda bir e-posta gereklidir; aksi halde yalnızca kişiyi İstekler sayfasında ve yanıtlarında tanımlar.

prefillobjectoptional

Alan anahtarına göre başlangıç yanıtları. Alıcı bunları görür ve değiştirebilir.

readonlystring[]optional

Alıcının değiştiremeyeceği önceden doldurulmuş anahtarlar. Buradaki her anahtar prefill içinde de bulunmalı, kilitli zorunlu bir alan boş olmayan bir değerle doldurulmuş olmalıdır.

contextobjectoptional

Formun gizli alanları için, alan anahtarına göre değerler. Güvenilir, değiştirilemez ve geri çağırmada aynen döner. Bilinmeyen bir anahtar UNKNOWN_FIELD_KEY ile reddedilir.

metadataobjectoptional

Kendi kayıt tutma bilgileriniz. Forma hiç ulaşmaz; geri çağırmalarda ve okumalarda geri döner.

languagestringoptional

Formun yayınlanmış dillerinden biri. Varsayılan olarak formun kendi varsayılanı kullanılır.

deliverystringoptionaldefault: none

formbase’in daveti göndermesi için “email” (bir alıcı e-postası ve Pro veya Business ya da Ücretsiz bir hesabın 10 ücretsiz davetinden biri gerekir), ya da bağlantıyı kendiniz teslim etmek için “none”.

remindersstring[]optional

Bu istek için formun hatırlatma programını geçersiz kılın. Boş bir dizi hatırlatmaları kapatır.

expiresAtnumberoptional

Epoch milisaniye. Varsayılan olarak 30 gün sonrasıdır; azami 365 gündür.

callbackUrlstringoptional

formbase’in istek sona erdiğinde geri çağırmayı nereye POST edeceği. Yalnızca HTTPS, ve host genel bir adrese çözümlenmelidir.

externalIdstringoptional

Bu istek için kendi kimliğiniz. requests.list’te filtrelenebilir.

idempotencyKeystringoptional

Aynı gövdeyle tekrarlamak, orijinal isteği deduplicated: true ile döner. Farklı bir gövde reddedilir. Anahtarlar 30 gün canlı kalır.

domainIdstringoptional

Bağlantıyı özel alan adlarınızdan birinde oluşturun. Yalnızca REST API.

documentsobject[]optional

[{ documentId, field?, name? }] — önce documents.create ile yüklenen, bu tek alıcıya verilen dosyalar.

testbooleanoptionaldefault: false

Bir deneme çalışması: hiçbir şey e-postayla gönderilmez, geri çağırma “test”: true taşır ve gönderim hiçbir yerde sayılmaz. Bağlantı 24 saat içinde kapanır ve Free’de bir workspace günde 10 test isteği oluşturabilir.

bash
curl -X POST https://api.formbase.so/api/v1 \
  -H "Authorization: Bearer fb_..." \
  -H "Content-Type: application/json" \
  -d '{
    "method": "requests.create",
    "params": {
      "formId": "j57...",
      "recipient": { "email": "ada@acme.com", "name": "Ada" },
      "prefill": { "company_name": "Acme" },
      "readonly": ["company_name"],
      "context": { "case_id": "CASE-9" },
      "delivery": "email",
      "externalId": "run-42",
      "callbackUrl": "https://automation.example/webhook/resume-abc",
      "idempotencyKey": "run-42"
    }
  }'
200Başarılı
json
{
  "ok": true,
  "data": {
    "id": "kd7...",
    "status": "pending",
    "url": "https://form.formbase.so/r/rq_...",
    "deliveryStatus": "queued",
    "expiresAt": 1794787200000,
    "createdAt": 1789379200000,
    "externalId": "run-42",
    "deduplicated": false
  }
}

deliveryStatus, bir davet kuyruğa alınana kadar not_requested’tır, ardından queued → sent ya da failed olur, ve posta sağlayıcısı bir sert geri dönüş veya şikayet bildirdiğinde bounced olur.

400Bilinmeyen alan anahtarı, yanlış değer biçimi veya önceden doldurulmamış kilitli bir anahtar
400Form yayınlanmamış (FORM_NOT_PUBLISHED), ya da callbackUrl izin verilmiyor (CALLBACK_URL_NOT_ALLOWED)
402Aylık kota tükendi (MONTHLY_ALLOWANCE_REACHED), ücretsiz davetler tükendi (FREE_INVITATIONS_USED), ya da Pro altı bir planda hatırlatmalar
404Form bulunamadı
409Idempotency anahtarı farklı bir gövdeyle yeniden kullanıldı (IDEMPOTENCY_CONFLICT)
429Bu token’da bir dakikada 60’tan fazla requests.create çağrısı ya da Free bir workspace’in bir günde 11. test isteği (TEST_REQUEST_LIMIT_REACHED)

requests.get

Bir isteği tam olarak alın: durum, sonuç, önceden doldurulan değerler, zaman çizelgesi ve — tamamlandıysa — geri çağırmanın taşıdığıyla aynı iki eşleme olan, alan anahtarına göre anahtarlanmış answers ve display.

POSThttps://api.formbase.so/api/v1
Parametreler1
requestIdstringrequired

İstek kimliği.

200Başarılı
json
{
  "ok": true,
  "data": {
    "id": "kd7...",
    "formId": "j57...",
    "status": "completed",
    "outcome": "approve",
    "isTest": false,
    "recipient": { "email": "ada@acme.com", "name": "Ada" },
    "language": "en",
    "externalId": "run-42",
    "metadata": null,
    "context": { "case_id": "CASE-9" },
    "prefill": { "company_name": "Acme" },
    "readonlyKeys": ["company_name"],
    "delivery": "email",
    "deliveryStatus": "sent",
    "hasCallback": true,
    "callbackFailedAt": null,
    "submissionId": "kp2...",
    "url": "https://form.formbase.so/r/rq_...",
    "answers": { "company_name": "Acme", "decision": "approve" },
    "display": { "company_name": "Acme", "decision": "Approve" },
    "timeline": [
      { "id": "kd7...:created", "type": "created", "at": 1789379200000 },
      { "id": "kd7...:completed", "type": "completed", "at": 1789465600000 }
    ],
    "expiresAt": 1794787200000,
    "completedAt": 1789465600000
  }
}

outcome ile status

status isteğin bitip bitmediğini söyler; outcome alıcının ne karar verdiğini söyler — approve, decline, changes, ya da tamamlanmış bir isteğin alıcısı bu üçünden birini seçmediyse null — bir karar sorusu olmayan bir form dahil. Geri çağırma URL’sinin kendisi asla döndürülmez; hasCallback yalnızca birinin ayarlanıp ayarlanmadığını söyler.

Yukarıdaki örnek kısaltılmıştır. Tam bir yanıt ayrıca workspaceId, formSnapshotId, createdVia, documents, reminderStep, remindersSent, reminderDueAt, dataPurgedAt ve zaman damgalarının geri kalanını taşır (updatedAt, openedAt, startedAt, lastActivityAt ile expiredAt, canceledAt, canceledBy, cancelReason).

İki alan, önünüzdeki kopyanın tek kopya olduğu anı söyler. callbackFailedAt, bu isteğin geri çağırması denemelerini tükettiğinde ayarlanır ve biri başarılı olduğunda ya da onu yeniden oynattığınızda temizlenir. dataPurgedAt, saklama süresi isteği ayıkladığında ayarlanır: context, prefill ve metadata boş döner, readonlyKeys ve documents [] olur, submissionId, answers ve display ise null olur.

timeline türetilmiştir, en eskiden en yeniye sıralıdır. Her girişin bir id’si, bir at’ı ve bir type’ı vardır — created, invitation, reminder, opened, started, completed, expired, canceled, callback. Teslimat girişleri deliveryStatus ve attemptCount ekler, geri çağırmalar ise eventType ekler. Teslimat satırları 30 gün tutulur, bu yüzden daha eski zaman çizelgeleri yalnızca zaman damgalarına indirgenir.

404İstek bulunamadı (REQUEST_NOT_FOUND)

requests.list

Bir çalışma alanındaki veya bir formdaki istekleri en yeniden en eskiye listeler. Test istekleri, siz istemedikçe dışarıda bırakılır.

POSThttps://api.formbase.so/api/v1
Parametreler8
workspaceIdstringoptional

Bir çalışma alanına kapsa. Bunu ya da formId’yi verin.

formIdstringoptional

Bir forma kapsa.

statusstringoptional

pending, completed, expired veya canceled.

outcomestringoptional

approve, decline veya changes. Yalnızca tamamlanmış istekleri ima eder.

externalIdstringoptional

Bir çalıştırmanın oluşturduğu isteği bulmak için kendi kimliğiniz.

includeTestbooleanoptionaldefault: false

test: true ile oluşturulan istekleri dahil edin.

limitnumberoptionaldefault: 25

Sayfa boyutu (1–100).

cursorstringoptional

Önceki yanıttan gelen sayfalama imleci.

200Başarılı
json
{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "kd7...",
        "formId": "j57...",
        "status": "pending",
        "outcome": null,
        "recipient": { "email": "ada@acme.com", "name": "Ada" },
        "externalId": "run-42",
        "deliveryStatus": "sent",
        "expiresAt": 1794787200000,
        "createdAt": 1789379200000
      }
    ],
    "nextCursor": null,
    "hasMore": false
  }
}

Liste öğeleri, url, answers, display ve timeline hariç requests.get ile aynı alanları taşır ve her biri isTest taşır. workspaceId ya da formId verin — hiçbirini vermemek, nedeni SCOPE_REQUIRED olan bir 400 VALIDATION_ERROR döner. outcome, status’u geçersiz kılar, çünkü yalnızca tamamlanmış bir isteğin bir kararı vardır.

requests.cancel

Beklemedeki bir isteği geri çeker. Bağlantı çalışmayı durdurur, alıcı bir geri çekilme bildirimi görür ve bir request.canceled geri çağırması tetiklenir.

POSThttps://api.formbase.so/api/v1
Parametreler2
requestIdstringrequired

İstek kimliği.

reasonstringoptional

Nedeninize dair notunuz; istek üzerinde tutulur ve geri çağırmada gönderilir.

200İptal edilen istek
409Zaten tamamlanmış, süresi dolmuş veya iptal edilmiş (REQUEST_NOT_PENDING)

requests.remind

Hatırlatma programına dokunmadan alıcıya şimdi e-posta gönderir. Bir alıcı e-postası ve Pro veya Business plan gerektirir.

POSThttps://api.formbase.so/api/v1
Parametreler1
requestIdstringrequired

İstek kimliği. Hâlâ beklemede olmalıdır ve bir test isteği olmamalıdır.

İki sınır uygulanır: manuel hatırlatmalar arasında en az 10 dakika, ve istek başına toplamda — manuel ve zamanlanmış birlikte — en fazla 8 hatırlatma. Otomatik program dokunulmamış kalır — reminderStep ve reminderDueAt oldukları yerde kalır.

200remindersSent artırılmış istek
400İstekte alıcı e-postası yok (RECIPIENT_EMAIL_REQUIRED)
402İstek hatırlatmaları Pro veya Business gerektirir (UPGRADE_REQUIRED)
409Beklemede değil (REQUEST_NOT_PENDING), çok erken (REMINDER_TOO_SOON, details.retryAfterMs ile), sınıra ulaşıldı (REMINDER_CAP_REACHED), ya da bir test isteği (TEST_REQUEST)

requests.replayCallback

Bir isteğin sona erdiğinde tetiklediği geri çağırmayı yeniden gönderir — aynı yük, aynı olay kimliği, böylece onu zaten işleyen bir alıcı tekilleştirebilir. Bozuk bir uç noktayı düzelttikten sonra kullanın.

POSThttps://api.formbase.so/api/v1
Parametreler1
requestIdstringrequired

İstek kimliği. Tamamlanmış, süresi dolmuş veya iptal edilmiş olmalıdır.

200Başarılı
json
{
  "ok": true,
  "data": { "dispatchId": "kf9...", "eventId": "evt_kf9..." }
}
409Hâlâ beklemede, dolayısıyla yeniden oynatılacak nihai bir geri çağırma yok (REQUEST_NOT_TERMINAL)
409İstek callbackUrl olmadan oluşturuldu (NO_CALLBACK_TO_REPLAY)

requests.sample

Bir form için gerçek bir istek olmadan örnek bir istek olayı oluşturur. Bu, webhooks.create ile oluşturulmuş bir request_* aboneliğinin aldığı tam zarftır, bu yüzden bağlayıcılar onu alan keşfi için kullanır. Tamamlanmış bir örnek,

submissions.sample’ın gösterdiği aynı örnek yanıtları taşır; süresi dolmuş veya iptal edilmiş bir örnek ise yalnızca istek bloğunu taşır.

POSThttps://api.formbase.so/api/v1
Parametreler2
formIdstringrequired

Form kimliği.

eventTypestringrequired

Hangi sonlanmanın örnekleneceği, webhooks.create yazımıyla. Zarfın type’ı noktalı biçimdir.

request_completedrequest_expiredrequest_canceled
200Örnek oluşturuldu
json
{
  "ok": true,
  "data": {
    "id": "evt_example000000000000",
    "type": "request.completed",
    "createdAt": "2026-05-18T19:00:00.000Z",
    "apiVersion": "2026-09-24",
    "test": true,
    "data": {
      "request": {
        "id": "req_example000000000000",
        "externalId": "order-1234",
        "status": "completed",
        "language": "en",
        "recipient": { "email": "recipient@example.com", "name": "Sample Recipient" },
        "metadata": { "source": "sample" },
        "context": {},
        "createdAt": "2026-05-18T18:00:00.000Z",
        "completedAt": "2026-05-18T19:00:00.000Z"
      },
      "form": { "id": "frm_abc123", "name": "Event Feedback", "snapshotId": "js7abc123" },
      "submission": {
        "id": "sub_example000000000000",
        "respondentEmail": "respondent@example.com",
        "submittedAt": "2026-05-18T19:00:00.000Z",
        "updatedAt": null,
        "editCount": 0,
        "pdfUrl": null,
        "language": "en"
      },
      "answers": { "your_email": "john@example.com" },
      "display": { "your_email": "john@example.com" }
    }
  }
}

İstek bloğu ve outcome, geri çağırmalar sayfasında belgelenmiştir; gönderim yarısı ise webhook referansında. Örnek kimlikler yukarıda gösterilen sabit yer tutuculardır ve test, true’dur, bu yüzden bir alıcı bir örneği canlı bir olaydan ayırt edebilir.

documents.create

Formun Belgeler bloğu aracılığıyla bir alıcıya vereceğiniz bir dosya için bir yükleme ayırır. Baytlar hiçbir zaman bu API’den geçmez: önceden imzalanmış bir PUT alırsınız, yüklersiniz ve requests.create, istek var olmadan önce nesneyi doğrular.

POSThttps://api.formbase.so/api/v1
Parametreler5
formIdstringrequired

Belgeler bloğu dosyayı gösterecek form. Yüklemeyi o çalışma alanına kapsar.

namestringrequired

Alıcının göreceği görünen ad (1–200 karakter). İstek başına geçersiz kılınabilir.

contentTypestringrequired

application/pdf ya da bir görsel türü: image/png, image/jpeg, image/webp, image/gif, image/svg+xml, image/avif, image/bmp, image/tiff. Office belgeleri kabul edilmez.

sizenumberrequired

Tam bayt uzunluğu. Azami 25 MB (26.214.400).

sha256stringoptional

Baytların onaltılık özeti. Verildiğinde yüklemeden sonra doğrulanır.

200Yükleme ayrıldı
json
{
  "ok": true,
  "data": {
    "id": "kn7...",
    "name": "Lease contract draft",
    "contentType": "application/pdf",
    "size": 412000,
    "uploadUrl": "https://...",
    "expiresAt": 1792198800000
  }
}

Ham baytları, siz beyan ettiğiniz türe ayarlanmış Content-Type ile bir saat içinde uploadUrl’a PUT edin, ardından kimliği requests.create’ten referans alın:

json
{
  "method": "requests.create",
  "params": {
    "formId": "j57...",
    "documents": [
      { "documentId": "kn7...", "name": "Your lease contract" },
      { "documentId": "kn8...", "field": "attachments" }
    ]
  }
}
  • field, Belgeler bloğunun alan anahtarıdır. Formda tam olarak bir blok varsa isteğe bağlıdır; iki veya daha fazlasında zorunludur.

  • Bloğun yazarın eklediği belgeleri kalır; sizinkiler bu tek alıcı için onların altında görünür.
  • Sınırlar: belge başına 25 MB, istek başına 100 MB belge, yazarın eklediği belgeler dahil blok başına gösterilen 20 belge.
  • Bir yükleme herhangi bir sayıda istek tarafından referans alınabilir. Kimsenin referans almadığı bir yükleme zamanla silinir. Baytlar, onlara referans veren son istek saklama süresi tarafından ayıklanana kadar çalışma alanı sahibinin depolama alanına sayılır.

Buradaki her başarısızlık, bir details.reason ile birlikte 400 VALIDATION_ERROR’dur: bu metoddan DOCUMENT_TYPE_NOT_ALLOWED, DOCUMENT_TOO_LARGE, INVALID_DOCUMENT_NAME ya da INVALID_DOCUMENT_SHA256, ve requests.create’ten DOCUMENT_NOT_FOUND, DOCUMENT_NOT_UPLOADED (PUT’u atladınız), DOCUMENT_INVALID, INVALID_DOCUMENT_TARGET, DOCUMENTS_TOO_LARGE ya da DOCUMENTS_TOO_MANY.

Webhook’lar

webhooks.list

Bir form için webhook aboneliklerini listeler.

POSThttps://api.formbase.so/api/v1
Parametreler1
formIdstringrequired

Form kimliği.

200Başarılı
json
{
  "ok": true,
  "data": {
    "items": [
      {
        "subscriptionId": "int_abc123",
        "formId": "frm_abc123",
        "provider": "zapier",
        "targetUrl": "https://hooks.zapier.com/...",
        "eventType": "submission_created",
        "status": "active",
        "createdAt": 1714041851000
      }
    ],
    "hasMore": false
  }
}

webhooks.create

Bir URL’yi form olaylarına abone eder: yeni veya terk edilmiş gönderimler, ya da formdaki isteklerin sona ermesi. URL HTTPS kullanmalıdır.

POSThttps://api.formbase.so/api/v1
Parametreler6
formIdstringrequired

Form kimliği.

targetUrlstringrequired

Webhook yüklerini alacak HTTPS URL’si.

providerstringrequired

Aboneliğin hangi araca ait olduğu. Bu yalnızca kendi kaydınız için bir etikettir — kurulacak bir mağaza uygulaması yoktur ve her sağlayıcı aynı şekilde davranır.

zapiermaken8n
eventTypestringoptionaldefault: submission_created

Abone olunacak olay türü. Üç submission_ türü gönderim yükünü teslim eder: submission_created ilk gönderimi, submission_updated yanıtlayanın düzenlemesini ve submission_abandoned atıl kalmış bir taslağı bildirir. Üç request_ türü ise, formdaki bir istek o şekilde sona erdiğinde eşleşen istek olayını, bu aboneliğin sırrıyla imzalanmış olarak teslim eder; test istekleri hiçbir aboneliğe ulaşmaz.

submission_createdsubmission_updatedsubmission_abandonedrequest_completedrequest_expiredrequest_canceled
idleWindowstringoptional

eventType submission_abandoned olduğunda zorunludur; diğer her tür için reddedilir.

12h1d3d1w
signingSecretstringoptional

İsteğe bağlı HMAC imzalama sırrı, 32–255 karakter. Verildiğinde, teslimatlar X-formbase-Signature içerir. Sır saklanır ama API tarafından asla döndürülmez.

bash
curl -X POST https://api.formbase.so/api/v1 \
  -H "Authorization: Bearer fb_..." \
  -H "Content-Type: application/json" \
  -d '{
    "method": "webhooks.create",
    "params": {
      "formId": "frm_abc123",
      "targetUrl": "https://hooks.zapier.com/hooks/catch/...",
      "provider": "zapier",
      "eventType": "submission_created",
      "signingSecret": "whsec_0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
    }
  }'
200Webhook oluşturuldu
json
{
  "ok": true,
  "data": {
    "subscriptionId": "int_new123",
    "formId": "frm_abc123",
    "provider": "zapier",
    "targetUrl": "https://hooks.zapier.com/hooks/catch/...",
    "eventType": "submission_created"
  }
}

Terk edilmiş gönderim abonelikleri, seçilen idleWindow’ı hem webhooks.create hem de webhooks.list ’ten döner. Diğer her abonelik onu atlar.

Bir istek aboneliği, bir geri çağırmanın duyduğu aynı olayları duyar, ama kendi teslimatı olarak: kendi olay kimliği, kendi imzası ve kendi beş denemelik yeniden deneme bütçesiyle, bu tükendiğinde abonelik duraklar. Bir request_completed aboneliği olan bir formda callbackUrl ile oluşturulan bir istek bu yüzden iki kez tetiklenir, her alıcıya bir kez. requests.replayCallback yalnızca geri çağırmayı yeniden gönderir. İsteğin sona ermesinden önce yükü görmek için requests.sample kullanın.

webhooks.delete

Bir webhook aboneliğini kaldırır.

POSThttps://api.formbase.so/api/v1
Parametreler1
subscriptionIdstringrequired

webhooks.list veya webhooks.create tarafından döndürülen abonelik kimliği.

200Webhook silindi
json
{
  "ok": true,
  "data": {
    "subscriptionId": "int_abc123",
    "deleted": true
  }
}

Analitik

analytics.get

Bir form için toplu analitik metriklerini getirir. Tarih aralığı, cihaz, trafik kaynağı ve ülke filtrelerini destekler.

Analitik bir Pro özelliğidir ve kural, panodaki Analitik sekmesinde olduğu gibi çalışma alanı sahibinin planını izler. Sahip Pro değilse çağrı UPGRADE_REQUIRED döndürür — sahip Pro iken kaydedilmiş geçmiş için de. Pro sahibinin çalışma alanındaki Free bir üye verileri alır.

POSThttps://api.formbase.so/api/v1
Parametreler7
formIdstringrequired

Form kimliği.

fromnumberoptional

Milisaniye cinsinden Unix zaman damgası olarak tarih aralığı başlangıcı. İkisi de ayarlandığında to’dan küçük veya eşit olmalıdır.

tonumberoptional

Milisaniye cinsinden Unix zaman damgası olarak tarih aralığı sonu. Tüm zamanlar için ikisini de belirtme — period o zaman { "from": null, "to": null } olarak döner.

devicestringoptionaldefault: all

Cihaz türüne göre filtrele.

alldesktopmobiletablet
trafficSourcestringoptional

Trafik kaynağına göre filtrele (örn. “Direct”, “Google”).

countrystringoptional

2 harfli ülke koduna göre filtrele (örn. “US”, “DE”).

includeEventsbooleanoptionaldefault: false

Kendi analiziniz için, metriklerin arkasındaki temizlenmiş analitik olaylarını da döndürür. Ziyaretçi kimliği içermez.

Oranlar 0’dan 100’e kadar sayılardır, sayımlar tam sayıdır ve totalEvents, benzersiz ziyaretçilere tekilleştirmeden önceki ham olay satırı sayısıdır.

200Başarılı
json
{
  "ok": true,
  "data": {
    "formId": "frm_abc123",
    "period": { "from": null, "to": null },
    "totalEvents": 17,
    "metrics": {
      "views": 7,
      "uniqueVisitors": 7,
      "engaged": 6,
      "submissions": 4,
      "engagementRate": 86,
      "completionRate": 57,
      "bounceRate": 14
    },
    "breakdown": {
      "byBrowser": { "Chrome": 17 },
      "byCountry": { "US": 10, "DE": 7 },
      "byDevice": { "desktop": 14, "mobile": 3 },
      "bySource": { "Direct": 12, "Google": 5 }
    }
  }
}

Çalışma alanları

workspaces.list

Token’ınızın erişebildiği tüm çalışma alanlarını listeler. Parametre gerekmez.

Bir API token’ı tek bir çalışma alanına bağlıdır, bu yüzden hesabınız birden fazlasına üye olsa bile bu metod yalnızca o çalışma alanını döner.

POSThttps://api.formbase.so/api/v1
Parametreler0
200Başarılı
json
{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "ws_abc123",
        "name": "Acme Inc",
        "createdAt": 1714041800000,
        "role": "owner"
      }
    ],
    "nextCursor": null,
    "hasMore": false,
    "canPaginate": false
  }
}

workspaces.createInvite

Bir çalışma alanı için davet bağlantısı oluşturur.

POSThttps://api.formbase.so/api/v1
Parametreler3
workspaceIdstringrequired

Çalışma alanı kimliği.

expiresAtnumberoptional

Milisaniye cinsinden gelecekteki bir Unix zaman damgası olarak son kullanma tarihi.

maxUsesnumberoptional

Davetin kullanılabileceği maksimum sayı.

200Davet oluşturuldu
json
{
  "ok": true,
  "data": {
    "id": "inv_abc123",
    "workspaceId": "ws_abc123",
    "code": "aBcDeFgH",
    "expiresAt": null,
    "maxUses": null,
    "uses": 0,
    "createdAt": 1714041851000
  }
}

workspaces.getInvite

Bir çalışma alanı davetini getirir. workspaces.createInvite ile aynı biçimi döner.

POSThttps://api.formbase.so/api/v1
Parametreler1
inviteIdstringrequired

Davet kimliği.

404Davet bulunamadı

workspaces.updateInvite

Mevcut bir çalışma alanı davetini günceller. expiresAt veya maxUses alanlarından en az birini sağlayın, aksi halde çağrı reddedilir. Güncellenmiş daveti döner.

POSThttps://api.formbase.so/api/v1
Parametreler3
inviteIdstringrequired

Davet kimliği.

expiresAtnumberoptional

Milisaniye cinsinden yeni son kullanma zaman damgası.

maxUsesnumberoptional

Yeni maksimum kullanım sınırı.

workspaces.revokeInvite

Bir çalışma alanı davetini kalıcı olarak iptal eder.

POSThttps://api.formbase.so/api/v1
Parametreler1
inviteIdstringrequired

Davet kimliği.

200Davet iptal edildi
json
{
  "ok": true,
  "data": {
    "inviteId": "inv_abc123",
    "revoked": true
  }
}

Klasörler

folders.list

Bir çalışma alanındaki klasörleri listeler.

POSThttps://api.formbase.so/api/v1
Parametreler3
workspaceIdstringrequired

Çalışma alanı kimliği.

limitnumberoptionaldefault: 20

Sayfa boyutu (1–100).

cursorstringoptional

Sayfalama imleci.

200Başarılı
json
{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "fld_abc123",
        "name": "Customer Feedback",
        "workspaceId": "ws_abc123",
        "parentId": null,
        "createdAt": 1714041800000
      }
    ],
    "nextCursor": null,
    "hasMore": false,
    "canPaginate": false
  }
}

folders.create

Bir çalışma alanında klasör oluşturur. Idempotent — aynı ada sahip bir klasör zaten varsa mevcut klasörü döndürür.

POSThttps://api.formbase.so/api/v1
Parametreler3
workspaceIdstringrequired

Çalışma alanı kimliği.

namestringrequired

Klasör adı (1–255 karakter).

parentIdstring | nulloptional

İç içe geçirme için üst klasör kimliği. Kök düzey için belirtme.

200Klasör oluşturuldu
json
{
  "ok": true,
  "data": {
    "id": "fld_new123",
    "name": "Customer Feedback",
    "workspaceId": "ws_abc123",
    "parentId": null,
    "createdAt": 1714041851000,
    "alreadyExisted": false
  }
}

folders.update

Bir klasörü yeniden adlandırır veya farklı bir üst klasöre taşır.

POSThttps://api.formbase.so/api/v1
Parametreler3
folderIdstringrequired

Klasör kimliği.

namestringoptional

Yeni klasör adı (1–255 karakter).

parentIdstring | nulloptional

Yeni üst klasör. Köke taşımak için null gönder.

folders.delete

Bir klasörü ve tüm içeriğini (alt klasörler ve formlar) kalıcı olarak siler.

POSThttps://api.formbase.so/api/v1
Parametreler1
folderIdstringrequired

Klasör kimliği.

200Klasör silindi
json
{
  "ok": true,
  "data": {
    "folderId": "fld_abc123",
    "deletedFolderIds": ["fld_abc123"],
    "deletedFormIds": ["frm_in_folder"],
    "message": "Folder and 1 form deleted."
  }
}

Çeviriler

translations.listLanguages

Bir formda yapılandırılmış tüm dilleri listeler.

POSThttps://api.formbase.so/api/v1
Parametreler1
formIdstringrequired

Form kimliği.

200Başarılı
json
{
  "ok": true,
  "data": {
    "formId": "frm_abc123",
    "items": [
      {
        "language": "es",
        "completion": { "total": 15, "current": 12, "outdated": 2, "missing": 1, "suggested": 0 },
        "lastUpdatedAt": 1714041851000
      }
    ],
    "nextCursor": null,
    "hasMore": false,
    "canPaginate": false
  }
}

translations.addLanguage

Bir forma dil kaydeder. Siz bunu yapana kadar diğer her çeviri metodu 404 NOT_FOUND ile başarısız olur.

POSThttps://api.formbase.so/api/v1
Parametreler2
formIdstringrequired

Form kimliği.

languagestringrequired

BCP-47 dil etiketi (örn. “es”, “pt-BR”).

200Dil eklendi
json
{
  "ok": true,
  "data": {
    "formId": "frm_abc123",
    "language": "es",
    "rowId": "tl_new123"
  }
}

translations.removeLanguage

Bir dili ve tüm çevirilerini formdan kaldırır.

POSThttps://api.formbase.so/api/v1
Parametreler2
formIdstringrequired

Form kimliği.

languagestringrequired

BCP-47 dil etiketi.

translations.listEntries

Bir formdaki bir dil için mevcut durumuyla birlikte her kaynak anahtarı listeler. translations.setEntry’nin aldığı key değerlerini bu şekilde keşfedersiniz.

POSThttps://api.formbase.so/api/v1
Parametreler2
formIdstringrequired

Form kimliği.

languagestringrequired

BCP-47 dil etiketi. Zaten formda olmalıdır.

200Başarılı
json
{
  "ok": true,
  "data": {
    "formId": "frm_abc123",
    "language": "es",
    "completion": { "total": 15, "current": 12, "outdated": 2, "missing": 1, "suggested": 0 },
    "items": [
      {
        "key": "block_q_1.title",
        "status": "current",
        "value": "[{\"text\":\"Tu correo electrónico\"}]",
        "sourceFragment": "[{\"text\":\"Your email\"}]",
        "updatedAt": 1714041851000,
        "block": { "id": "q_1", "type": "email-input", "label": "Your email" }
      }
    ],
    "hasMore": false
  }
}

status, missing (hiçbir şey kaydedilmemiş), outdated (kaynak o zamandan beri değişti), current, ya da suggested (hazırlanmış ama kabul edilmemiş bir AI önerisi) olur. Anahtarlar form içeriğini ( block_<id>.) ve, bir yazar bunları özelleştirdiyse, yanıtlayıcı onay ve hatırlatma e-postalarını ( email.confirmation., email.reminder.*) kapsar.

translations.setEntry

Tek bir çeviri girişini ayarlar. Dilin önce translations.addLanguage ile eklenmiş olması gerekir.

POSThttps://api.formbase.so/api/v1
Parametreler4
formIdstringrequired

Form kimliği.

languagestringrequired

BCP-47 dil etiketi.

keystringrequired

translations.listEntries’ten bir anahtar. Bir tanesini elle oluşturmayın.

valuestringrequired

JSON dizgesine dönüştürülmüş çevrilmiş parça. İşaret yapısı kaynak parçayla eşleşmelidir.

bash
curl -X POST https://api.formbase.so/api/v1 \
  -H "Authorization: Bearer fb_..." \
  -H "Content-Type: application/json" \
  -d '{
    "method": "translations.setEntry",
    "params": {
      "formId": "frm_abc123",
      "language": "es",
      "key": "block_q_1.title",
      "value": "[{\"text\":\"Tu correo electrónico\"}]"
    }
  }'

{ formId, language, key } döner.

translations.deleteEntry

Tek bir çeviri girişini siler ve o anahtarı formun varsayılan diline geri döndürür. Idempotent. Bir dil için son giriş de gittiğinde, dil formun yayınlanmış dillerinden düşer.

POSThttps://api.formbase.so/api/v1
Parametreler3
formIdstringrequired

Form kimliği.

languagestringrequired

BCP-47 dil etiketi.

keystringrequired

Silinecek çeviri anahtarı.

Hesap

me.get

Kimliği doğrulanmış kullanıcı hakkında bilgi getirir.

POSThttps://api.formbase.so/api/v1
Parametreler0
200Başarılı
json
{
  "ok": true,
  "data": {
    "id": "usr_abc123",
    "email": "you@example.com",
    "name": "Jane Doe"
  }
}

Meta

methods.list

Bu dağıtımın sunduğu her metod adını sıralı olarak listeler. Bu sayfa ile sunucu anlaşmazlığa düştüğünde yetkili yanıt budur.

POSThttps://api.formbase.so/api/v1
Parametreler0
200Başarılı
json
{
  "ok": true,
  "data": {
    "methods": [
      "methods.list",
      "analytics.get",
      "folders.create",
      "folders.delete",
      "folders.list",
      "folders.update",
      "formSettings.get",
      "formSettings.update",
      "forms.create",
      "forms.delete",
      "forms.get",
      "forms.list",
      "..."
    ]
  }
}

Hata referansı

Her hata yanıtı aynı yapıyı izler. Üst düzey code kümesi kasıtlı olarak kapalıdır: yeni bir başarısızlık modu asla bir kod eklemez, bir reason ekler. HTTP düzeyindeki sonuç için code üzerinde, düzeltme için details.reason üzerinde dallanın.

error response
json
{
  "ok": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "No field with key \"company\" on this form.",
    "details": { "reason": "UNKNOWN_FIELD_KEY", "field": "prefill.company", "validKeys": ["company_name", "contacts"] }
  }
}

details, sunucu nedeni adlandırabildiğinde her zaman bulunur. reason’ın yanı sıra, field (iç içe geçme için noktalı, sorunlu parametre), validKeys, validValues (bir seçim sorusunun kabul ettiği seçenek değerleri), expectedType, feature (UPGRADE_REQUIRED üzerinde), ve retryAfterMs (kısıtlanmış bir çağrıda) taşıyabilir. İstek yüzeyi için nedenler yukarıda her metotla birlikte listelenmiştir.

İşte tüm kodlar:

Hata kodları
VALIDATION_ERROR400optional

İstekte geçersiz veya eksik parametreler.

UNAUTHORIZED401optional

Eksik veya geçersiz API token’ı.

FORBIDDEN403optional

Token, istenen kaynağa erişim iznine sahip değil.

NOT_FOUND404optional

Kaynak mevcut değil.

METHOD_NOT_FOUND404optional

Bilinmeyen metod adı. Mevcut metodları görmek için methods.list kullan.

CONFLICT409optional

Kaynak bu çağrıya izin veren bir durumda değil — artık beklemede olmayan bir istek, farklı bir gövdeyle yeniden kullanılan bir idempotency anahtarı.

RATE_LIMITED429optional

Bu token’da dakikada 120’den fazla çağrı, dakikada 60’tan fazla requests.create çağrısı, ya da bu IP’den çok fazla başarısız kimlik doğrulama.

UPGRADE_REQUIRED402optional

Özellik daha yüksek bir abonelik katmanı gerektirir, çalışma alanı aylık kotasını tüketmiştir (neden MONTHLY_ALLOWANCE_REACHED), ya da Ücretsiz bir hesap 10 ücretsiz davetini tüketmiştir (neden FREE_INVITATIONS_USED).

INTERNAL_ERROR500optional

Beklenmedik sunucu hatası. Daha sonra tekrar dene.

Sonraki adımlar