Book field jobs by phone with ElevenLabs
By the end of this guide you will have an AI phone agent on ElevenLabs that answers a call, finds the caller in Crisphive, and books and confirms a technician visit while the caller is still on the line.
You do not write any code. ElevenLabs runs the voice (it listens, thinks with an AI model and speaks). Crisphive does the scheduling: it knows your customers, your technicians, their skills, working hours and service areas, and it decides who can take the job. The two are joined by one web address and one key.
Three words you will meet
| Word | What it means in plain language |
|---|---|
| Voice agent | An AI receptionist that talks on the phone. ElevenLabs Agents is the product that builds one. |
| MCP server | A web address that hands an AI a list of things it is allowed to do (here: look up a customer, book a job). MCP stands for Model Context Protocol. Crisphive’s is https://api.crisphive.com/mcp/voice. |
| API key | A long password that lets the agent act for your business. Crisphive shows it once; it starts with chsk_test_ (practice data) or chsk_live_ (your real business). |
What the agent can do
/mcp/voice gives the agent exactly the tools it needs on a phone call, which keeps each turn fast.
| Tool | What the agent uses it for |
|---|---|
listCustomers (by phone) | Look up the caller by the phone number they read out and confirmed. Exact match, so the agent can ask a returning customer “Am I speaking with Alex Martin?”. |
bookAndConfirmJobRequest | The booking: creates the job, sizes it, and confirms it at the time the caller chose — one call. |
listJobRequestBookingWindows | Find which days and parts of the day are open, so the agent offers real times. |
listMatchingSlots | Exact start times for a job already created (step-by-step flow). |
listJobTypes | Map what the caller describes (“my furnace stopped”) to one of your job types. |
getJobRequest | Reads one job by its id. Not used by this prompt: questions about an existing booking go to a person (see Calls that are not bookings). |
createCustomer, createJobRequest, quoteJobRequest, confirmJobRequest | The same booking in separate steps, for agents that want to offer exact slots before booking. |
Before you start
- A Crisphive account where you are the Owner, or where the Owner gave your role Developer access. Creating API keys needs it; by default only the Owner has it.
- An ElevenLabs account (free to sign up at elevenlabs.io). Calls use ElevenLabs credits; check ElevenLabs’ own pricing page for your plan. ElevenLabs does not allow MCP servers in Zero Retention Mode or HIPAA workspaces, so use a normal workspace.
- A computer with a microphone to test the agent in your browser. A phone number is only needed at the end, to go live.
- Every job type the agent may book has a default duration (Crisphive: Settings → Job Types → Default duration). A phone agent cannot know how long a repair takes. The default type, “General”, already has one (60 minutes plus 15 minutes of travel buffer each side unless you changed it).
- About 30 minutes the first time.
Step 1 — Create your ElevenLabs account
Go to elevenlabs.io and create an account (email or Google).
When ElevenLabs asks Choose your platform, pick ElevenAgents — not ElevenCreative (that one is for voice-overs and audio, not phone agents).
On Which one describes you the best? choose Engineer or click Skip. Your answer changes nothing in this guide.
Step 2 — Create a blank agent
ElevenLabs offers ready-made templates. Do not use one: a template comes with its own instructions and tools that would fight with the booking rules below. Start blank.
In the left menu click Agents. You see Browse templates and, at the top, a Create Blank Agent button.
Click Create Blank Agent. Name it Crisphive Booking (any name works — callers never see it) and keep the language English.
Step 1 of 3In Agents, click Create Blank Agent at the top of the templates page.
All steps
- In Agents, click Create Blank Agent at the top of the templates page.
- Type the agent name Crisphive Booking.
- Keep the language on English, then create the agent.
Step 3 — Tell the agent how to behave
The agent page opens on Configure → Agent. Four settings matter here: the system prompt (the agent’s instructions), the timezone under it, the first message (what the caller hears first) and the AI model.
Click into System prompt, delete what is there, and paste the prompt from the box below. Replace every [Business name] (in the prompt and the first message), [city] (for example “Ottawa, Canada”) and [timezone] — your business’s IANA timezone, for example America/Toronto. [timezone] appears three times: in the first line and twice in step 5. Keep every numbered step and rule — each one fixes a mistake seen in a real call.
Directly under the system prompt there is a timezone selector. Choose the timezone your business works in, for example America/Toronto. The agent uses it to turn “tomorrow at 10” into a date and time. If it is wrong, bookings land on the wrong day or hour.
In First message paste the greeting from the second box below, with your business name in place of [Business name]. Leave Interruptible on, so a caller who starts talking is not talked over.
In LLM choose the model. We recommend Claude Sonnet 5.5: it reliably chains several tool calls (look up → find a time → book → check the answer). See the comparison table after the boxes.
Changes are kept as a draft until you click Publish (top right). You will publish in Step 7, after the tools are attached.
You are the phone booking assistant for [Business name], a field operations business serving [city]. The business timezone is [timezone]. You book service visits for callers using the Crisphive tools. You speak English. ## How to handle a call 1. Phone number - Ask for the phone number they are calling from. - Read it back digit by digit and get a clear yes before you use it. If they correct you, read the corrected number back again. - Look the caller up with listCustomers using the phone filter, in E.164 format: +1 followed by the 10 digits, e.g. +16135550142. - If the tool returns PHONE_INVALID, tell the caller the number didn't come through, ask them to repeat it, read it back, and try again. Do not end the call over this. 2. Who is calling - If a customer is found, ask "Am I speaking with <name>?" If yes, use that name. If no, treat them as a new caller. - If no customer is found, ask for their full name, spell it back letter by letter, and get a yes. Then ask for an email address if they have one (optional), and spell it back. 3. Service address (always, even for a known customer) - Ask for the address of THIS visit: street number and name, unit if any, city, and postal code. - Read the whole address back and get a yes. 4. The problem - Ask what needs doing, in one or two sentences. This becomes the job description. Do not diagnose or promise a fix. 5. When - Ask which day and time of day they prefer. Work out real dates from today's date in [timezone]; never offer a time in the past. - Call listJobRequestBookingWindows with x_timezone set to [timezone] to see which days and periods are open. - Offer at most three concrete options (for example "Tuesday at 9 in the morning or Wednesday at 1 in the afternoon"). Never invent availability. 6. Text messages - Ask: "Can we send you text message updates about this visit?" Set sms_opt_in to true only if they clearly say yes. If they say no or are unsure, leave it out. 7. Book - Before booking, sum up in one sentence: name, address, problem, and the chosen time, and get a yes. - Book with bookAndConfirmJobRequest, once. Send: - customer: full_name and phone (plus email if given, plus sms_opt_in only if they agreed) - address: line, line2 if there is a unit, city, postal_code, country "CA" - description: the problem in their words - scheduled_at: the business's local wall clock with no offset, e.g. 2026-10-06T09:00:00 - idempotency_key: a unique text you create for this booking - Never send customer_id. Crisphive matches an existing customer by phone, and this makes sure the visit uses the address the caller just gave. - If the tool timed out or gave no answer, resend the exact same request with the SAME idempotency_key. - If you change anything in the request (for example after fixing the time or the address), use a NEW idempotency_key. 8. Result - If "confirmed" is true: say the visit is booked and read back the day, date, time and address. You may give the booking reference (short_code), read slowly. - If "confirmed" is false: say "I've saved your request. Our team will call you back shortly to confirm the exact time." Do not book again and do not promise a time. 9. Close - Ask if there is anything else about this visit, thank them, and end the call. ## Calls that are not a new booking - Questions about the business (opening hours, areas served, services offered): answer only from information you have been given. If you do not know, say so and offer to take a message. Never guess. - Price questions: say the team will discuss pricing, then offer to book a visit or take a message. - An existing booking (when the technician is coming, changing the time, cancelling): you cannot look up or change existing bookings. If you can transfer calls, offer to transfer the caller to the team; otherwise take a message. - A complaint, or the caller asks for a person: transfer the call if you can; otherwise take a message. - Taking a message: get their name, their phone number (read it back), and what they need in one sentence. Tell them the team will call them back, then end the call politely. - Wrong numbers, sales calls and spam: say politely that this line is for booking service visits and end the call. ## Errors - If the chosen time is refused as invalid or in the past, apologise, offer another time, and book again with a NEW idempotency_key. - For any other error_code, apologise briefly, say the team will call them back, and end politely. Never read error codes or technical details aloud. ## Safety - If the caller mentions a gas smell, smoke, fire, sparking, flooding near electricity, or anyone being hurt, tell them to leave the building and call 911 now. Do not book in that situation. ## Things you do not do - Never quote prices or give estimates. Say the team will discuss pricing. - Never change or cancel an existing booking yourself (see "Calls that are not a new booking"). - Never share information about other customers, technicians, or the schedule beyond the times you offer. - Never mention tools, systems, JSON, or that you are looking things up in a database. Say "one moment" while you check. ## Style - This is a phone call: short sentences, one question at a time. - Say numbers, dates and times the way people speak them ("Tuesday the sixth at nine in the morning"). - Be warm and calm. If you did not understand, ask them to repeat.
Thanks for calling [Business name]. I can book a service visit for you. Can I start with the phone number you're calling from?
Step 1 of 4Paste the Crisphive system prompt into System prompt, replacing the default text.
All steps
- Paste the Crisphive system prompt into System prompt, replacing the default text.
- Under the prompt, set the timezone to your business timezone, for example America/Toronto.
- Paste the greeting into First message and keep Interruptible switched on.
- Change the LLM from the default to Claude Sonnet 5.5.
Which AI model to choose
| Model | Good for | Trade-off |
|---|---|---|
| Claude Sonnet 5.5 (recommended) | Following the booking rules and chaining several tool calls in a row. This is the model we used for this guide. | About US$0.25 of AI model cost for a 4-minute booking call in our test, on top of ElevenLabs’ voice charges. A short pause while it thinks. |
| Gemini Flash | The fastest and cheapest replies — less silence on the line. | More likely to skip a rule on a long call. Test it with the script below before trusting it. |
| The default model (Qwen3.5 when we tested) | Getting started. | Not tested with the Crisphive tools. Switch before going live. |
Step 4 — Create the Crisphive API key
The key tells Crisphive which business the agent works for and what it may do. You create a test key now and a live key in Step 9.
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.
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.
Key type: Secret. Never Publishable — a publishable chpk_ key is only for the booking widget on your website and is refused everywhere else. Name: ElevenLabs voice agent.
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.
Under Scopes choose Restricted and select customers_view, customers_manage, job_view, job_create and job_manage. Nothing else is needed for booking.
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
- In Settings → Developer → API Keys, click Create new API key. Keep Key type on Secret — never Publishable.
- Type the name ElevenLabs voice agent so you recognise the key later.
- Keep Expires in (days) on 30 days for a test key. You can choose up to 365 days.
- Under Scopes choose Restricted and select customers_view, customers_manage, job_view, job_create, job_manage.
- Click Create API key.
- Click Copy. The key starts with chsk_test_ and is never shown again. Then click Done.
Step 5 — Add Crisphive as a custom MCP server in ElevenLabs
In ElevenLabs an MCP server is added once for the whole workspace, on the Integrations page — not on the agent page. (The agent page links there from Configure → Tools.)
Go to elevenlabs.io/app/agents/integrations and click Add Custom MCP Server.
Name: Crisphive. Description is optional, for example Book service visits in Crisphive.
Under Server Configuration set Server type to Streamable HTTP. Do not choose SSE: Crisphive does not offer it, and the connection test fails.
For Server URL keep the type on Value and enter https://api.crisphive.com/mcp/voice.
The Authentication dropdown says “Workspace has no auth connections”. Leave it that way — the key goes in a header instead.
Under HTTP Headers click to add a header. Set its type to Secret, the name to Authorization, and create a secret whose value is the word Bearer, one space, then your key: Bearer chsk_test_…. Do not rely on a separate “secret token” field — write the full header value yourself.
Leave Request Metadata empty.
Choose No Approval. With Always Ask the call stops in the middle of the booking, waiting for a person to click approve. Fine-Grained Tool Approval also works if you set every Crisphive tool to auto-approve.
Tick I trust this server, click Test Connection — it should list the Crisphive voice tools — then click Add Server.
Step 1 of 13Type Crisphive as the server name.
All steps
- Type Crisphive as the server name.
- Optionally describe it: Book service visits in Crisphive.
- In Server Configuration, set Server type to Streamable HTTP (not SSE).
- Keep the Server URL type on Value.
- Enter the Server URL https://api.crisphive.com/mcp/voice.
- Leave Authentication empty — the workspace has no auth connection, and none is needed.
- Under HTTP Headers, add a header and set its type to Secret.
- Name the header Authorization.
- Create the secret value: the word Bearer, one space, then your chsk_test_ key.
- Skip Request Metadata. Set Tool Approval Mode to No Approval.
- Tick I trust this server.
- Click Test Connection. It should list the Crisphive voice tools.
- Click Add Server to save it to your workspace.
The values to copy, in one place:
Name: Crisphive Server type: Streamable HTTP Server URL (Value): https://api.crisphive.com/mcp/voice Authentication: (leave empty) HTTP header (Secret): Name: Authorization Value: Bearer chsk_test_… (chsk_live_… when you go live) Request Metadata: (leave empty) Tool Approval Mode: No Approval [x] I trust this server
/mcp?profile=voice spelling of the address offers the same voice tools as /mcp/voice. An agent set up with it keeps working and needs no change.Step 6 — Attach the server to your agent
Go back to your Crisphive Booking agent and click Configure → Tools in the left menu.
Add an MCP server and pick Crisphive from your workspace’s servers. Its tools now belong to this agent.
Step 1 of 2In the agent, open Configure › Tools and choose to add an MCP server.
All steps
- In the agent, open Configure › Tools and choose to add an MCP server.
- Select the Crisphive server you added in Step 5.
Step 7 — Publish the agent
Click Publish at the top right. In ElevenLabs “Publish” only saves and activates this version of your agent — nothing is listed publicly, and nobody can call it until you give it a phone number (Step 10).
Step 8 — Test it with a practice call
Click Preview (top bar), start a call, and allow the browser to use your microphone. Play the caller using these made-up details — they are safe: 613-555-01xx numbers are reserved for fiction, and Crisphive never sends texts or emails to 555 numbers or to example.com addresses.
| You say | What should happen |
|---|---|
| “My number is 613 555 0177.” | It reads the number back digit by digit. Say “yes”, and it looks you up with +16135550177. In a fresh Rehearsal environment you are not found, so it asks for your name. |
| “Alex Martin. Email alex dot martin at example dot com.” | It spells the name back letter by letter (“A-L-E-X M-A-R-T-I-N?”), then the email. Confirm each. |
| “145 Laurier Avenue West, Ottawa, K1P 5J3.” | It reads the whole address back. Confirm. |
| “My furnace stopped heating.” | This becomes the job description. |
| “Monday morning, around ten.” | It checks real availability and offers at most three open times. |
| When it asks “Can we send you text message updates about this visit?”, answer “No.” | No SMS consent is recorded. (Answer “yes” on another test to see consent recorded.) |
| “Yes.” (to its one-sentence summary) | Before booking it sums up your name, address, problem and time and waits for your yes. Then it books once. |
Success: the agent reads back the date, time and address, and only then says you are booked. If it says your request is saved and the team will call back, the booking reached Crisphive but no technician could take that time — see Troubleshooting.
More calls worth trying before you go live:
| Scenario | What should happen |
|---|---|
| A new caller. Call from a number Crisphive does not know (in Rehearsal, any other 613-555-01xx number, for example 613 555 0188). | The agent finds no customer, so it asks for your full name and spells it back, then asks for an email (optional) and spells it back. You do not create the customer first: Crisphive creates it automatically when the visit is booked. Call again from the same number and the agent asks “Am I speaking with …?” — Crisphive matched you by phone and never creates a second customer for the same number. |
| A wrong number. Give a number with one wrong digit, and when it is read back say “No, it’s 613 555 0177.” | The agent reads the corrected number back again and only looks it up after your yes. |
| A number that cannot exist. Give one digit too few (“613 555 017”) and say yes to the read-back. | Crisphive answers PHONE_INVALID. The agent says the number didn’t come through, asks you to repeat it, reads it back and tries again — it does not end the call. |
Check the result on both sides
Open Monitor → Conversations and click the call. The transcript shows each tool call (listCustomers, then listJobRequestBookingWindows, then bookAndConfirmJobRequest) and Crisphive’s answer. A healthy booking answer contains "confirmed": true.
With the dashboard still in Rehearsal, a “New booking” notice appears and the job shows on the board with status Confirmed (opened, its window is titled Booking Confirmed), a reference like REQ-CA-…, the address 145 Laurier Avenue West, Ottawa, the assigned technician and your business timezone (for example America/Toronto).
Customers now lists Alex Martin with +16135550177. Call again with the same number: the agent should ask “Am I speaking with Alex Martin?” and Crisphive must not create a second customer.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| Test Connection fails or lists no tools | Server type set to SSE. Crisphive’s MCP server is Streamable HTTP only. | Edit the server, choose Streamable HTTP, test again. |
Test Connection answers 401 (API_KEY_INVALID) | The header value is missing the word Bearer and its space, has extra spaces or quotes, or holds a publishable chpk_ key or a revoked key. | Recreate the secret as exactly Bearer chsk_…. Use a Secret key. |
Calls suddenly fail with 401 API_KEY_EXPIRED | The key reached its expiry date. | Create a new key, update the header secret, then revoke the old key. |
| The call goes silent in the middle of the booking | Tool Approval Mode is Always Ask: the agent is waiting for a person to approve the tool call. | Set it to No Approval (or Fine-Grained with every Crisphive tool auto-approved). |
| Bookings land an hour (or a day) off | The timezone under the system prompt is not your business timezone, or the agent sent a time with an offset (400 JOB_REQUEST_INVALID_INPUT with data.means_locally). | Set the ElevenLabs timezone to your business timezone and replace [timezone] everywhere in the prompt. Times must be local wall clock without an offset, e.g. 2026-10-06T10:00:00. |
| The agent has no Crisphive tools in the call | The server was added to the workspace but not attached to this agent, or the agent was not published after attaching it. | Repeat Step 6, then click Publish. |
| Cannot add the MCP server at all | The ElevenLabs workspace uses Zero Retention Mode or HIPAA mode, where MCP servers are unavailable. | Use a standard ElevenLabs workspace. |
A tool answers 403 API_KEY_SCOPE_INSUFFICIENT | The key is restricted and lacks a scope the tool needs (named in data.required_scope). | Edit the key’s scopes in Crisphive (Settings → Developer → API Keys) to include all five booking scopes. |
| The job was created without an address | The agent booked with customer_id for a returning customer whose record has no address. | Use the system prompt unchanged: it always sends customer + address, and Crisphive matches the existing customer by phone. |
| The agent told the caller a time, but the job is not confirmed | Crisphive answered confirmed: false (the job was saved in your queue) and the prompt did not check it. | Keep step 8 of the prompt. Then confirm the job from the dashboard or call the customer. |
confirmed: false with refusal.error_code JOB_REQUEST_NO_TECHNICIAN_AVAILABLE | Nobody who has the skills, covers that address and works at that hour is free. | Check the technicians’ working hours and service areas cover the address. The job waits in the coordinator queue — do not book it again. |
| The customer’s name is spelled wrong | Speech-to-text misheard it. | Keep step 2 of the prompt: the agent spells the name back letter by letter and waits for a yes. |
400 PHONE_INVALID | The number was not sent in international format, or a digit was misheard. | The prompt sends E.164 (+1 then ten digits) and, on PHONE_INVALID, asks the caller to repeat the number, reads it back and tries again (step 1). |
| The agent booked under a wrong number | Speech-to-text misheard a digit, and the number was used without being confirmed. | The prompt reads the number back before looking it up (step 1); make sure that step is in your prompt. |
400 JOB_REQUEST_QUOTE_INVALID with data.reason job_type_has_no_default_duration | The job type the agent picked has no default duration. Nothing was created. | Set a default duration on that job type (Settings → Job Types), or book without a job type (“General” is used). |
| The customer got no text message | Crisphive only texts customers who agreed to SMS, and never texts 555 test numbers. | Expected. Real callers who say yes to texts get them; others get email. |
Step 9 — Switch to your real business
Switch the Crisphive dashboard to Live. Check every job type the agent may book has a default duration, and that technicians have working hours, skills and service areas — the agent can only confirm times a real technician can make.
Create a new Secret key in live mode (it starts with chsk_live_) with the same five scopes. Pick an expiry you will remember — up to 365 days — and put a reminder in your calendar a week before it.
In ElevenLabs open the Crisphive MCP server and replace the Authorization secret with Bearer chsk_live_…. Test Connection, save, and Publish the agent again.
Book a visit for yourself with your own number and address, check it appears in the live dashboard, then cancel it.
Step 10 — Connect a phone number
Until now you talked to the agent in the browser. It answers real calls only once a phone number is attached to it. There are three ways:
ElevenLabs does not sell phone numbers: import a number you have with Twilio. Assign the number to the agent as the agent that answers incoming calls.
With your phone provider, forward calls from your existing business number to the agent’s number: always, when nobody answers, when the line is busy, or after hours. A good start is after-hours and missed calls only, so your team still answers during the day.
If your business has its own phone system, connect it over SIP. ElevenLabs can import a SIP trunk.
Numbers and call minutes are paid to ElevenLabs or your phone provider, not to Crisphive. Then call the number from your own phone and book a test visit.
Calls that are not bookings
Not every caller wants a new visit. The prompt already tells the agent what to do with the other calls:
| What the caller asks | What the agent does |
|---|---|
| Opening hours, areas served, services offered | Answers only from information in its prompt. If it does not know, it says so and offers to take a message. Add your opening hours, areas and services to the prompt if you want it to answer these. |
| A price or an estimate | Says the team will discuss pricing, then offers to book a visit or take a message. |
| An existing booking: when the technician is coming, changing the time, cancelling | Cannot look up or change existing bookings. Transfers the call if it has a transfer tool (below); otherwise takes a message. |
| A complaint, or “can I speak to a person?” | Transfers the call if it can; otherwise takes a message. |
| A wrong number, a sales call or spam | Says the line is for booking service visits and ends the call politely. |
| Gas smell, smoke, fire, sparking, flooding near electricity, an injury | Tells the caller to leave the building and call 911. Does not book. |
A message is the caller’s name, phone number (read back) and what they need in one sentence. Two setups make sure these calls reach your team.
Setup 1 — Transfer the call to a person.
In ElevenLabs, add the system tool Transfer to number to the agent.
Set the destination to your office or coordinator phone number.
The prompt already tells the agent when to transfer: a complaint, a caller who asks for a person, and questions about an existing booking. Save and publish the agent again.
Transfer calls only Monday to Friday, 8 am to 5 pm. Outside those hours, take a message.Setup 2 — Get every message to your team.
In the agent’s Analysis settings (data collection), add four fields to fill in after each call: the caller’s name, their phone number, the reason for the call and the message.
In ElevenLabs, paste that address as the post-call webhook, so ElevenLabs sends the call summary there when a call ends.
Add a step that sends the name, phone number, reason and message as an email or a Slack message to whoever calls customers back.
Make a practice call where you only leave a message, and check that it reaches your team.
What it costs
- Crisphive: jobs booked by the agent count toward your Crisphive plan like any other job. The connection itself needs no add-on.
- ElevenLabs: you pay ElevenLabs for the voice minutes and for the AI model. In our 4-minute test call with Claude Sonnet 5.5 the model alone cost about US$0.25. A faster, cheaper model (Gemini Flash) costs less per call.
- Phone line: your telephony provider charges for the number and minutes.
- Every turn of the conversation sends the tool list to the AI model;
/mcp/voicekeeps that list to the tools a phone call needs.
Related guides and reference
- Voice agents overview — the voice tool set and booking rules
- Vapi — a phone assistant with the Crisphive MCP tool
- Retell — a phone agent with the Crisphive MCP server
- MCP server reference — every tool, the tool profiles and client setup
- Book and confirm a job — the API call behind every booking step
FAQ
Can an ElevenLabs agent book jobs in Crisphive?
https://api.crisphive.com/mcp/voice, Streamable HTTP, with an Authorization: Bearer chsk_… header). The agent looks the caller up, books and confirms the visit in one call, and the job appears on your Crisphive board.Is there a Crisphive app in the ElevenLabs marketplace?
Which Crisphive key should I use — secret or publishable?
chsk_test_… or chsk_live_…). A publishable chpk_ key only works for the booking widget on your website and is refused by the MCP server.What can the agent do with my key?
customers_view, customers_manage, job_view, job_create and job_manage: it can look up and create customers and book jobs, but cannot see your team settings, billing or API keys.Can I test without touching real customers?
chsk_test_ key created while the dashboard is in sandbox only reads and writes isolated practice data. No real customer is ever contacted, and your live schedule does not change.Why did the agent say “our team will call you back” instead of booking?
confirmed: false: the job was saved, but no technician with the right skills, service area and working hours was free at that time. The job waits in your queue for a coordinator to schedule.