Schedule a Zoho Meeting from Zoho Creator with Deluge

Create a Zoho Meeting from Zoho Creator

Book a session from the record that needs it. This function creates a Zoho Meeting from a Creator record and stores both the participant join link and the host start link back on the row, so the meeting lives alongside the work it belongs to.

Do not use the original. It handled credentials dangerously. The 2020 version obtained an authtoken by sending the host’s email address and password as query-string parameters to accounts.zoho.com/apiauthtoken/nb/create, then storing that password in a Creator form. Passwords in URLs end up in server logs and browser history, and keeping them in an app table means anyone with report access has them. Separately, the whole mechanism is dead: Zoho retired legacy authtokens in December 2020 and every existing token stopped working on 1 April 2021. The original also called /api/private/json/meetings/createMeeting — a private endpoint that was never supported for third-party use. This is a ground-up rewrite on OAuth and the documented v2 API.

Before you start

  • A Zoho OAuth connection named zoho_meeting_connection with ZohoMeeting.meeting.CREATE and ZohoMeeting.manageOrg.READ.
  • Your organisation name for the X-ZSOURCE header.
  • A form with the meeting title, start date-time, and two fields to hold the links.

Deluge function

// ============================================
// CREATE A ZOHO MEETING FROM ZOHO CREATOR
// Auth: Zoho OAuth connection. No passwords anywhere.
// ============================================

void Meeting.createSession(int recordId)
{
CONN = "zoho_meeting_connection";
ZSOURCE = "YOUR_COMPANY_NAME"; // mandatory X-ZSOURCE header value
BASE = "https://meeting.zoho.com/api/v2";

rec = Actividades[ID == recordId];

headerMap = Map();
headerMap.put("Content-Type","application/json;charset=UTF-8");
headerMap.put("X-ZSOURCE",ZSOURCE);

// --- 1. Resolve your org id (zsoid). Cache it; it never changes. ---
userResp = invokeurl
[
url : BASE + "/user.json"
type : GET
headers : headerMap
connection : CONN
];
zsoid = userResp.getJSON("userDetails").getJSON("zsoid");
presenterId = userResp.getJSON("userDetails").getJSON("zuid");

if(zsoid == null)
{
info "Could not resolve Zoho Meeting org: " + userResp.toString();
return;
}

// --- 2. Build the session. Mind the date format. ---
session = Map();
session.put("topic",rec.Titulo);
session.put("presenter",presenterId);
session.put("startTime",rec.Fecha_Inicio.toString("MMM d, yyyy hh:mm a"));
session.put("duration",60);
session.put("timezone","America/Mexico_City");

payload = Map();
payload.put("session",session);

// --- 3. Create it ---
response = invokeurl
[
url : BASE + "/" + zsoid + "/sessions.json"
type : POST
parameters : payload.toString()
headers: headerMap
connection : CONN
];

meetingKey = response.getJSON("session").getJSON("meetingKey");
if(meetingKey != null)
{
rec.Zoho_Meeting_Link = "https://meeting.zoho.com/meeting/join?key=" + meetingKey;
rec.Zoho_Meeting_Start_Link = response.getJSON("session").getJSON("startUrl");
info "Meeting created: " + meetingKey;
}
else
{
info "Zoho Meeting error: " + response.toString();
}
}

Notes

  • The date format is the number one gotcha. Zoho Meeting wants MMM d, yyyy hh:mm aAug 2, 2026 07:00 PM. Not ISO 8601. Send yyyy-MM-dd HH:mm:ss and it fails in a way that does not tell you the format is wrong.
  • X-ZSOURCE is mandatory. Leave the header off and the call is rejected. It is easy to miss because most Zoho APIs do not need it.
  • presenter is a numeric Zoho user ID, not an email address. The /user.json call above returns it as zuid.
  • Cache the zsoid. It is stable for your organisation, so store it in a settings form rather than looking it up before every meeting.
  • Meeting is not on zohoapis.com. It lives on meeting.zoho.com, with per-datacentre variants including meeting.zohocloud.ca for Canada. There is no native Deluge task — invokeurl is the only route.

This script is part of the free Creator Scripts Deluge Library.

All 39 Deluge scripts, the full Zoho Creator course, and every downloadable asset are now free. Get free access →