en

Connect Crisphive to n8n

By the end of this guide your n8n workflows can find a caller, book and confirm a field job at a chosen time, and start automatically when a job is completed or a customer is created in Crisphive.

n8n is a workflow automation tool: you connect boxes (called nodes) so that something happening in one app does something in another. Crisphive is a field operations platform that schedules your technicians with constraint-based scheduling on a deterministic solver. The Crisphive nodes for n8n are free and open source (n8n-nodes-crisphive on npm, MIT licence).

Three words you will meet below, in plain language: an API key is a long password that lets a program act for your business in Crisphive. A webhook is Crisphive calling a web address when something happens, so n8n hears about it instantly. MCP (Model Context Protocol) is the standard AI assistants use to discover and call tools — it lets an n8n AI Agent use Crisphive by itself.

Where to install it. Install the Crisphive node (n8n-nodes-crisphive) from Settings → Community Nodes on a self-hosted n8n (Docker, npm, your own server). On n8n Cloud, use Crisphive through the MCP Client Tool or the HTTP Request node — both are built into n8n.

What you can do

KindName in n8nWhat it does
ActionBook and Confirm JobCreates the job, sizes it from the job type’s default duration and confirms it at the time you choose, with Crisphive picking the technician — in one step.
ActionFind Customer by PhoneLooks a caller up by their exact phone number (E.164, for example +16135550177).
ActionCreate CustomerAdds a customer with a name and a phone or email.
ActionGet JobReads one job: status, schedule, technician, customer, address.
ActionList Job TypesLists your active job types and their default durations, so you can copy a Job Type ID.
TriggerCrisphive TriggerStarts a workflow the moment a Crisphive event happens (job completed, job confirmed, customer created, …). Instant, signed webhooks.
AI toolCrisphive (as a tool)Attach the Crisphive node to an n8n AI Agent so the agent can book and look up jobs itself.
AI toolMCP Client Tool + https://api.crisphive.com/mcp/crmGive an AI Agent the Crisphive customer and booking tools without installing anything.

Before you start

  • A Crisphive account with Developer access. By default only the business Owner has it. An Owner can grant the Developer module to another group in Settings → Permissions.
  • A self-hosted n8n, version 1.x or 2.x, where you are the owner or an admin (only they can install community nodes). The AI Agent option needs an n8n version whose MCP Client Tool offers HTTP Streamable as the Server Transport.
  • For the trigger only: your n8n must be reachable from the internet over HTTPS (Crisphive has to call it). On a laptop, use a tunnel and set n8n’s WEBHOOK_URL to the public address — see the trigger section.
  • Every job type you will book has a default duration (Crisphive → Settings → Job Types). The built-in “General” type already has one (60 minutes) and is used when you do not choose a type.
  • About 15 minutes for the actions, 10 more for the trigger.

Step 1 — Create a Crisphive API key

Start with a test key (it begins with chsk_test_). It works only on your business’s Rehearsal copy — the sandbox, with test data — so nothing you do reaches a real customer or technician. You create a live key at the end (Go live).

1
Switch to Rehearsal

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. A key created while you are in Rehearsal starts with chsk_test_ and only ever touches the test data.

2
Open API Keys

Go to Settings → Developer → API Keys (crisphive.com/app/settings/developer/api-keys) and click Create new API key. Creating keys needs Developer access, which by default only the Owner has.

3
Choose Secret and name the key

Key type: Secret. Never Publishable — a publishable chpk_ key is only for the booking widget on your website and is refused everywhere else. Name: n8n bookings.

4
Choose how long it lasts

In Expires in (days) keep 30 days for a test key. Keys always expire: 30 days by default, anything from 1 to 365 days chosen when you create the key. The Owner and Administrators are emailed 7 days before a key expires.

5
Restrict it to booking

Under Scopes choose Restricted and select customers_view, customers_manage, job_view, job_create and job_manage. If you will use a trigger, also select developer_view and developer_manage_api_keys (subscribing and unsubscribing a webhook needs them), plus team_view if you want technician events.

6
Create and copy

Click Create API key, then Copy, then Done. The full key is shown only once — paste it into your password manager. If you lose it, create a new key and revoke the old one.

Step 1 of 6In Settings → Developer → API Keys, click Create new API key. Keep Key type on Secret — never Publishable.

