Zoho CRM
Use LicenseKit with Zoho CRM when Closed Won deals should create enforceable software licenses.
Who This Is For
- teams selling software from Zoho CRM
- developers connecting Zoho deal notifications to LicenseKit fulfillment
- operators who need deal-level license visibility inside Zoho CRM
When To Use This
Use the Zoho CRM integration when Zoho remains the CRM and LicenseKit owns license creation, enforcement, and evidence.
Do not use it as a billing engine or as a replacement for Zoho deal management.
How It Works
The integration subscribes to Zoho CRM deal update notifications, fetches the deal, and provisions only when the deal stage matches the configured won stage.
Provisioning behavior:
- create or reuse a LicenseKit customer
- create or reuse a LicenseKit order with
external_system = "zoho" - create a LicenseKit license linked to the customer and order
- store the Zoho deal-to-license link in PostgreSQL when mounted in
serve - dedupe repeated Zoho notifications
- show linked license status from the Zoho deal panel
The repo includes:
cmd/zoho-integrationinternal/integrations/zohointegrations/licensekit_zoho_crm
The main serve command can mount these routes when ZOHO_INTEGRATION_ENABLED=true or the Zoho integration environment is configured.
Key Routes
GET /zoho/oauth/installGET /zoho/oauth/callbackPOST /zoho/webhookGET /zoho/panel/dealGET /zoho/statusPOST /zoho/notifications/renewGET /healthz
Configuration Shape
ZOHO_INTEGRATION_ENABLED=true
ZOHO_PUBLIC_BASE_URL="https://api.licensekit.dev"
ZOHO_ACCOUNTS_URL="https://accounts.zoho.com"
ZOHO_CLIENT_ID="..."
ZOHO_CLIENT_SECRET="..."
ZOHO_REDIRECT_URL="https://api.licensekit.dev/zoho/oauth/callback"
ZOHO_WEBHOOK_TOKEN="..."
ZOHO_WON_STAGES="Closed Won"
LICENSEKIT_BASE_URL="https://api.licensekit.dev"
LICENSEKIT_API_TOKEN="..."
LICENSEKIT_PRODUCT_ID="prod_..."
LICENSEKIT_POLICY_ID="pol_..."
LICENSEKIT_DEFAULT_TERM_DAYS="365"Use the correct Zoho accounts URL for the customer's data center. Renew Zoho notification channels before expiry with POST /zoho/notifications/renew.
Common Mistakes
- using the wrong Zoho data-center accounts URL
- forgetting to renew notification channels
- provisioning from every deal edit instead of checking the configured won stage
- exposing status or notification routes without the intended admin or webhook token guard