GreetWise Zapier API

Reference for the endpoints the GreetWise Zapier integration uses to authenticate, subscribe to events, and load sample data, plus the webhook payloads GreetWise sends.

Updated October 1, 2026 OpenAPI spec

GreetWise sends call, contact, and booking events to Zapier. The GreetWise Zapier integration uses the endpoints below to check a user's API key, turn event subscriptions on and off, and load recent events in the Zap editor.

Note

Using Zapier and just want to connect your account? See Connect GreetWise to Zapier in the Help Center.

A machine-readable OpenAPI 3.1 version of this reference is available at /developers/zapier/openapi.json.

Overview

Base URL https://api.greetwise.ai
Format JSON request and response bodies
Authentication API key in the X-Api-Key header
Delivery model REST Hooks: Zapier subscribes, GreetWise pushes events
Method Path Purpose
GET /zapier/v1/auth-test Test an API key
POST /zapier/v1/hooks Subscribe to a trigger
DELETE /zapier/v1/hooks/{id} Unsubscribe
GET /zapier/v1/new-calls Recent completed calls
GET /zapier/v1/new-contacts Recent new contacts
GET /zapier/v1/new-bookings Recent bookings

Authentication

Every request needs an API key. A GreetWise user creates one in the GreetWise app under Integrations → Zapier by clicking Connect. Keys start with zap_.

Send the key in the X-Api-Key header:

GET /zapier/v1/auth-test HTTP/1.1
Host: api.greetwise.ai
X-Api-Key: zap_3f9c...

Authorization: Bearer zap_3f9c... is also accepted.

Each organization has one key at a time, and every request only sees that organization's data. Clicking Disconnect revokes the key and deletes all of the organization's subscriptions. Connecting again creates a new key.

Errors

Errors return a JSON body with the HTTP status code and a message:

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}
Status When
400 Bad Request The request body failed validation. message is an array listing each problem.
401 Unauthorized The API key is missing ("Missing API key"), wrong, or revoked ("Invalid API key").
5xx Something went wrong on our side. Safe to retry.

Test an API key

GET /zapier/v1/auth-test

Zapier calls this when a user connects their GreetWise account. A 200 means the key is valid.

curl https://api.greetwise.ai/zapier/v1/auth-test \
  -H "X-Api-Key: zap_3f9c..."

Response 200

{
  "organizationId": "a3e9b0c4-58d2-4e1f-8a6b-0c7d9e2f4b15",
  "connected": true
}

The first successful request with a new key also lets the user finish setup by clicking Verify in the GreetWise app.

Subscribe to a trigger

POST /zapier/v1/hooks

Zapier calls this when a user turns on a Zap. GreetWise stores the target_url and sends each new matching event to it (see Webhook payloads). An organization can have any number of subscriptions, including several to the same event.

Request body

Field Type Required Description
event string yes new_call, new_contact, or new_booking
target_url string yes The URL GreetWise should POST events to
curl -X POST https://api.greetwise.ai/zapier/v1/hooks \
  -H "X-Api-Key: zap_3f9c..." \
  -H "Content-Type: application/json" \
  -d '{"event": "new_call", "target_url": "https://hooks.zapier.com/hooks/standard/123456/abcdef/"}'

Response 201

{
  "id": "e41b7c90-2d5f-4a83-9e6c-1f0a8b3d7c52",
  "organizationId": "a3e9b0c4-58d2-4e1f-8a6b-0c7d9e2f4b15",
  "event": "new_call",
  "targetUrl": "https://hooks.zapier.com/hooks/standard/123456/abcdef/",
  "createdAt": "2026-09-30T17:30:00.000Z"
}

Keep the id. It's needed to unsubscribe.

A 400 is returned if event isn't one of the three values or target_url isn't a valid URL.

Unsubscribe

DELETE /zapier/v1/hooks/{id}

Zapier calls this when a user turns off or deletes a Zap. id is the value returned when subscribing. GreetWise stops sending events to that URL right away.

curl -X DELETE https://api.greetwise.ai/zapier/v1/hooks/e41b7c90-2d5f-4a83-9e6c-1f0a8b3d7c52 \
  -H "X-Api-Key: zap_3f9c..."

Response 200

{ "success": true }

This also returns 200 if the subscription was already removed, so it's safe to retry.

List recent events

