formbasedocs
Aller à l'applicationAppli

Développeurs

Méthodes API

Référence complète de toutes les méthodes exposées par l’API REST de formbase. Chaque méthode présente ses paramètres, des exemples de requêtes et la structure des réponses.


Un seul endpoint, de nombreuses méthodes

Chaque méthode est POST https://api.formbase.so/api/v1 avec un corps JSON {"method": "...", "params": {...}} et un en-tête Authorization: Bearer fb_…. Consultez la vue d’ensemble de l’API pour l’authentification et la gestion des erreurs, et les tokens API pour le token lui-même.

Conventions

  • params peut être omis ; il vaut alors {} par défaut. Une méthode inconnue renvoie 404 METHOD_NOT_FOUND.

  • Un token est lié à un seul espace de travail. Nommer un autre espace de travail, ou un formulaire qui s’y trouve, renvoie 403 FORBIDDEN, même si vous appartenez aux deux.

  • Pagination. Les méthodes de liste renvoient { items, nextCursor, hasMore } ; la plupart renvoient aussi canPaginate, qui vaut false quand hasMore est vrai mais qu’aucun curseur ne peut reprendre (recherche approximative). Renvoyez nextCursor comme cursor. limit va de 1 à 100, 20 par défaut — sauf requests.list, dont le défaut est 25.

  • Limites de débit. 120 appels par minute et par token, en commun avec le serveur MCP ; requests.create a sa propre limite de 60 par minute. L’échec d’authentification est limité séparément, 30 par 15 minutes et par IP, au-delà desquelles les tokens invalides reçoivent RATE_LIMITED au lieu de UNAUTHORIZED.

  • Taille du corps. 1 Mio. Les corps plus volumineux sont rejetés avec VALIDATION_ERROR.

  • Versionnage. Le chemin porte la version. Les changements cassants sont livrés sous /api/v2 ; les nouvelles méthodes et les nouveaux champs de réponse ne le sont pas.

Formulaires

forms.list

Lister les formulaires d’un espace de travail. Prend en charge la pagination par curseur et une recherche par nom approximative.

POSThttps://api.formbase.so/api/v1
Paramètres5
workspaceIdstringrequired

Identifiant de l’espace de travail.

folderIdstring | nulloptional

Filtrer par dossier. Passez null pour les formulaires à la racine uniquement. Omettez pour tout lister.

querystringoptional

Recherche par nom approximative. Les résultats sont limités à limit ; non paginés par curseur.

limitnumberoptionaldefault: 20

Taille de la page (1–100).

cursorstringoptional

Curseur de pagination issu d’une réponse précédente.

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" }
  }'
200Succès
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 manquant
401Token API invalide ou manquant
429Limite de débit dépassée

forms.get

Obtenir tous les détails d’un formulaire, notamment les questions, la couverture, le logo et une URL de prévisualisation.

POSThttps://api.formbase.so/api/v1
Paramètres1
formIdstringrequired

Identifiant du formulaire.

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" }
  }'
200Succès
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 manquant
404Formulaire introuvable

forms.create

Créer un nouveau formulaire vide. Retourne le formulaire et une URL de prévisualisation.

POSThttps://api.formbase.so/api/v1
Paramètres3
namestringrequired

Nom du formulaire (1–255 caractères).

workspaceIdstringrequired

Identifiant de l’espace de travail.

folderIdstringoptional

Placer le formulaire dans un dossier. Omettez pour créer à la racine de l’espace de travail.

200Formulaire créé
json
{
  "ok": true,
  "data": {
    "id": "frm_new123",
    "name": "Contact",
    "workspaceId": "ws_abc123",
    "folderId": null,
    "isPublished": false,
    "createdAt": 1714041851000,
    "previewUrl": "https://formbase.so/preview/abc..."
  }
}
400Nom ou workspaceId manquant
401Token API invalide ou manquant

forms.update

Mettre à jour les métadonnées d’un formulaire : nom, dossier, emoji, couverture ou logo. Ne modifie pas le contenu du formulaire (utilisez les outils d’édition pour cela).

POSThttps://api.formbase.so/api/v1
Paramètres6
formIdstringrequired

Identifiant du formulaire.

namestringoptional

Nouveau nom du formulaire (1–255 caractères).

folderIdstring | nulloptional

Déplacer le formulaire dans un dossier. Passez null pour le déplacer à la racine de l’espace de travail.

emojistring | nulloptional

Emoji du formulaire (10 caractères max). Passez null pour effacer.

coverobjectoptional

Couverture. {"type": "color", "color": "#ffffff"}, {"type": "image", "url": "https://...", "offsetY": 50} (offsetY 0–100, 50 par défaut), ou {"type": "none"} pour supprimer. Les URLs d’image doivent être en http(s) ou une URI data:image.

logoobjectoptional

Logo. {"type": "icon", "name": "HeartIcon"}, {"type": "image", "url": "https://..."}, ou {"type": "none"} pour supprimer. Les noms d’icônes sont fixes : QuestionMarkIcon, ListBulletsIcon, ChartBarIcon, ClockCountdownIcon, HeartIcon, LightbulbIcon, CheckCircleIcon, MagnifyingGlassIcon, TrendUpIcon, EnvelopeIcon, PhoneIcon, CalendarIcon, LinkIcon, UsersIcon.

