Update a copilot profile
import MoreVoice from "@morevoice/sdk";
const mv = new MoreVoice(); // MOREVOICE_API_KEY from the environment
const copilotProfile = await mv.copilotProfiles.update("cop_7Hk2Lm9Qp", { coaching: { talk_ratio_max: 0.6, },});console.log(copilotProfile);from morevoice import MoreVoice
client = MoreVoice() # MOREVOICE_API_KEY from the environment
copilot_profile = client.copilot_profiles.update("cop_7Hk2Lm9Qp", { "coaching": { "talk_ratio_max": 0.6, },})print(copilot_profile)curl -X PATCH https://api.morevoice.ai/v1/copilot_profiles/cop_7Hk2Lm9Qp \ -H "Authorization: Bearer $MOREVOICE_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "coaching": { "talk_ratio_max": 0.6 }}'Updates the fields you send. Nested objects merge with the stored values; lists (stages, objections, alerts…) replace them. Calls that start afterwards use the new version.
Try it in the API playground with a test-mode key.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”A copilot profile ID (cop_…).
Header Parameters
Section titled “Header Parameters”The API version to use for this request. Defaults to the version the API key is pinned to.
Example
2026-11-01Request Body
Section titled “Request Body”The fields to change. Nested objects (kb, compliance, coaching, script, model) merge with the stored values; lists replace them.
object
object
Your stable identifier of the item.
Also raise it on the supervisor board.
Keyword / escalation: customer phrases.
Sentiment: below this (−1…1); silence / monologue: seconds; talk_ratio: agent share; long_call: minutes.
object
Continuous agent speech before “ask a question”.
Dead air before a nudge.
Agent share of talk time above which to nudge (0–1).
Who the agent represents.
object
object
Safer wording shown on the alert.
object
…or before leaving this stage.
Alert when not said this long into the call (0: before the call ends).
Your stable identifier of the item.
The exact wording to read out if it was missed.
Details the copilot picks out of the conversation.
object
A hint for the extractor.
Your stable identifier of the item.
What the call should achieve.
object
Knowledge-base documents the profile may use (empty: all).
Reference links shown to the agent.
object
Minimum confidence (0–1) to show a knowledge card unasked.
The calls’ language (he, en, …).
object
False: the fast path only (no model calls).
Model calls per minute per call.
Meaning-based objection match threshold (cosine).
Priority processing: steadier, lower latency, higher token price.
Start on stable interim text, before the utterance is final.
The objection library.
object
Paraphrases for the meaning-based match.
A knowledge-base query whose facts are attached to the card.
Your stable identifier of the item.
The recommended answer shown on the card.
Customer phrases that fire it at once.
The QA rubric this profile’s calls are scored against (empty: the organisation’s rubric).
object
Your stable identifier of the item.
Relative importance on one 0–100 scale (points out of 100); only the ratios count.
The call’s stages, each with a checklist (used when no script flow is set).
object
object
The question the copilot suggests while it is open.
Your stable identifier of the item.
Agent phrases that tick it automatically; a trailing * matches a prefix.
Your stable identifier of the item.
How the agent should sound.
Example
{ "coaching": { "talk_ratio_max": 0.6 }}Responses
Section titled “Responses”OK
How the real-time agent copilot coaches one kind of call: stages, objections, knowledge, fields, compliance, alerts and the QA rubric.
object
object
Your stable identifier of the item.
Also raise it on the supervisor board.
Keyword / escalation: customer phrases.
Sentiment: below this (−1…1); silence / monologue: seconds; talk_ratio: agent share; long_call: minutes.
object
Continuous agent speech before “ask a question”.
Dead air before a nudge.
Agent share of talk time above which to nudge (0–1).
Who the agent represents.
object
object
Safer wording shown on the alert.
object
…or before leaving this stage.
Alert when not said this long into the call (0: before the call ends).
Your stable identifier of the item.
The exact wording to read out if it was missed.
An ISO-8601 timestamp in UTC.
Details the copilot picks out of the conversation.
object
A hint for the extractor.
Your stable identifier of the item.
What the call should achieve.
The profile’s ID.
object
Knowledge-base documents the profile may use (empty: all).
Reference links shown to the agent.
object
Minimum confidence (0–1) to show a knowledge card unasked.
The calls’ language (he, en, …).
true in live mode, false in test mode.
object
False: the fast path only (no model calls).
Model calls per minute per call.
Meaning-based objection match threshold (cosine).
Priority processing: steadier, lower latency, higher token price.
Start on stable interim text, before the utterance is final.
The objection library.
object
Paraphrases for the meaning-based match.
A knowledge-base query whose facts are attached to the card.
Your stable identifier of the item.
The recommended answer shown on the card.
Customer phrases that fire it at once.
The QA rubric this profile’s calls are scored against (empty: the organisation’s rubric).
object
Your stable identifier of the item.
Relative importance on one 0–100 scale (points out of 100); only the ratios count.
The call’s stages, each with a checklist (used when no script flow is set).
object
object
The question the copilot suggests while it is open.
Your stable identifier of the item.
Agent phrases that tick it automatically; a trailing * matches a prefix.
Your stable identifier of the item.
The template it was created from.
How the agent should sound.
An ISO-8601 timestamp in UTC.
Goes up on every change.
Example
{ "alerts": [ { "key": "escalation", "kind": "escalation", "label": "Asks for a manager", "message": "Acknowledge and offer a solution.", "notify_supervisor": true, "phrases": [ "manager" ], "severity": "critical", "threshold": 0 } ], "coaching": { "monologue_seconds_max": 40, "silence_seconds_max": 7, "talk_ratio_max": 0.65, "wpm_max": 175, "wpm_min": 0 }, "company": "Acme", "compliance": { "forbidden_phrases": [ { "instead": "In most cases", "phrase": "guaranteed", "reason": "No guarantees", "severity": "warn" } ], "required_disclosures": [] }, "created": "2026-11-03T09:14:22.000Z", "fields": [ { "hint": "", "key": "budget", "label": "Monthly budget", "options": [], "pattern": "", "required": false, "type": "money" } ], "goal": "Book a demo or a clear next step.", "id": "cop_8Ps2Ux5Zc7Eh0Jm3Or6Tw9", "kb": { "document_ids": [ "kbd_6Nq0Sv3Xa5Cf8Hk1Mp4Rt7" ], "links": [], "min_score": 0.35 }, "language": "en", "livemode": true, "model": { "api": "chat", "deep_path": true, "fallback_model": "gpt-4.1-nano", "max_calls_per_minute": 12, "model": "gpt-4.1-mini", "objection_similarity": 0.72, "priority": true, "speculative": true, "temperature": 0.3 }, "name": "Outbound sales", "object": "copilot_profile", "objections": [ { "examples": [ "it costs too much" ], "follow_up": "What do you pay now?", "kb_query": "price list", "key": "price", "label": "Too expensive", "response": "Compare it with what downtime costs you today.", "triggers": [ "too expensive" ] } ], "product": "Acme Cloud PBX", "qa_rubric": [ { "description": "Asked open questions first.", "key": "discovery", "label": "Discovery", "weight": 60 }, { "description": "Agreed a dated next step.", "key": "close", "label": "Next step", "weight": 40 } ], "script": { "flow_id": null, "version": "published" }, "stages": [ { "checklist": [ { "ask": "", "key": "recorded", "label": "Say the call is recorded", "phrases": [ "this call is recorded" ], "required": true } ], "goal": "Introduce yourself and ask for two minutes", "key": "opening", "label": "Opening" } ], "template_id": "sales-outbound", "tone": "Warm, confident, never pushy.", "updated": "2026-11-03T09:14:22.000Z", "version": 4}The request is invalid: a parameter is missing, malformed or unknown, or the version header is unknown.
Every /v1 error.
object
object
A stable, machine-readable code from the error-code catalogue.
Structured context, e.g. required_scope or the compliance verdict.
object
A link to the documentation of this code.
A human-readable explanation. Do not parse it.
The request parameter the error relates to, e.g. to or metadata[order_id].
The X-Request-Id of this request. Quote it when you contact support.
The category of the error.
Example
{ "error": { "code": "parameter_missing", "doc_url": "https://docs.morevoice.ai/api/errors#parameter-missing", "message": "Missing required parameter: to.", "param": "to", "request_id": "req_7Hk2LmN9pQ4rS6tV8wX0yZ", "type": "invalid_request_error" }}Headers
Section titled “Headers”The request’s ID (req_…). Quote it when you contact support.
No valid API key was sent.
Every /v1 error.
object
object
A stable, machine-readable code from the error-code catalogue.
Structured context, e.g. required_scope or the compliance verdict.
object
A link to the documentation of this code.
A human-readable explanation. Do not parse it.
The request parameter the error relates to, e.g. to or metadata[order_id].
The X-Request-Id of this request. Quote it when you contact support.
The category of the error.
Example
{ "error": { "code": "invalid_api_key", "doc_url": "https://docs.morevoice.ai/api/errors#invalid-api-key", "message": "Invalid API key.", "request_id": "req_7Hk2LmN9pQ4rS6tV8wX0yZ", "type": "authentication_error" }}Headers
Section titled “Headers”The request’s ID (req_…). Quote it when you contact support.
The key may not do this (a missing scope, a plan limit, or a compliance block).
Every /v1 error.
object
object
A stable, machine-readable code from the error-code catalogue.
Structured context, e.g. required_scope or the compliance verdict.
object
A link to the documentation of this code.
A human-readable explanation. Do not parse it.
The request parameter the error relates to, e.g. to or metadata[order_id].
The X-Request-Id of this request. Quote it when you contact support.
The category of the error.
Example
{ "error": { "code": "missing_scope", "doc_url": "https://docs.morevoice.ai/api/errors#missing-scope", "message": "This API key lacks the calls:write scope.", "request_id": "req_7Hk2LmN9pQ4rS6tV8wX0yZ", "type": "permission_error" }}Headers
Section titled “Headers”The request’s ID (req_…). Quote it when you contact support.
No object with this ID exists in this organisation and mode.
Every /v1 error.
object
object
A stable, machine-readable code from the error-code catalogue.
Structured context, e.g. required_scope or the compliance verdict.
object
A link to the documentation of this code.
A human-readable explanation. Do not parse it.
The request parameter the error relates to, e.g. to or metadata[order_id].
The X-Request-Id of this request. Quote it when you contact support.
The category of the error.
Example
{ "error": { "code": "resource_missing", "doc_url": "https://docs.morevoice.ai/api/errors#resource-missing", "message": "No such object: 'call_4Gk2'.", "param": "id", "request_id": "req_7Hk2LmN9pQ4rS6tV8wX0yZ", "type": "not_found" }}Headers
Section titled “Headers”The request’s ID (req_…). Quote it when you contact support.
Too many requests, or no call capacity right now. Retry after the Retry-After delay.
Every /v1 error.
object
object
A stable, machine-readable code from the error-code catalogue.
Structured context, e.g. required_scope or the compliance verdict.
object
A link to the documentation of this code.
A human-readable explanation. Do not parse it.
The request parameter the error relates to, e.g. to or metadata[order_id].
The X-Request-Id of this request. Quote it when you contact support.
The category of the error.
Example
{ "error": { "code": "rate_limited", "doc_url": "https://docs.morevoice.ai/api/errors#rate-limited", "message": "Too many requests. Retry after 1 second.", "request_id": "req_7Hk2LmN9pQ4rS6tV8wX0yZ", "type": "rate_limit_error" }}Headers
Section titled “Headers”Seconds to wait before retrying.
The request’s ID (req_…). Quote it when you contact support.
Something went wrong on MoreVoice’s side. Retry with the same Idempotency-Key.
Every /v1 error.
object
object
A stable, machine-readable code from the error-code catalogue.
Structured context, e.g. required_scope or the compliance verdict.
object
A link to the documentation of this code.
A human-readable explanation. Do not parse it.
The request parameter the error relates to, e.g. to or metadata[order_id].
The X-Request-Id of this request. Quote it when you contact support.
The category of the error.
Example
{ "error": { "code": "internal_error", "doc_url": "https://docs.morevoice.ai/api/errors#internal-error", "message": "Something went wrong on MoreVoice's side.", "request_id": "req_7Hk2LmN9pQ4rS6tV8wX0yZ", "type": "api_error" }}Headers
Section titled “Headers”The request’s ID (req_…). Quote it when you contact support.