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
paramsatlanabilir; varsayılanı{}olur. Bilinmeyen bir metod404 METHOD_NOT_FOUNDdö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 FORBIDDENdöner.Sayfalama. Liste metodları
{ items, nextCursor, hasMore }döner; çoğu ayrıcacanPaginatedöner; bu,hasMoretrue olduğu halde devam ettirecek bir imleç bulunamadığında (bulanık arama)falseolur.nextCursor’ıcursorolarak geri gönderin.limit1–100 arasıdır, varsayılanı 20’dir —requests.listhariç, 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’larUNAUTHORIZEDyerineRATE_LIMITEDgörür.Gövde boyutu. 1 MiB. Daha büyük gövdeler
VALIDATION_ERRORile reddedilir.Sürümleme. Sürümü yol taşır. Kırıcı değişiklikler
/api/v2olarak 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.
workspaceIdstringrequired
workspaceIdstringrequiredÇalışma alanı kimliği.
folderIdstring | nulloptional
folderIdstring | nulloptionalKlasöre göre filtrele. Yalnızca kök düzeyindeki formlar için null gönder. Tamamını listelemek için belirtme.
querystringoptional
querystringoptionalBulanık ad araması. Sonuçlar limit değeriyle sınırlandırılır; imleç tabanlı sayfalama uygulanmaz.
limitnumberoptionaldefault: 20
limitnumberoptionaldefault: 20Sayfa boyutu (1–100).
cursorstringoptional
cursorstringoptionalÖnceki yanıttan gelen sayfalama imleci.
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" }
}'{
"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
}
}forms.get
Tek bir form için sorular, kapak, logo ve önizleme URL’si dahil tüm ayrıntıları getirir.
formIdstringrequired
formIdstringrequiredForm kimliği.
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" }
}'{
"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..."
}
}forms.create
Yeni bir boş form oluşturur. Formu ve bir önizleme URL’sini döndürür.
namestringrequired
namestringrequiredForm adı (1–255 karakter).
workspaceIdstringrequired
workspaceIdstringrequiredÇalışma alanı kimliği.
folderIdstringoptional
folderIdstringoptionalFormu bir klasöre yerleştir. Çalışma alanı kökünde oluşturmak için belirtme.
curl -X POST https://api.formbase.so/api/v1 \
-H "Authorization: Bearer fb_..." \
-H "Content-Type: application/json" \
-d '{
"method": "forms.create",
"params": {
"name": "Contact",
"workspaceId": "ws_abc123"
}
}'const res = await fetch('https://api.formbase.so/api/v1', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.FORMBASE_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
method: 'forms.create',
params: { name: 'Contact', workspaceId: 'ws_abc123' },
}),
})
const { ok, data } = await res.json()import os, requests
res = requests.post(
"https://api.formbase.so/api/v1",
headers={"Authorization": f"Bearer {os.environ['FORMBASE_TOKEN']}"},
json={
"method": "forms.create",
"params": {
"name": "Contact",
"workspaceId": "ws_abc123",
},
},
)
data = res.json(){
"ok": true,
"data": {
"id": "frm_new123",
"name": "Contact",
"workspaceId": "ws_abc123",
"folderId": null,
"isPublished": false,
"createdAt": 1714041851000,
"previewUrl": "https://formbase.so/preview/abc..."
}
}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).
formIdstringrequired
formIdstringrequiredForm kimliği.
namestringoptional
namestringoptionalYeni form adı (1–255 karakter).
folderIdstring | nulloptional
folderIdstring | nulloptionalFormu bir klasöre taşı. Çalışma alanı köküne taşımak için null gönder.
emojistring | nulloptional
emojistring | nulloptionalForm emojisi (en fazla 10 karakter). Temizlemek için null gönder.
coverobjectoptional
coverobjectoptionalKapak. {"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
logoobjectoptionalLogo. {"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.
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": "📋"
}
}'{
"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.
formIdstringrequired
formIdstringrequiredForm 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.
formIdstringrequired
formIdstringrequiredForm 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.
formIdstringrequired
formIdstringrequiredForm kimliği.
Geri yükleme bağlantıları geri getirmez
forms.restore formu döndürür, ama iptal ettiği paylaşım bağlantıları iptal olarak kalır. Yenilerini
shareLinks.create ile oluşturun. Zaten çöp kutusundaki bir form alreadyTrashed: true döner ve orijinal çöp
kutusu tarihini korur.
forms.restore
Bir formu çöp kutusundan geri yükler.
formIdstringrequired
formIdstringrequiredForm kimliği.
folderIdstring | nulloptional
folderIdstring | nulloptionalNereye 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.
formIdstringrequired
formIdstringrequiredForm 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.
formIdstringrequired
formIdstringrequiredForm kimliği.
Accessgroupoptional
Accessgroupoptionallanguage (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
Owner notificationsgroupoptionalnotifyOnSubmission, notificationEmails (dizi), selfNotificationSubject,
selfNotificationEmailBody, pdfGenerationEnabled, showViewSubmissionButton. Sahip e-postaları
çevrilemez — bunları istediğiniz dilde yazın.
Respondent notificationsgroupoptional
Respondent notificationsgroupoptionalrespondentNotificationEnabled, respondentNotificationTo (bir e-posta sorusunun alan kimliği, ya da
null), respondentNotificationSubject, respondentNotificationBody,
respondentNotificationPdfEnabled.
Remindersgroupoptional
RemindersgroupoptionalrespondentReminderEnabled, 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
After submitgroupoptionalredirectUrl (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
RetentiongroupoptionaldraftRetentionDays 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
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.
formIdstringrequired
formIdstringrequiredForm kimliği.
includeDraftsbooleanoptionaldefault: true
includeDraftsbooleanoptionaldefault: trueBaşlatılmış ama hiç gönderilmemiş yanıtları dahil eder. Taslaklar bir Pro özelliğidir: Ücretsiz’de yalnızca tamamlanmış gönderiler listelenir.
translationLanguagestringoptional
translationLanguagestringoptionalYanı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
limitnumberoptionaldefault: 20Sayfa boyutu (1–100).
cursorstringoptional
cursorstringoptionalÖnceki yanıttan gelen sayfalama imleci.
{
"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.
formIdstringrequired
formIdstringrequiredForm kimliği.
submissionIdstringrequired
submissionIdstringrequiredGönderim kimliği. O forma ait ve tamamlanmış olmalıdır.
{
"ok": true,
"data": {
"url": "https://api.formbase.so/api/storage/...",
"filename": "formbase-submission-sub_xyz789.pdf",
"contentType": "application/pdf",
"byteLength": 148213
}
}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.
formIdstringrequired
formIdstringrequiredForm kimliği.
{
"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.
Paylaşım bağlantıları
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ı.
formIdstringrequired
formIdstringrequiredForm kimliği. Hiç yayınlanmamış bir formun henüz alan anahtarı yoktur ve hiçbir öğe olmadan published: false döner.
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..." }
}'{
"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.
İ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.
formIdstringrequired
formIdstringrequiredAtanacak yayınlanmış form.
recipientobjectoptional
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
prefillobjectoptionalAlan anahtarına göre başlangıç yanıtları. Alıcı bunları görür ve değiştirebilir.
readonlystring[]optional
readonlystring[]optionalAlı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
contextobjectoptionalFormun 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
metadataobjectoptionalKendi kayıt tutma bilgileriniz. Forma hiç ulaşmaz; geri çağırmalarda ve okumalarda geri döner.
languagestringoptional
languagestringoptionalFormun yayınlanmış dillerinden biri. Varsayılan olarak formun kendi varsayılanı kullanılır.
deliverystringoptionaldefault: none
deliverystringoptionaldefault: noneformbase’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
remindersstring[]optionalBu istek için formun hatırlatma programını geçersiz kılın. Boş bir dizi hatırlatmaları kapatır.
expiresAtnumberoptional
expiresAtnumberoptionalEpoch milisaniye. Varsayılan olarak 30 gün sonrasıdır; azami 365 gündür.
callbackUrlstringoptional
callbackUrlstringoptionalformbase’in istek sona erdiğinde geri çağırmayı nereye POST edeceği. Yalnızca HTTPS, ve host genel bir adrese çözümlenmelidir.
externalIdstringoptional
externalIdstringoptionalBu istek için kendi kimliğiniz. requests.list’te filtrelenebilir.
idempotencyKeystringoptional
idempotencyKeystringoptionalAynı gövdeyle tekrarlamak, orijinal isteği deduplicated: true ile döner. Farklı bir gövde reddedilir. Anahtarlar 30 gün
canlı kalır.
domainIdstringoptional
domainIdstringoptionalBağlantıyı özel alan adlarınızdan birinde oluşturun. Yalnızca REST API.
documentsobject[]optional
documentsobject[]optional[{ documentId, field?, name? }] — önce documents.create ile yüklenen, bu tek alıcıya
verilen dosyalar.
testbooleanoptionaldefault: false
testbooleanoptionaldefault: falseBir 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.
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"
}
}'{
"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
}
}url’i saklayın
url, tek kullanımlık token’ı taşır. requests.get genellikle onu yeniden oluşturabilir, ama dağıtımın bir
istek-token anahtarı olmadan önce oluşturulmuş bir istek için null döner. Bağlantıyı kendiniz teslim ediyorsanız, onu
oluşturduğunuzda saklayın.
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.
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.
requestIdstringrequired
requestIdstringrequiredİstek kimliği.
{
"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.
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.
workspaceIdstringoptional
workspaceIdstringoptionalBir çalışma alanına kapsa. Bunu ya da formId’yi verin.
formIdstringoptional
formIdstringoptionalBir forma kapsa.
statusstringoptional
statusstringoptionalpending, completed, expired veya canceled.
outcomestringoptional
outcomestringoptionalapprove, decline veya changes. Yalnızca tamamlanmış istekleri ima eder.
externalIdstringoptional
externalIdstringoptionalBir çalıştırmanın oluşturduğu isteği bulmak için kendi kimliğiniz.
includeTestbooleanoptionaldefault: false
includeTestbooleanoptionaldefault: falsetest: true ile oluşturulan istekleri dahil edin.
limitnumberoptionaldefault: 25
limitnumberoptionaldefault: 25Sayfa boyutu (1–100).
cursorstringoptional
cursorstringoptionalÖnceki yanıttan gelen sayfalama imleci.
{
"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.
requestIdstringrequired
requestIdstringrequiredİstek kimliği.
reasonstringoptional
reasonstringoptionalNedeninize dair notunuz; istek üzerinde tutulur ve geri çağırmada gönderilir.
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.
requestIdstringrequired
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.
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.
requestIdstringrequired
requestIdstringrequiredİstek kimliği. Tamamlanmış, süresi dolmuş veya iptal edilmiş olmalıdır.
{
"ok": true,
"data": { "dispatchId": "kf9...", "eventId": "evt_kf9..." }
}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.
formIdstringrequired
formIdstringrequiredForm kimliği.
eventTypestringrequired
eventTypestringrequiredHangi sonlanmanın örnekleneceği, webhooks.create yazımıyla. Zarfın type’ı noktalı biçimdir.
request_completedrequest_expiredrequest_canceled{
"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.
formIdstringrequired
formIdstringrequiredBelgeler bloğu dosyayı gösterecek form. Yüklemeyi o çalışma alanına kapsar.
namestringrequired
namestringrequiredAlıcının göreceği görünen ad (1–200 karakter). İstek başına geçersiz kılınabilir.
contentTypestringrequired
contentTypestringrequiredapplication/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
sizenumberrequiredTam bayt uzunluğu. Azami 25 MB (26.214.400).
sha256stringoptional
sha256stringoptionalBaytların onaltılık özeti. Verildiğinde yüklemeden sonra doğrulanır.
{
"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:
{
"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.
formIdstringrequired
formIdstringrequiredForm kimliği.
{
"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.
formIdstringrequired
formIdstringrequiredForm kimliği.
targetUrlstringrequired
targetUrlstringrequiredWebhook yüklerini alacak HTTPS URL’si.
providerstringrequired
providerstringrequiredAboneliğ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.
zapiermaken8neventTypestringoptionaldefault: submission_created
eventTypestringoptionaldefault: submission_createdAbone olunacak olay türü. Üç submission_ türü gönderim yükünü teslim eder: 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_created ilk gönderimi,
submission_updated yanıtlayanın düzenlemesini ve submission_abandoned atıl kalmış bir taslağı bildirir. Üç
request_
submission_createdsubmission_updatedsubmission_abandonedrequest_completedrequest_expiredrequest_canceledidleWindowstringoptional
idleWindowstringoptionaleventType submission_abandoned olduğunda zorunludur; diğer her tür için reddedilir.
12h1d3d1wsigningSecretstringoptional
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.
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"
}
}'{
"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.
subscriptionIdstringrequired
subscriptionIdstringrequiredwebhooks.list veya webhooks.create tarafından döndürülen abonelik kimliği.
{
"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.
formIdstringrequired
formIdstringrequiredForm kimliği.
fromnumberoptional
fromnumberoptionalMilisaniye 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
tonumberoptionalMilisaniye 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
devicestringoptionaldefault: allCihaz türüne göre filtrele.
alldesktopmobiletablettrafficSourcestringoptional
trafficSourcestringoptionalTrafik kaynağına göre filtrele (örn. “Direct”, “Google”).
countrystringoptional
countrystringoptional2 harfli ülke koduna göre filtrele (örn. “US”, “DE”).
includeEventsbooleanoptionaldefault: false
includeEventsbooleanoptionaldefault: falseKendi 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.
{
"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.
{
"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.
workspaceIdstringrequired
workspaceIdstringrequiredÇalışma alanı kimliği.
expiresAtnumberoptional
expiresAtnumberoptionalMilisaniye cinsinden gelecekteki bir Unix zaman damgası olarak son kullanma tarihi.
maxUsesnumberoptional
maxUsesnumberoptionalDavetin kullanılabileceği maksimum sayı.
{
"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.
inviteIdstringrequired
inviteIdstringrequiredDavet kimliği.
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.
inviteIdstringrequired
inviteIdstringrequiredDavet kimliği.
expiresAtnumberoptional
expiresAtnumberoptionalMilisaniye cinsinden yeni son kullanma zaman damgası.
maxUsesnumberoptional
maxUsesnumberoptionalYeni maksimum kullanım sınırı.
workspaces.revokeInvite
Bir çalışma alanı davetini kalıcı olarak iptal eder.
inviteIdstringrequired
inviteIdstringrequiredDavet kimliği.
{
"ok": true,
"data": {
"inviteId": "inv_abc123",
"revoked": true
}
}Klasörler
folders.list
Bir çalışma alanındaki klasörleri listeler.
workspaceIdstringrequired
workspaceIdstringrequiredÇalışma alanı kimliği.
limitnumberoptionaldefault: 20
limitnumberoptionaldefault: 20Sayfa boyutu (1–100).
cursorstringoptional
cursorstringoptionalSayfalama imleci.
{
"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.
workspaceIdstringrequired
workspaceIdstringrequiredÇalışma alanı kimliği.
namestringrequired
namestringrequiredKlasör adı (1–255 karakter).
parentIdstring | nulloptional
parentIdstring | nulloptionalİç içe geçirme için üst klasör kimliği. Kök düzey için belirtme.
{
"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.
folderIdstringrequired
folderIdstringrequiredKlasör kimliği.
namestringoptional
namestringoptionalYeni klasör adı (1–255 karakter).
parentIdstring | nulloptional
parentIdstring | nulloptionalYeni ü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.
folderIdstringrequired
folderIdstringrequiredKlasör kimliği.
Geri alınamaz işlem
Bu işlem, klasörün içindeki tüm alt klasörleri ve formları kalıcı olarak siler. Bu eylem geri alınamaz.
{
"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.
formIdstringrequired
formIdstringrequiredForm kimliği.
{
"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.
formIdstringrequired
formIdstringrequiredForm kimliği.
languagestringrequired
languagestringrequiredBCP-47 dil etiketi (örn. “es”, “pt-BR”).
{
"ok": true,
"data": {
"formId": "frm_abc123",
"language": "es",
"rowId": "tl_new123"
}
}translations.removeLanguage
Bir dili ve tüm çevirilerini formdan kaldırır.
formIdstringrequired
formIdstringrequiredForm kimliği.
languagestringrequired
languagestringrequiredBCP-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.
formIdstringrequired
formIdstringrequiredForm kimliği.
languagestringrequired
languagestringrequiredBCP-47 dil etiketi. Zaten formda olmalıdır.
{
"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.
formIdstringrequired
formIdstringrequiredForm kimliği.
languagestringrequired
languagestringrequiredBCP-47 dil etiketi.
keystringrequired
keystringrequiredtranslations.listEntries’ten bir anahtar. Bir tanesini elle oluşturmayın.
valuestringrequired
valuestringrequiredJSON dizgesine dönüştürülmüş çevrilmiş parça. İşaret yapısı kaynak parçayla eşleşmelidir.
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\"}]"
}
}'Buradaki yazmalar canlıdır
API’de taslak-sonra-yayınla adımı yoktur: bir setEntry veya deleteEntry yanıtlayıcılara hemen ulaşır. Kontrol
paneli ve MCP çeviri araçları bunun yerine bir taslak kullanır.
{ 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.
formIdstringrequired
formIdstringrequiredForm kimliği.
languagestringrequired
languagestringrequiredBCP-47 dil etiketi.
keystringrequired
keystringrequiredSilinecek çeviri anahtarı.
Hesap
me.get
Kimliği doğrulanmış kullanıcı hakkında bilgi getirir.
{
"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.
{
"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.
{
"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:
VALIDATION_ERROR400optional
VALIDATION_ERROR400optionalİstekte geçersiz veya eksik parametreler.
UNAUTHORIZED401optional
UNAUTHORIZED401optionalEksik veya geçersiz API token’ı.
FORBIDDEN403optional
FORBIDDEN403optionalToken, istenen kaynağa erişim iznine sahip değil.
NOT_FOUND404optional
NOT_FOUND404optionalKaynak mevcut değil.
METHOD_NOT_FOUND404optional
METHOD_NOT_FOUND404optionalBilinmeyen metod adı. Mevcut metodları görmek için methods.list kullan.
CONFLICT409optional
CONFLICT409optionalKaynak 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
RATE_LIMITED429optionalBu 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
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
INTERNAL_ERROR500optionalBeklenmedik sunucu hatası. Daha sonra tekrar dene.