Passez au moins un des cinq champs modifiables. Cela ne change pas le contenu du formulaire — utilisez les outils MCP d’édition pour cela.

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": "📋"
    }
  }'
200Formulaire mis à jour
json
{
  "ok": true,
  "data": {
    "id": "frm_abc123",
    "name": "Updated Name",
    "folderId": null,
    "emoji": "📋"
  }
}

cover et logo ne reviennent que si vous les avez envoyés. Un payload identique à l’état actuel sur chaque champ scalaire ajoute noChange: true.

forms.publish

Publier un formulaire pour qu’il puisse accepter des réponses, et figer ses clés de champ dans un nouveau snapshot. Idempotent : un formulaire déjà publié renvoie un succès avec alreadyPublished: true, et un formulaire dépublié est republié depuis son dernier snapshot.

POSThttps://api.formbase.so/api/v1
Paramètres1
formIdstringrequired

ID du formulaire.

Un formulaire avec des blocs de contenu mais sans question se publie avec un avertissement. Un formulaire sans aucun contenu ne peut pas être publié. Publier ne crée pas d’URL publique — appelez shareLinks.create pour cela.

forms.unpublish

Mettre un formulaire hors ligne. Les répondants ne peuvent plus l’ouvrir. Idempotent — un formulaire non publié renvoie alreadyUnpublished: true. Réversible avec forms.publish.

POSThttps://api.formbase.so/api/v1
Paramètres1
formIdstringrequired

ID du formulaire.

forms.delete

Déplacer un formulaire vers la corbeille. Ses liens de partage actifs sont révoqués, donc leurs URLs publiques cessent de fonctionner.

POSThttps://api.formbase.so/api/v1
Paramètres1
formIdstringrequired

ID du formulaire.

forms.restore

Restaurer un formulaire depuis la corbeille.

POSThttps://api.formbase.so/api/v1
Paramètres2
formIdstringrequired

ID du formulaire.

folderIdstring | nulloptional

Où le restaurer. Omettez pour son dossier d’origine, null pour la racine de l’espace de travail, ou un ID de dossier.

Un formulaire qui n’est pas dans la corbeille renvoie alreadyRestored: true.

formSettings.get

Lire les paramètres de comportement d’un formulaire.

POSThttps://api.formbase.so/api/v1
Paramètres1
formIdstringrequired

ID du formulaire.

Renvoie { settings, isDefault, availableEmailDomains, defaultFromAddress, payment }. isDefault vaut vrai quand le formulaire n’a pas encore de ligne de paramètres enregistrée et que vous voyez les valeurs par défaut. availableEmailDomains contient les ids de domaines vérifiés à passer comme emailDomainId, et payment indique si Stripe est connecté (le connecter est une étape du tableau de bord).

formSettings.update

Mettre à jour les paramètres de comportement d’un formulaire. Une mise à jour partielle : seuls les champs envoyés sont écrits.

POSThttps://api.formbase.so/api/v1
Paramètres8
formIdstringrequired

ID du formulaire.

Accessgroupoptional

language (BCP-47, “en” par défaut), requireAuthentication, showBranding, captchaEnabled, passwordEnabled, password (4 caractères ou plus ; une chaîne implique passwordEnabled: true, null retire la protection).

Owner notificationsgroupoptional

notifyOnSubmission, notificationEmails (tableau), selfNotificationSubject, selfNotificationEmailBody, pdfGenerationEnabled, showViewSubmissionButton. Les e-mails du propriétaire ne sont pas traduisibles — écrivez-les dans la langue voulue.

Respondent notificationsgroupoptional

respondentNotificationEnabled, respondentNotificationTo (l’id de champ d’une question e-mail, ou null), respondentNotificationSubject, respondentNotificationBody, respondentNotificationPdfEnabled.

Remindersgroupoptional

respondentReminderEnabled, respondentReminderTo, respondentReminderSubject, respondentReminderBody, respondentReminderRequiredFieldIds, et reminderSteps — des décalages d’inactivité comme [“1d”,“3d”,“1w”], 5 au maximum, triés et dédupliqués à l’enregistrement, [] pour aucun. Le planning s’applique aussi bien aux réponses abandonnées sur lien public qu’aux demandes. Pro.

After submitgroupoptional

redirectUrl (http(s) ; null ou “” efface), redirectQueryParams ( [{ paramName, fieldId }]), allowAnotherResponse (mutuellement exclusif avec une redirection), maxSubmissionsPerRespondent (0 = illimité, max 1000), editAfterSubmit, maxEdits (max 3 ; 0 signifie illimité avec Pro et Business, 3 avec Free).

Retentiongroupoptional

draftRetentionDays et submissionRetentionDays (0–36500, null revient à la valeur par défaut). La rétention des soumissions est Business, et la définir efface toute date de suppression fixe configurée dans l’éditeur.

emailDomainIdstring | nulloptional

Un id de domaine e-mail vérifié depuis formSettings.get, pour une adresse d’expéditeur personnalisée. null réinitialise à l’expéditeur par défaut.

Les objets et corps sont du texte brut et acceptent les paramètres {{variable}} ; les sauts de ligne deviennent des paragraphes. Personnaliser un objet ou un corps destiné au répondant le rend traduisible, donc ses clés apparaissent immédiatement dans translations.listEntries.

