Kommo + Dropbox Sign: automatic contract sending for signature
Dropbox Sign (formerly HelloSign) is an electronic signature platform with a REST API on Basic Auth — no complex OAuth required for server-side integrations. This is one of the key differences from SignNow and DocuSign — service integrations work with an API key directly. The Kommo integration automates the full cycle: deal moved to the required stage -> document sent to the client -> CRM updated automatically after signing.
Dropbox Sign vs SignNow vs DocuSign: when to choose Dropbox Sign
| Parameter | Dropbox Sign | SignNow | DocuSign |
|---|---|---|---|
| API Auth | API Key (Basic Auth) | OAuth 2.0 | OAuth 2.0 + JWT |
| Price (API) | From $25/mo (Essential) | From $146/mo (API plan) | Enterprise |
| Native templates | Yes | Yes | Yes |
| Embedded signing | Yes | Yes | Yes |
| Ecosystem | Dropbox, Google Drive | Independent | Salesforce, SAP |
Dropbox Sign wins on authentication simplicity: one API key in the header, no OAuth flow. This significantly simplifies server-side integration development. The price is lower than DocuSign with comparable functionality.
What gets synchronized
Kommo -> Dropbox Sign:
— Contact email and name from the deal -> signer in the signature request
— Deal name -> document title
— Data from custom fields -> custom_fields in the template (merge fields)
— Signing deadline -> expiration_date
— Kommo deal ID -> metadata (for reverse tracing)
Dropbox Sign -> Kommo:
— signature_request_signed event -> “Document Signed” field in the deal
— Move deal to the next pipeline stage
— Link to the signed document -> Note on the deal
— Signing date -> custom field
Architecture
Kommo Webhook: deal moved to "Signing" stage
↓ Backend
1. GET /api/v4/leads/{id} + contacts
-> name, email, data from custom fields
2. Dropbox Sign API: POST /signature_request/send_with_template
-> template_id + signers + custom_fields + metadata
-> get signature_request_id
3. Kommo: PATCH /leads/{id}
-> update fields: ds_signature_request_id, document_sent = true
Dropbox Sign Webhook: signature_request_signed
↓ Backend
1. Extract signature_request_id from payload
2. Find kommo_deal_id via metadata
3. Dropbox Sign: GET /signature_request/{id}
-> get link to signed document
4. Kommo: PATCH /leads/{deal_id}
-> document_signed = true, stage -> "Contract Received"
5. Kommo: POST /notes
-> signing date + link to document
Dropbox Sign REST API: key requests
Base URL: https://api.hellosign.com/v3/. Authentication: HTTP Basic Auth, where username = API_KEY, password is empty.
Sending via template (recommended approach):
import requests
from requests.auth import HTTPBasicAuth
DS_API_KEY = 'your_api_key'
TEMPLATE_ID = 'template_id_from_dropbox_sign'
BASE_URL = 'https://api.hellosign.com/v3'
def send_for_signature(deal_id: int, client_name: str, client_email: str,
deal_name: str, amount: float) -> str:
payload = {
'template_ids': [TEMPLATE_ID],
'subject': f'Contract for deal: {deal_name}',
'message': f'Dear {client_name}, please find the contract attached for signing.',
'signers': [
{
'role': 'Client',
'name': client_name,
'email_address': client_email
}
],
'custom_fields': [
{'name': 'ClientName', 'value': client_name},
{'name': 'DealAmount', 'value': f'${amount:,.2f}'},
{'name': 'DealDate', 'value': str(date.today())}
],
'metadata': {
'kommo_deal_id': str(deal_id) # for reverse tracing
}
}
resp = requests.post(
f'{BASE_URL}/signature_request/send_with_template',
auth=HTTPBasicAuth(DS_API_KEY, ''),
data=payload # form-encoded, not JSON
)
return resp.json()['signature_request']['signature_request_id']
Important note: The Dropbox Sign API accepts application/x-www-form-urlencoded or multipart/form-data, not application/json for most endpoints. This is a common mistake on first connection.
Sending a document directly (without a template):
def send_document_directly(client_name: str, client_email: str,
pdf_path: str, deal_name: str) -> str:
with open(pdf_path, 'rb') as f:
resp = requests.post(
f'{BASE_URL}/signature_request/send',
auth=HTTPBasicAuth(DS_API_KEY, ''),
files={'file[0]': (pdf_path, f, 'application/pdf')},
data={
'title': deal_name,
'signers[0][email_address]': client_email,
'signers[0][name]': client_name,
'signers[0][order]': 0
}
)
return resp.json()['signature_request']['signature_request_id']
Webhook handling:
from flask import Flask, request
import json
app = Flask(__name__)
@app.route('/webhooks/dropbox-sign', methods=['POST'])
def dropbox_sign_webhook():
# Dropbox Sign sends JSON in the 'json' field
payload = json.loads(request.form.get('json', '{}'))
event_type = payload.get('event', {}).get('event_type')
sr_id = payload.get('signature_request', {}).get('signature_request_id')
metadata = payload.get('signature_request', {}).get('metadata', {})
if event_type == 'signature_request_signed':
deal_id = metadata.get('kommo_deal_id')
if deal_id:
update_kommo_deal(int(deal_id), signed=True)
return 'Hello API Event Received' # Dropbox Sign requires exactly this response
Critical: Dropbox Sign requires a 200 OK response with the body Hello API Event Received — otherwise it will retry the webhook up to 5 times.
Setting up a template in Dropbox Sign
Templates are created in the Dropbox Sign UI. For automatic filling you need to:
- Add text fields with names:
ClientName,DealAmount,DealDate - Assign the “Signature” field to the
Clientrole - Save the Template ID — it is used in API requests
The template approach eliminates PDF generation on the backend side — data from Kommo is substituted into the template via custom_fields.
Real-world case
IT company (EU market, 25–35 contracts per month, clients in Germany and the Netherlands):
- Before: the manager manually downloaded the contract template, filled in the data, uploaded it to Dropbox Sign, added the recipient, and sent it. Updating Kommo was manual after signing.
- After: Won in Kommo -> the manager sees the “Document Signed” field within 30 minutes (client signing time) -> the stage transitions automatically. The manager does nothing except close the deal.
- Additional benefit: the lawyer automatically receives signed contracts by email — no longer needs to request them from managers.
Similar logic has been implemented for Adobe Sign and Kommo — that uses OAuth authentication; here it is simpler: API Key.
Who this is relevant for
- Using Dropbox Sign or considering it as a more affordable alternative to DocuSign
- 10+ contracts per month sent manually
- Need a simple API integration without OAuth complexity (for a small team)
- eIDAS (EU) or ESIGN (US) — legally significant signatures
- Two-way cycle: Won -> document -> signature -> next pipeline stage
Frequently asked questions
Does the Dropbox Sign API accept JSON or form data?
By default — multipart/form-data or application/x-www-form-urlencoded. This is a common mistake: the developer sends JSON and gets a 400 error. Exception: some GET requests. Check the Content-Type before debugging.
How do I set up a webhook in Dropbox Sign?
In the Dropbox Sign UI: Settings -> API -> API Apps -> select or create an API App -> Callback URL. The webhook can be limited to specific events: signature_request_signed, signature_request_declined, signature_request_all_signed. For testing — use Test Mode: 1 in requests.
Does Dropbox Sign support multiple signers?
Yes. In the signers array you can specify multiple signers with order (signing sequence). Each receives their own email. The webhook signature_request_all_signed fires when everyone has signed — useful for bilateral signing (client + manager).
Does Dropbox Sign support embedded signing?
Yes. Via POST /embedded/sign_url/{signature_id} you get a temporary URL for iframe signing inside your application. Requires an API App with Embedded Signing domain configured.
Summary
- Dropbox Sign REST API: Basic Auth (API Key),
multipart/form-data, templates withcustom_fields - Recommended approach:
send_with_template— data from Kommo -> template, no PDF generation - Webhook
signature_request_signed-> update Kommo; responseHello API Event Receivedis mandatory - Simpler to develop than OAuth-based e-signature platforms
- Typical development timeline — 1–2 weeks
If you use Dropbox Sign and want to automate document sending from Kommo — describe your templates and signing scheme. Exceltic.dev will review the custom_fields and propose an architecture.