All steps
  1. In Settings → Developer → API Keys, click Create new API key. Keep Key type on Secret — never Publishable.
  2. Type the name n8n bookings so you recognise the key later.
  3. Keep Expires in (days) on 30 days for a test key. You can choose up to 365 days.
  4. Under Scopes choose Restricted and select customers_view, customers_manage, job_view, job_create, job_manage.
  5. Click Create API key.
  6. Click Copy. The key starts with chsk_test_ and is never shown again. Then click Done.
Do not see Developer under Settings? Creating keys needs Developer access. Ask the business Owner to create the key, or to grant your group the Developer module in Settings → Permissions.

Step 2 — Install the Crisphive node in n8n

1
Open Community Nodes

In n8n, open Settings (bottom-left menu) → Community Nodes.

2
Install the package

Click Install, type n8n-nodes-crisphive as the npm package name, tick the box confirming you understand the risk of installing community code, and click Install.

3
Check the version

The package appears in the list. It should be 0.1.3 or later. Older versions have a different field layout from the one described here — use Update if offered.

Step 1 of 4In Settings → Community Nodes, click Install.

All steps
  1. In Settings → Community Nodes, click Install.
  2. Type the npm package name n8n-nodes-crisphive.
  3. Tick the risk acknowledgement, then click Install.
  4. Click Install. After a few seconds n8n-nodes-crisphive is listed with its version.
No Community Nodes entry? Your n8n has community packages switched off: start it with N8N_COMMUNITY_PACKAGES_ENABLED=true. If you run n8n in queue mode with separate workers, install the package on every worker too (for example in a custom Docker image with npm install n8n-nodes-crisphive in n8n’s nodes folder), as described in n8n’s community-node documentation.

Step 3 — Add the Crisphive API credential

A credential is where n8n stores your API key, so every Crisphive node can use it without you pasting the key again.

1
Create a credential

In n8n, create a new credential (from the Credentials tab, or from any Crisphive node’s Credential to connect with menu → Create new credential) and search for Crisphive API.

2
Paste the key

In API Key, paste the chsk_test_… key from Step 1. Leave Base URL as https://api.crisphive.com.

3
Save and test

Click Save. n8n tests the credential by reading one job type from Crisphive; a green “Connection tested successfully” message means the key works.

4
Name it clearly

Rename the credential to Crisphive sandbox, so you can tell it apart from the live one later.

Step 1 of 4Search the credential list for Crisphive API and select it.

All steps
  1. Search the credential list for Crisphive API and select it.
  2. Paste your sandbox key (chsk_test_…) into API Key. It is hidden as you type.
  3. Leave Base URL as https://api.crisphive.com unless Crisphive support tells you otherwise.
  4. Click Save. n8n calls Crisphive and shows “Connection tested successfully”.

Book and Confirm Job

This is the operation most workflows need. Add a Crisphive node, choose the Crisphive sandbox credential and set Operation to Book and Confirm Job. The Customer field decides which other fields appear.

FieldRequiredWhat to put in it
CustomerYesNew or Returning Caller (recommended): you send the person and the service address; Crisphive matches an existing customer by phone or email and creates one only when there is no match — never a duplicate. Existing Customer ID: you already know the customer’s Crisphive ID and want to use the address stored on their record.
Full NameYes (New or Returning Caller)The customer’s full name, e.g. Alex Martin.
Address LineYes (New or Returning Caller)Street address where the work happens, e.g. 145 Laurier Avenue West. Add City or Postal Code under Additional Fields so Crisphive can place it on the map.
Customer IDYes (Existing Customer ID)The customer’s UUID from Crisphive (for example from Find Customer by Phone → customers[0].id). The customer must have an address on file.
Start (Business Local Time)YesWhen the visit starts, on your business’s own clock, with no timezone offset: 2026-10-06T10:00:00. Do not add Z or -04:00.
Additional Fields → Phone (E.164)Phone or Email (new caller)International format with the leading +: +16135550177. Spaces and dashes are allowed; a number without the country code is refused.
Additional Fields → EmailPhone or Email (new caller)alex.martin@example.com.
Additional Fields → CityRecommendedOttawa.
Additional Fields → State / ProvinceOptionalON.
Additional Fields → Postal CodeRecommendedK1P 5J3.
Additional Fields → CountryOptionalTwo-letter code, CA or US.
Additional Fields → Job Type IDOptionalEmpty = your business’s default job type (“General”). Copy an ID from List Job Types to book a specific type.
Additional Fields → Duration (Minutes)OptionalEmpty or 0 = the job type’s default duration. Set it only when you know better, e.g. 90.
Additional Fields → DescriptionOptionalThe problem in the customer’s words, e.g. Furnace stopped heating (up to 2,000 characters).
Additional Fields → SMS ConsentOptionalTurn on only if the customer explicitly agreed to receive text messages. Otherwise leave it off; they still get email updates.