Soumissions

submissions.list

Lister les soumissions d’un formulaire, page la plus récente en premier, avec pagination par curseur.

POSThttps://api.formbase.so/api/v1
Paramètres5
formIdstringrequired

ID du formulaire.

includeDraftsbooleanoptionaldefault: true

Inclure les réponses commencées mais jamais soumises. Les brouillons sont une fonctionnalité Pro : sur Free, seules les soumissions terminées sont listées.

translationLanguagestringoptional

Joindre les traductions IA stockées des réponses sous items[].translation.display, avec les mêmes clés que display. items[].answers et items[].display restent toujours l’original.

limitnumberoptionaldefault: 20

Taille de page (1–100).

cursorstringoptional

Curseur de pagination issu d’une réponse précédente.

200Succès
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
  }
}

Les mêmes réponses que les webhooks et les callbacks

Chaque élément porte answers indexé par clé de champ et display avec les mêmes clés, en texte lisible — la forme que portent un payload de webhook, un callback de demande et requests.get. Une réponse à choix est sa clé d’option, un groupe répétable un tableau d’instances. Appelez fields.list pour le titre et les libellés d’option de chaque clé. Cette méthode ne renvoie aucun total.

submissions.pdf

Obtenir un lien vers le PDF d’une soumission. Conçu pour le connecteur Zapier : renvoie un résultat seulement quand le formulaire a une intégration Zapier active configurée pour inclure le PDF, et que le PDF a été conservé.

POSThttps://api.formbase.so/api/v1
Paramètres2
formIdstringrequired

ID du formulaire.

submissionIdstringrequired

ID de la soumission. Doit appartenir à ce formulaire et être complète.

200Succès
json
{
  "ok": true,
  "data": {
    "url": "https://api.formbase.so/api/storage/...",
    "filename": "formbase-submission-sub_xyz789.pdf",
    "contentType": "application/pdf",
    "byteLength": 148213
  }
}
404Aucun PDF conservé pour une intégration Zapier sur cette soumission

submissions.sample

Construire un payload de soumission d’exemple pour un formulaire, sans aucune donnée réelle. C’est exactement la forme que porte une livraison de soumission sur lien public, donc les connecteurs s’en servent pour découvrir les champs ; une soumission provenant d’une demande atteint un abonnement sous forme de request.completed à la place, échantillonnée par

requests.sample. data.form.snapshotId est la version publiée actuelle du formulaire, le même id que portent les événements en direct, ou null tant que le formulaire n’est pas publié.

POSThttps://api.formbase.so/api/v1
Paramètres1
formIdstringrequired

Identifiant du formulaire.

200Exemple généré
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" }
    }
  }
}

La sémantique des champs et du payload est documentée une seule fois, dans la référence webhooks.

Champs

fields.list

Liste chaque champ de la version actuellement publiée d’un formulaire, avec la clé pour l’adresser. Appelez ceci avant requests.create au lieu de coder les clés en dur. Voir Clés de champ.

POSThttps://api.formbase.so/api/v1
Paramètres1
formIdstringrequired

ID du formulaire. Un formulaire qui n’a jamais été publié n’a pas encore de clés de champ et répond avec published: false sans éléments.

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..." }
  }'
200Succès
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
  }
}

Lire les indicateurs

context: true signale un champ caché — sa valeur va dans context, jamais dans prefill. prefillable: false signale un champ pour lequel personne ne peut fournir de valeur (fichier, signature, paiement, prise de rendez-vous, documents). Pour une question à choix, envoyez la clé de l’option, pas son libellé ; une matrice liste ses rows et columns de la même façon et prend { "row_key": "column_key" }. calculated: true signale un champ calculé : le formulaire calcule sa valeur, vous la relisez dans answers, et rien ne peut l’envoyer.

Un groupe répétable est type: “group” avec repeating: true et un tableau members. Un bloc Documents est type: “documents” et porte documents: [{ name }], les fichiers déjà rédigés que chaque répondant voit déjà.

400formId manquant
404Formulaire introuvable

Demandes

Une demande assigne un formulaire publié à une personne et vous rappelle quand elle se termine. Le guide conceptuel se trouve dans Créer une demande ; ceci est la liste des paramètres.

requests.create

Crée une demande. Consomme une unité de l’allocation mensuelle de l’espace de travail, que le destinataire réponde ou non.

POSThttps://api.formbase.so/api/v1
Paramètres16
formIdstringrequired

Le formulaire publié à assigner.

recipientobjectoptional

{ email?, name? }. Un e-mail est requis quand delivery vaut “email” ; sinon il identifie simplement la personne sur la page Demandes et sur ses réponses.

prefillobjectoptional

Réponses initiales par clé de champ. Le destinataire les voit et peut les modifier.

readonlystring[]optional

Clés préremplies que le destinataire ne peut pas modifier. Chaque clé ici doit aussi apparaître dans prefill, et un champ verrouillé obligatoire doit être prérempli avec une valeur non vide.

contextobjectoptional

Valeurs pour les champs cachés du formulaire, par clé de champ. Fiables, immuables, et renvoyées dans le callback. Une clé inconnue est rejetée avec UNKNOWN_FIELD_KEY.

