DocuSign Integration Setup

Prerequisites

  • A DocuSign account where you are an administrator — creating an integration key and listing the account's users both require it
  • An integration key for the environment ZLH connects to. ZLH uses DocuSign production (account.docusign.com) by default; a self-hosted deployment can instead target the developer sandbox (account-d.docusign.com) by setting DOCUSIGN_ENVIRONMENT=demo. DocuSign issues integration keys in developer accounts; promote one to production through DocuSign's Go-Live process before connecting a production account
  • ZLH running with a reachable callback URL

Step 1: Create an Integration Key in DocuSign

  1. Sign in to DocuSign as an administrator (your developer account for the sandbox, or your production account after Go-Live)
  2. Open Settings > Integrations > Apps and Keys
  3. Click Add App and Integration Key and name it ZombieLicenseHunter
  4. Under Authentication, select Authorization Code Grant and click Add Secret Key. Copy the secret now — it is shown only once
  5. Under Additional settings > Redirect URIs, click Add URI and enter {YOUR_ZLH_BASE_URL}/integrations/docusign/callback
  6. Save. The Integration Key shown on the app is your Client ID

Step 2: ZLH-Side Values

  • The Redirect URI must be exactly {YOUR_ZLH_BASE_URL}/integrations/docusign/callback — protocol, host, port and path
  • Scopes requested: signature user_read organization_read. DocuSign does not configure scopes on the integration key; the consent screen lists them for approval. Self-hosted deployments can override the list with DOCUSIGN_SCOPES
  • Environment: DOCUSIGN_ENVIRONMENT unset or production connects to account.docusign.com; demo connects to account-d.docusign.com. There is no environment selector in the UI, and a key from one environment does not work against the other
  • The Client ID and Client Secret are entered per integration in the UI, not in environment variables

Step 3: Connect via the ZLH UI

  1. In ZLH, navigate to Integrations > Add Integration
  2. Select DocuSign — there are no DocuSign-specific fields; the account is determined by the user who signs in
  3. Enter the Integration Key as the Client ID and the Secret Key as the Client Secret
  4. Click Connect — you are redirected to DocuSign to sign in
  5. Sign in as an administrator of the account and click Allow Access
  6. You are redirected back to ZLH with the integration active and a first sync queued

After consent, ZLH reads your DocuSign user profile, selects your default account and its API base URI, and syncs that account only. The email on the DocuSign user must be on the same domain as your ZLH login.

What Gets Synced

ZLH lists the users of the connected account through the eSignature Users API, 100 per page. For each user it captures:

  • Email and the DocuSign user ID (used as the stable identifier)
  • Status — Active, ActivationRequired and ActivationSent are imported as active; Closed and Disabled as inactive
  • Permission profile name (e.g., DocuSign Sender), stored as the license type
  • Creation date and last login

Users without an email address are skipped. Group membership and envelope data are not synced.

Troubleshooting

Issue Fix
DocuSign shows an error about the redirect URI instead of the sign-in page The Redirect URI on the integration key does not match {YOUR_ZLH_BASE_URL}/integrations/docusign/callback exactly
"Authorization failed: ..." after DocuSign redirects back The consent was declined. Retry and click Allow Access
"Failed to complete OAuth handshake. Please check your credentials and try again." The Secret Key is wrong (it is shown once — add a new one under Authentication and re-enter it), or the integration key belongs to the other environment (sandbox key against production or vice versa), or the signed-in user has no DocuSign account
"Access denied: you can only connect accounts from your organization's domain" The DocuSign user's email is on a different domain from your ZLH login. Reconnect with a user on your domain
Sync fails with docusign: unexpected status 401 The refresh token expired or was revoked. Click Reconnect on the integration's card on the ZLH home page
Sync fails with docusign: unexpected status 400 or 403 The user who authorized is not an administrator of the account, or lost that permission. Click Reconnect and sign in as an administrator
The wrong account was synced ZLH uses the authorizing user's default account. Make the wanted account that user's default in DocuSign, or authorize with a user whose default it is, then click Reconnect
Users are missing Users without an email are skipped. Closed and disabled users are imported as inactive, not dropped