Step 1 of 6Choose the Crisphive sandbox credential and set Operation to Book and Confirm Job.

All steps
  1. Choose the Crisphive sandbox credential and set Operation to Book and Confirm Job.
  2. Set Customer to New or Returning Caller, so the visit uses the address you send.
  3. Fill Full Name, Address Line and Start (Business Local Time) — no timezone offset.
  4. Click Add Field under Additional Fields and add Phone (E.164), Email, City, State / Province, Postal Code and Country.
  5. Add a Description of the problem. Leave Job Type ID and Duration empty to use the default type and its duration.
  6. Click Execute step. The output shows confirmed: true and a short_code such as REQ-CA-…

A successful run returns one item like this:

{
  "job_id": "7b2f0c1e-3a44-4d1b-9a5e-0e6f1c2d3b4a",
  "short_code": "REQ-CA-YCNFQUUV",
  "customer_id": "c4d1a9e2-8f3b-4c6d-a1e2-5f7b9c0d1e2f",
  "customer_url": "https://crisphive.com/…",
  "confirmed": true,
  "scheduled_at": "2026-10-06T14:00:00Z",
  "assigned_technician_id": "1e9d7c5b-3a2f-4e1d-8c7b-6a5f4e3d2c1b"
}
  • scheduled_at in the answer is in UTC (Z). 14:00 UTC is 10:00 in Ottawa in October — the same moment you asked for.
  • short_code is the human-friendly job reference to send to the customer or a team channel.
  • When confirmed is false, the job was saved but no technician can take it at that time. The answer carries a refusal object (for example "error_code": "JOB_REQUEST_NO_TECHNICIAN_AVAILABLE") and the job waits in the coordinator’s queue in the dashboard. Route it to a person — do not run the booking again.
Prefer New or Returning Caller even for known customers. Crisphive matches them by phone or email, and the visit then uses the address you just sent. With Existing Customer ID, Crisphive uses the address stored on the customer; a customer with no stored address is refused with JOB_REQUEST_ADDRESS_REQUIRED.

Find Customer by Phone

FieldRequiredValue
Phone (E.164)YesAn international number with the leading +, e.g. +16135550177. The node checks the format before calling Crisphive and stops with “Phone must be E.164 with the leading +” otherwise.

The match is exact on the stored number. The node returns one item with a customers list (up to 5) and a meta object. Use {{ $json.customers.length }} in an If node: 1 means you found the caller, 0 means a new caller. Each customer carries id, full_name, tier, status, request_count and last_request_at — the list does not repeat the phone and email.

Create Customer

FieldRequiredValue
Full NameYesAlex Martin
Additional Fields → Phone (E.164)Phone or Email+16135550177
Additional Fields → EmailPhone or Emailalex.martin@example.com
Additional Fields → SMS ConsentOptionalOnly if the customer explicitly agreed to texts.

If you add neither a phone nor an email, the node stops with “Add a Phone or an Email under Additional Fields” before calling Crisphive. The output is { "customer_id": "…" }. A customer created this way has no address yet, so book them with New or Returning Caller (which sends the address), not with their ID.

Get Job and List Job Types

  • Get Job — one required field, Job ID: the job’s UUID (job_id from Book and Confirm Job, or object.id from the trigger). Returns the full job: short_code, current_status, schedule, assignment, customer (name, phone, email), address, job_type_name, description.
  • List Job Types — no fields. Returns your active job types with their IDs and default durations. Copy an id into Book and Confirm Job → Additional Fields → Job Type ID.

Crisphive Trigger — start a workflow on an event