GET /zapier/v1/new-calls GET /zapier/v1/new-contacts GET /zapier/v1/new-bookings

Return the organization's most recent events of one type, newest first. The Zap editor uses these to show real sample data when a user tests a trigger. Each item has exactly the same shape as the matching webhook payload.

Query parameters

Parameter Type Default Description
limit integer 10 Number of events to return, from 1 to 50
curl "https://api.greetwise.ai/zapier/v1/new-calls?limit=3" \
  -H "X-Api-Key: zap_3f9c..."

Response 200

[
  {
    "id": "6f1c2a9e-3b7d-4f0a-9c51-2d8e7b4a1f03",
    "organizationId": "a3e9b0c4-58d2-4e1f-8a6b-0c7d9e2f4b15",
    "callerPhone": "+15551234567",
    "callerName": "Jane Smith",
    "durationSeconds": 87,
    "summary": "Caller asked about office hours and was told they are 9am–5pm Monday through Friday.",
    "occurredAt": "2026-09-30T17:42:10.512Z"
  }
]

If the organization has no events of that type yet, the response is an empty array ([]).

Webhook payloads

When a subscribed event happens, GreetWise sends a POST request to each matching target_url with a JSON body describing a single event. Any 2xx response counts as delivered.

  • Events are sent as soon as they happen. Contacts and bookings can arrive while the call is still going; new_call is sent when it ends.
  • Requests time out after 10 seconds. Failed deliveries are not retried.
  • Every event has a unique id. Use it to skip duplicates.
  • occurredAt is an ISO 8601 timestamp in UTC.
  • Fields GreetWise doesn't know are null instead of being left out.

new_call

Sent when a call answered by GreetWise ends.

Field Type Description
id string (UUID) Unique event id
organizationId string (UUID) The GreetWise organization
callerPhone string or null Caller phone number, E.164 format
callerName string or null Caller name, if GreetWise learned it
durationSeconds integer Call length in seconds
summary string or null AI-written summary of the call
occurredAt string (date-time) When the call ended
{
  "id": "6f1c2a9e-3b7d-4f0a-9c51-2d8e7b4a1f03",
  "organizationId": "a3e9b0c4-58d2-4e1f-8a6b-0c7d9e2f4b15",
  "callerPhone": "+15551234567",
  "callerName": "Jane Smith",
  "durationSeconds": 87,
  "summary": "Caller asked about office hours and was told they are 9am–5pm Monday through Friday.",
  "occurredAt": "2026-09-30T17:42:10.512Z"
}

new_contact

Sent when GreetWise creates a contact from a caller during a call. Contacts added by hand in the GreetWise app are not sent.

Field Type Description
id string (UUID) Unique event id
organizationId string (UUID) The GreetWise organization
name string or null Contact name
phone string or null Phone number, E.164 format
email string or null Email address, if the caller gave one
occurredAt string (date-time) When the contact was created
{
  "id": "b8d40e17-6c2a-4b9f-a0e3-5f71c8d2e946",
  "organizationId": "a3e9b0c4-58d2-4e1f-8a6b-0c7d9e2f4b15",
  "name": "Jane Smith",
  "phone": "+15551234567",
  "email": null,
  "occurredAt": "2026-09-30T17:41:02.118Z"
}

new_booking

Sent when GreetWise books an appointment for a caller.

Field Type Description
id string (UUID) Unique event id
organizationId string (UUID) The GreetWise organization
date string Appointment date, YYYY-MM-DD, in the business's local time
time string Appointment start time, e.g. 10:00 AM, in the business's local time
callerName string Name the appointment was booked under
confirmationNumber string or null Confirmation number given to the caller
phone string or null Caller phone number, E.164 format
email string or null Caller email, if they gave one
occurredAt string (date-time) When the booking was made
{
  "id": "d2a7f5c3-91e4-4d6b-b8a0-3c5e7f9a1b24",
  "organizationId": "a3e9b0c4-58d2-4e1f-8a6b-0c7d9e2f4b15",
  "date": "2026-10-07",
  "time": "10:00 AM",
  "callerName": "Jane Smith",
  "confirmationNumber": "GW-00123",
  "phone": "+15551234567",
  "email": "jane@example.com",
  "occurredAt": "2026-09-30T17:43:55.904Z"
}

Support

Questions about the API or the Zapier integration? Email support@greetwise.ai.