Use Speak AI with Zoho
Auto-log every call into Zoho CRM as a Call record and Note, route inbound support calls to Zoho Desk by sentiment, and push AI insights to custom Deal fields. Production-ready in an afternoon with Zoho’s REST API or Zoho Flow.
Vad du kan göra
Once Speak is wired into Zoho, every meeting and call becomes a structured record on the matching Contact and Deal. Same workspace covers Zoho CRM, Bigin, and Desk, with Zoho Flow as the no-code orchestration layer.
Auto-log every call to Zoho CRM
Speaks media.analyzed webhook fires after every recorded call. A small middleware creates a Call record and a Note on the matching Contact with summary, sentiment, topics, and the Speak transcript link. Reps stop copy-pasting.
Route inbound support calls to Zoho Desk by sentiment
Magic Prompt sentiment plus cancellation-keyword detection maps directly to Zoho Desk priority (Urgent / High / Medium). Tickets land in the right queue with full context. Category-killer for Zoho-Desk-first CX teams.
Push AI insights to custom Zoho CRM Deal fields
Magic Prompt output writes to fields like Speak_Sentiment_Score__c och Speak_Top_Topics__c. Zoho CRM reports, dashboards, and Blueprint flows segment on real conversation data.
Query Speak from Claude or ChatGPT, scoped to Zoho
Speak’s MCP server lets sales leadership ask “show me Zoho CRM Deals in Negotiation where the latest Speak call sentiment dropped” in plain English. No SQL, no dashboards, no exports.
Konfigurera i 3 steg
Zoho is a suite, not a single product. Pick the path that matches the Zoho product you use and the integration depth your team needs.
Registrera dig för Speak AI
Skapa ett kostnadsfritt konto på app.speakai.co. You get a 7-day trial with full access. Once you are in, go to Inställningar > API och kopiera din API-nyckel.
Välj din integrationssökväg
Zoho’s native automation tool. Set up an inbound webhook that catches Speak’s media.analyzed event, then chain Zoho CRM and Zoho Desk actions visually. No middleware to host.
Forward Speak’s media.analyzed webhook to a small middleware. Middleware POSTs to https://www.zohoapis.com/crm/v8/Calls och /Notes. Replace the domain with .eu / .in / .com.au based on your Zoho data center.
Visual workflow builders with native Zoho CRM, Zoho Desk, and Speak modules. Handle OAuth refresh automatically.
Connect Claude Desktop with npx @speakai/mcp-server init or add the remote MCP server. Tag Speak media with Zoho record IDs and Claude can search across the linked call library.
Authenticate with Zoho
Generate an OAuth token from api-console.zoho.com. Required scopes: ZohoCRM.modules.calls.CREATE, ZohoCRM.modules.notes.CREATE, ZohoCRM.modules.deals.UPDATE. For Zoho Desk: Desk.tickets.CREATE. Use the right region domain (.com / .eu / .in / .com.au / .jp / .com.cn / .ca).
Verkliga arbetsflöden, verkliga resultat
Four production patterns Speak customers ship with Zoho. Pick the one that fits your team and copy the recipe.
Auto-log every call to Zoho CRM
Speaks media.analyzed webhook fires after every recorded call. A 40-line middleware resolves the Contact by attendee email, then creates a Call record AND a Note on that contact with summary, sentiment, topics, and the Speak transcript link.
# 1. Create the Call record
curl -X POST "https://www.zohoapis.com/crm/v8/Calls"
-H "Authorization: Zoho-oauthtoken $ZOHO_OAUTH_TOKEN"
-H "Content-Type: application/json"
-d '{
"data": [{
"Subject": "Acme Corp - Discovery",
"Call_Type": "Outbound",
"Call_Start_Time": "2026-05-06T11:00:00+00:00",
"Call_Duration": "30:20",
"Who_Id": { "id": "4567890000000123456" },
"Call_Purpose": "Demo",
"Description": "Speak AI Summary: Acme is evaluating Speak for sales enablement..."
}]
}'
# 2. Create the Note attached to the Contact
curl -X POST "https://www.zohoapis.com/crm/v8/Contacts/4567890000000123456/Notes"
-H "Authorization: Zoho-oauthtoken $ZOHO_OAUTH_TOKEN"
-H "Content-Type: application/json"
-d '{
"data": [{
"Note_Title": "Speak AI - Acme Discovery",
"Note_Content": "Sentiment: positive (0.78)nTopics: pricing, integrations, securitynnFull transcript: https://app.speakai.co/media/med_abc123"
}]
}'
# Replace zohoapis.com with .eu / .in / .com.au based on your Zoho data center.
import express from "express";
const app = express();
app.use(express.json());
const ZOHO_API = process.env.ZOHO_API_DOMAIN; // https://www.zohoapis.com (or regional)
const ZOHO_TOKEN = process.env.ZOHO_OAUTH_TOKEN;
app.post("/speak/webhook", async (req, res) => {
// Speak fires {eventType, state, mediaId} -- flat.
const { eventType, state, mediaId } = req.body;
if (eventType !== "media.analyzed" || state !== "processed") return res.sendStatus(202);
res.sendStatus(202);
// 1. Fetch insight + Magic Prompt summary in parallel.
const [insightRes, summary] = await Promise.all([
fetch(`https://api.speakai.co/v1/media/insight/${mediaId}`,
{ headers: { "x-speakai-key": process.env.SPEAK_API_KEY } }).then(r => r.json()),
runMagicPrompt(mediaId,
"Summarize this call in 2 sentences. End with a clear next step."),
]);
const media = insightRes.data;
// 2. Resolve Zoho Contact by attendee email (your lookup).
const contactId = await findZohoContactByEmail(await emailFromMedia(media));
if (!contactId) return;
const doc = media.sentiment?.[0]?.document || {};
const sentimentLabel = doc.Compound > 10 ? "Positive"
: doc.Compound < -10 ? "Negative" : "Neutral";
// duration.inSecond -> "MM:SS" for Zoho's Call_Duration string field.
const secs = media.duration?.inSecond || 0;
const callDuration = `${Math.floor(secs / 60)}:${String(secs % 60).padStart(2, "0")}`;
const headers = {
Authorization: `Zoho-oauthtoken ${ZOHO_TOKEN}`,
"Content-Type": "application/json",
};
// 3. Call record
await fetch(`${ZOHO_API}/crm/v8/Calls`, {
method: "POST", headers,
body: JSON.stringify({
data: [{
Subject: media.name,
Call_Type: "Outbound",
Call_Start_Time: media.createdAt,
Call_Duration: callDuration,
Who_Id: { id: contactId },
Call_Purpose: "Demo",
Description: summary,
}],
}),
});
// 4. Note with sentiment + transcript link.
await fetch(`${ZOHO_API}/crm/v8/Contacts/${contactId}/Notes`, {
method: "POST", headers,
body: JSON.stringify({
data: [{
Note_Title: `Speak AI - ${media.name}`,
Note_Content:
`Summary: ${summary}
` +
`Sentiment: ${sentimentLabel} (Compound ${doc.Compound})
` +
`Full transcript: https://app.speakai.co/media/${mediaId}`,
}],
}),
});
});
// Helper: fire Magic Prompt + poll until completed (~2-3s typical).
async function runMagicPrompt(mediaId, prompt) {
await fetch("https://api.speakai.co/v1/prompt/", {
method: "POST",
headers: {
"x-speakai-key": process.env.SPEAK_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
mediaIds: [mediaId], prompt,
isStream: false, isIndividualPrompt: true,
}),
});
for (let i = 0; i < 20; i++) {
await new Promise(r => setTimeout(r, 1000));
const r = await fetch(
`https://api.speakai.co/v1/prompt/messages?mediaIds=${mediaId}&pageSize=1`,
{ headers: { "x-speakai-key": process.env.SPEAK_API_KEY } }
);
const j = await r.json();
const msg = j?.data?.history?.[0]?.messages?.[0];
if (msg && msg.state === "completed") return msg.answer;
}
return ""; // Magic Prompt timed out -- skip the summary field.
}
app.listen(3000);
import asyncio, os
from fastapi import FastAPI, Request
import httpx
app = FastAPI()
ZOHO_API = os.environ["ZOHO_API_DOMAIN"] # https://www.zohoapis.com or regional
ZOHO_TOKEN = os.environ["ZOHO_OAUTH_TOKEN"]
@app.post("/speak/webhook")
async def speak_webhook(req: Request):
# Speak fires {eventType, state, mediaId} -- flat.
body = await req.json()
if body.get("eventType") != "media.analyzed" or body.get("state") != "processed":
return {"ok": True}
media_id = body["mediaId"]
headers = {"x-speakai-key": os.environ["SPEAK_API_KEY"]}
async with httpx.AsyncClient(timeout=30) as c:
ir = await c.get(f"https://api.speakai.co/v1/media/insight/{media_id}", headers=headers)
media = ir.json()["data"]
summary = await run_magic_prompt(media_id,
"Summarize this call in 2 sentences. End with a clear next step.")
contact_id = await find_zoho_contact_by_email(await email_from_media(media))
if not contact_id:
return {"ok": True}
doc = (media.get("sentiment") or [{}])[0].get("document", {})
compound = doc.get("Compound", 0)
sentiment_label = "Positive" if compound > 10 else "Negative" if compound < -10 else "Neutral"
secs = (media.get("duration") or {}).get("inSecond", 0)
call_duration = f"{secs // 60}:{secs % 60:02d}"
zoho_headers = {
"Authorization": f"Zoho-oauthtoken {ZOHO_TOKEN}",
"Content-Type": "application/json",
}
async with httpx.AsyncClient(timeout=30) as c:
await c.post(f"{ZOHO_API}/crm/v8/Calls", headers=zoho_headers, json={
"data": [{
"Subject": media["name"],
"Call_Type": "Outbound",
"Call_Start_Time": media["createdAt"],
"Call_Duration": call_duration,
"Who_Id": {"id": contact_id},
"Call_Purpose": "Demo",
"Description": summary,
}],
})
await c.post(f"{ZOHO_API}/crm/v8/Contacts/{contact_id}/Notes", headers=zoho_headers, json={
"data": [{
"Note_Title": f"Speak AI - {media['name']}",
"Note_Content": (
f"Summary: {summary}
"
f"Sentiment: {sentiment_label} (Compound {compound})
"
f"Full transcript: https://app.speakai.co/media/{media_id}"
),
}],
})
return {"ok": True}
async def run_magic_prompt(media_id: str, prompt: str) -> str:
"""Fire Magic Prompt + poll until completed (~2-3s typical)."""
headers = {"x-speakai-key": os.environ["SPEAK_API_KEY"], "Content-Type": "application/json"}
async with httpx.AsyncClient(timeout=30) as c:
await c.post("https://api.speakai.co/v1/prompt/", headers=headers, json={
"mediaIds": [media_id], "prompt": prompt,
"isStream": False, "isIndividualPrompt": True,
})
for _ in range(20):
await asyncio.sleep(1)
r = await c.get(
"https://api.speakai.co/v1/prompt/messages",
params={"mediaIds": media_id, "pageSize": 1},
headers={"x-speakai-key": os.environ["SPEAK_API_KEY"]},
)
history = r.json().get("data", {}).get("history", [])
msg = history[0]["messages"][0] if history and history[0].get("messages") else None
if msg and msg.get("state") == "completed":
return msg.get("answer", "")
return "" # timed out
Zoho data center matters. www.zohoapis.com for US, .eu for EU, .in for India, .com.au for Australia, .jp, .com.cn, .ca. Hitting the wrong domain returns silent 401.
Verified against production 2026-05-07. Speak fires a thin notification (eventType, state, mediaId only). Your middleware fetches full insights via GET /v1/media/insight/:mediaId, then posts to the destination CRM.
Route inbound support calls to Zoho Desk by sentiment
Capture inbound support calls in Speak, run Magic Prompt sentiment + cancellation-keyword detection, then create a Zoho Desk ticket with priority derived from sentiment. Urgent for cancellation language, High for strong negative, Medium for neutral negative, Low otherwise.
curl -X POST https://desk.zoho.com/api/v1/tickets
-H "Authorization: Zoho-oauthtoken $ZOHO_OAUTH_TOKEN"
-H "orgId: $ZOHO_DESK_ORG_ID"
-H "Content-Type: application/json"
-d '{
"subject": "Support call - Acme Corp",
"description": "Speak AI summary:nCustomer is frustrated with billing.nnSentiment: negative (-0.62)nTranscript: https://app.speakai.co/media/med_abc123",
"contactId": "4567890000000123456",
"departmentId": "4567890000000111222",
"priority": "High",
"channel": "Phone"
}'
import asyncio, os, requests
from flask import Flask, request
app = Flask(__name__)
DESK_URL = "https://desk.zoho.com/api/v1/tickets"
ORG_ID = os.environ["ZOHO_DESK_ORG_ID"]
TOKEN = os.environ["ZOHO_OAUTH_TOKEN"]
DEPT = os.environ["ZOHO_DESK_DEPT_ID"]
def priority_from(compound: float, transcript: str) -> str:
text = transcript.lower()
if "cancel" in text or "refund" in text:
return "Urgent"
if compound < -40:
return "High"
if compound < 0:
return "Medium"
return "Low"
@app.post("/speak/webhook")
def hook():
body = request.get_json()
if body.get("eventType") != "media.analyzed" or body.get("state") != "processed":
return "", 202
media_id = body["mediaId"]
# Fetch insight (transcript + sentiment) from Speak.
speak_headers = {"x-speakai-key": os.environ["SPEAK_API_KEY"]}
media = requests.get(
f"https://api.speakai.co/v1/media/insight/{media_id}",
headers=speak_headers, timeout=30,
).json()["data"]
doc = (media.get("sentiment") or [{}])[0].get("document", {})
compound = doc.get("Compound", 0)
label = "Positive" if compound > 10 else "Negative" if compound < -10 else "Neutral"
transcript_text = " ".join(t.get("text", "") for t in (media.get("insight", {}).get("transcript") or []))
# Run Magic Prompt for a CX-ready summary (sync via /v1/prompt/ + poll).
summary = run_magic_prompt_sync(media_id,
"Summarize this support call in 2 sentences. End with the customer's ask.")
contact_id = lookup_zoho_contact(media) # your own lookup
payload = {
"subject": f"Support call - {media['name']}",
"description": (
f"Speak AI summary:
{summary}
"
f"Sentiment: {label} (Compound {compound})
"
f"Transcript: https://app.speakai.co/media/{media_id}"
),
"contactId": contact_id,
"departmentId": DEPT,
"priority": priority_from(compound, transcript_text),
"channel": "Phone",
}
r = requests.post(
DESK_URL,
headers={
"Authorization": f"Zoho-oauthtoken {TOKEN}",
"orgId": ORG_ID,
"Content-Type": "application/json",
},
json=payload, timeout=15,
)
r.raise_for_status()
return "", 200
def run_magic_prompt_sync(media_id: str, prompt: str) -> str:
"""Fire Magic Prompt + poll until completed (~2-3s typical)."""
import time
headers = {"x-speakai-key": os.environ["SPEAK_API_KEY"], "Content-Type": "application/json"}
requests.post("https://api.speakai.co/v1/prompt/", headers=headers, json={
"mediaIds": [media_id], "prompt": prompt,
"isStream": False, "isIndividualPrompt": True,
}, timeout=15)
for _ in range(20):
time.sleep(1)
r = requests.get(
"https://api.speakai.co/v1/prompt/messages",
params={"mediaIds": media_id, "pageSize": 1},
headers={"x-speakai-key": os.environ["SPEAK_API_KEY"]}, timeout=15,
)
history = r.json().get("data", {}).get("history", [])
msg = history[0]["messages"][0] if history and history[0].get("messages") else None
if msg and msg.get("state") == "completed":
return msg.get("answer", "")
return ""
Zoho Desk Org ID and Department ID live in Setup > Developer Space > API. Required scope: Desk.tickets.CREATE.
Push Speak insights to Zoho CRM Deal custom fields
Magic Prompt extracts sentiment, topics, competitors, and next steps. PUT the matching Deal to write those values into custom fields. Zoho CRM reports, dashboards, and Blueprint flows segment on real conversation data.
# Custom fields created in Setup > Modules > Deals > Layout > Add Custom Field
# Speak_Sentiment_Score__c (Number)
# Speak_Top_Topics__c (Multi-line text)
# Speak_Magic_Prompt_Summary__c (Multi-line text)
# Speak_Next_Step__c (Single-line text)
# Speak_Recording_URL__c (URL)
curl -X PUT "https://www.zohoapis.com/crm/v8/Deals/4567890000000123456"
-H "Authorization: Zoho-oauthtoken $ZOHO_OAUTH_TOKEN"
-H "Content-Type: application/json"
-d '{
"data": [{
"Speak_Sentiment_Score__c": 0.78,
"Speak_Top_Topics__c": "Pricing; Integration; Timeline",
"Speak_Magic_Prompt_Summary__c": "Technical buyer, evaluating vs Gong. Needs Zoho CRM auto-log.",
"Speak_Next_Step__c": "Send pricing deck Friday",
"Speak_Recording_URL__c": "https://app.speakai.co/media/med_abc123"
}]
}'
Ersätt zohoapis.com with your region domain. Pair with a Zoho CRM Workflow that auto-creates a Task for the AE if Speak_Sentiment_Score__c < 0.
Query Speak from Claude or ChatGPT, scoped to Zoho
Connect Speak’s official MCP server to Claude or ChatGPT, tag Speak media with Zoho record IDs (use case 1 already does this), and your team queries the entire Zoho-linked call library through conversation.
# Claude Desktop / Claude Code (auto-detekterar din installation)
npx @speakai/mcp-server init
# Klistra in din Speak API-nyckel när du uppmanas. Installationen tar cirka 2 minuter.
# Claude.ai (web) and ChatGPT MCP connector
# Settings > Integrations > Add MCP Server
# Remote URL: https://api.speakai.co/v1/mcp
# Auth header: x-speakai-key: YOUR_SPEAK_API_KEY
# Verify the connection responds:
curl -s https://api.speakai.co/v1/mcp
-H "x-speakai-key: $SPEAK_API_KEY"
-H "Accept: application/json"
2. Exempelprompter som ditt team kan använda idag:
- “Find all Speak transcripts from the last 7-days where the topic includes pricing objection and the deal is in Zoho CRM stage Negotiation.”
- “Pull the sentiment trend across all Speak calls with Acme Corp this quarter. Flag any month where average sentiment dropped more than 0.3.”
- “Summarize every Speak call this week tied to Zoho CRM Deals owned by Sarah. Surface objections by theme.”
- “Search Speak transcripts for any mention of competitor names (Gong, Chorus, Fireflies) and list which Zoho Deals they appeared on.”
- “Find the Speak call from last Tuesday tied to Zoho Contact 4567890000000123456 and pull the action items into a follow-up doc.”
The Zoho side of these prompts requires either a Zoho MCP bridge (community options exist), a custom MCP tool wrapping Zoho’s REST API, or a Zoho Flow that fronts Speak. Speak’s MCP server itself is Speak-only. Visa MCP-server →
Why Speak AI + Zoho
Zoho is the customer-of-record across CRM, Bigin, and Desk. Speak is the conversation-of-record. The combination turns every call into native Zoho data that Reports, Workflows, and Blueprint flows act on without extra tooling.
Multi-source ingest, not just Zoho calls
The same Speak workspace ingests Zoom, Teams, Meet, Webex, Twilio, Zoho Meeting, file uploads, and embedded recorder submissions. Pipe everything into Zoho CRM so reps see one timeline, not five.
Anpassade Magic Prompts, inte fasta mallar
Score discovery completeness, extract competitor mentions, detect deal-risk signals, surface objection patterns. Save prompts once and they run on every Zoho-linked Speak call across CRM, Bigin, and Desk.
MCP-native för Claude och ChatGPT
Speak’s official MCP server exposes 83 tools to AI assistants. Sales leaders query the Zoho-linked call library in plain English instead of building reports in Zoho Analytics.
Zoho Flow native, no third-party automation bill
Zoho Flow’s inbound webhook trigger catches Speak’s media.analyzed event directly. Chain Zoho CRM and Zoho Desk actions visually. Most teams ship without ever leaving Zoho.
Team litar på Speak AI för sina viktigaste samtal
4.9 på G2
“Speak AI har varit avgörande för att omvandla hur vi hanterar kvalitativ data. Transkriptionsnoggrannheten är imponerande, och NLP-insikterna sparar oss timmar av manuell analys.”
Forskningschef | Konsultföretag
“Vi bytte från Otter.ai och analysmöjligheterna är på en helt annan nivå. Sentimentanalys, nyckelordextraktion och temadetektion sker automatiskt.”
Produktchef | SaaS-företag
“The ability to search across all our customer calls and pull specific moments is a game-changer for our sales team.”
Head of Sales | SMB SaaS
How to use Speak AI with Zoho for call analysis and CRM intelligence
Zoho is a global SMB and mid-market suite covering CRM, Bigin, Desk, Cliq, Meeting, and dozens of other products. Reps log activities in Zoho CRM. Support teams resolve tickets in Zoho Desk. Operations teams run automation in Zoho Flow. Every motion is sharper when the underlying calls are transcribed, analyzed, and structured. Speak AI is the layer that does that.
Where Speak fits in the Zoho workflow
Speak runs after the call ends. The Speak Meeting Assistant joins Zoom, Teams, Meet, Webex, and Zoho Meeting calls, records the audio, transcribes in 100+ languages, and runs AI analysis. When analysis completes, Speak fires a media.analyzed webhook with the full payload. That webhook is the integration point – your Zoho Flow trigger or middleware turns it into a Call record, a Note, a custom field write, or a Desk ticket.
Zoho is a suite, not a product
Every recipe on this page targets a specific Zoho product. The Call record + Note pattern targets Zoho CRM and Zoho Bigin (lighter SMB CRM with similar APIs). The ticket-routing pattern targets Zoho Desk. The MCP path is product-agnostic. If you use a Zoho product not covered here, the same webhook + REST pattern applies with the corresponding endpoint.
Region-locked endpoints
Zoho’s API domain is region-specific based on your data center: www.zohoapis.com (US), www.zohoapis.eu (EU), www.zohoapis.in (India), www.zohoapis.com.au (Australia), www.zohoapis.jp (Japan), www.zohoapis.com.cn (China), www.zohoapis.ca (Canada). Region is fixed at signup. Hitting the wrong domain returns a silent 401. Verify your region in Setup > Company Info before deploying.
How do I push call transcripts to Zoho CRM automatically?
Three production paths, ranked by lift:
- Zoho Flow inbound webhook. Zoho’s native automation tool. Set up a trigger that catches Speak’s
media.analyzedwebhook, then chain Zoho CRM and Desk actions visually. No middleware, no third-party automation bill. - Webhook + REST API. 40-line middleware. Speak fires
media.analyzed, your middleware POSTs to Zoho CRM Calls and Notes endpoints. Highest control, lowest cost. - Make.com or n8n. Visual workflow builders with native Zoho CRM, Zoho Desk, and Speak modules. Handle OAuth refresh automatically.
Note on Zapier and Zoho
Speak’s Zapier app does not currently list Zoho as a paired app. Zoho Flow is actually a better path because it is native to your Zoho org, has direct access to all your Zoho products, and does not require a third-party automation subscription. Make.com and n8n are also strong alternatives.
Användarfall efter roll
Försäljnings- och RevOps-team use Speak AI with Zoho CRM to auto-log every call as a Call record and Note on the matching Contact. Magic Prompts score discovery completeness and extract competitor mentions. See Speak AI för säljteam.
Kundsupportteam use Speak AI with Zoho Desk to route inbound calls by sentiment. Cancellation language triggers Urgent priority automatically. Strong negative sentiment goes to High. The CSM sees full call context inside the ticket.
Business owners and SMB teams use the Zoho Flow path to wire Speak into Zoho CRM in 10 minutes. Every Zoom or Zoho Meeting call ends with a transcript, summary, and sentiment attached to the right contact. See Speak AI for business owners.
Konsultföretag log every client meeting into Zoho CRM as a structured Call + Note with summary, sentiment, and the Speak deep link. See Speak AI för konsultföretag.
Vanliga frågor
Does Speak AI work with Zoho CRM, Bigin, and Desk?
Yes. The Call + Note pattern targets Zoho CRM and Zoho Bigin (lighter SMB CRM with the same v8 API surface). The ticket-routing pattern targets Zoho Desk. The MCP path works across the full Zoho-linked call library. Zoho Flow can chain across multiple Zoho products in one workflow.
Does Speak AI’s Zapier app integrate with Zoho?
No. Speak’s Zapier app does not list Zoho as a paired app. Use Zoho Flow instead – it is native to your Zoho org, catches Speak’s webhook directly, and chains across all your Zoho products without a third-party automation subscription. Make.com and n8n also have native modules for both Speak and Zoho.
Which Zoho region domain do I use?
Zoho’s API domain is region-specific. www.zohoapis.com for US, .eu for EU, .in for India, .com.au for Australia, .jp for Japan, .com.cn for China, .ca for Canada. Region is fixed at signup. Verify in Setup > Company Info. Hitting the wrong domain returns a silent 401.
How do I match a Speak call to the right Zoho Contact?
The cleanest path is to resolve by attendee email. Speak’s Meeting Assistant captures attendee emails on join, which your middleware can match to Zoho Contacts via the search API. Alternative: tag the Speak media with a Zoho record ID upfront via your Calendar integration.
Vilka språk stöds?
Speak supports transcription in 100+ languages including English, Spanish, French, German, Portuguese, Italian, Dutch, Hebrew, Norwegian, Japanese, Arabic, Hindi, and dozens more. Strong fit for Zoho’s global customer base, especially in EU and India regions.
Can I try Speak AI for free with my Zoho account?
Yes. The 7-day trial includes credits for transcription, full API access, and the MCP server. No credit card required. Set up the recording webhook in Zoho Flow against a sandbox CRM and validate the full pipeline before committing.
Start using Speak AI with Zoho today
83 analysis tools. 100+ languages. Production webhook + REST API. Native Zoho Flow path. MCP-native for Claude and ChatGPT.
Prova Speak AI gratis
Create your account, grab your API key, and wire up your Zoho Flow trigger or middleware. Full access for 7 days. No credit card required.
Visa API-dokumentationen
Full reference for the upload endpoint, webhook event types, and Magic Prompt API. Plus the official Speak MCP server on NPM.