metadataobjectoptional

Votre propre suivi. N’atteint jamais le formulaire ; revient dans les callbacks et les lectures.

languagestringoptional

L’une des langues publiées du formulaire. Par défaut, celle du formulaire.

deliverystringoptionaldefault: none

“email” pour que formbase envoie l’invitation (nécessite un e-mail de destinataire, et Pro ou Business ou l’une des 10 invitations gratuites d’un compte Free), ou “none” pour livrer le lien vous-même.

remindersstring[]optional

Remplace le planning de rappel du formulaire pour cette demande. Un tableau vide désactive les rappels.

expiresAtnumberoptional

Millisecondes epoch. Par défaut 30 jours, 365 jours au maximum.

callbackUrlstringoptional

Où formbase envoie le callback en POST quand la demande se termine. HTTPS uniquement, et l’hôte doit résoudre vers une adresse publique.

externalIdstringoptional

Votre propre id pour cette demande. Filtrable dans requests.list.

idempotencyKeystringoptional

Le répéter avec le même corps renvoie la demande d’origine avec deduplicated: true. Un corps différent est rejeté. Les clés vivent 30 jours.

domainIdstringoptional

Génère le lien sur l’un de vos domaines personnalisés. API REST uniquement.

documentsobject[]optional

[{ documentId, field?, name? }] — fichiers remis à ce seul destinataire, téléversés au préalable avec documents.create.

testbooleanoptionaldefault: false

Un essai à blanc : rien n’est envoyé par e-mail, le callback porte “test”: true, et la soumission ne compte nulle part. Le lien se ferme dans les 24 heures, et sur Free un workspace peut créer 10 demandes de test par jour.

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"
    }
  }'
200Succès
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 vaut not_requested jusqu’à ce qu’une invitation soit mise en file, puis queued → sent ou failed, et bounced une fois que le fournisseur d’e-mail signale un rejet définitif ou une plainte.

400Clé de champ inconnue, forme de valeur incorrecte, ou clé verrouillée non préremplie
400Formulaire non publié (FORM_NOT_PUBLISHED), ou callbackUrl non autorisé (CALLBACK_URL_NOT_ALLOWED)
402Allocation mensuelle épuisée (MONTHLY_ALLOWANCE_REACHED), invitations gratuites épuisées (FREE_INVITATIONS_USED), ou rappels sous Pro
404Formulaire introuvable
409Clé d’idempotence réutilisée avec un corps différent (IDEMPOTENCY_CONFLICT)
429Plus de 60 appels à requests.create en une minute sur ce token, ou la 11e demande de test de la journée d’un workspace Free (TEST_REQUEST_LIMIT_REACHED)

requests.get

Récupère une demande en entier : statut, résultat, ce qui a été prérempli, sa chronologie, et — une fois terminée — answers et display classées par clé de champ, les deux mêmes maps que porte le callback.

POSThttps://api.formbase.so/api/v1
Paramètres1
requestIdstringrequired

ID de la demande.

200Succès
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 vs status

status indique si la demande s’est terminée ; outcome indique ce que le destinataire a décidé — approve, decline, changes, ou null pour tout sauf une demande terminée dont le destinataire a choisi l’une des trois — y compris un formulaire sans question de décision. L’URL de callback elle-même n’est jamais renvoyée ; hasCallback indique seulement si l’une est définie.

L’exemple ci-dessus est réduit. Une réponse complète porte aussi workspaceId, formSnapshotId, createdVia, documents, reminderStep, remindersSent, reminderDueAt, dataPurgedAt, et le reste des horodatages (updatedAt, openedAt, startedAt, lastActivityAt, expiredAt, canceledAt, canceledBy, cancelReason).

Deux champs indiquent quand la copie sous vos yeux est la seule copie. callbackFailedAt est défini tant que le callback de cette demande a épuisé ses tentatives, et effacé une fois qu’un passe ou que vous le rejouez. dataPurgedAt est défini une fois que la rétention a dépouillé la demande : context, prefill et metadata reviennent vides, readonlyKeys et documents valent [], et submissionId, answers et display valent null.

timeline est dérivée, du plus ancien au plus récent. Chaque entrée a un id, un at, et un type — created, invitation, reminder, opened, started, completed, expired, canceled, callback. Les entrées de livraison ajoutent deliveryStatus et attemptCount, et les callbacks ajoutent eventType. Les lignes de livraison sont conservées 30 jours, donc les chronologies plus anciennes s’amincissent jusqu’aux horodatages.

404Demande introuvable (REQUEST_NOT_FOUND)

requests.list

Liste les demandes d’un espace de travail ou d’un formulaire, les plus récentes en premier. Les demandes de test sont exclues sauf si vous les demandez.

POSThttps://api.formbase.so/api/v1
Paramètres8
workspaceIdstringoptional

Limite à un espace de travail. Fournissez ceci ou formId.

formIdstringoptional

Limite à un formulaire.

statusstringoptional

pending, completed, expired, ou canceled.

outcomestringoptional

approve, decline, ou changes. Implique les demandes terminées uniquement.

externalIdstringoptional

Votre propre id, pour retrouver la demande créée par une exécution.

includeTestbooleanoptionaldefault: false

Inclut les demandes créées avec test: true.

limitnumberoptionaldefault: 25

