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 byrequest_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.md—npm 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.
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:| Header | Value |
|---|---|
X-Agent-Id | Your Agent ID |
X-Api-Key | Your workspace API key |
Create an approval
- Trigger your Zap (schedule, form, another app, etc.).
- Add Webhooks by Zapier → POST (or Custom Request) to
{BASE_URL}/v1/approvals. - Set method POST, body type JSON, and paste a body that matches POST /v1/approvals.
- Add the headers above in the custom headers section.
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
- Create a Catch Hook in Webhooks by Zapier and copy the hook URL.
- In your create approval JSON, set
callback.urlto that hook URL. - Use a second Zap (trigger: Catch Hook) to process the POST body when the approval completes.
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 therequest_idfrom 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.
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.