Dropbox Sign
E-signature solution for document signing and templates
Dropbox Sign
Connect to Dropbox Sign (formerly HelloSign) for electronic signatures and document management.
Overview
Dropbox Sign is a user-friendly e-signature platform. The integration supports:
- Signature Requests - Send and manage signature requests
- Templates - Use and manage reusable templates
- Embedded Signing - In-app signing experiences
- Teams - Team member management
- Unclaimed Drafts - Create drafts for later claiming
Prerequisites
- Dropbox Sign account (Free, Essentials, or Enterprise)
- API access enabled
- OAuth app or API key configured
Authentication
Dropbox Sign uses OAuth 2.0 for authentication via Nango.
curl "http://localhost:3000/api/v1/connections/dropbox-sign/auth-url" \
-H "x-api-key: YOUR_API_KEY"Available Actions
Signature Request Actions
getSignatureRequest
Get signature request by ID.
{
"action": "dropbox-sign.getSignatureRequest",
"config": {
"signatureRequestId": "{{input.signatureRequestId}}"
}
}listSignatureRequests
List signature requests with filters.
{
"action": "dropbox-sign.listSignatureRequests",
"config": {
"accountId": "{{input.accountId}}",
"page": 1,
"pageSize": 20,
"query": "status:awaiting_signature"
}
}sendSignatureRequest
Send a new signature request.
{
"id": "send-for-signature",
"type": "action",
"action": "dropbox-sign.sendSignatureRequest",
"config": {
"title": "Service Agreement - {{input.companyName}}",
"subject": "Please sign the Service Agreement",
"message": "Hi {{input.signerName}},\n\nPlease review and sign the attached agreement.",
"signers": [
{
"email_address": "{{input.signerEmail}}",
"name": "{{input.signerName}}",
"order": 1
},
{
"email_address": "{{input.witnessEmail}}",
"name": "{{input.witnessName}}",
"order": 2
}
],
"ccEmailAddresses": ["legal@company.com"],
"fileUrls": ["{{input.documentUrl}}"],
"metadata": {
"deal_id": "{{input.dealId}}",
"source": "workflow"
},
"signingOptions": {
"default_type": "draw"
},
"testMode": false,
"allowDecline": true,
"allowReassign": true,
"signingRedirectUrl": "https://yourapp.com/signed",
"requestingRedirectUrl": "https://yourapp.com/requested"
}
}Parameters:
| Field | Type | Required | Description |
|---|---|---|---|
title | string | No | Request title |
subject | string | No | Email subject |
message | string | No | Email message |
signers | array | Yes | Signer details |
signers[].email_address | string | Yes | Signer email |
signers[].name | string | Yes | Signer name |
signers[].order | number | No | Signing order |
ccEmailAddresses | array | No | CC recipients |
fileUrls | array | Yes | Document URLs |
metadata | object | No | Custom metadata |
signingOptions | object | No | Signing type options |
testMode | boolean | No | Use test mode |
allowDecline | boolean | No | Allow recipients to decline |
allowReassign | boolean | No | Allow reassignment |
expiresAt | number | No | Expiration timestamp |
sendWithTemplate
Send signature request using a template.
{
"id": "send-from-template",
"type": "action",
"action": "dropbox-sign.sendWithTemplate",
"config": {
"templateId": "{{input.templateId}}",
"title": "NDA - {{input.companyName}}",
"subject": "Please sign the Non-Disclosure Agreement",
"message": "Please review and sign the NDA.",
"signers": [
{
"role": "Client",
"email_address": "{{input.clientEmail}}",
"name": "{{input.clientName}}"
},
{
"role": "Company Representative",
"email_address": "{{input.repEmail}}",
"name": "{{input.repName}}"
}
],
"ccs": [
{
"role": "Legal",
"email_address": "legal@company.com"
}
],
"customFields": [
{
"name": "effective_date",
"value": "{{input.effectiveDate}}"
},
{
"name": "contract_value",
"value": "{{input.contractValue}}"
}
],
"testMode": false
}
}sendReminder
Send reminder for pending signature.
{
"action": "dropbox-sign.sendReminder",
"config": {
"signatureRequestId": "{{input.signatureRequestId}}",
"emailAddress": "{{input.signerEmail}}",
"name": "{{input.signerName}}"
}
}updateSignatureRequest
Update a signature request.
{
"action": "dropbox-sign.updateSignatureRequest",
"config": {
"signatureRequestId": "{{input.signatureRequestId}}",
"signatureId": "{{input.signatureId}}",
"emailAddress": "{{input.newEmail}}",
"name": "{{input.newName}}",
"expiresAt": "{{input.newExpiration}}"
}
}cancelSignatureRequest
Cancel a signature request.
{
"action": "dropbox-sign.cancelSignatureRequest",
"config": {
"signatureRequestId": "{{input.signatureRequestId}}"
}
}removeSignatureRequestAccess
Remove access to a signature request (for requestor).
{
"action": "dropbox-sign.removeSignatureRequestAccess",
"config": {
"signatureRequestId": "{{input.signatureRequestId}}"
}
}downloadFiles
Download signed documents.
{
"action": "dropbox-sign.downloadFiles",
"config": {
"signatureRequestId": "{{input.signatureRequestId}}",
"fileType": "pdf"
}
}File Types:
pdf- Single PDF with all documentszip- ZIP archive with separate files
getFilesAsDataUri
Get files as base64 data URI.
{
"action": "dropbox-sign.getFilesAsDataUri",
"config": {
"signatureRequestId": "{{input.signatureRequestId}}"
}
}Template Actions
getTemplate
Get template by ID.
{
"action": "dropbox-sign.getTemplate",
"config": {
"templateId": "{{input.templateId}}"
}
}listTemplates
List available templates.
{
"action": "dropbox-sign.listTemplates",
"config": {
"accountId": "{{input.accountId}}",
"page": 1,
"pageSize": 20,
"query": "NDA"
}
}deleteTemplate
Delete a template.
{
"action": "dropbox-sign.deleteTemplate",
"config": {
"templateId": "{{input.templateId}}"
}
}createEmbeddedTemplateDraft
Create an embedded template draft.
{
"action": "dropbox-sign.createEmbeddedTemplateDraft",
"config": {
"clientId": "{{env.DROPBOX_SIGN_CLIENT_ID}}",
"fileUrls": ["{{input.documentUrl}}"],
"title": "Standard NDA Template",
"subject": "Non-Disclosure Agreement",
"message": "Please sign the NDA",
"signerRoles": [
{ "name": "Client", "order": 1 },
{ "name": "Company", "order": 2 }
],
"ccRoles": ["Legal", "HR"],
"mergeFields": [
{ "name": "effective_date", "type": "text" },
{ "name": "contract_value", "type": "text" }
],
"testMode": true
}
}Embedded Signing Actions
getEmbeddedSignUrl
Get embedded signing URL.
{
"id": "get-signing-url",
"type": "action",
"action": "dropbox-sign.getEmbeddedSignUrl",
"config": {
"signatureId": "{{steps.send-request.output.signatures[0].signature_id}}"
}
}Response:
{
"embedded": {
"sign_url": "https://app.hellosign.com/editor/embeddedSign?...",
"expires_at": 1705312800
}
}getEmbeddedEditUrl
Get embedded template edit URL.
{
"action": "dropbox-sign.getEmbeddedEditUrl",
"config": {
"templateId": "{{input.templateId}}",
"skipSignerRoles": false,
"skipSubjectMessage": false,
"testMode": false
}
}Team Actions
getTeam
Get current team info.
{
"action": "dropbox-sign.getTeam",
"config": {}
}addTeamMember
Add member to team.
{
"action": "dropbox-sign.addTeamMember",
"config": {
"emailAddress": "{{input.email}}",
"accountId": "{{input.accountId}}"
}
}removeTeamMember
Remove member from team.
{
"action": "dropbox-sign.removeTeamMember",
"config": {
"emailAddress": "{{input.email}}",
"newOwnerEmailAddress": "{{input.newOwnerEmail}}"
}
}Account Actions
getAccount
Get account info.
{
"action": "dropbox-sign.getAccount",
"config": {
"accountId": "{{input.accountId}}"
}
}updateAccount
Update account settings.
{
"action": "dropbox-sign.updateAccount",
"config": {
"callbackUrl": "https://yourapp.com/webhook/dropbox-sign",
"locale": "en_US"
}
}API App Actions
getApiApp
Get API app info.
{
"action": "dropbox-sign.getApiApp",
"config": {
"clientId": "{{env.DROPBOX_SIGN_CLIENT_ID}}"
}
}listApiApps
List API apps.
{
"action": "dropbox-sign.listApiApps",
"config": {
"page": 1,
"pageSize": 20
}
}Unclaimed Draft Actions
createUnclaimedDraft
Create an unclaimed draft.
{
"action": "dropbox-sign.createUnclaimedDraft",
"config": {
"type": "request_signature",
"fileUrls": ["{{input.documentUrl}}"],
"signers": [
{
"email_address": "{{input.signerEmail}}",
"name": "{{input.signerName}}"
}
],
"subject": "{{input.subject}}",
"message": "{{input.message}}",
"testMode": true
}
}createEmbeddedUnclaimedDraft
Create embedded unclaimed draft.
{
"action": "dropbox-sign.createEmbeddedUnclaimedDraft",
"config": {
"clientId": "{{env.DROPBOX_SIGN_CLIENT_ID}}",
"type": "request_signature",
"fileUrls": ["{{input.documentUrl}}"],
"signers": [
{
"email_address": "{{input.signerEmail}}",
"name": "{{input.signerName}}"
}
],
"requesterEmailAddress": "{{input.requesterEmail}}",
"testMode": true,
"isForEmbeddedSigning": true
}
}Webhook Triggers
Dropbox Sign webhooks trigger workflows on signature events.
{
"trigger": {
"type": "webhook",
"provider": "dropbox-sign",
"events": ["signature_request_all_signed", "signature_request_declined"]
}
}Event Types:
| Event | Description |
|---|---|
signature_request_sent | Request sent |
signature_request_viewed | Request viewed |
signature_request_signed | Individual signer completed |
signature_request_all_signed | All signers completed |
signature_request_declined | Request declined |
signature_request_expired | Request expired |
signature_request_canceled | Request canceled |
signature_request_remind | Reminder sent |
Example Workflow
Sales contract signing workflow:
{
"name": "Send Contract on Deal Won",
"trigger": {
"type": "webhook",
"provider": "salesforce",
"events": ["Opportunity"]
},
"steps": [
{
"id": "check-won",
"type": "condition",
"config": {
"conditions": {
"left": "{{input.payload.StageName}}",
"operator": "eq",
"right": "Closed Won"
},
"then": ["get-contact"],
"else": []
}
},
{
"id": "get-contact",
"type": "action",
"action": "salesforce.query",
"config": {
"query": "SELECT Email, Name FROM Contact WHERE AccountId = '{{input.payload.AccountId}}' AND IsPrimary__c = true LIMIT 1"
}
},
{
"id": "send-contract",
"type": "action",
"action": "dropbox-sign.sendWithTemplate",
"config": {
"templateId": "{{env.CONTRACT_TEMPLATE_ID}}",
"title": "Service Agreement - {{input.payload.Name}}",
"signers": [
{
"role": "Client",
"email_address": "{{steps.get-contact.output.records[0].Email}}",
"name": "{{steps.get-contact.output.records[0].Name}}"
}
],
"customFields": [
{ "name": "deal_value", "value": "{{input.payload.Amount}}" },
{ "name": "close_date", "value": "{{input.payload.CloseDate}}" }
],
"metadata": {
"opportunity_id": "{{input.payload.Id}}",
"account_id": "{{input.payload.AccountId}}"
}
}
},
{
"id": "update-opportunity",
"type": "action",
"action": "salesforce.updateOpportunity",
"config": {
"opportunityId": "{{input.payload.Id}}",
"Contract_Sent__c": true,
"Contract_Sent_Date__c": "{{now | date: 'YYYY-MM-DD'}}"
}
},
{
"id": "notify-team",
"type": "action",
"action": "slack.sendMessage",
"config": {
"channel": "#sales-wins",
"text": "Contract sent for {{input.payload.Name}} (${{input.payload.Amount}})"
}
}
]
}Rate Limits
| Plan | Limit |
|---|---|
| Free | 3 signature requests/month |
| Essentials | Varies by plan |
| Enterprise | Custom limits |
| API calls | Based on plan |
Troubleshooting
Common Errors
| Error | Cause | Solution |
|---|---|---|
signatureRequestId is required | Missing request ID | Provide signatureRequestId |
templateId is required | Missing template ID | Provide templateId |
emailAddress is required | Missing signer email | Include email_address for signers |
DOCUMENT_NOT_FOUND | Invalid document URL | Verify fileUrls are accessible |
TEMPLATE_NOT_FOUND | Invalid template ID | Check template exists |
Test Mode
Use testMode: true during development:
- No charges incurred
- Documents watermarked
- Signatures not legally binding