# Requests overview

Ask one specific person to fill in one form, then resume your workflow when they are done.

## Requests overview

A request is one assignment of a published form to one person. Your automation creates it, formbase hands back a secret link, the recipient fills in a prefilled form, and formbase calls your workflow back so the run continues.

<h2 id="what-a-request-is">What a request is</h2>

<p>
  A form is a reusable design. A <strong>request</strong> is one assignment of that design to one named person — with their data already
  filled in, their case number attached, and a callback waiting for the moment they finish.
</p>

<p>
  You do not build a different form for this. Any published form can be sent as a request. Nothing about the form changes; what changes is
  who opens it and what your automation knows when they are done.
</p>

<h2 id="channels">Two channels, one form</h2>

<p>
  In the Share sheet, a published form has two tabs — <strong>Public link</strong> and <strong>Requests</strong>. These are the two{' '}
  <em>channels</em> a form reaches people through, and a form can use both at once. The public link goes on your website; requests go to the
  three suppliers you are chasing this week. Same form, same submission inbox.
</p>

> ℹ️ **Three ways to create a request**
> <p>
>     Open a published form, press <strong>Share</strong>, and pick the <strong>Requests</strong> channel. The <strong>Manual</strong> tab
>     creates one request by hand — fill in the recipient, prefill what you know, and press <strong>Send invitation</strong> or{' '}
>     <strong>Create link</strong>. The <strong>curl</strong> and <strong>MCP</strong> tabs hand you a ready-made snippet for the same thing
>     from Make, Zapier, Claude, or a direct API call.
>   </p>
>   <p>
>     A request made by hand behaves exactly like one an automation created: same lifecycle, same reminders, same signed callback.{' '}
>     <strong>Try it yourself</strong> creates a test request addressed to you and hands you its link — nothing is emailed — so you can walk
>     the whole flow through before you wire anything up.
>   </p>

> ℹ️ **Step by step in Zapier and n8n**
> <p>
>     The <a href="/guides/overview">Zapier guides</a> walk through it click by click:{' '}
>     <a href="/guides/zapier/send-a-request">send a request from a Zap</a>, <a href="/guides/zapier/request-outcome">act on its outcome</a>,
>     and <a href="/guides/zapier/manage-requests">look it up, remind or cancel it</a>. The same three jobs have{' '}
>     <a href="/guides/overview#n8n">guides for self-hosted n8n</a>.
>   </p>

<h2 id="lifecycle">The lifecycle</h2>

<ol>
  <li>
    Your automation calls <code>requests.create</code> with a form id, the recipient, and any values you already know.
  </li>
  <li>
    formbase returns a <strong>request link</strong> — a secret URL like <code>https://form.formbase.so/r/rq_…</code>. It opens as many
    times as the recipient needs, from any device.
  </li>
  <li>
    The recipient gets the link, either through the <strong>request invitation</strong> email formbase sends, or through your own channel if
    you would rather send it yourself.
  </li>
  <li>
    They open a normal formbase form: your branding, your theme, your language — with their values already in place and the fields you
    locked shown read-only.
  </li>
  <li>
    They submit. The answers land in the form's inbox like any other submission, and formbase POSTs a signed <strong>callback</strong> to
    the URL your automation gave it, with the answers keyed by field key.
  </li>
</ol>

<p>
  If they never finish, reminders chase them on a schedule, and the request eventually expires. Either way your automation is told — the
  callback fires on expiry and cancellation too, so a workflow run is never left hanging.
</p>

<h2 id="statuses">Statuses</h2>

<p>
  Completed, expired, and canceled are terminal: the link keeps working but shows an <strong>outcome page</strong> — a receipt, or a plain
  "this request has expired" notice — instead of the form.
</p>

<p>
  While a request is pending, formbase also records when it was first opened, when the first answer was saved, and the last activity. That
  is what the Requests page means by "not opened", "opened", and "in progress" — activity, not extra statuses.
</p>

<h2 id="what-you-need">What you need</h2>

<ul>
  <li>
    A <strong>published</strong> form. Field keys freeze at first publish, and a request pins the version that was live when it was created.
  </li>
  <li>
    An <a href="/developers/api-tokens">API token</a>, or the <a href="/developers/mcp-server#requests">MCP server</a> connected to your
    agent. Requests made by hand in the Share sheet need neither.
  </li>
  <li>
    A <strong>Pro or Business plan</strong> if you want formbase to email the invitation or send reminders. Creating requests, prefilling
    them, locking fields, and receiving callbacks work on every plan — you deliver the link yourself. A Free account can have formbase email
    its first <a href="/subscription-billing/limits-quotas#free-invitations">10 invitations</a> to try it.
  </li>
  <li>
    Room in this month's <a href="/requests/creating-requests#allowance">allowance</a>. Requests and share-link submissions spend the same
    pool, and a request costs its unit the moment it is created.
  </li>
</ul>

<h2 id="next">Next</h2>

<div class="not-prose grid gap-3 sm:grid-cols-2">
  - [Create a request](/requests/creating-requests) — Discover field keys, prefill, lock, and attach context.
  - [Field keys](/requests/field-keys) — The stable names automations address your fields by.
  - [Invitations & reminders](/requests/invitations-and-reminders) — Email delivery, the shared schedule, and expiry.
  - [Callbacks & signing](/requests/callbacks) — Resume your workflow and verify that the call is ours.
  - [The Requests page](/requests/managing-requests) — See what you are waiting on and act on it.
</div>