Taille de page (1–100).

cursorstringoptional

Curseur de pagination d’une réponse précédente.

200Succès
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
  }
}

Les éléments de la liste portent les mêmes champs que requests.get moins url, answers, display, et timeline, et chacun porte isTest. Fournissez workspaceId ou formId — n’en fournir aucun renvoie 400 VALIDATION_ERROR avec la raison SCOPE_REQUIRED. outcome prime sur status, puisque seule une demande terminée a un verdict.

requests.cancel

Retire une demande en attente. Le lien cesse de fonctionner, le destinataire voit un avis de retrait, et un callback request.canceled se déclenche.

POSThttps://api.formbase.so/api/v1
Paramètres2
requestIdstringrequired

ID de la demande.

reasonstringoptional

Votre note expliquant pourquoi, conservée sur la demande et envoyée dans le callback.

200La demande annulée
409Déjà terminée, expirée, ou annulée (REQUEST_NOT_PENDING)

requests.remind

Envoie un e-mail au destinataire maintenant, sans toucher au planning de rappel. Nécessite un e-mail de destinataire et un plan Pro ou Business.

POSThttps://api.formbase.so/api/v1
Paramètres1
requestIdstringrequired

ID de la demande. Doit encore être en attente, et ne pas être une demande de test.

Deux planchers s’appliquent : au moins 10 minutes entre deux rappels manuels, et 8 rappels au maximum par demande au total, manuels et programmés confondus. Le planning automatique n’est pas touché — reminderStep et reminderDueAt restent où ils étaient.

200La demande, avec remindersSent incrémenté
400Pas d’e-mail de destinataire sur la demande (RECIPIENT_EMAIL_REQUIRED)
402Les rappels de demande nécessitent Pro ou Business (UPGRADE_REQUIRED)
409Pas en attente (REQUEST_NOT_PENDING), trop tôt (REMINDER_TOO_SOON, avec details.retryAfterMs), plafond atteint (REMINDER_CAP_REACHED), ou demande de test (TEST_REQUEST)

requests.replayCallback

Renvoie le callback qu’une demande a déclenché à sa fin — même charge utile, même id d’événement, pour qu’un récepteur qui l’a déjà traité puisse dédupliquer. À utiliser après avoir réparé un point de terminaison défaillant.

POSThttps://api.formbase.so/api/v1
Paramètres1
requestIdstringrequired

ID de la demande. Doit être terminée, expirée, ou annulée.

200Succès
json
{
  "ok": true,
  "data": { "dispatchId": "kf9...", "eventId": "evt_kf9..." }
}
409Encore en attente, donc aucun callback définitif à rejouer (REQUEST_NOT_TERMINAL)
409La demande a été créée sans callbackUrl (NO_CALLBACK_TO_REPLAY)

requests.sample

Construire un événement de demande d’exemple pour un formulaire, sans aucune demande réelle. C’est exactement l’enveloppe que reçoit un abonnement request_* créé avec webhooks.create, donc les connecteurs s’en servent pour découvrir les champs. Un exemple terminé porte les mêmes réponses d’exemple que montre

submissions.sample ; un exemple expiré ou annulé porte seulement le bloc request.

POSThttps://api.formbase.so/api/v1
Paramètres2
formIdstringrequired

Identifiant du formulaire.

eventTypestringrequired

La fin à illustrer par un exemple, dans l’orthographe de webhooks.create. Le type de l’enveloppe est la forme avec point.

request_completedrequest_expiredrequest_canceled
200Exemple généré
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" }
    }
  }
}

Le bloc request et le résultat sont documentés sur la page des callbacks ; le volet soumission, sur la référence webhooks. Les ids d’exemple sont les valeurs fixes indiquées ci-dessus et test vaut true, afin qu’un récepteur puisse distinguer un exemple d’un événement réel.

documents.create

Réserver un téléversement pour un fichier que vous remettrez à un destinataire via le bloc Documents du formulaire. Les octets ne transitent jamais par cette API : vous obtenez un PUT présigné, vous téléversez, et requests.create vérifie l’objet avant que la demande n’existe.

POSThttps://api.formbase.so/api/v1
Paramètres5
formIdstringrequired

Le formulaire dont le bloc Documents affichera le fichier. Limite le téléversement à cet espace de travail.

namestringrequired

Nom d’affichage vu par le destinataire (1–200 caractères). Remplaçable par demande.

contentTypestringrequired

application/pdf ou un type d’image : image/png, image/jpeg, image/webp, image/gif, image/svg+xml, image/avif, image/bmp, image/tiff. Les documents Office ne sont pas acceptés.

sizenumberrequired

Longueur exacte en octets. Maximum 25 Mo (26 214 400).

sha256stringoptional

Digest hexadécimal des octets. Vérifié après le téléversement quand il est fourni.

200Téléversement réservé
json
{
  "ok": true,
  "data": {
    "id": "kn7...",
    "name": "Lease contract draft",
    "contentType": "application/pdf",
    "size": 412000,
    "uploadUrl": "https://...",
    "expiresAt": 1792198800000
  }
}

Faites un PUT des octets bruts vers uploadUrl dans l’heure, avec Content-Type réglé sur le type déclaré, puis référencez l’id depuis requests.create :

