formbasedocs
Ir a la appApp

Guías · API REST

Envía una solicitud con la API REST

Cualquier herramienta con un paso HTTP puede enviar una solicitud: Pipedream, una función serverless, un script. Esta guía lo hace con curl, para que veas cada llamada antes de moverla a tu propio código.

Last checked


Necesitas un formulario publicado. Esta guía usa el que se construyó en Construye un formulario con un agente de IA: nombre de la empresa, correo de contacto, número de IVA, una pregunta de sí o no sobre las condiciones de pago, y una subida de archivo. Cada método y opción usados aquí se describen en Métodos de la API.

1. Crea un token de API

En formbase, abre OAuth y claves de API en la barra lateral del espacio de trabajo y crea un token. El valor se muestra una sola vez. Guárdalo en una variable de entorno, nunca en tu código:

bash
export FORMBASE_TOKEN='fb_...'

Un token llega solo al espacio de trabajo en el que se creó. Cada llamada de abajo es un POST a la misma URL con el token en la cabecera Authorization; el cuerpo nombra el método y sus parámetros.

2. Encuentra el ID del formulario

Abre el formulario en el editor. El ID del formulario es la parte de la dirección después de /forms/:

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

Los comandos de abajo usan el ID de formulario de esta guía. Pon el tuyo en su lugar.

3. Enumera las claves de campo

Una solicitud rellena preguntas, y las respuestas vuelven, por clave de campo. Pídele al formulario sus claves en lugar de adivinarlas a partir de los títulos:

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

La respuesta enumera cada pregunta del formulario publicado. Resumida:

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

Para precompletar una pregunta de elección, envía la key de la opción, aquí “yes”, no su etiqueta. Una pregunta con prefillable: false, como la subida de archivo, solo la puede responder el destinatario. El resto de las marcas se explican en fields.list.

4. Crea una solicitud de prueba

Envía la solicitud a Ada Lovelace, con el nombre de la empresa rellenado y bloqueado. test: true la convierte en una solicitud de prueba: nunca envía correo a nadie y no cuenta en ningún sitio, así que puedes repetir este paso tantas veces como quieras, con una nueva idempotencyKey cada vez.

bash
curl -X POST https://api.formbase.so/api/v1 \
  -H "Authorization: Bearer $FORMBASE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "method": "requests.create",
    "params": {
      "formId": "jx75hdx8vb5hy1x85gm17nqgkn8f674g",
      "recipient": { "email": "ada@acme.example", "name": "Ada Lovelace" },
      "prefill": { "company_name": "Analytical Engines Ltd" },
      "readonly": ["company_name"],
      "externalId": "supplier-2043",
      "idempotencyKey": "supplier-2043",
      "test": true
    }
  }'
  • prefill rellena respuestas que el destinatario todavía puede cambiar. Una clave en readonly queda bloqueada además.

  • externalId es tu propio id para este trabajo, como un número de proveedor. Vuelve en cada lectura y cada callback.

  • idempotencyKey hace que un reintento sea seguro. Si tu código envía la misma llamada dos veces, formbase devuelve la primera solicitud con deduplicated: true en lugar de crear una segunda.

La respuesta lleva el ID de la solicitud y el enlace para el destinatario:

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

deliveryStatus: “not_requested” significa que formbase no envió ningún correo; tú entregas el enlace. Para que formbase envíe la invitación y los recordatorios, añade “delivery”: “email”, que necesita un plan Pro o Business. Consulta Invitaciones, recordatorios y expiración. Si el formulario tiene Enviar recordatorios activado, una solicitud real con un correo de destinatario igualmente recibe los recordatorios programados; añade “reminders”: [] para no enviar ninguno.

Las solicitudes de prueba quedan fuera de la vista

La página Solicitudes lista las solicitudes de prueba solo cuando activas el filtro Mostrar solicitudes de prueba. Abre el url tú mismo para completarla. Quita test cuando envíes la solicitud real.

5. Complétala y lee las respuestas

Abre el url en un navegador. El nombre de la empresa está rellenado y bloqueado; responde el resto y envíalo. Luego lee la solicitud de vuelta con su ID:

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

Una vez que status es completed, la respuesta lleva dos mapas indexados por clave de campo. answers es para código: una respuesta de elección es la clave de la opción, una respuesta de archivo es una lista de archivos con URLs de descarga. display es para personas: etiquetas y nombres de archivo.

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

Preguntar una y otra vez hasta que cambie el estado funciona para una prueba, pero no en producción. Dale a la solicitud una callbackUrl y formbase te llama cuando termina; la siguiente guía lo configura.

Siguiente