Zoho SSO and Access Setup: IT Admin Guide

Bolt Enterprise · single sign-on, group provisioning and desktop rollout. Setup time is about 15 minutes.

SPARCLE
Bolt Enterprise
rev. 2026-09-14

1 · Create the application in Zoho API Console

  1. Zoho API Console → Zoho API Console → Add Client → Server-based Applications.
  2. Name it Bolt. Grant types: Authorization Code plus Refresh Token.
  3. Sign-in redirect URI:
    https://bolt.<yourdomain>/api/auth/callback
  4. Sign-out redirect URI: https://bolt.<yourdomain>/
  5. Scopes: openid email profile offline_access. Bolt requests nothing else from Zoho.
  1. Zoho Directory groups: Control who may sign in from Zoho Directory. Bolt reads group membership from the Zoho Directory API at login.
  2. Copy the values Bolt needs: Client ID, Client secret, and datacenter com.
That is the whole IdP side. Bolt never calls back into Zoho with an admin token, and nothing is written into your directory. Issuer resolved by Bolt: https://accounts.zoho.<datacenter> (com, eu, in, com.au, jp).

2 · Give the credentials to Bolt

Nothing here is needed to try Bolt. For a pilot, people install the desktop app from sparcle.app/download and use it. This page is for when you want a shared deployment with single sign-on behind it, and the enterprise bundle referenced below is sent by Sparcle at that point.

A · Setup wizard (no file editing)

The installer and first-run admin wizard walk this step: pick Zoho, paste the values above, click through. SAML uses the same wizard. Self-hosted installs can instead run enterprise/setup.sh, which writes a .env.prod for you.

B · Configuration file (self-hosted)

APP__PLATFORM__IDENTITY__PROVIDER=zoho
APP__PLATFORM__IDENTITY__DATACENTER=com
APP__PLATFORM__IDENTITY__CLIENT_ID=<client-id>
APP__PLATFORM__IDENTITY__CLIENT_SECRET=<client-secret>
APP__PLATFORM__IDENTITY__REDIRECT_URI=\
  https://bolt.example.com/api/auth/callback
DATACENTER must match the region your Zoho org lives in, or discovery resolves to the wrong issuer and every login fails.

C · SAML 2.0

Bolt supports SAML 2.0, but Zoho is normally wired over OIDC as above. Use the generic SAML page if you need the SAML path.

D · Verify

curl https://bolt.example.com/health  → {"status":"healthy", ...}

status is healthy, degraded or critical. Then sign in at https://bolt.<domain> with a corporate account. A failed login names its cause: redirect-URI mismatch, unassigned user, or clock skew.

3 · Granting access: four separate levers

LeverWhere you set itWhat it controls
Who can sign inZoho → Bolt app → Zoho Directory groupsThe primary gate. Remove the assignment to revoke.
Who is a Bolt adminBolt Admin → access allowlist (allowed_users, allowed_groups)The admin console, audit log, policy and connector settings. Changes apply live, no restart.
Joiner, mover, leaverZoho → Bolt app → Provisioning (SCIM 2.0)
Base URL https://bolt.<domain>/scim/v2
Push Users and Push Groups. Deactivating in Zoho deactivates in Bolt.
What data Bolt can readWorkspace and connector consent (section 4)Which sources are reachable per user: Mail, Calendar, Drive, Confluence and so on.
SCIM token: issue it in Bolt (Admin → SCIM → New token). It is displayed once only, so paste it straight into the provisioning screen as the bearer token. Groups: Bolt reads group membership from the Zoho directory API at login, so groups are available without any extra provisioning step.

4 · What Bolt is able to read

Zoho also carries the mail, calendar and files. Signing in and reading your work data are the same provider here, so one connection covers both.

5 · Rolling the desktop app onto laptops (pick one)

MethodConfigurationNotes
MDM (macOS)
Jamf, Mosyle, Kandji
Payload com.sparcle.bolt: EnterpriseApiUrl = https://bolt.<domain>, ForceManagedMode = trueRecommended. Users never type a URL. Push your internal CA here too, if Bolt uses one.
Group Policy
(Windows)
HKLM\Software\Sparcle\Bolt, with EnterpriseApiUrl and ForceManagedMode = 1Same effect as MDM.
DNS SRV_bolt._tcp.<domain>. SRV 10 5 443 bolt.<domain>.No MDM required.
First-launch wizardUser pastes the endpoint onceFine for a pilot.