json
{
  "method": "requests.create",
  "params": {
    "formId": "j57...",
    "documents": [
      { "documentId": "kn7...", "name": "Your lease contract" },
      { "documentId": "kn8...", "field": "attachments" }
    ]
  }
}
  • field est la clé de champ du bloc Documents. Optionnelle quand le formulaire a exactement un bloc ; requise avec deux ou plus.

  • Les documents rédigés du bloc restent ; les vôtres apparaissent en dessous, pour ce seul destinataire.
  • Plafonds : 25 Mo par document, 100 Mo de documents par demande, 20 documents affichés par bloc, documents rédigés compris.
  • Un téléversement peut être référencé par un nombre quelconque de demandes. Un téléversement que rien ne référence expire. Les octets comptent dans le stockage du propriétaire de l’espace de travail jusqu’à ce que la dernière demande qui les référence soit dépouillée par la rétention.

Chaque échec ici est 400 VALIDATION_ERROR avec un details.reason : DOCUMENT_TYPE_NOT_ALLOWED, DOCUMENT_TOO_LARGE, INVALID_DOCUMENT_NAME ou INVALID_DOCUMENT_SHA256 pour cette méthode, et DOCUMENT_NOT_FOUND, DOCUMENT_NOT_UPLOADED (vous avez sauté le PUT), DOCUMENT_INVALID, INVALID_DOCUMENT_TARGET, DOCUMENTS_TOO_LARGE ou DOCUMENTS_TOO_MANY pour requests.create.

Webhooks

webhooks.list

Lister les abonnements webhook d’un formulaire.

POSThttps://api.formbase.so/api/v1
Paramètres1
formIdstringrequired

Identifiant du formulaire.

200Succès
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

Abonner une URL aux événements d’un formulaire : soumissions nouvelles ou abandonnées, ou demandes du formulaire qui se terminent. L’URL doit utiliser HTTPS.

POSThttps://api.formbase.so/api/v1
Paramètres6
formIdstringrequired

Identifiant du formulaire.

targetUrlstringrequired

URL HTTPS destinée à recevoir les charges utiles du webhook.

providerstringrequired

À quel outil appartient l’abonnement. C’est une étiquette pour votre propre suivi — il n’y a aucune application de marketplace à installer, et tous les fournisseurs se comportent de la même façon.

zapiermaken8n
eventTypestringoptionaldefault: submission_created

Type d’événement auquel s’abonner. Les trois types submission_ livrent le payload de soumission : submission_created une première soumission, submission_updated une modification par le répondant, et submission_abandoned un brouillon inactif. Les trois types request_ livrent l’ événement de demande correspondant chaque fois qu’une demande du formulaire se termine de cette façon, signé avec le secret de cet abonnement ; les demandes de test n’atteignent aucun abonnement.

submission_createdsubmission_updatedsubmission_abandonedrequest_completedrequest_expiredrequest_canceled
idleWindowstringoptional

Requis quand eventType vaut submission_abandoned ; rejeté pour tout autre type.

12h1d3d1w
signingSecretstringoptional

Secret de signature HMAC optionnel, 32 à 255 caractères. Quand il est fourni, les livraisons incluent X-formbase-Signature. Le secret est stocké mais jamais renvoyé par l’API.

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 créé
json
{
  "ok": true,
  "data": {
    "subscriptionId": "int_new123",
    "formId": "frm_abc123",
    "provider": "zapier",
    "targetUrl": "https://hooks.zapier.com/hooks/catch/...",
    "eventType": "submission_created"
  }
}

Les abonnements de soumission abandonnée renvoient l’idleWindow choisi, à la fois depuis webhooks.create et webhooks.list. Tout autre abonnement l’omet.

Un abonnement de demande entend les mêmes événements qu’un callback, mais comme sa propre livraison : son propre id d’événement, sa propre signature, et son propre budget de cinq tentatives, après quoi l’abonnement se met en pause. Une demande créée avec un callbackUrl sur un formulaire ayant un abonnement request_completed se déclenche donc deux fois, une fois vers chaque récepteur. requests.replayCallback ne renvoie que le callback. Utilisez requests.sample pour voir le payload avant qu’une demande ne se soit terminée.

webhooks.delete

Supprimer un abonnement webhook.

POSThttps://api.formbase.so/api/v1
Paramètres1
subscriptionIdstringrequired

Identifiant d’abonnement issu de webhooks.list ou webhooks.create.

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

Analytiques

analytics.get

Obtenir les métriques analytiques agrégées d’un formulaire. Prend en charge les filtres par plage de dates, appareil, source de trafic et pays.

Les analyses sont une fonctionnalité Pro, et la règle suit le forfait du propriétaire de l’espace de travail, comme l’onglet Analyses du tableau de bord. Si le propriétaire n’est pas sur Pro, l’appel renvoie UPGRADE_REQUIRED — y compris pour l’historique enregistré quand il l’était. Un membre Free dans l’espace d’un propriétaire Pro reçoit bien les données.

POSThttps://api.formbase.so/api/v1
Paramètres7
formIdstringrequired

Identifiant du formulaire.

fromnumberoptional

Début de la plage de dates sous forme d’horodatage Unix en millisecondes. Doit être inférieur ou égal à to quand les deux sont définis.

tonumberoptional

