--- name: crisphive-make-setup description: "Walks a Crisphive customer step by step through connecting Crisphive to Make. Connect Crisphive to Make step by step: an instant trigger on confirmed jobs, read the full job, and email your office from Gmail within seconds. Use when the user wants to set up, test or troubleshoot Crisphive with Make." --- # Connect Crisphive to Make ## How to use this file (instructions for the AI assistant) You are helping a Crisphive customer connect Crisphive to **Make**. 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/make (last updated 2026-10-30). 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, Make sends one email from your Gmail to your office within a few seconds — with the customer, the visit time in your local time, the technician, the address, the job type and the job code. **Make** is a visual automation tool: a *scenario* is a chain of *modules*, each one a step in an app, run from left to right. **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 Make connects the two. > To add the Crisphive app to your Make 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 from your Gmail. It looks like this: ``` Subject: Job confirmed: REQ-CA-8K2M4Q7X Customer: Alex Martin Phone: +16135550177 When: Wednesday, October 14, 2026 10:00 AM Technician: Jordan Lee Address: 145 Laurier Avenue West, Ottawa Job type: General Job: REQ-CA-8K2M4Q7X ``` The scenario has three modules, left to right. It takes about **15 minutes** to build. ``` Crisphive — Watch events → Crisphive — Get a job → Gmail — Send an email ``` > **Why Get a job?** **Watch events** hands Make only three fields of the job: `id`, `status` and `short_code`. The customer, schedule, address and technician come from **Get a job**, which reads the job back by its ID. Reading the job back is also the safe pattern: Make receives the event already parsed, so it cannot check Crisphive’s webhook signature, and Get a job returns the real data from Crisphive. ## Before you start | You need | Notes | | --- | --- | | A Crisphive login as **Owner** | Turning on an event trigger needs the Owner role, or a role the Owner gave the Developer module. | | The Crisphive Make invite link | Email `support@crisphive.com` and we’ll send it to you. | | A **Make account** | The **Free** plan is enough for this scenario. Each run uses 3 operations (one per module). | | A **Gmail** (or Google Workspace) account | The email is sent from this mailbox. | > **Test in Rehearsal first.** Make 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 — Install the Crisphive app on Make 1. **Open the invite link** — If you are not signed in, Make shows its **Sign in** page. Sign in, or click **Sign up** and create an account. 2. **Answer the Welcome survey (new accounts only)** — A new account goes through a short **Welcome** survey first: *What would you like to automate?*, *How would you describe your technical experience?*, *What apps do you use the most?* (**Skip** is offered), *What size is your workplace?* and *How did you discover Make?*. 3. **Install into your organization** — Make shows the Crisphive app page: *“You are installing application Crisphive, select organizations to which you want to install the application.”* Tick your organization (for a new account: **My Organization**) and click **Install**. 4. **Go to the dashboard** — The page reads **Crisphive installed successfully.** Click **Go to dashboard**. > If the app page says *“No modules have been created in the app yet or they have a private status…”*, the app is not ready for your account yet. Email `support@crisphive.com`. ## Step 2 — Create the scenario and the trigger (Watch events) In this step you create the webhook that listens for confirmed jobs, and — inside the same box — the connection to your Crisphive account. Make connects with sign-in and approval: you never paste a password or an API key into Make. Screen in Make: **Watch events — create a webhook** (`make.com/scenarios/new`) 1. On the dashboard click Create scenario. Click the big +, type Crisphive and click Watch events (badge Instant). Under Webhook, click Create a webhook. — click **Create a webhook** 2. In the Create a webhook box, type a Webhook name you will recognise, for example Crisphive job confirmed. — **Webhook name**: `Crisphive job confirmed` 3. Next to Connection, click Create a connection. A Create a connection box opens. — click **Create a connection** 4. Type a Connection name that says which environment it is, for example Crisphive sandbox. Leave Advanced settings off, then click Save. A Crisphive window opens. — **Connection name**: `Crisphive sandbox` Screen in Crisphive: **Authorize Make** (`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 Make page shows your business name, the mode (Rehearsal or Live) and who you are signed in as. In Rehearsal it says Make will only see Rehearsal (test) data. Use Switch or Connect Live instead if the business or mode is wrong. Click Approve. — click **Approve** Screen in Make: **Watch events — choose the event** (`make.com/scenarios/new`) 1. Back in Make, Connection shows Crisphive sandbox and a new Event field appears. Open it and choose job_request.confirmed. — **Event**: `job_request.confirmed` 2. Click Save in the Create a webhook box. The module shows the webhook name and a Webhook URL. Click Save on the module. — click **Save** 1. **Create the scenario** — On the dashboard, click **Create scenario** (top right). The editor opens on an empty canvas with a large **+**. If a **Build with Maia** panel opens on the left, close it with **×**. 2. **Add Watch events** — Click the big **+**, type `Crisphive`, and click **Watch events** (badge **Instant**). 3. **Create a webhook** — In the module, under **Webhook**, click **Create a webhook**. In the **Create a webhook** box, type a **Webhook name**, for example `Crisphive job confirmed`. 4. **Create the connection inside the webhook box** — Next to **Connection**, click **Create a connection**. Type a **Connection name** that says which environment it is, for example `Crisphive sandbox` (Make suggests *“’s Crisphive connection”*). Leave the **Advanced settings** switch off: it only reveals **Additional scopes**, and an empty value gives the connection the same access as your Crisphive role. Click **Save**. A Crisphive window opens — allow pop-ups for make.com if nothing appears. 5. **Authorize Make** — In the Crisphive window, sign in if asked. The **Authorize Make** page shows your business name, the mode (**Rehearsal** or Live) and who you are signed in as. In Rehearsal it says *Make will only see Rehearsal (test) data — not your real jobs, customers or team.* Use **Switch** or **Connect Live instead** if that is the wrong business or mode. Click **Approve**. 6. **Choose the event** — Back in Make, **Connection** shows `Crisphive sandbox` and a new field, **Event**, appears. Open it and choose `job_request.confirmed`. The list is read live from Crisphive and shows 14 events by their codes, for example `job_request.created`, `job_request.confirmed`, `job_request.completed`, `customer.created`. 7. **Save** — Click **Save** in the **Create a webhook** box. The module now shows the webhook name and a **Webhook URL** (`https://hook..make.com/…`). Click **Save** on the module. 8. **Name the scenario** — Make renames the scenario to *Integration Crisphive*. Click the name at the top left, type for example `Crisphive: email the office when a job is confirmed`, and press Enter. ## Step 3 — Load a real event (Run once) Make needs one real event before it can offer the job’s fields for mapping. 1. **Start listening** — Click **Save** in the bottom toolbar, then **Run once**. The log reads *The request was accepted. Waiting for data.* 2. **Confirm a job in Crisphive** — Confirm a job (in Rehearsal if you are testing). A job booked with **Book and confirm** fires straight away. 3. **Open the bubble** — Within a few seconds the Watch events module shows a **1** bubble. Click it: **Bundle 1** has *Event type* `job_request.confirmed`, an **Object** with `id`, `status` and `short_code`, an *Event ID* and *Created at*. ## Step 4 — Read the full job (Get a job) Screen in Make: **Get a job** (`make.com/scenarios/1`) 1. Click the small + on the right of Watch events, type Crisphive and click Get a job. Connection already shows Crisphive sandbox. — **Job ID** 2. Click Job ID. In the mapping panel, under Object, click id. The field shows 1. object: id. Click Save. — **Job ID**: `1. object: id` 1. **Add Get a job** — Click the small **+** on the right of the Watch events module, type `Crisphive`, and click **Get a job**. 2. **Connection** — `Crisphive sandbox` is already selected. 3. **Job ID** — Click the field. The mapping panel opens on the side. Under **Object**, click **id**. The field shows `1. object: id`. 4. **Save** — Click **Save**. ## Step 5 — Send the email (Gmail) 1. **Add Send an email** — Click the **+** on the right of Get a job, type `Gmail`, and click **Send an email**. 2. **Connect Gmail** — Next to **Connection**, click **Create a connection**, then **Sign in with Google**. Choose the Google account that will send the email. > **On Google’s permission screen, tick every box (or Select all) before you click Continue.** If the box that lets Make *send email on your behalf* is left unticked, the connection is still created, but the email step fails later with **[403] Request had insufficient authentication scopes**. See Troubleshooting. Fill the fields. To insert a value, click the field and click it in the mapping panel (fields of **Crisphive 2 - Get a job**), or paste it in the `{{…}}` form shown below. | Field | What to put | | --- | --- | | **To** → **Recipient email address 1** | Your office email address. | | **Subject** | `Job confirmed: ` then **Short code**. | | **Body type** | Leave **Raw HTML**. | | **Content** | The block below. | Copy all of this and paste it into **Content** in one go; Make turns each `{{…}}` into a value: ``` Customer: {{2.customer.name}}
Phone: {{2.customer.phone}}
When: {{formatDate(2.schedule.scheduled_at; "dddd, MMMM D, YYYY h:mm A"; 2.schedule.business_timezone)}}
Technician: {{2.assignment.technician.full_name}}
Address: {{2.address.line}}, {{2.address.city}}
Job type: {{2.job_type_name}}
Job: {{2.short_code}} ``` > **Paste it, do not type it.** Typed character by character, Make turns `formatDate(` into a function but leaves the arguments as plain text, and the email shows the formula instead of a time. - `formatDate(…; 2.schedule.business_timezone)` turns the start time into your business’s local time. Crisphive sends times in UTC: `2026-10-14T14:00:00Z` becomes *Wednesday, October 14, 2026 10:00 AM* for a business in America/Toronto. - **Technician** shows with a white outline instead of orange: the field is not listed in the mapping panel yet, but it is filled when the scenario runs. Screen in Make: **Gmail — Send an email** (`make.com/scenarios/1`) 1. Fill Recipient email address 1 with your office address and Subject with Job confirmed: followed by Short code from Get a job. — **Recipient email address 1**: `office@yourbusiness.com` 2. Leave Body type on Raw HTML and paste the whole Content block in one go. Click Save, then Save in the bottom toolbar. — **Content**: `Customer: {{2.customer.name}}
Phone: {{2.customer.phone}}
When: {{formatDate(…)}}` Click **Save**, then **Save** in the bottom toolbar. ## Step 6 — Test, then turn it on 1. **Run once** — Click **Run once** and confirm another job in Crisphive. All three modules get a green tick and a **1** bubble. Click the Gmail bubble to see the **Subject** and **Content** that were sent, and check the inbox. 2. **Turn it on** — Turn on the switch next to **Inactive** (top right). It reads **Active**, next to **Immediately as data arrives**. 3. **Check a live run** — Confirm one more job. The scenario’s **History** tab shows a run with **Instant** and **Success**. On the Crisphive side, **Settings → Developer → Webhooks** ([crisphive.com/app/settings/developer/webhooks](https://crisphive.com/app/settings/developer/webhooks)) lists an endpoint on `hook..make.com` named **Make: job_request.confirmed**, status **Active**, with a secret that expires one year after you created it. ## Templates Ready-made automations you import instead of building. 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:** A Make scenario (blueprint) you import instead of building: a booking form on your website books and confirms the visit in Crisphive, then tells your website the result. - **Why use it:** It is the automation business owners ask for most, already built and tested end to end. You create its webhook, add your key and turn it on — no modules to wire up. - **What is inside:** **Webhook** — the address your website form sends to; **HTTP** — the Crisphive booking request (book and confirm); **Router** — splits on whether a technician could take the time; Two **Webhook response** modules — the answers your website gets back - **Is it safe:** Yes. It is a plain JSON text file that only describes the five modules and their settings — no program code and no real key, only the placeholder `chsk_test_PASTE_YOUR_KEY_HERE` that you replace with your own. - **File:** https://docs.crisphive.com/templates/make/website-form-to-confirmed-job.json (saved as `crisphive-make-website-form-to-confirmed-job.json`) Full template — give it to the reader when they ask for it: ```json { "name": "Crisphive — website form to confirmed job", "flow": [ { "id": 1, "module": "gateway:CustomWebHook", "version": 1, "parameters": { "hook": null, "maxResults": 1 }, "mapper": {}, "metadata": { "designer": { "x": 0, "y": 0 } } }, { "id": 2, "module": "http:ActionSendData", "version": 3, "parameters": { "handleErrors": false, "useNewZLibDeCompress": true }, "mapper": { "url": "https://api.crisphive.com/v1/job-requests/book-and-confirm", "method": "post", "serializeUrl": false, "headers": [ { "name": "Authorization", "value": "Bearer chsk_test_PASTE_YOUR_KEY_HERE" } ], "qs": [], "bodyType": "raw", "contentType": "application/json", "data": "{\n \"customer\": { \"full_name\": \"{{replace(replace(1.full_name; \"\\\"; \"\\\\\"); \"\"\"\"; \"\\\"\"\")}}\", \"phone\": \"{{replace(replace(1.phone; \"\\\"; \"\\\\\"); \"\"\"\"; \"\\\"\"\")}}\", \"email\": \"{{replace(replace(1.email; \"\\\"; \"\\\\\"); \"\"\"\"; \"\\\"\"\")}}\" },\n \"address\": { \"line\": \"{{replace(replace(1.street_address; \"\\\"; \"\\\\\"); \"\"\"\"; \"\\\"\"\")}}\", \"city\": \"{{replace(replace(1.city; \"\\\"; \"\\\\\"); \"\"\"\"; \"\\\"\"\")}}\", \"postal_code\": \"{{replace(replace(1.postal_code; \"\\\"; \"\\\\\"); \"\"\"\"; \"\\\"\"\")}}\", \"country\": \"CA\" },\n \"scheduled_at\": \"{{1.preferred_date}}T{{1.preferred_time}}:00\",\n \"description\": \"{{replace(replace(1.description; \"\\\"; \"\\\\\"); \"\"\"\"; \"\\\"\"\")}}\"\n}", "parseResponse": true, "timeout": "", "shareCookies": false, "ca": "", "rejectUnauthorized": true, "followRedirect": true, "useQuerystring": false, "gzip": true, "useMtls": false, "followAllRedirects": false }, "metadata": { "designer": { "x": 300, "y": 0 } } }, { "id": 3, "module": "builtin:BasicRouter", "version": 1, "mapper": null, "metadata": { "designer": { "x": 600, "y": 0 } }, "routes": [ { "flow": [ { "id": 4, "module": "gateway:WebhookRespond", "version": 1, "parameters": {}, "filter": { "name": "Confirmed", "conditions": [ [ { "a": "{{2.data.data.confirmed}}", "o": "boolean:equal", "b": "true" } ] ] }, "mapper": { "status": "200", "body": "{\"booked\": true, \"reference\": \"{{2.data.data.short_code}}\", \"message\": \"Your visit is booked. Your booking reference is {{2.data.data.short_code}}.\"}", "headers": [ { "key": "Content-Type", "value": "application/json" } ] }, "metadata": { "designer": { "x": 900, "y": -150 } } } ] }, { "flow": [ { "id": 5, "module": "gateway:WebhookRespond", "version": 1, "parameters": {}, "filter": { "name": "Needs a time", "conditions": [ [ { "a": "{{2.data.data.confirmed}}", "o": "boolean:equal", "b": "false" } ] ] }, "mapper": { "status": "200", "body": "{\"booked\": false, \"reference\": \"{{2.data.data.short_code}}\", \"message\": \"Thanks, we have your request ({{2.data.data.short_code}}). Our team will call you to agree on a time.\"}", "headers": [ { "key": "Content-Type", "value": "application/json" } ] }, "metadata": { "designer": { "x": 900, "y": 150 } } } ] } ] } ], "metadata": { "instant": true, "version": 1, "scenario": { "roundtrips": 1, "maxErrors": 3, "autoCommit": true, "autoCommitTriggerLast": true, "sequential": false, "confidential": false, "dataloss": false, "dlq": false, "freshVariables": false }, "designer": { "orphans": [] } } } ``` To use it: 1. **Import the blueprint** — Create a new scenario. Click the **⋮** menu (top right), then **Import blueprint** → **Choose JSON blueprint**, pick the file you downloaded and click **Import blueprint**. 2. **Create its webhook** — Open the **Webhook** module, click **Create a webhook**, then **Save**. Copy the webhook address Make shows — your website form sends to it. 3. **Add your Crisphive key** — Open the **HTTP** module. In the **Authorization** header, replace `chsk_test_PASTE_YOUR_KEY_HERE` with your own Rehearsal key, keeping `Bearer ` in front of it. If your business is not in Canada, change `"country": "CA"` in the request body. 4. **Save and turn it on** — Click **Save**. The schedule shows **Immediately as data arrives**; switch the toggle from **Inactive** to on. 5. **Point your website form at it** — Make your form POST to the webhook address (form-encoded or JSON) with these field names: `full_name`, `phone` (E.164, for example `+16135550142`), `email`, `street_address`, `city`, `postal_code`, `preferred_date` (`YYYY-MM-DD`), `preferred_time` (`HH:MM`, your business’s local time) and `description`. Your website receives one of two JSON answers. When a technician can take that time: ```json {"booked": true, "reference": "REQ-CA-CM3JECHN", "message": "Your visit is booked. Your booking reference is REQ-CA-CM3JECHN."} ``` When nobody can take it (for example a day your team does not work), the job is still saved for your team to confirm: ```json {"booked": false, "reference": "REQ-CA-QNE44JAG", "message": "Thanks, we have your request (REQ-CA-QNE44JAG). Our team will call you to agree on a time."} ``` > This scenario uses Make’s own **HTTP** module, not the Crisphive app, so it needs no app install. The key is stored in the scenario, so anyone who can edit the scenario can see it: use a restricted key with only `customers_view`, `customers_manage`, `job_view`, `job_create` and `job_manage`. ## What the app can do The Crisphive app for Make has five modules: **Watch events** (instant trigger), **Get a job**, **Book and confirm a job**, **Search customers** and **Make an API call**. This guide uses the first two. Book and confirm a job calls [`POST /v1/job-requests/book-and-confirm`](https://docs.crisphive.com/technical-reference/book-and-confirm-job-request); the [API reference](https://docs.crisphive.com/technical-reference) describes every field it accepts. ## Good to know - **One event per webhook.** The Watch events webhook listens to the one event you chose. For another event (for example `job_request.completed`), create a second scenario or webhook. - **The customer’s email is in Get a job only if the customer has one.** Customers created from a phone call often have only a phone number. - **The webhook lasts one year.** Crisphive gives the webhook a 365-day signing secret. The Owner and Administrators get an email 7 days before it ends. - **Connections live under Credentials.** The left menu → **Credentials** → **Connections** lists `Crisphive sandbox` and the Gmail connection, each with **Reauthorize** and **Verify**. - **Removing access.** The Owner can disconnect Make for everyone under **Settings → Developer → MCP connections**; the webhooks it created stop with it. Removing or suspending the member who connected Make also stops the connection. **Then set the connection to last a year.** A new connection lasts 90 days. So that Make 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 Make appears there. 1. **Open MCP connections** — In the Crisphive dashboard go to **Settings → Developer → MCP connections** and find the Make row. 2. **Set lifetime** — Click **Set lifetime**, enter `365` in **Lifetime (days)** and click **Save**. The days count from when Make was first authorized, not from today. ## Troubleshooting | You see | Do this | | --- | --- | | Gmail step: **[403] Request had insufficient authentication scopes** | Google’s permission boxes were not all ticked. Open **Credentials** → **Connections** → your Gmail connection → **Reauthorize**, tick every box, click **Continue**. Then click **Run once** again. | | Invite page: *No modules have been created in the app yet or they have a private status…* | The app is not ready for your account. Email `support@crisphive.com`. | | Watch events never gets a bundle | The job is not confirmed yet, or you chose a different **Event**. Run once listens for one event, then stops. | | **When** shows the wrong hour | Use `2.schedule.business_timezone` as the third argument of `formatDate`, not a fixed time zone. | | **When** shows `formatDate(` as text | The Content was typed instead of pasted. Clear the field and paste the whole block again. | | Creating the trigger fails with a permission error | You are not the Owner. Ask the Owner, or have them grant the Developer module to your role in **Settings → Permissions**. | | The Crisphive connection asks to be reauthorized (`OAUTH_GRANT_EXPIRED`) | The connection reached its lifetime or was disconnected in Crisphive. Open **Credentials** → **Connections**, click **Reauthorize** on the Crisphive connection, sign in and click **Approve**. | ## Related guides and reference - [Automation platforms overview](https://docs.crisphive.com/docs/automation-platforms) — what every automation integration shares - [Zapier](https://docs.crisphive.com/docs/zapier) — book jobs from any Zap; instant job and customer triggers - [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 **How do I add Crisphive to my Make account?** Email `support@crisphive.com` and we’ll send you the invite link. Open it while signed in to Make, tick your organization and click **Install**. **Do I need a paid Make plan?** No. The Free plan is enough for this scenario. Each run uses 3 operations, one per module. **Do I need an API key to use Crisphive in Make?** No. Make connects by signing in to Crisphive and clicking **Approve** on the Authorize Make page. **Why do I need Get a job after Watch events?** Watch events carries only the job’s `id`, `status` and `short_code`. Get a job reads the full job — customer, schedule, address, technician — back from Crisphive. **Why does the email show the wrong time?** Crisphive sends times in UTC. Wrap the start time in `formatDate` with `2.schedule.business_timezone` as the third argument, as in the Content block above. **Who can turn on Watch events?** The business Owner, or a member whose role the Owner gave the Developer module.