The Crisphive Trigger node is instant: when you activate the workflow, n8n registers a webhook in Crisphive; when you deactivate it, n8n removes it. Crisphive then calls n8n within seconds of each event.

  • The key needs the trigger scopes. Subscribing and removing the webhook needs developer_manage_api_keys, and listing the events needs developer_view. A restricted key without them is refused when you activate the workflow (API_KEY_SCOPE_INSUFFICIENT); it can still run the Crisphive actions. Creating such a key in the dashboard needs Developer access, which by default only the Owner has.
  • Public HTTPS address. Crisphive must be able to reach n8n. On a server, set WEBHOOK_URL to your public n8n address (for example https://n8n.yourcompany.com/) and, behind a reverse proxy, N8N_PROXY_HOPS=1. On a laptop, run a tunnel and set WEBHOOK_URL to the tunnel address — and open n8n on that address, not on localhost.
  • Permissions decide the events. customer.* needs customers_view, job_request.* needs job_view, technician.* needs team_view. An event the key cannot read is refused with WEBHOOK_EVENT_NOT_PERMITTED, naming the missing permission.
  • Up to 25 active webhooks per environment per business. Every active trigger uses one; deactivating frees it.
1
Add the trigger

In a new workflow, click + and add Crisphive Trigger. Choose the Crisphive sandbox credential.

2
Pick the events

Open Event Names or IDs and choose one or more events, for example Job Completed. The list is read live from Crisphive, so new events appear without updating the node.

3
Decide on Fetch Full Job

Leave Fetch Full Job on. A job event itself carries only the job’s ID, short code and status; with this on, the node reads the whole job (customer, address, schedule, technician) before your workflow continues.

4
Listen for a test event

Click Listen for test event (or Execute step), then cause the event in Crisphive’s Rehearsal environment — for example complete a Rehearsal job on the dashboard. The event appears in the node’s output.

5
Activate the workflow

Add the steps that should follow, save, then activate the workflow (the Active toggle in n8n 1.x, Publish in n8n 2.x). From now on every matching event runs it.

Step 1 of 4Select the Crisphive sandbox credential.

All steps
  1. Select the Crisphive sandbox credential.
  2. Open Event Names or IDs and pick the events that should start the workflow — here Job Completed and Customer Created.
  3. Keep Fetch Full Job on so job events arrive with the customer, address and schedule.
  4. Click Listen for test event, then complete a Rehearsal job in Crisphive. The event shows up in the output.

Each event becomes one item:

{
  "event_id": "evt_…",
  "type": "job_request.completed",
  "object": {
    "id": "7b2f0c1e-3a44-4d1b-9a5e-0e6f1c2d3b4a",
    "short_code": "REQ-CA-YCNFQUUV",
    "current_status": { "key": "completed", "display_name": "Completed" },
    "customer": { "name": "Alex Martin", "phone": "+16135550177", "email": "alex.martin@example.com" },
    "address": { "line": "145 Laurier Avenue West", "…": "…" },
    "schedule": { "scheduled_at": "2026-10-06T14:00:00Z", "…": "…" }
  }
}
Event (as listed in n8n)IDFires when
Job Createdjob_request.createdA job is booked from any channel.
Job Confirmedjob_request.confirmedA job gets a confirmed time.
Job Assignedjob_request.assignedA technician or crew is assigned.
Job Rescheduledjob_request.rescheduledA confirmed job moves to another time.
Job Completedjob_request.completedThe job reaches Completed.
Job Archivedjob_request.archivedThe job is archived or cancelled.
Customer Created / Updated / Deletedcustomer.*A customer record changes.
Technician Created / Updated / Deletedtechnician.*Your team roster changes (needs team_view).
  • Security. Every delivery carries a Crisphive-Signature header (HMAC-SHA256 of the exact request body with the subscription’s secret). The node checks it, refuses anything unsigned or older than 5 minutes with 401, and never starts the workflow for a forged call. Crisphive’s first message, a ping, is answered and ignored.
  • Lifetime. The node asks for the maximum secret lifetime, 365 days. After that Crisphive disables the webhook and emails the Owner; deactivate and reactivate the workflow to subscribe again. Put the date in your calendar.
  • A subscription stops by itself when the API key that created it is revoked. If you replace the key, deactivate and reactivate every workflow that has a Crisphive Trigger.

Use Crisphive from an n8n AI Agent

There are two ways. Choose option A if you installed the community node. Choose option B if you are on n8n Cloud or want the agent to pick from the Crisphive MCP tools itself.

Option A — the Crisphive node as a tool.

1
Add an AI Agent

Add an AI Agent node with a chat model (any model n8n supports; one that is good at multi-step tool calling works best).

2
Attach Crisphive

Under the agent’s Tool connector click +, search Crisphive and add it. Pick the credential and an Operation. Add the node once per operation you want the agent to have — for a booking agent: Find Customer by Phone, List Job Types and Book and Confirm Job.

3
Let the model fill the fields

For each field the agent should decide (Full Name, Address Line, Start, Phone…), use n8n’s “let the model define this parameter” option instead of a fixed value.

4
Give it instructions

Paste the system prompt below into the agent’s system message, then chat with it from the workflow’s chat panel.

Option B — the MCP Client Tool (no installation).

1
Create a Header Auth credential

New credential → Header Auth. Name: Authorization. Value: Bearer chsk_test_… — the word Bearer, one space, then your key.

2
Attach an MCP Client Tool

On the AI Agent’s Tool connector add MCP Client Tool.

3
Point it at Crisphive

Endpoint: https://api.crisphive.com/mcp/crm — customers and their bookings, all covered by the five booking scopes. For a phone-style agent use https://api.crisphive.com/mcp/voice instead. Server Transport: HTTP Streamable — Crisphive has no SSE stream, so the SSE setting cannot connect. Authentication: Header Auth with the credential above. Tools to Include: All.

4
Pick the profile that fits the agent

/mcp/crm holds customers and their bookings, /mcp/voice caller lookup and one-call booking, /mcp/dispatch the coordinator’s board. The full /mcp address offers every Crisphive tool and needs a key with wider scopes than the five booking ones.

Step 1 of 4Set Endpoint to https://api.crisphive.com/mcp/crm (or /mcp/voice for a phone-style agent).

All steps
  1. Set Endpoint to https://api.crisphive.com/mcp/crm (or /mcp/voice for a phone-style agent).
  2. Choose HTTP Streamable as the Server Transport.
  3. Set Authentication to Header Auth and pick the credential whose value is “Bearer chsk_test_…”.
  4. Leave Tools to Include on All, then close the node and chat with the agent.

System prompt for a booking agent (replace the bracketed parts):

You book service visits for [Business name], a [trade] company in [city].
Times are in [Business timezone, e.g. America/Toronto].

1. Ask for the customer's phone number and look them up with "Find Customer
   by Phone" (E.164, e.g. +16135550177). If one customer comes back, greet
   them by name. Never guess between several matches.
2. Always ask for and confirm the service address for THIS visit (street,
   city, postal code), and spell the customer's name back before booking.
3. Ask what the problem is; it becomes the job description.
4. Agree a start time. Send it as the business's local time with no offset,
   e.g. 2026-10-06T10:00:00.
5. Book once with "Book and Confirm Job", Customer = New or Returning Caller,
   with the name, phone (or email) and the address. Do not retry.
6. Only if confirmed is true, read back the date, time and short_code. If it
   is false, say the office will call back to confirm a time.

Rules: never quote a price. Only turn on SMS Consent if the customer
explicitly agrees to text messages.

Ready-to-copy workflows

Three workflows business owners ask for most. The values below use n8n expressions ({{ … }}); type them in the field’s Expression mode.

1. Website form → confirmed job. n8n Form Trigger (or your form tool’s webhook) → Crisphive Book and Confirm Job → If confirmed is true → email the customer; otherwise → post to your team channel.

Crisphive node — Operation: Book and Confirm Job
Customer:                     New or Returning Caller
Full Name:                    {{ $json["Full name"] }}
Address Line:                 {{ $json["Street address"] }}
Start (Business Local Time):  {{ $json["Preferred date"] }}T09:00:00
Additional Fields:
  Phone (E.164):              {{ $json["Phone"] }}
  Email:                      {{ $json["Email"] }}
  City:                       {{ $json["City"] }}
  Postal Code:                {{ $json["Postal code"] }}
  Country:                    CA
  Description:                {{ $json["What do you need?"] }}

If node — condition:  {{ $json.confirmed }}  is true
  true  → "Booked: {{ $json.short_code }}"
  false → "Needs a time: {{ $json.short_code }} ({{ $json.refusal.error_code }})"

2. Job completed → review request. Crisphive Trigger (Job Completed, Fetch Full Job on) → Send Email / Gmail.

To:       {{ $json.object.customer.email }}
Subject:  Thanks for choosing us — job {{ $json.object.short_code }}
Body:     Hi {{ $json.object.customer.name }}, your visit is complete.
          Would you leave us a quick review? [your review link]

3. New customer → spreadsheet or CRM. Crisphive Trigger (Customer Created) → Google Sheets “Append row” with {{ $json.object.full_name }}, {{ $json.object.phone }}, {{ $json.object.email }} and {{ $json.event_id }} (keep the event ID: Crisphive delivers at least once, so a repeat delivery has the same ID and can be skipped).

Retries never book twice

Every write the node makes carries an Idempotency-Key — a label that tells Crisphive “this is the same request as before”. The node builds it from the n8n execution ID and the item number. So:

  • If a Crisphive step fails on a network blip and n8n retries it inside the same execution (the node’s Retry On Fail setting), Crisphive replays the first answer instead of booking a second job.
  • Each item in one execution gets its own key, so ten form rows book ten jobs.
  • A new execution — a new trigger event, or running the workflow again by hand — is a new booking. That is why you must not re-run a booking whose answer was confirmed: false: the job already exists in the queue.
  • Writes are Book and Confirm Job and Create Customer. Reads (Find Customer, Get Job, List Job Types) are always safe to repeat.

Test it

Use these fictional details. The 555-01xx range and example.com are reserved for fiction, and Crisphive never texts or emails them.

1
Create the test customer

Run Create Customer with Full Name Alex Martin, Phone +16135550177, Email alex.martin@example.com. Success: the output has a customer_id.

2
Find them

Run Find Customer by Phone with +16135550177. Success: customers holds one entry named Alex Martin.

3
Book a visit

Run Book and Confirm Job as in the walkthrough: New or Returning Caller, Alex Martin, 145 Laurier Avenue West, City Ottawa, State ON, Postal Code K1P 5J3, Country CA, Phone +16135550177, Description Furnace stopped heating, Start = a weekday morning within your working hours, e.g. 2026-10-06T10:00:00. Success: confirmed: true, a short_code, and the same customer_id as step 1 (matched, not duplicated).

4
Check Crisphive

Switch the dashboard to Rehearsal. The job appears on the board with status Confirmed (opened, its window is titled Booking Confirmed), a technician assigned, the Laurier Avenue address and the time you chose.

5
Fire the trigger

With a Crisphive Trigger listening for Job Completed, complete that Rehearsal job on the dashboard. Success: within seconds the trigger outputs type: "job_request.completed" with object.short_code matching.

Troubleshooting

SymptomCauseFix
Credential test fails, or a node says Crisphive API_KEY_INVALIDKey mistyped, revoked, or a publishable chpk_ key.Paste a secret chsk_test_… / chsk_live_… key again, with no spaces.
API_KEY_EXPIREDThe key reached the end of its lifetime.Create a new key, paste it into the credential, revoke the old one, and re-activate workflows that use the Crisphive Trigger.
API_KEY_SCOPE_INSUFFICIENT (403)The key is restricted and lacks a permission; the error names it.Create a key that also has that permission: the five booking scopes for actions, plus developer_view and developer_manage_api_keys for the Crisphive Trigger (and team_view for technician events). If the error names developer_manage_api_keys, the key lacks the trigger scope.
Turning the trigger on fails with WEBHOOK_EVENT_NOT_PERMITTEDThe key cannot read that event type (the message ends with “needs permission: …”).Create a key that also has the listed permission — team_view for technician events.
Trigger never firesCrisphive cannot reach n8n: WEBHOOK_URL is localhost or a private address, or the workflow is not active.Set WEBHOOK_URL to a public HTTPS address, restart n8n, then deactivate and reactivate the workflow. Check Crisphive → Settings → Developer → Webhooks for the endpoint’s status.
WEBHOOK_LIMIT_REACHED25 webhooks are already active in this environment.Deactivate workflows you no longer need, or delete stale endpoints under Settings → Developer → Webhooks.
“Phone must be E.164 with the leading +”, or PHONE_INVALIDThe number has no country code, e.g. 6135550177.Send +16135550177. In an expression: {{ "+1" + $json.phone.replace(/\D/g, "") }} for North American numbers.
“A new caller needs a Phone or an Email under Additional Fields”New or Returning Caller without any contact detail.Add Phone (E.164) or Email under Additional Fields.
JOB_REQUEST_ADDRESS_REQUIREDExisting Customer ID was used for a customer with no address on file, or the address has neither city nor postal code.Switch Customer to New or Returning Caller and send the address with City or Postal Code.
confirmed: false with a refusalThe job was saved, but no technician can take it then (outside working hours, no one covering that area or skill, everyone busy).Do not rerun. Pick the job up in the dashboard queue, or branch on confirmed and notify a person.
JOB_REQUEST_INVALID_INPUT about the time, or data.means_locallyStart carried a timezone offset (Z, -04:00) or is in the past.Send the business’s local wall clock with no offset, in the future: 2026-10-06T10:00:00.
JOB_REQUEST_QUOTE_INVALID, reason job_type_has_no_default_durationThe chosen job type has no default duration.Set one in Settings → Job Types, fill Duration (Minutes), or leave Job Type ID empty.
IDEMPOTENCY_KEY_REUSE (422)The same key was sent with a different body — for example a corrected request resent after an error, because Crisphive stores the first answer (even a refusal) under its key.Reuse a key only to resend the exact same request after a timeout or no answer; when anything in the request changes, run a fresh execution so it gets a new key.
429 / TOO_MANY_REQUESTSMore than 240 requests per minute on one key.Add a Wait node or batch your items; respect Retry-After.
Crisphive Trigger answers 401 invalid signature in n8n’s logsSomething other than Crisphive called the webhook URL, or n8n lost the stored secret.Nothing to do for stray calls. If real events are refused, deactivate and reactivate the workflow to subscribe again.
Community Nodes is missing, or the node is not found on n8n CloudCommunity packages are off, or you are on n8n Cloud.Self-hosted: set N8N_COMMUNITY_PACKAGES_ENABLED=true. Cloud: use the MCP Client Tool.

Go live

1
Create a live key

In the left sidebar, click Live in the Rehearsal | Live switch and confirm with Switch, then repeat Step 1: the new key starts with chsk_live_. Choose a lifetime up to 365 days and put the expiry date in your calendar; the Owner and Administrators are also emailed 7 days before.

2
Add a second credential

Create another Crisphive API credential named Crisphive live with the live key, and switch each Crisphive node and trigger to it.

3
Reactivate triggers

Deactivate and reactivate every workflow with a Crisphive Trigger so it subscribes with the live key. Sandbox triggers only ever receive sandbox events.

4
Understand what changes

With a live key, jobs land on your real board, real technicians are assigned, and real customers receive confirmations by email (and by text only when SMS Consent was given).

5
Renew or revoke

A key cannot be extended. To renew, create a new live key, put it in the credential, check a run succeeds, then click Revoke access on the old key in Settings → Developer → API Keys. Revoking a key stops every workflow and trigger that uses it immediately.

FAQ

Is the Crisphive n8n node free?
Yes. n8n-nodes-crisphive is open source under the MIT licence. You need a Crisphive account; self-hosted n8n Community Edition is free to run, and n8n Cloud has its own paid plans.
How do I use Crisphive on n8n Cloud?
On n8n Cloud, connect an AI Agent through the MCP Client Tool to https://api.crisphive.com/mcp/crm, or call the API with the HTTP Request node.
Does n8n book a duplicate job if a step is retried?
No. Each write carries an Idempotency-Key built from the execution and item, so a retry inside the same execution replays the first answer. A new execution is a new booking.
Why did my job not confirm?
The answer had confirmed: false: the job is saved, but no technician could take it at that time — outside working hours, nobody covering that address or skill, or everyone busy. The refusal.error_code says which. Pick it up from the coordinator queue; do not rerun.
Who in my company can turn on a Crisphive Trigger?
Someone with Developer access, which by default is only the Owner. The Owner can grant the Developer module to another group in Settings → Permissions. Actions work with any key that has the right permissions.
What is the difference between a chsk_test_ and a chsk_live_ key?
chsk_test_ works on an isolated sandbox copy of your business — no real customer is ever contacted. chsk_live_ works on your real jobs and customers. Build with the test key, switch when it works.
What can the API key do, and how do I limit it?
Exactly what its permissions allow. Restrict it to customers_view, customers_manage, job_view, job_create and job_manage for n8n. It cannot change your team, settings or billing with those.
How do I remove n8n’s access to Crisphive?
In Crisphive, open Settings → Developer → API Keys and click Revoke access on the key. Every node and trigger using it stops at once, and its webhooks are disabled.
How long does a Crisphive Trigger keep working?
Its signing secret lasts 365 days. Crisphive then disables the webhook and emails the Owner; deactivate and reactivate the workflow to subscribe again. It also stops when the key that created it is revoked.