--- name: crisphive-zapier-setup description: "Walks a Crisphive customer step by step through connecting Crisphive to Zapier. Connect Crisphive to Zapier step by step: an instant trigger on confirmed jobs, local-time formatting and an email to your office. Plus booking from any form. Use when the user wants to set up, test or troubleshoot Crisphive with Zapier." --- # Connect Crisphive to Zapier ## How to use this file (instructions for the AI assistant) You are helping a Crisphive customer connect Crisphive to **Zapier**. The person you are talking to may not be technical and has probably not read the guide. Everything you need is in the guide below — follow it, do not improvise. 1. **Start by asking two things:** whether they already have a Crisphive account they can sign in to, and how far they have got (nothing yet, or which step). Skip the steps they have already done. 2. **Give ONE step at a time.** Name the exact page, button and field from the guide, and the exact value to type. Wait for them to say it is done (or to send a screenshot) before the next step. 3. **Ask for a screenshot when they are stuck** or when what they see does not match the guide. Screens change; if a label in the guide is not on their screen, say so plainly, describe what the step is trying to achieve, and help them find the closest equivalent. Never invent a button name. 4. **Secrets never go in this chat.** API keys (`chsk_…`), webhook signing secrets (`whsec_…`) and OAuth client secrets are pasted only into the platform field the guide names. If the user pastes one here, tell them to revoke it in Crisphive and create a new one. 5. **Start in Rehearsal (the sandbox).** Recommend test keys (`chsk_test_…`) and Rehearsal mode until the test at the end of the guide works. Only then explain how to switch to Live. 6. **Finish with the guide’s test.** The setup is done only when the test in the guide succeeds (for example a job appears in the Crisphive dashboard). If it fails, use the Troubleshooting and FAQ sections below. 7. **Stay inside this guide.** For anything it does not cover, point the user to the full page or to support@crisphive.com instead of guessing. Source page: https://docs.crisphive.com/docs/zapier (last updated 2026-10-08). If the user asks, this file is generated from that page and is always in step with it. --- # The guide By the end of this guide, each time a job is confirmed in Crisphive, Zapier sends one email to your office within a second — with the job code, the customer, the address, the problem, the technician and the visit time in your local time. **Zapier** is a service that connects apps without code: a *Zap* starts on a *trigger* (something happens in one app) and runs *actions* (it does something in another). **Crisphive** is a field operations platform: constraint-based scheduling on a deterministic solver that books each job and assigns the right technician automatically — and it is manageable from Claude or ChatGPT too. The Crisphive app for Zapier connects the two. > The Crisphive app on Zapier is **Invite Only** for now. To add it to your Zapier account, email `support@crisphive.com` and we’ll send you the invite link. ## What you will have at the end One email per confirmed job, sent by **Email by Zapier**. It looks like this: ``` Subject: Job confirmed: REQ-CA-JK6VHKQC Customer: Sam Tremblay - +16135550188 Address: 300 Bank Street, Ottawa Problem: Thermostat not responding. Technician: Alex Morin When: October 14 2026 10:00:00 ``` The Zap has three steps, top to bottom. It takes about **15 minutes** to build. ``` Crisphive — New Event (Job Confirmed) → Formatter — Date / Time → Email by Zapier — Send Outbound Email ``` The same app also books jobs from any form (**Book Job**), finds a customer by phone, and has instant triggers for new customers and for jobs that are booked, completed or rescheduled — see [What the app can do](https://docs.crisphive.com/docs/zapier#what-you-can-do). ## Before you start | You need | Notes | | --- | --- | | A Crisphive login as **Owner** | Turning a Zapier trigger on needs the Owner role, or a role the Owner gave the Developer module. You sign in with your email and a one-time code; there is no password. | | The Crisphive Zapier invite link | The app is Invite Only for now. Email `support@crisphive.com` and we’ll send it to you. | | A **Zapier account** | A new account starts a **14-day Professional trial**. This Zap has 3 steps, and Zapier marks multi-step Zaps as a paid feature (*This Zap uses paid features that are included in your free trial*). After the trial you need a paid plan, or the Zap stops. | > **Test in Rehearsal first.** Zapier then sees only test data. In the left sidebar of the Crisphive dashboard, click **Rehearsal** in the **Rehearsal | Live** switch, then click **Switch**. Rehearsal is Crisphive’s sandbox: isolated test data, and no real customer or technician is ever texted or emailed. The connection works in the environment your dashboard is in at the moment you click **Approve**. ## Step 1 — Accept the Crisphive invite on Zapier 1. **Open the invite link** — Open the link you received from Crisphive. 2. **Log in to Zapier** — If Zapier asks you to log in, log in (or click **Sign Up**). A new account is asked three questions first — *What’s your role?*, *What’s your company size?* and *Top apps for…*. Answer them or click **Skip question**. Zapier then returns to the invite. 3. **Accept the invite** — The page reads **You have been invited to use Crisphive on Zapier!** Click **Accept Invite & Build a Zap**. ## Step 2 — Create the Zap and choose the trigger In this step you choose the trigger and, inside the same step, connect your Crisphive account. Zapier connects with sign-in and approval (OAuth): you never paste a password or an API key into Zapier. Screen in Zapier: **Trigger — Crisphive New Event** (`zapier.com/editor`) 1. Click Create Zap. In the Untitled Zap, click 1. Select the event that starts your Zap, search for Crisphive and choose Crisphive (1.0.0) — it shows an Invite Only badge. In Trigger event, choose New Event. — **Trigger event**: `New Event` 2. In Account, click Sign in. In the Connect to Zapier window, click Connect. Log in to Crisphive if asked. — click **Sign in** Screen in Crisphive: **Authorize Zapier** (`crisphive.com/oauth/consent`) 1. If you are not signed in to Crisphive in this browser, type your email and click Send Verification, then type the 6-digit code from the email in Enter your code. — **Email**: `owner@yourbusiness.com` 2. The Authorize Zapier page shows your business name, the mode (Rehearsal or Live) and who you are signed in as. In Rehearsal it says Zapier will only see Rehearsal (test) data. Check the business name, then click Approve. — click **Approve** Screen in Zapier: **Trigger — choose Job Confirmed** (`zapier.com/editor`) 1. The window closes. Account now shows Crisphive #1 (Zapier numbers connections itself). Click Continue. — **Account**: `Crisphive #1` 2. In Event, choose Job Confirmed (shown with ID: job_request.confirmed). Click Continue. — **Event**: `Job Confirmed` 3. On Test, click Test trigger. Zapier loads up to 3 recent records named Event A, Event B and Event C. Pick one, then click Continue with selected record. — click **Test trigger** 1. **Create the Zap** — Go to [zapier.com/app/assets/zaps](https://zapier.com/app/assets/zaps) and click **Create Zap**. An empty editor opens, called **Untitled Zap**. 2. **Choose the Crisphive app** — Click the first box, **1. Select the event that starts your Zap**. Search for `Crisphive` and choose **Crisphive (1.0.0)**. It shows an **Invite Only** badge. 3. **Trigger event** — Choose **New Event** (*Triggers instantly on any Crisphive event you choose*). 4. **Sign in** — In **Account**, click **Sign in**. A small window opens: on **Connect to Zapier** click **Connect**, and log in to Crisphive if asked. Allow pop-ups for zapier.com if nothing opens. 5. **Authorize Zapier** — The **Authorize Zapier** page shows your business name, the mode (**Rehearsal** or Live) and who you are signed in as. In Rehearsal it says *Zapier will only see Rehearsal (test) data — not your real jobs, customers or team.* Check the business name, then click **Approve**. 6. **Continue** — The window closes. **Account** now shows **Crisphive #1** (or #2 — Zapier numbers connections itself). Click **Continue**. 7. **Choose the event** — In **Event**, choose **Job Confirmed** (shown with *ID: job_request.confirmed*). Click **Continue**. 8. **Test the trigger** — On **Test**, click **Test trigger**. Zapier loads up to 3 recent records named **Event A**, **Event B**, **Event C**. Pick one, then click **Continue with selected record**. > **If you connect both environments,** rename the connections so you never pick the wrong one: open the App Connections page (`zapier.com/app/assets/connections`), click the menu icon next to the connection, choose **Rename** and type for example “Crisphive sandbox” or “Crisphive live”. ## Step 3 — Make the time readable (Formatter step) Crisphive sends times in UTC (for example `2026-10-14T14:00:00Z`). This step turns them into your local time. Screen in Zapier: **Formatter — Date / Time** (`zapier.com/editor`) 1. Under step 1, click + and choose Formatter. In Action event choose Date / Time, click Continue, and in Transform choose Format. — **Transform**: `Format` 2. In Input, type /, search Scheduled At and click Schedule Scheduled At. Set To Format and To Timezone. Leave From Format empty and From Timezone as UTC. — **Input**: `1. Schedule Scheduled At` 1. **Add Formatter** — Under step 1, click **+** and choose **Formatter** (under *Popular built-in tools*). 2. **Action event** — Choose **Date / Time**. Click **Continue**. 3. **Transform** — Choose **Format**. 4. **Input** — Click the field, type **/**, search `Scheduled At`, and click **Schedule Scheduled At**. 5. **To Format** — Choose **MMMM DD YYYY HH:mm:ss (January 22 2006 23:04:05)**. 6. **To Timezone** — Type your city (for example `Toronto`) and choose **America/Toronto**. 7. **Leave the rest** — Leave **From Format** empty and **From Timezone** as **UTC**. Click **Continue**. 8. **Test step** — Click **Test step**. **Output** should read like `October 14 2026 10:00:00`. ## Step 4 — Send the email (Email by Zapier) 1. **Add Email by Zapier** — Under step 2, click **+** and choose **Email by Zapier**. 2. **Action event** — Choose **Send Outbound Email**. Click **Continue**. Zapier’s limit: *up to 5 emails per day on Free or Trial plans, or up to 10 emails per hour on paid plans*. 3. **Fill the fields** — To insert a value from an earlier step, type **/** in the field, search for its name and click it. | Field | What to put | | --- | --- | | **To** | Your office email address. | | **Subject** | `Job confirmed: ` then **Short Code**. | | **Body (HTML or Plain)** | The block below. | Body, one line each (press Shift+Enter for a new line). Words in brackets are values you insert with **/**; `2. Output` is the result of the Formatter step: ``` Customer: [Customer Name] - [Customer Phone] Address: [Address Line], [Address City] Problem: [Description] Technician: [Crew Technician Name] When: [2. Output] ``` > **Do not use Schedule Job Dates Date for the day.** It lists the days the customer *asked for*, not the day that was booked. The **When** line already holds the booked date and time. Screen in Zapier: **Email by Zapier — Send Outbound Email** (`zapier.com/editor`) 1. Fill To with your office address and Subject with Job confirmed: followed by Short Code from step 1. — **To**: `office@yourbusiness.com` 2. In Body (HTML or Plain), build the five lines with / and Shift+Enter. Click Continue, then Test step. — **Body (HTML or Plain)**: `Customer: 1. Customer Name - 1. Customer Phone When: 2. Output` Click **Continue**, then **Test step**. On a trial plan the test email goes to your Zapier login email, not to **To**. ## Step 5 — Test, then turn it on 1. **Rename the Zap** — Click the Zap name at the top (**Untitled Zap**), choose **Rename**, type for example `Crisphive: email the office when a job is confirmed` and press Enter. 2. **Publish** — Click **Publish**. Zapier shows *Publishing… We are preparing your Zap to go live*, then **is in use**. - If it says *Cannot publish your draft*, the Status panel names the step still to test; test it and click **Publish** again. - When you publish a change to a Zap that is already on, Zapier first asks for a **Version name** (optional) in a **Publish new version** box. 1. **Confirm a job in Crisphive** — Book a job and confirm it (in Rehearsal if you are testing). A job booked by a voice agent or by **Book and confirm** fires it straight away. 2. **Open Zap history** — Open [zapier.com/app/history](https://zapier.com/app/history). A run of your Zap shows **Successful** within a few seconds. 3. **Check the inbox** — Check the inbox you put in **To**. On the Crisphive side, **Settings → Developer → Webhooks** ([crisphive.com/app/settings/developer/webhooks](https://crisphive.com/app/settings/developer/webhooks)) lists an endpoint on `hooks.zapier.com` with status **Active** while the Zap is on. ## Templates Ready-made automations you copy instead of working out yourself. Zapier cannot import a file, so each template is the list of steps and field mappings to copy. Each card says what the template does, what is inside and why it is safe before you take it. ### Template: Website form → confirmed job - **What it is:** The settings for a Zap you build in a few minutes: a booking form on your website books and confirms the visit in Crisphive, then tells the customer or your office the result. - **Why use it:** It is the automation business owners ask for most. Zapier cannot import a file, so this is every step and every field mapping written out — you copy them instead of working them out. - **What is inside:** **New Form Response** — the trigger from your form app (Google Forms, Typeform, Jotform, Webflow or WordPress); **Formatter → Format Phone Number** and **Formatter → Date / Time → Format** — the phone in E.164 and the start time on your business’s clock; **Crisphive → Book Job** — books the visit and asks Crisphive to confirm that time, with every field mapping; **Filter or Paths on Confirmed** — a confirmation to the customer, or a note to the office that a job waits in the queue - **Is it safe:** Yes. It is plain text you read and copy — no file to download, no program code and no key. Zapier connects to Crisphive by signing in and clicking Approve, so nothing secret is ever copied. Full template — give it to the reader when they ask for it: ``` Website form → confirmed job (Zapier) 1. Trigger: your form app — New Form Response Your form must collect: name, phone, email, street address, city or postal code, preferred date and time, and (optionally) the service and an SMS consent box that is not pre-ticked. 2. Formatter → Numbers → Format Phone Number Input = the form’s phone. To Format = the +15558001212 option. 3. Formatter → Date / Time → Format Input = the form’s date and time. To Format = YYYY-MM-DDTHH:mm:ss. From/To Timezone = your business time zone. 4. Crisphive → Book Job Customer ID Leave empty Customer Full Name Form → Name Phone (E.164) Formatter (phone) → Output Email Form → Email SMS Consent Form → consent checkbox (True only when ticked) Address Line / City / Postal Code Form → Street / City / Postal code State / Province / Country Form fields, or type ON / CA Job Type A fixed job type, a Lookup Table output, or empty Start (business local time) Formatter (date) → Output Description Form → Message 5. Filter or Paths on Confirmed Confirmed (Boolean) is true → send the customer a confirmation. Otherwise → notify the office that a job waits in the queue. ``` Google Forms, Typeform, Jotform, Webflow or WordPress → Crisphive. The customer picks a time on your form and the job lands on the board already confirmed, with a technician. To use it: 1. **Trigger: your form app — New Form Response** — Your form must collect: name, phone, email, street address, city or postal code, preferred date and time, and (optionally) the service and an SMS consent box that is *not* pre-ticked. 2. **Formatter → Numbers → Format Phone Number** — Input = the form’s phone. To Format = the `+15558001212` option. 3. **Formatter → Date / Time → Format** — Input = the form’s date and time. To Format = `YYYY-MM-DDTHH:mm:ss`. From/To Timezone = your business time zone. 4. **Crisphive → Book Job** — Map the fields as in the table below. 5. **Filter or Paths on Confirmed** — *Confirmed (Boolean) is true* → send the customer a confirmation. Otherwise → notify the office that a job waits in the queue. | Book Job field | Map from | | --- | --- | | Customer ID | Leave empty | | Customer Full Name | Form → Name | | Phone (E.164) | Formatter (phone) → **Output** | | Email | Form → Email | | SMS Consent | Form → consent checkbox (True only when ticked) | | Address Line / City / Postal Code | Form → Street / City / Postal code | | State / Province / Country | Form fields, or type `ON` / `CA` | | Job Type | A fixed job type, a Lookup Table output, or empty | | Start (business local time) | Formatter (date) → **Output** | | Description | Form → Message | > **Why there is no customer search in this template.** Book Job matches an existing customer by phone or email itself, so a returning customer is never duplicated, and the job is booked at the address the customer just typed. Use **Find Customer by Phone** only when you want to branch on whether the caller is new — not to fill Customer ID, which would book at the address stored on the customer (and is refused if there is none). **More templates.** Four more workflows to start with. Each lists the steps in order and exactly which field maps where. **Job completed → review request.** 1. **Trigger: Crisphive → Job Completed** — No input fields. 2. **Delay by Zapier → Delay For (optional)** — One or two hours, so the message does not arrive while the technician is still packing up. 3. **Gmail / Outlook → Send Email (or an SMS app)** — To = **Customer Email**. Subject = `Thanks for choosing us, ` + **Customer Name**. Body: your Google review link and the **Short Code**. For SMS, use **Customer Phone** and only text customers who agreed to texts. **Job completed → invoice.** 1. **Trigger: Crisphive → Job Completed** — 2. **Accounting app → Find or Create Customer** — QuickBooks Online, Xero, FreshBooks or Stripe: Name = **Customer Name**, Email = **Customer Email**. 3. **Accounting app → Create Invoice** — Customer = the previous step. Reference / memo = **Short Code**. Line item = **Job Type Name**. Crisphive stores no prices, so set the amount here — a Lookup Table from job type to price works well. **Every new or assigned job → your team channel.** 1. **Trigger: Crisphive → New Job** — Or **New Event** with Event = **Job Assigned** to post once a technician is on it. 2. **Formatter → Date / Time → Format** — Input = **Schedule Scheduled At**, From Timezone `UTC`, To Timezone your business zone, To Format `ddd MMM D, h:mm A`. 3. **Slack / Microsoft Teams / Google Chat → Send Channel Message** — Text: **Short Code** · **Customer Name** · **Address Formatted** · the formatted time · **Job Type Name**. **New customer → CRM or mailing list.** 1. **Trigger: Crisphive → New Customer** — Fires for customers created anywhere: dashboard, website widget, phone agent, Book Job. 2. **HubSpot / Mailchimp / Google Sheets / Airtable → Create or Update Contact (or Add Row)** — Map **Full Name**, **Email**, **Phone** and the address fields. Store the Crisphive **ID** in a custom field so later Zaps can find the same customer. Only add the customer to a marketing list if they agreed to it. ## What the app can do | Type | Name in Zapier | What it does | | --- | --- | --- | | Trigger (instant) | **New Customer** | Starts the moment a customer is added in the Crisphive dashboard or through the API. A customer that Crisphive creates by itself while booking a job (website widget, phone agent, Book Job) does not start it — use **New Job** for those. Delivers the customer. | | Trigger (instant) | **New Job** | Starts when a job is booked, from any channel (dashboard, website widget, phone agent, API, another Zap). Delivers the full job. | | Trigger (instant) | **Job Completed** | Starts when a technician (or the office) completes a job. Delivers the full job. | | Trigger (instant) | **Job Rescheduled** | Starts when a job moves to a new time. Delivers the full job. | | Trigger (instant) | **New Event** | Starts on any Crisphive event you pick from a live list: job confirmed, assigned, archived, priority changed, customer updated, technician created, and more. | | Search | **Find Customer by Phone** | Finds a customer by exact phone number — for example to greet or route a returning caller differently. | | Action | **Book Job** | Books a job *and* confirms it at the time you give, in one step. Crisphive picks the technician automatically. | “Instant” means Crisphive pushes the event to Zapier the moment it happens — there is no 15-minute polling delay. Under the hood each trigger is a [webhook](https://docs.crisphive.com/webhooks): a message Crisphive sends to a web address Zapier gives it. Zapier creates that webhook when you turn the Zap on and deletes it when you turn the Zap off. Every delivery is signed, and the app checks the signature, so a forged request cannot start your Zap. ## Triggers All five triggers are instant. When you turn the Zap on, the app subscribes in Crisphive to exactly one event; when you turn it off, the subscription is deleted. Each live trigger takes one of the 25 webhook slots your business has per environment. | Trigger | Crisphive event | Input fields | Output | Permission needed (besides Developer access) | | --- | --- | --- | --- | --- | | New Customer | `customer.created` | None | The customer: ID, UID, full name, phone, email and tier, plus `event_id` and `event_type` | `customers_view` | | New Job | `job_request.created` | None | The full job (read from Crisphive after the event) | `job_view` + `job_manage` | | Job Completed | `job_request.completed` | None | The full job | `job_view` + `job_manage` | | Job Rescheduled | `job_request.rescheduled` | None | The full job, with its new time | `job_view` + `job_manage` | | New Event | The event you choose | **Event** (required, dropdown) | Job events: the full job. Customer and technician events: the object in the event | Depends on the event (see below) | ## Fields a job trigger gives you Job triggers read the full job from Crisphive before the Zap runs, so you always get current data. Zapier builds each label from the field’s name and puts the parent name in front of nested values (for example customer name, address city); its exact capitalisation may differ slightly from this list. The most useful ones: | Field | Example | Notes | | --- | --- | --- | | ID | `7c1f2a90-3b4d-…` | The job’s ID. Use it to look the job up later. | | Short Code | `REQ-CA-8K2M4Q7X` | The human reference shown on the dashboard and in customer messages. Good for invoices and channel posts. | | Job Type Name | `AC Repair` | | | Current Status Key / Display Name | `completed` / `Completed` | The workflow status. | | Priority | `p2` | `p0` is an emergency, `p3` the lowest. | | Description | `No cooling upstairs` | | | Customer ID / Name / Phone / Email | `Alex Martin`, `+16135550177` | Phone is always in international (E.164) format. | | Address Line / City / State / Postal / Country / Formatted | `145 Laurier Avenue West` | **Formatted** is the one-line address. | | Schedule Scheduled At | `2026-10-13T14:00:00Z` | **UTC** (the `Z`). Convert it before showing it to a customer — see [Field mapping tips](https://docs.crisphive.com/docs/zapier#field-mapping). | | Schedule Business Timezone | `America/Toronto` | Use it to convert UTC times. | | Assignment Technician ID | `…` | The assigned technician. | | Customer URL | `https://…` | The link the customer uses to see and manage this job. | | Completed At / Created At | `2026-10-13T16:05:00Z` | UTC. | | Event ID / Event Type | `evt_…` / `job_request.completed` | Which delivery started this run. | ## New Event — every event you can choose The **Event** dropdown is read live from Crisphive (`GET /v1/webhooks/event-types`), so new Crisphive events appear without a new version of the app. Today the list is: | Dropdown label | Event | Fires when | Permission | | --- | --- | --- | --- | | Job Created | `job_request.created` | A job is booked. | `job_view` + `job_manage` | | Job Confirmed | `job_request.confirmed` | A time is confirmed (by the customer, the office or Book Job). | `job_view` + `job_manage` | | Job Assigned | `job_request.assigned` | A technician or crew is assigned or reassigned. | `job_view` + `job_manage` | | Job Rescheduled | `job_request.rescheduled` | A job moves to a new time. | `job_view` + `job_manage` | | Job Held | `job_request.held` | An online booking is given an unconfirmed time slot (booking hold). | `job_view` + `job_manage` | | Job Hold Released | `job_request.hold_released` | A booking hold ends without a booking. | `job_view` + `job_manage` | | Job Priority Changed | `job_request.priority_changed` | A job’s priority changes (for example raised to an emergency). | `job_view` + `job_manage` | | Job Status Changed | `job_request.status_changed` | Any other workflow step (on the way, arrived, …). | `job_view` + `job_manage` | | Job Completed | `job_request.completed` | A job is completed. | `job_view` + `job_manage` | | Job Archived | `job_request.archived` | A job is archived or cancelled. | `job_view` + `job_manage` | | Customer Created / Updated / Deleted | `customer.created` / `.updated` / `.deleted` | A customer record changes. | `customers_view` | | Technician Created / Updated / Deleted | `technician.created` / `.updated` / `.deleted` | A team member is added, edited (including suspended) or removed. | `team_view` | Screen in Zapier: **Trigger: New Event** (`zapier.com/editor`) 1. In the trigger step, select Crisphive (1.0.0), choose New Event in Trigger event, and pick your Crisphive connection in Account. — **Trigger event**: `New Event` 2. Click Continue. Open the Event dropdown and choose the event, for example Job Assigned (each event is shown with its ID, such as job_request.assigned). — **Event**: `Job Assigned` 3. Click Continue, then Test trigger. Zapier loads up to three recent records, named Event A, Event B and Event C, so you can map fields in the next steps. — click **Test trigger** > **Sample data is not a real event.** While you build a Zap, **Test trigger** shows up to three recent jobs as samples (**Event A**, **Event B**, **Event C**) — whatever their status, and also when New Event is set to a customer or technician event. Only New Customer shows recent customers. A Job Completed sample may therefore be a job that is not completed. The real event arrives only after you turn the Zap on. ## Search: Find Customer by Phone | Field | Required | What to enter | | --- | --- | --- | | **Phone (E.164)** | Yes | The phone number in international format: a plus sign, the country code and the number, no spaces needed — for example `+16135550177`. Spaces, dashes and brackets are tolerated; a number without the country code is refused (`PHONE_INVALID`). | It is an **exact** match on the stored number and returns up to five customers. Output fields (Zapier’s labels may be capitalised slightly differently): **ID**, **UID** (your own reference, for example a CRM ID), **Full Name**, **Tier** (`regular` or `vip`), **Status**, **Request Count** (number of jobs), **Last Request At**, **SMS Opt In**, **Updated At**. Phone and email are not part of the search result — you already have the phone. Screen in Zapier: **Search: Find Customer by Phone** (`zapier.com/editor`) 1. Add a step, select Crisphive, choose Find Customer by Phone in Action event, then your Crisphive connection. — **Action event**: `Find Customer by Phone` 2. In Phone (E.164), map the phone number from an earlier step — ideally the output of a Formatter step that turned it into +1… format. — **Phone (E.164)**: `2. Output: +16135550177` 3. Set “Should this step be considered a success when nothing is found?” to True, so a first-time customer does not stop the Zap. Then click Continue and Test step. — **Should this step be considered a “success” when nothing is found?**: `True` ## Action: Book Job Book Job calls [`POST /v1/job-requests/book-and-confirm`](https://docs.crisphive.com/technical-reference/book-and-confirm-job-request). In one step it creates the job, sizes it (from the job type’s default duration, or the Duration you give), confirms it at the start time, and lets Crisphive’s solver assign a technician. Send the customer and the job address in the customer fields and leave **Customer ID** empty: Crisphive matches an existing customer by phone or email and never creates a duplicate. If Customer ID is filled, the customer and address fields are ignored. | Field | Required | What to enter | Example | | --- | --- | --- | --- | | **Customer ID** | No | Leave empty (recommended). Book Job then matches an existing customer by phone or email — never creating a duplicate — and books the job at the address you send. Fill it only with the ID of a customer whose address on file is the job address: with a Customer ID the customer fields and the address fields are ignored, and a customer with no stored address is refused (`JOB_REQUEST_ADDRESS_REQUIRED`). | `3f6c8e21-…` | | **Customer Full Name** | When Customer ID is empty | The customer’s name. | `Alex Martin` | | **Phone (E.164)** | Phone or Email, when Customer ID is empty | International format. Crisphive matches an existing customer with this phone (or email) and never creates a duplicate. | `+16135550177` | | **Email** | Phone or Email, when Customer ID is empty | The customer’s email. | `alex.martin@example.com` | | **SMS Consent** | No | **True** only if the customer explicitly agreed to receive text messages (for example ticked an unticked box on your form). Without it they still get email. | `False` | | **Address Line** | When Customer ID is empty | Street address of the job. | `145 Laurier Avenue West` | | **City** | City or Postal Code, when Customer ID is empty | Crisphive needs one of the two to find a technician who covers the area. | `Ottawa` | | **State / Province** | No | Two-letter code. | `ON` | | **Postal Code** | City or Postal Code, when Customer ID is empty | | `K1P 5J3` | | **Country** | No | Two-letter country code. | `CA` | | **Job Type** | No | Dropdown of your active job types. Empty = the business’s default job type (“General”). You can also map a job type ID. | `AC Repair` | | **Start (business local time)** | Yes | When the job starts, on **your business’s own clock**, with no time zone: `YYYY-MM-DDTHH:MM:SS`. It must be in the future; it should be inside working hours or the job will not be confirmed. | `2026-10-13T10:00:00` | | **Duration (minutes)** | No | Length of the work in minutes. Empty = the job type’s default duration. | `90` | | **Description** | No | What needs doing. Technicians see it. | `No cooling upstairs` | Screen in Zapier: **Action: Book Job (new customer from a form)** (`zapier.com/editor`) 1. Add a step, choose App: Crisphive and Event: Book Job, and pick your Crisphive connection. — **Action event**: `Book Job` 2. Leave Customer ID empty — Book Job matches a returning customer by phone or email itself. Map the name from your form into Customer Full Name. — **Customer Full Name**: `1. Name: Alex Martin` 3. Map Phone (E.164) from the Formatter step that converted the number, and Email from the form. — **Phone (E.164)**: `2. Output: +16135550177` 4. Set SMS Consent to True only if your form has a consent box the customer ticked; otherwise choose False. — **SMS Consent**: `False` 5. Map the address. Address Line is required for a new customer, together with City or Postal Code. — **Address Line**: `1. Street: 145 Laurier Avenue West` 6. Choose the Job Type from the dropdown (or leave it empty for the default type). Map Start (business local time) from the Formatter step that produced YYYY-MM-DDTHH:mm:ss. — **Start (business local time)**: `3. Output: 2026-10-13T10:00:00` 7. Leave Duration empty to use the job type’s default. Click Continue, then Test step: Zapier books a real job in the environment of your connection. — click **Test step** ## What Book Job returns | Field | Meaning | | --- | --- | | **Job ID** | The new job’s ID. | | **Short Code** | The human reference, for example `REQ-CA-8K2M4Q7X`. | | **Customer ID** | The matched or newly created customer. | | **Customer URL** | The link the customer uses to see and manage the job. | | **Confirmed** | `true`: the job is scheduled and a technician is assigned. `false`: the job is saved but waits in your coordinator queue — see below. | | **Scheduled At** | The confirmed start time, in **UTC**. | | **Assigned Technician ID** | Who was assigned. | | **Refusal Stage / Error Code / Message / Data** | Only when Confirmed is false: why no technician could take that time (for example `JOB_REQUEST_NO_TECHNICIAN_AVAILABLE`). | > **“Confirmed: false” is not an error.** The job exists and waits in your queue for a coordinator to schedule. Do *not* re-run the step or replay the Zap run with changed data — that books a second job. Add a **Filter** or **Paths** step on *Confirmed* to send a “we’ll call you to confirm a time” message instead of a confirmation. Retries are safe: Book Job sends an `Idempotency-Key` built from the Zap and the step run, so if Zapier retries the same step after a network error, Crisphive returns the first answer instead of booking twice. ## Field mapping tips Most failed runs come from two fields: the phone number and the start time. Get these two right and the rest maps one to one. ## Phone numbers: convert to E.164 with Formatter Crisphive refuses a phone number it cannot place in a country, rather than guessing. Forms usually collect `613-555-0177` or `(613) 555-0177`; Crisphive needs `+16135550177`. Add a **Formatter by Zapier** step before the Crisphive step: Screen in Zapier: **Formatter: phone number to E.164** (`zapier.com/editor`) 1. Add a step and choose App: Formatter by Zapier, Event: Numbers. — **Action event**: `Numbers` 2. In Transform, choose Format Phone Number. In Input, map the phone field from your form. — **Transform**: `Format Phone Number` 3. In To Format, choose the international format that starts with a plus sign and has no spaces (+15558001212). Set the country to Canada or United States for numbers typed without a country code. — **To Format**: `+15558001212` 4. Click Test step. The Output is +16135550177 — map this Output into the Crisphive Phone field. — click **Test step** ## Start time: business-local, no time zone **Start (business local time)** is read on your business’s own clock (the time zone set in Crisphive → Settings). Send `2026-10-13T10:00:00` for 10 am at your business. If your form gives a date and a time in another shape, convert it with **Formatter by Zapier → Date / Time → Format**: Screen in Zapier: **Formatter: date to business-local start time** (`zapier.com/editor`) 1. Add a step: App Formatter by Zapier, Event Date / Time. Choose Transform: Format. — **Transform**: `Format` 2. In Input, map the date and time from your form (both, side by side, if the form has two fields). — **Input**: `1. Date 1. Time: 10/13/2026 10:00 AM` 3. In To Format choose Custom and type YYYY-MM-DDTHH:mm:ss. Set To Timezone and From Timezone to your business time zone, so the hour is not shifted. — **To Format**: `YYYY-MM-DDTHH:mm:ss` 4. Click Test step. The Output reads 2026-10-13T10:00:00 — map it into Start (business local time). — click **Test step** - **Never send a value ending in `Z` or `-04:00`** unless it names the same wall-clock time at your business. Crisphive refuses an offset that disagrees with your business time zone (`JOB_REQUEST_INVALID_INPUT`, with the local reading in the error) rather than guessing which hour you meant. - **Times coming out of Crisphive are UTC** (*Scheduled At*, *Completed At*). Before putting one in a customer message, convert it with the same Formatter step: From Timezone `UTC`, To Timezone your business zone, and a friendly To Format such as `dddd, MMMM D [at] h:mm A`. - **Country codes** are two letters (`CA`, `US`); State / Province likewise (`ON`). - **Job Type from a form**: if a dropdown on your form names the service, use a **Formatter → Utilities → Lookup Table** step to turn the label into a Crisphive job type ID, or simply leave Job Type empty and let the default type apply. ## Reference: what the app sends You never type this — it is what **Book Job** sends to Crisphive for the Website form → confirmed job template, useful when you read Zap history or ask support for help. ```http POST https://api.crisphive.com/v1/job-requests/book-and-confirm Authorization: Bearer Idempotency-Key: zap---book-and-confirm Content-Type: application/json { "customer": { "full_name": "Alex Martin", "phone": "+16135550177", "email": "alex.martin@example.com", "sms_opt_in": false }, "address": { "line": "145 Laurier Avenue West", "city": "Ottawa", "state": "ON", "postal_code": "K1P 5J3", "country": "CA" }, "scheduled_at": "2026-10-13T10:00:00", "description": "No cooling upstairs" } ``` Empty fields are left out. When a trigger is turned on, the app sends `POST /v1/webhooks` with one event type and `expires_in_days: 365`; turning the Zap off sends `DELETE /v1/webhooks/{id}`. See [Automation platforms](https://docs.crisphive.com/docs/automation-platforms) for the full protocol. ## Test Book Job 1. **Switch to Rehearsal and connect** — In the Crisphive dashboard switch to **Rehearsal**, then connect Zapier ([Step 2](https://docs.crisphive.com/docs/zapier#connect)). Nobody is ever contacted from Rehearsal, and phone numbers in the `555-01xx` range and `@example.com` addresses are never messaged anyway. 2. **Build a two-step test Zap** — Trigger: **Schedule by Zapier → Every Day** (any trigger works). Action: Crisphive → **Book Job**. 3. **Fill Book Job with the test values** — Customer Full Name `Sam Tremblay` · Phone `+16135550188` · Email `sam.tremblay@example.com` · SMS Consent `False` · Address Line `300 Bank Street` · City `Ottawa` · State / Province `ON` · Postal Code `K2P 1X4` · Country `CA` · Start `2026-10-13T10:00:00` (any future weekday time inside your working hours) · Description `Zapier test`. 4. **Click Test step** — Success: Zapier shows **Confirmed: true**, a **Short Code** like `REQ-CA-…` and an **Assigned Technician ID**. 5. **Check Crisphive** — Open the dashboard (still in Rehearsal). The job appears on the board at 10:00 with status **Confirmed** (opened, its window is titled **Booking Confirmed**) and a technician, and **Sam Tremblay** appears under Customers. Run the step again with the same values: no second customer is created. 6. **Clean up** — Archive the test job in Crisphive and turn off test Zaps you do not need — turning a Zap off frees its webhook slot. ## Good to know - **Want an email the moment a job is booked, before it is confirmed?** Use trigger event **New Job** instead. That fires at booking, so **Technician** and the time are still empty — leave those two lines out of the body and drop the Formatter step. - **The customer’s email is included only if the customer has one.** It sits under the customer fields of the trigger data. Customers created from a phone call often have only a phone number. - **Zapier adds a footer** to every email from Email by Zapier: *Visit this link to stop these emails: …* It cannot be removed on that action; use Gmail or Outlook as the action if that matters. - **The trigger subscription lasts one year.** Crisphive gives the Zapier subscription a 365-day signing secret. The Owner and Administrators get an email 7 days before it ends. Turning the Zap off and on again renews it. - **Test records are not filtered by state.** *Test trigger* may show jobs that are not in the state the event names. The real event arrives only after you publish the Zap. **Then set the connection to last a year.** A new connection lasts 90 days. So that Zapier does not stop on that day, the Owner sets it to 365 days right after connecting. **Settings → Developer → MCP connections** ([crisphive.com/app/settings/developer/mcp-servers](https://crisphive.com/app/settings/developer/mcp-servers)) lists every app connected by signing in to Crisphive, not only AI apps, so Zapier appears there. 1. **Open MCP connections** — In the Crisphive dashboard go to **Settings → Developer → MCP connections** and find the Zapier row. 2. **Set lifetime** — Click **Set lifetime**, enter `365` in **Lifetime (days)** and click **Save**. The days count from when Zapier was first authorized, not from today. ## What the connection is allowed to do - **Exactly what your role can do — nothing more.** Crisphive checks your *current* role on every request. If an Owner later narrows your role, the connection narrows with it; if you are removed or suspended, it stops working immediately. - **Only one business and one environment** — the business and the sandbox/live environment you were in when you approved. - **Only what this app uses.** The app reads job types, reads and books jobs, looks up customers, and creates and deletes its own webhook subscriptions. It never sees prices (Crisphive stores none) and cannot change your settings. - **It expires.** A connection lasts 90 days from approval by default (1–365 days with **Set lifetime** under Settings → Developer → MCP connections), and also stops if it is not used for 30 days. The Owner and Administrators are emailed 14 days before the 90-day limit. To renew, reconnect in Zapier (sign in and approve again). See [Go live](https://docs.crisphive.com/docs/zapier#go-live). ## Troubleshooting | Symptom | Cause | Fix | | --- | --- | --- | | **Sign in** fails, or the trigger cannot be turned on (403) | You are not the Owner. | Ask the Owner, or have them grant the Developer module to your role in **Settings → Permissions**. | | Zapier asks you to log in again during setup | Your Zapier session ended. | Log in; the draft is kept. Re-run **Test step** on the step you were on. | | Run is **Successful** but no email arrives | Free and Trial plans send at most 5 emails a day with Email by Zapier, or the email went to spam. | Open the run’s **Send Outbound Email** step, and check your spam folder. | | Wrong hour in **When** | The Formatter step converts to the wrong time zone. | Check **To Timezone** in the Formatter step; **From Timezone** stays **UTC**. | | A job was booked but nothing ran | The job is not confirmed yet. | A Job Confirmed Zap fires on confirmation. Use **New Job** to fire at booking. | | Turning the Zap on fails with `FORBIDDEN` | The connected person lacks Developer access, which every trigger needs. | Have the Owner connect, or ask the Owner to grant the Developer module to your group in Settings → Permissions. | | Turning the Zap on fails with `WEBHOOK_EVENT_NOT_PERMITTED (needs permission: customers_view)` | Your role cannot read the data that event carries. | Ask the Owner for the permission named in brackets, or connect with an account that has it. | | Turning the Zap on fails with `WEBHOOK_LIMIT_REACHED` | The business already has 25 active webhook endpoints in this environment. | Turn off Zaps you no longer use, or delete old endpoints in Crisphive → Settings → Developer → Webhooks. | | The trigger never fires | The event happened in the other environment, the Zap is off, or the subscription was stopped (connection disconnected, connecting member removed or suspended, or 5 failed deliveries in a row). | Make the event in the same environment as the connection; turn the Zap off and on again to re-subscribe. | | Jobs are booked but you cannot see them | The connection was approved while the dashboard was in the other environment (often sandbox, where new businesses start). | Switch the dashboard to the other environment to find them. To book live, switch to Live and add a new connection. | | Zapier asks you to reconnect, or a step fails with `OAUTH_GRANT_EXPIRED` | The connection reached its 90-day limit, was unused for 30 days, or was disconnected in Crisphive. | In Zapier, Apps → Crisphive → Reconnect, sign in and Approve. | | `PHONE_INVALID` | The phone number has no country code or is not a real number. | Add a Formatter → Format Phone Number step and map its Output. | | `JOB_REQUEST_INVALID_INPUT` | Start is missing, not in `YYYY-MM-DDTHH:MM:SS`, in the past, or carries an offset that disagrees with your business time zone; or Customer ID is empty and the name, address line, or both phone and email are missing; or the job type is inactive. | Fix the field named in the message. Check Start against your business clock. | | `JOB_REQUEST_ADDRESS_REQUIRED` | A new customer was sent without City or Postal Code, or Customer ID points at a customer with no address on file. | Map City or Postal Code. For returning customers, leave Customer ID empty and send the address fields. | | `JOB_REQUEST_QUOTE_INVALID` | The job type has no default duration and Duration is empty, or Duration is 0. | Give the job type a default duration in Settings → Job Types, or fill Duration. | | **Confirmed: false** with refusal `JOB_REQUEST_NO_TECHNICIAN_AVAILABLE` | No technician who covers that address and has the skills is free at that time (outside working hours, time off, fully booked). | Nothing to retry: the job waits in the coordinator queue. Schedule it from the dashboard and, if it keeps happening, check working hours and service areas. | | “Nothing could be found” stops the Zap | No customer has that exact phone number. | Set the search’s “success when nothing is found” option to True, or drop the search (Book Job matches customers itself). | | The job is booked hours off | A UTC time or a time with a different offset was mapped into Start, or the Formatter time zones were left on the Zapier account default. | Format Start as business-local `YYYY-MM-DDTHH:mm:ss` with From/To Timezone set to your business zone. | | Two jobs for one form response | The Zap run was replayed with edited data, or the Zap was duplicated. | Archive the duplicate. Replaying an unchanged run is safe; changing the data makes it a new booking. | | A step fails with `INVALID_REQUEST_BODY` | A field has the wrong type, for example text in Duration. | Map a whole number into Duration, or leave it empty. | | Zapier shows “Crisphive rate limit” and retries | More than about 240 requests per minute on one connection. | Zapier retries on its own. Spread large imports over time. | | You cannot turn on your first Zap | Zapier requires a confirmed email address, and a Zap needs at least one app action (a Formatter step alone does not count). | Confirm your Zapier email; add a real action step. | ## Go live Zapier does not use API keys, so there is no `chsk_test_` → `chsk_live_` swap. Going live means making a **new connection while your dashboard is in Live**. 1. **Switch Crisphive to Live** — In the dashboard, switch from Rehearsal to **Live**. If your business has not gone live yet, confirm go-live first (Owner or Administrator). 2. **Add a live connection** — In any Crisphive step of your Zap, open **Account** → **+ Connect a new account**, sign in and **Approve**. Rename it “Crisphive live”. 3. **Point every Crisphive step at it** — Change the Account of each Crisphive trigger, search and action to the live connection. Re-pick the Job Type dropdown — sandbox and live have separate job types. 4. **Publish** — Publish the Zap. Triggers re-subscribe on the live environment; the sandbox subscription is removed when the old version is turned off. 5. **Remember the renewal date** — A connection lasts **90 days** from approval and stops after 30 days without use. The Owner and Administrators get an email 14 days before the limit; set your own calendar reminder too, then reconnect. Each trigger’s signing secret lasts 365 days; turning the Zap off and on renews it. ## Removing access - **In Zapier:** turn off the Zaps (this deletes their webhook subscriptions), then delete the connection under **Apps → Crisphive**. - **In Crisphive:** the Owner can disconnect Zapier for everyone under **Settings → Developer → MCP connections** (`/app/settings/developer/mcp-servers`). Its tokens stop working and the webhooks it created are disabled. - **Automatically:** removing or suspending the member who connected Zapier stops the connection and the triggers they turned on. ## Related guides and reference - [Automation platforms overview](https://docs.crisphive.com/docs/automation-platforms) — what every automation integration shares - [Make](https://docs.crisphive.com/docs/make) — the same booking and triggers in Make scenarios - [n8n](https://docs.crisphive.com/docs/n8n) — the verified Crisphive node on n8n Cloud or self-hosted, plus n8n AI Agents - [Webhooks reference](https://docs.crisphive.com/webhooks) — events, signatures and retries - [Book and confirm a job](https://docs.crisphive.com/technical-reference/book-and-confirm-job-request) — the API call behind every booking step ## FAQ **Is the Crisphive Zapier integration free?** The Crisphive app itself costs nothing extra. Zapier bills you for tasks and plan features: a new Zapier account starts a 14-day Professional trial, and a multi-step Zap like the one in this guide needs a paid plan after the trial. On the Crisphive side, use any plan whose features you need, such as technicians and service areas. **How do I add Crisphive to my Zapier account?** The app is Invite Only for now. Email `support@crisphive.com` and we’ll send you the invite link. Open it, log in to Zapier and click **Accept Invite & Build a Zap**; **Crisphive (1.0.0)** then appears in your Zap editor. **Do I need an API key for Zapier?** No. Zapier connects with OAuth: you sign in to Crisphive and click Approve. API keys (`chsk_…`) are for n8n, voice agents and your own code. **Who in my business can connect Zapier?** Anyone with a Crisphive login can connect, and the connection can do exactly what their role allows. Turning on a trigger needs Developer access, which by default only the Owner has; booking needs `job_create` and `job_manage`. **How do I test without contacting real customers?** Switch the Crisphive dashboard to Rehearsal before you approve the connection. Rehearsal is the sandbox: its own isolated data, and it never texts or emails anyone. Make a separate connection in Live when you are ready. **Why did my job not confirm?** Book Job answered **Confirmed: false** because no technician who covers that address was free at that time — often a start outside working hours. The job is saved in your coordinator queue; schedule it from the dashboard and do not re-run the step. **What time zone does the start time use?** Your business’s own clock, set in Crisphive. Send `2026-10-13T10:00:00` for 10 am at your business, with no offset. Times Crisphive sends back (Scheduled At, Completed At) are in UTC. **Can a forged request start my Zap?** No. Every Crisphive delivery is signed with a secret only your subscription knows (`Crisphive-Signature`), and the app drops any delivery whose signature does not match. **How long does the connection last?** 90 days from approval, and it also stops after 30 days without use. The Owner and Administrators are emailed 14 days before the 90-day limit. Reconnect in Zapier to renew. **Why does the email show the wrong time?** Crisphive sends times in UTC. Add a **Formatter → Date / Time → Format** step with **From Timezone** UTC and **To Timezone** your business’s zone, and put its Output in the email, as in Step 3. **How do I remove Zapier’s access?** Turn off the Zaps and delete the connection in Zapier, or disconnect Zapier in Crisphive under Settings → Developer → MCP connections. Removing the member who connected it also stops it.