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.
Kaj lahko storite
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
Speak's 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 / Srednja). 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 in . 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.
Nastavite v 3 korakih
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.
Registrirajte se za Speak AI
Ustvarite brezplačen račun na app.speakai.co. You get a 7-day trial with full access. Once you are in, go to Nastavitve > API in kopirajte svoj ključ API.
Izberite svojo pot integracije
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 in . /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).
Pravi delovni procesi, pravi rezultati
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
Speak's 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, Srednja 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"
}]
}'
Zamenjaj 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 (samodejno zaznava vašo namestitev)
npx @speakai/mcp-server init
# Vstavite ključ Speak API, ko se za njega povprašate. Nastavka traja približno 2 minuti.
# 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. Primer navodil, ki jih lahko vaš tim uporabi danes:
- “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. Oglejte si MCP strežnik →
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.
Prilagojeni Magic Prompts, ne fiksne predloge
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-nativno za Claude in 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.
Ekipe zaupajo Speak AI za njihove najbolj pomembne klice
4.9 na G2
“Speak AI je bil ključen pri spreminjanju načina, kako ravnamo s kvalitativnimi podatki. Natančnost transkripcije je impresivna, vpogledi NLP pa nam prihranijo ure ročne analize.”
Direktor raziskav | Svetovalnica
“Prestopili smo iz Otter.ai in je globina analize na popolnoma drugačni ravni. Ocenjevanje sentimenta, ekstrakcija ključnih besed in odkrivanje tem se izvršijo avtomatično.”
Vodja izdelkov | SaaS podjetje
“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.
Primeri uporabe po vlogah
Prodajne in RevOps ekipe 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 za prodajne ekipe.
Ekipe za podporo strankam 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.
Konzultantska podjetja log every client meeting into Zoho CRM as a structured Call + Note with summary, sentiment, and the Speak deep link. See Speak AI za konsultantske družbe.
Pogosto zastavljena vprašanja
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.
Kateri jeziki so podprti?
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.
Preizkusite Speak AI brezplačno
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.
Oglejte si dokumentacijo API
Full reference for the upload endpoint, webhook event types, and Magic Prompt API. Plus the official Speak MCP server on NPM.




