# Look up, remind and cancel requests in n8n

Find a request by your own External ID, read its status and answers, send the recipient a reminder, cancel it, or replay its callback, all from an n8n workflow.

## Look up, remind and cancel requests in n8n

Five formbase actions work on requests that already exist. A typical workflow finds the request by the ID your system knows it by, then reads, reminds or cancels it.

<p>
  You need a <a href="/guides/n8n/connect">formbase credential in n8n</a> and a request created with an External ID, as in{' '}
  <a href="/guides/n8n/send-a-request">Send a request from an n8n workflow</a>. The same actions exist in the dashboard; see{' '}
  <a href="/requests/managing-requests">The Requests page</a>.
</p>

<h2 id="find-a-request">Find a request with Get many requests</h2>

<p>
  Your system knows the supplier as <code>SUP-1042</code>, not by formbase's request ID. Add a formbase node, pick{' '}
  <strong>Get many requests</strong>, and filter by the External ID you set when you created the request:
</p>

<ul>
  <li>
    <strong>Scope</strong> is <strong>Form</strong>, the default, which then asks for the form, or <strong>Workspace</strong>, every request
    the credential can reach.
  </li>
  <li>
    <strong>Filters</strong> narrow the list by <strong>External ID</strong>, <strong>Status</strong> or <strong>Outcome</strong>.{' '}
    <strong>Include Test Requests</strong> is off by default, so a request created with Test Mode on is not found. Turn it on while you
    build the workflow with test requests.
  </li>
  <li>
    The newest request comes first. <strong>Limit</strong> caps the number of items; <strong>Return All</strong> fetches every page.
  </li>
</ul>

<p>
  Each request is one output item, so the nodes after it run once per request. When nothing matches, the node outputs no items and the
  workflow stops there; turn on <strong>Always Output Data</strong> in the node's settings to carry on. Every node below takes the request
  as <strong>Request</strong> › <strong>By ID</strong> <code>{'{{ $json.id }}'}</code>, or pick one of the newest requests under{' '}
  <strong>From list</strong>.
</p>

<h2 id="get-a-request">Read a request with Get request</h2>

<p>
  <strong>Get request</strong> returns the request: its status, outcome, recipient, timestamps, what you prefilled and locked, and its link.
  Once it is completed, it also carries <code>answers</code> and <code>display</code> at the top level, as{' '}
  <code>{'{{ $json.answers }}'}</code>. Unlike the events, its timestamps are Unix time in milliseconds.
</p>

<h2 id="remind">Send a reminder with Remind request recipient</h2>

<p>
  <strong>Remind request recipient</strong> emails the recipient a reminder now. Scheduled reminders still go out as planned. It works when:
</p>

<ul>
  <li>the request is pending, has not passed its expiry date, and has a recipient email,</li>
  <li>the workspace is on Pro or Business,</li>
  <li>
    the last reminder went out at least ten minutes ago, and the request has had fewer than eight reminders in total. See{' '}
    <a href="/requests/invitations-and-reminders#manual">Chasing someone now</a>.
  </li>
</ul>

<p>
  A test request is never reminded. The node fails with{' '}
  <em>CONFLICT: This is a test request, so nothing is emailed for it; a reminder has nobody to write to.</em>
</p>

<h2 id="cancel">Withdraw a request with Cancel request</h2>

<p>
  <strong>Cancel request</strong> withdraws a pending request. The link stops working, and the recipient sees a withdrawn notice instead of
  the form. Fill in <strong>Reason</strong> to record why: it comes back as <code>cancelReason</code> on the request and in the{' '}
  <a href="/guides/n8n/request-outcome">Request Canceled</a> event, so another workflow can tell your team.
</p>

> ℹ️ **Only pending requests can be canceled**
> <p>
>     A completed, expired or already canceled request stays as it is, and the node fails with an error such as{' '}
>     <em>This request is already canceled and cannot be canceled.</em>
>   </p>

<h2 id="replay">Send the callback again with Replay request callback</h2>

<p>
  If a request had a callback URL and your receiver missed the delivery, <strong>Replay request callback</strong> sends the callback of a
  completed, expired or canceled request again. It returns an <code>eventId</code>, the same ID as the first delivery, so a receiver that
  deduplicates on it acts only once. See <a href="/requests/callbacks#retries">retries</a>.
</p>

<ul>
  <li>A replay goes to the request's callback URL only. A formbase Trigger subscription retries on its own and is not replayed.</li>
  <li>
    A request created with <a href="/guides/n8n/request-outcome#wait-for-the-outcome">Wait for the Outcome</a> has the resume URL of one
    execution as its callback. Once that execution has finished, the URL is gone, so a replay helps only while the execution is still
    waiting.
  </li>
</ul>

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

<div class="not-prose grid gap-3 sm:grid-cols-2 mb-8">
  - [All guides](/guides/overview)
  - [The Requests page](/requests/managing-requests) — The same actions in the dashboard.
</div>