Fin de la plage de dates sous forme d’horodatage Unix en millisecondes. Omettez les deux pour tout l’historique — period revient alors comme { "from": null, "to": null }.

devicestringoptionaldefault: all

Filtrer par type d’appareil.

alldesktopmobiletablet
trafficSourcestringoptional

Filtrer par source de trafic (ex. “Direct”, “Google”).

countrystringoptional

Filtrer par code pays à 2 lettres (ex. “US”, “DE”).

includeEventsbooleanoptionaldefault: false

Renvoyer aussi les événements analytiques assainis derrière les métriques, pour votre propre analyse. Aucun id de visiteur.

Les taux sont des nombres de 0 à 100, les compteurs sont des entiers, et totalEvents est le nombre brut de lignes d’événements avant déduplication en visiteurs uniques.

200Succès
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 }
    }
  }
}

Espaces de travail

workspaces.list

Lister les espaces de travail que votre token peut atteindre. Aucun paramètre.

Un token API est lié à un seul espace de travail, donc ceci renvoie exactement celui-là — même quand votre compte appartient à plusieurs.

POSThttps://api.formbase.so/api/v1
Paramètres0
200Succès
json
{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "ws_abc123",
        "name": "Acme Inc",
        "createdAt": 1714041800000,
        "role": "owner"
      }
    ],
    "nextCursor": null,
    "hasMore": false,
    "canPaginate": false
  }
}

workspaces.createInvite

Créer un lien d’invitation pour un espace de travail.

POSThttps://api.formbase.so/api/v1
Paramètres3
workspaceIdstringrequired

Identifiant de l’espace de travail.

expiresAtnumberoptional

Expiration sous forme d’horodatage Unix futur en millisecondes.

maxUsesnumberoptional

Nombre maximum d’utilisations de l’invitation.

200Invitation créée
json
{
  "ok": true,
  "data": {
    "id": "inv_abc123",
    "workspaceId": "ws_abc123",
    "code": "aBcDeFgH",
    "expiresAt": null,
    "maxUses": null,
    "uses": 0,
    "createdAt": 1714041851000
  }
}

workspaces.getInvite

Obtenir une invitation à un espace de travail. Renvoie la même forme que workspaces.createInvite.

POSThttps://api.formbase.so/api/v1
Paramètres1
inviteIdstringrequired

Identifiant de l’invitation.

404Invitation introuvable

workspaces.updateInvite

Mettre à jour une invitation existante à un espace de travail. Fournissez au moins l’un des champs expiresAt ou

maxUses, sinon l’appel est rejeté. Renvoie l’invitation mise à jour.

POSThttps://api.formbase.so/api/v1
Paramètres3
inviteIdstringrequired

Identifiant de l’invitation.

expiresAtnumberoptional

Nouvel horodatage d’expiration en millisecondes.

maxUsesnumberoptional

Nouvelle limite d’utilisations.

workspaces.revokeInvite

Révoquer définitivement une invitation à un espace de travail.

POSThttps://api.formbase.so/api/v1
Paramètres1
inviteIdstringrequired

Identifiant de l’invitation.

200Invitation révoquée
json
{
  "ok": true,
  "data": {
    "inviteId": "inv_abc123",
    "revoked": true
  }
}

Dossiers

folders.list

Lister les dossiers d’un espace de travail.

POSThttps://api.formbase.so/api/v1
Paramètres3
workspaceIdstringrequired

Identifiant de l’espace de travail.

limitnumberoptionaldefault: 20

Taille de la page (1–100).

cursorstringoptional

Curseur de pagination.

200Succès
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

Créer un dossier dans un espace de travail. Idempotent — retourne le dossier existant si un dossier portant le même nom existe déjà.

POSThttps://api.formbase.so/api/v1
Paramètres3
workspaceIdstringrequired

Identifiant de l’espace de travail.

namestringrequired

Nom du dossier (1–255 caractères).

parentIdstring | nulloptional

Identifiant du dossier parent pour l’imbrication. Omettez pour la racine.

200Dossier créé
json
{
  "ok": true,
  "data": {
    "id": "fld_new123",
    "name": "Customer Feedback",
    "workspaceId": "ws_abc123",
    "parentId": null,
    "createdAt": 1714041851000,
    "alreadyExisted": false
  }
}

folders.update

Renommer un dossier ou le déplacer dans un autre parent.

POSThttps://api.formbase.so/api/v1
Paramètres3
folderIdstringrequired

Identifiant du dossier.

namestringoptional

Nouveau nom du dossier (1–255 caractères).

parentIdstring | nulloptional

Nouveau dossier parent. Passez null pour déplacer à la racine.

folders.delete

Supprimer définitivement un dossier et tout son contenu (sous-dossiers et formulaires).

POSThttps://api.formbase.so/api/v1
Paramètres1
folderIdstringrequired

Identifiant du dossier.

200Dossier supprimé
json
{
  "ok": true,
  "data": {
    "folderId": "fld_abc123",
    "deletedFolderIds": ["fld_abc123"],
    "deletedFormIds": ["frm_in_folder"],
    "message": "Folder and 1 form deleted."
  }
}

Traductions

translations.listLanguages

Lister toutes les langues configurées sur un formulaire.

