Skip to main content

Zapier

Connect Zapier to FinalSay using the FinalSay Zapier integration (in-repo: finalsay-zapier/), or using custom HTTP steps with the Agent API directly.

Official Zapier integration

The open-source app wraps the same Agent API as n8n: Create Approval and Find Approval Result (poll by request_id). Install it from the Zapier Platform after your team publishes the app, or use a private invite link from your integration owner.
  • Repository: finalsay-zapier/README.mdnpm run validate, zapier push, and developer notes.
  • Authentication: connection fields for API base URL, Agent ID, and workspace API key (same values as Credentials). The integration tests the connection with GET /health.
When an approval completes, FinalSay can POST the outcome to a URL you provide. In Zapier, that is usually a Webhooks by Zapier Catch Hook URL in the Callback URL field on Create Approval (or callback.url in raw JSON). Use a second Zap (trigger: Catch Hook) to process the body, or poll with Find Approval Result.

Prerequisites

  • Credentials: Agent ID, workspace API key, base URL.
  • A Zapier plan that supports the building blocks you need (e.g. Webhooks by Zapier for catch hooks, multi-step Zaps, and possibly Code by Zapier if you bypass the official app and craft raw HTTP).

Custom HTTP (no Zapier app)

Every Agent API call must include:
HeaderValue
X-Agent-IdYour Agent ID
X-Api-KeyYour workspace API key
Use an action that allows custom headers (often Webhooks by ZapierCustom Request, or Code by Zapier).

Create an approval

  1. Trigger your Zap (schedule, form, another app, etc.).
  2. Add Webhooks by ZapierPOST (or Custom Request) to {BASE_URL}/v1/approvals.
  3. Set method POST, body type JSON, and paste a body that matches POST /v1/approvals.
  4. Add the headers above in the custom headers section.
Capture request_id from the create response for polling (present whether you set request_id in the body or not), or configure a callback (below).

Get the result

Option A — Callback

  1. Create a Catch Hook in Webhooks by Zapier and copy the hook URL.
  2. In your create approval JSON, set callback.url to that hook URL.
  3. Use a second Zap (trigger: Catch Hook) to process the POST body when the approval completes.
Zapier’s exact steps vary by interface version; look for “Custom Request” or raw JSON body support.

Option B — Polling

Zapier does not offer a built-in “wait until HTTP changes” loop. Practical patterns:
  • Use Delay between repeated GET calls to {BASE_URL}/v1/approvals/{requestId}/result (use the request_id from the create response as {requestId}), or
  • Use Code by Zapier to loop with delays (subject to Zapier execution time limits), or
  • Use the official integration’s Find Approval Result action, or
  • Prefer callback (Option A) for long human wait times.
Treat status: "pending" as “not done yet”; see GET result.

Limitations

  • Zapier task limits and step timeouts apply—callbacks are usually more reliable than long polling for human-in-the-loop delays.
  • Store API keys in Zapier Secrets or connection fields, not in plain text in shared Zaps.