Skip to content

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-integration
  • internal/integrations/zoho
  • integrations/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/install
  • GET /zoho/oauth/callback
  • POST /zoho/webhook
  • GET /zoho/panel/deal
  • GET /zoho/status
  • POST /zoho/notifications/renew
  • GET /healthz

Configuration Shape ​

bash
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

Prototype docs shell for the rewrite workspace.