POSThttps://api.formbase.so/api/v1
Paramètres1
formIdstringrequired

Identifiant du formulaire.

200Succès
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

Enregistrer une langue sur un formulaire. Toute autre méthode de traduction échoue avec 404 NOT_FOUND tant que ce n’est pas fait.

POSThttps://api.formbase.so/api/v1
Paramètres2
formIdstringrequired

Identifiant du formulaire.

languagestringrequired

Balise de langue BCP-47 (ex. “es”, “pt-BR”).

200Langue ajoutée
json
{
  "ok": true,
  "data": {
    "formId": "frm_abc123",
    "language": "es",
    "rowId": "tl_new123"
  }
}

translations.removeLanguage

Supprimer une langue et toutes ses traductions d’un formulaire.

POSThttps://api.formbase.so/api/v1
Paramètres2
formIdstringrequired

Identifiant du formulaire.

languagestringrequired

Balise de langue BCP-47.

translations.listEntries

Lister chaque clé source pour une langue sur un formulaire, avec son état actuel. C’est ainsi que vous découvrez les valeurs de key que prend translations.setEntry.

POSThttps://api.formbase.so/api/v1
Paramètres2
formIdstringrequired

Identifiant du formulaire.

languagestringrequired

Balise de langue BCP-47. Doit déjà être sur le formulaire.

200Succès
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 vaut missing (rien de stocké), outdated (la source a changé depuis), current, ou suggested (une suggestion IA en attente, non acceptée). Les clés couvrent le contenu du formulaire ( block_<id>.) et, une fois qu’un auteur les a personnalisés, les e-mails de confirmation et de rappel au répondant ( email.confirmation., email.reminder.*).

translations.setEntry

Définir une entrée de traduction. La langue doit avoir été ajoutée via translations.addLanguage au préalable.

POSThttps://api.formbase.so/api/v1
Paramètres4
formIdstringrequired

Identifiant du formulaire.

languagestringrequired

Balise de langue BCP-47.

keystringrequired

Une clé issue de translations.listEntries. N’en construisez pas une à la main.

valuestringrequired

Le fragment traduit, sérialisé en JSON. Sa structure de marques doit correspondre au fragment source.

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\"}]"
    }
  }'

Renvoie { formId, language, key }.

translations.deleteEntry

Supprimer une entrée de traduction, ce qui fait revenir cette clé à la langue par défaut du formulaire. Idempotent. Quand la dernière entrée d’une langue disparaît, la langue quitte les langues publiées du formulaire.

POSThttps://api.formbase.so/api/v1
Paramètres3
formIdstringrequired

Identifiant du formulaire.

languagestringrequired

Balise de langue BCP-47.

keystringrequired

Clé de traduction à supprimer.

Compte

me.get

Obtenir des informations sur l’utilisateur authentifié.

POSThttps://api.formbase.so/api/v1
Paramètres0
200Succès
json
{
  "ok": true,
  "data": {
    "id": "usr_abc123",
    "email": "you@example.com",
    "name": "Jane Doe"
  }
}

Méta

methods.list

Lister chaque nom de méthode que ce déploiement sert, trié. La réponse qui fait foi quand cette page et le serveur ne sont pas d’accord.

POSThttps://api.formbase.so/api/v1
Paramètres0
200Succès
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",
      "..."
    ]
  }
}

Référence des erreurs

Chaque réponse d’erreur a la même structure. L’ensemble des code de premier niveau est fermé exprès : un nouveau mode de défaillance n’ajoute jamais un code, il ajoute une reason. Branchez-vous sur code pour le résultat au niveau HTTP et sur details.reason pour la correction.

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 est présent chaque fois que le serveur peut nommer la cause. Outre reason, il peut porter field (le paramètre en cause, pointé pour l’imbrication), validKeys, validValues (les valeurs d’option qu’une question à choix accepte), expectedType, feature (sur UPGRADE_REQUIRED), et retryAfterMs (sur un appel throttlé). Les raisons propres à la surface d’une requête sont listées avec chaque méthode ci-dessus.

Voici tous les codes :

Codes d’erreur
VALIDATION_ERROR400optional

Paramètres invalides ou manquants dans la requête.

UNAUTHORIZED401optional

Token API absent ou invalide.

FORBIDDEN403optional

Le token n’a pas accès à la ressource demandée.

NOT_FOUND404optional

La ressource n’existe pas.

METHOD_NOT_FOUND404optional

Nom de méthode inconnu. Utilisez methods.list pour voir les méthodes disponibles.

CONFLICT409optional

La ressource n’est pas dans un état qui permet cet appel — une demande qui n’est plus en attente, une clé d’idempotence réutilisée avec un corps différent.

RATE_LIMITED429optional

Plus de 120 appels par minute sur ce token, plus de 60 appels à requests.create par minute, ou trop d’échecs d’authentification depuis cette IP.

UPGRADE_REQUIRED402optional

La fonctionnalité nécessite un niveau d’abonnement supérieur, l’espace de travail a épuisé son allocation mensuelle (raison MONTHLY_ALLOWANCE_REACHED), ou un compte Free a épuisé ses 10 invitations gratuites (raison FREE_INVITATIONS_USED).

INTERNAL_ERROR500optional

Erreur serveur inattendue. Réessayez plus tard.

Étapes suivantes