This guide shows how to connect Zapier to 8call using OAuth2 Authorization Code flow and a single REST Hook trigger, call.completed. It covers all related endpoints, required headers, payload formats, and verification steps needed for Zapier App Review.
Overview
- Authentication: OAuth2 Authorization Code with Bearer tokens.
- Trigger (REST Hook): call.completed (the only event documented and exposed to Zapier).
- Perform List:
GET {API_URL}/calls/recentprovides call samples to configure the trigger. - Webhooks: Zapier subscribes using
POST {API_URL}/webhooks/subscribeand unsubscribes withDELETE {API_URL}/webhooks/subscribe. - Security: Optional shared secret forwarded as
X-Signatureheader in webhook deliveries.
Authorize URL
GET {API_URL}/oauth/authorizeToken URL
POST {API_URL}/oauth/tokenUserinfo (Test URL)
GET {API_URL}/oauth/userinfoWebhook Subscribe
POST {API_URL}/webhooks/subscribeWebhook Unsubscribe
DELETE {API_URL}/webhooks/subscribePerform List
GET {API_URL}/calls/recentReplace
{API_URL} with your environment’s base URL (e.g. https://api.8call.co).Authentication and security
All Zapier → 8call requests are protected by a combination of:- An OAuth client ID / client secret pair
- An OAuth bearer access token
- Per-request client headers that identify the Zapier app
-
Client credentials: When you create the Zapier app, you configure an OAuth client in 8call that issues a
client_id,client_secret, andredirect_uri. These values are also made available to your Zap to send with each API call. -
Token exchange: Zapier exchanges the authorization
codeatPOST {API_URL}/oauth/tokenusing theclient_idandclient_secret. Only registered clients can receive access tokens. -
Client headers: Every Zapier request to 8call must include the client identity:
Your 8call Zapier OAuth client ID.Your 8call Zapier OAuth client secret.
-
Bearer protection: Every authenticated request from Zapier to 8call must also include:
On the server, 8call validates the bearer token and checks that
Bearer {{bundle.authData.access_token}}x-client-id/x-client-secretmatch the configured Zapier client (ZAPIER_CLIENT_ID,ZAPIER_CLIENT_SECRET) before executing the request. -
Protected endpoints: Webhook subscribe/unsubscribe and perform list endpoints (
/webhooks/subscribe,/calls/recent) all require these headers (Authorization,x-client-id,x-client-secret). Invalid or missing credentials result in401 Unauthorizedresponses.
Video walkthrough
End-to-end Zapier + 8call setup walkthrough
Prerequisites
- A Zapier developer account with access to the Zapier Platform UI.
- An 8call account and an OAuth client configured.
1
Create an OAuth2 app in Zapier Platform UI
Set the following in your Zapier app:
- Authorize URL:
GET {API_URL}/oauth/authorize - Token URL:
POST {API_URL}/oauth/token - Refresh Token URL: same Token URL with
grant_type=refresh_token - Test URL:
GET {API_URL}/oauth/userinfo - Connection Label: use
emailfrom the Test URL response
Send
Bearer {{bundle.authData.access_token}} on all authenticated requests.Use the “Test” button in Zapier to verify the user profile request succeeds.
2
Configure OAuth scopes
Supported scopes in 8call (request only what you need):
- calls:read, calls:write
- contacts:read, contacts:write
- leads:read, leads:write
- audiences:write
3
Set up REST Hook triggers
Each trigger uses a subscribe, unsubscribe, and perform list endpoint. All webhook requests from Zapier must include:For the Zapier public app, 8call documents and exposes one REST Hook trigger:
Bearer {{bundle.authData.access_token}} (OAuth2 bearer token)application/json- call.completed – fired when a call handled by 8call has finished and a summary is available.
Subscribe to a webhook (POST /webhooks/subscribe)
You configure Zapier’s Subscribe URL to call POST {API_URL}/webhooks/subscribe whenever a Zap is turned on.
Request
Public HTTPS URL Zapier provides as your target URL.
Must be
"call.completed". If Zapier hardcodes the event, you can omit this field in dev and 8call will default it to call.completed.Optional shared secret. If provided, deliveries include header
X-Signature: {secret}.Response
On success 8call returns the created subscription:Unsubscribe from a webhook (DELETE /webhooks/subscribe)
You configure Zapier’s Unsubscribe URL to call DELETE {API_URL}/webhooks/subscribe when a Zap is turned off.
Request
The exact target URL to remove.
Perform List – sample calls (GET /calls/recent)
Zapier uses the Perform List URL to fetch a small array of sample items when a user creates the Zap. For the call.completed trigger, configure the Perform List URL to GET {API_URL}/calls/recent.
- Recent calls
Webhook deliveries
8call will send an HTTP POST to your subscribedcallback_url with:
- Header
X-Event: {event} - Header
X-Signature: {secret}when a secret was provided at subscription time - JSON body containing the event payload
X-Signature is a simple shared-secret echo. It is not an HMAC. Verify equality on receipt if you supplied a secret during subscription.Example delivery: call.completed
The HTTP POST body for a call.completed webhook is a single JSON object representing the completed call:
OAuth endpoints
Authorize URL
Authorize URL
Token URL (+ Refresh)
Token URL (+ Refresh)
POST {API_URL}/oauth/token- Exchange the authorization
codeforaccess_tokenandrefresh_token. - For refresh: send the same endpoint with
grant_type=refresh_token.
Userinfo (Test URL)
Userinfo (Test URL)
GET {API_URL}/oauth/userinfo- Returns the authenticated user profile used for connection label.
Troubleshooting
-
401 Unauthorized
- Ensure
Authorization: Bearer {{bundle.authData.access_token}}is present on all requests. - Verify your token is not expired; refresh if necessary.
- Check that the token maps to an active user and organization in 8call.
- Ensure
-
400 Bad Request (subscribe/unsubscribe)
- Confirm
hookUrlis a valid public HTTPS URL. - Ensure
eventis one of the supported values.
- Confirm
-
Webhooks not arriving
- Verify your target URL is reachable from the public internet.
- If you set a
secret, confirm you’re checkingX-Signatureexactly. - Check Zapier’s Zap history to confirm the subscribe call succeeded.
-
Empty Perform List
- You may not have recent data in your environment. Create a test call in 8call, then retry
GET /calls/recent.
- You may not have recent data in your environment. Create a test call in 8call, then retry
If you can successfully subscribe, see deliveries in your Zap’s history, and fetch Perform List samples, your Zapier integration with 8call is set up correctly.