Migrate existing DropboxSign or HelloSign e-signature integrations to Anvil Etch E-Sign. Use this skill when a developer mentions migrating from DropboxSign, HelloSign, Dropbox Sign, hellosign-sdk, @dropbox/sign, or wants to replace their DropboxSign/HelloSign integration with Anvil. Also trigger when someone mentions switching e-signature providers from DropboxSign to Anvil, or asks about DropboxSign alternatives, HelloSign replacement, or DropboxSign-to-Anvil migration.
How this skill is triggered — by the user, by Claude, or both
Slash command
/dropbox-anvil-migration:dropbox-anvil-migrationThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are helping a developer migrate their existing DropboxSign (formerly HelloSign) e-signature integration to Anvil Etch E-Sign. This is a multi-phase migration that preserves all existing functionality while moving to Anvil's platform. Your job is to discover what they have, map it to Anvil equivalents, migrate templates and data, rewrite code, and verify everything works.
You are helping a developer migrate their existing DropboxSign (formerly HelloSign) e-signature integration to Anvil Etch E-Sign. This is a multi-phase migration that preserves all existing functionality while moving to Anvil's platform. Your job is to discover what they have, map it to Anvil equivalents, migrate templates and data, rewrite code, and verify everything works.
Important: For all Anvil implementation patterns (client setup, Etch packets, embedded signing, webhooks, PDF filling, etc.), reference the anvil-document-sdk skill rather than reimplementing guidance from scratch. This skill focuses on the DropboxSign-specific discovery, mapping, and migration steps.
Before making any changes, scan the developer's codebase to find every DropboxSign/HelloSign integration point. Run these searches and present a complete findings summary before proceeding.
Search the codebase for these patterns:
hellosign-sdk
@dropbox/sign
hellosign
dropboxsign
dropbox-sign
HelloSignSDK
SignatureRequestApi
TemplateApi
EmbeddedApi
AccountApi
BulkSendJobApi
UnclaimedDraftApi
Check package.json (and package-lock.json / yarn.lock) for DropboxSign/HelloSign dependencies.
api.hellosign.com
api.dropboxsign.com
HELLOSIGN_API_KEY
DROPBOX_SIGN_API_KEY
HELLOSIGN_CLIENT_ID
DROPBOX_SIGN_CLIENT_ID
HELLOSIGN_API_URL
DROPBOX_SIGN_API_URL
Check .env, .env.example, .env.local, .env.production, and any environment configuration files (e.g., Docker compose, Kubernetes manifests, CI/CD configs).
signatureRequestSend
signatureRequestSendWithTemplate
signatureRequestCreateEmbedded
signatureRequestCreateEmbeddedWithTemplate
embeddedSignUrl
templateList
templateGet
templateFiles
templateCreateEmbeddedDraft
signatureRequestGet
signatureRequestList
signatureRequestCancel
signatureRequestFiles
Look for routes or handlers that process DropboxSign webhook events:
signature_request_viewed
signature_request_signed
signature_request_sent
signature_request_all_signed_and_complete
signature_request_downloadable
signature_request_declined
signature_request_invalid
signature_request_remind
signature_request_expired
template_created
template_error
account_confirmed
Also search for webhook signature verification code (EventCallbackHelper, event_hash, HMAC).
Look for database columns, tables, or model fields that store DropboxSign/HelloSign IDs:
signature_request_id
hellosign_template_id
dropbox_template_id
template_id
signing_url
claim_url
Search in migration files, schema definitions (Prisma, Sequelize, TypeORM, Knex, raw SQL), and model files.
After completing all searches, present a structured summary to the developer:
"Here's what I found in your codebase:"
src/services/signing.ts → signatureRequestSendWithTemplate, embeddedSignUrl)Ask: "Does this look complete, or are there integration points I missed?"
Once the developer confirms the discovery is complete, map their existing integration to Anvil equivalents.
Read references/api-mapping.md for the complete DropboxSign → Anvil API mapping. This covers SDK calls, client initialization, signature request fields, embedded signing, webhooks, templates, and authentication.
Read references/feature-parity.md for known gaps and workarounds. For each gap that applies to the developer's integration, explicitly ask the developer how they want to handle it. Never silently drop a feature.
For example, if their code uses bulk send:
"Your integration uses DropboxSign's bulk send feature. Anvil doesn't have a built-in bulk send API — the recommended approach is to loop over createEtchPacket calls with rate limiting (40 req/s on production keys). Is that acceptable, or do you need a different approach?"
Present the full mapping summary:
Ask: "Are you comfortable with these mappings? Any concerns before we proceed?"
Ask: "Do you already have an Anvil API key? If not, create an account at https://app.useanvil.com/signup and find your API key under Organization Settings > API Settings."
Once they have the key:
ANVIL_API_KEY=<add api key>
Add it to their .env file. Confirm .env is in .gitignore.
npm install @anvilco/anvil
If their integration uses embedded signing in a React frontend:
npm install @anvilco/anvil-embed-frame
Do not remove the DropboxSign API key or SDK yet. Both are needed during the template migration phase. Tell the developer:
"I'm keeping your DropboxSign API key and SDK in place for now — we need them to download your existing templates. We'll remove them in Phase 6 after everything is verified."
This phase has three distinct steps. Read references/template-migration.md for the full process.
Use the bundled scripts/migrate-dropboxsign-templates.ts to download all templates from DropboxSign as PDFs.
Copy the script into the developer's project:
cp scripts/migrate-dropboxsign-templates.ts ./scripts/
Run the script:
npx ts-node scripts/migrate-dropboxsign-templates.ts --output-dir ./migrated-templates
Or for specific templates only:
npx ts-node scripts/migrate-dropboxsign-templates.ts \
--output-dir ./migrated-templates \
--template-ids "abc123,def456"
The script:
DROPBOX_SIGN_API_KEY env vardropboxsign-template-manifest.json with metadata (template ID, title, roles, merge fields)Review the manifest with the developer. Show them how many templates were downloaded and their metadata.
Use the anvil-document-sdk plugin's bundled scripts/migrate-pdfs-to-anvil.ts to upload the downloaded PDFs to Anvil.
Ask the developer if they want to extract field aliases from their codebase schema (same process as anvil-document-sdk — inspect Prisma models, TypeScript interfaces, etc.)
Run the Anvil upload script:
npx ts-node scripts/migrate-pdfs-to-anvil.ts --dir ./migrated-templates
Or with schema for field alias suggestions:
npx ts-node scripts/migrate-pdfs-to-anvil.ts --dir ./migrated-templates --schema ./extracted-schema.json
After upload, create a combined ID mapping from both manifests — map each DropboxSign template ID to its new Anvil castEid. Save this as template-id-mapping.json:
{
"mappings": [
{
"dropboxSignTemplateId": "abc123...",
"dropboxSignTitle": "NDA Template",
"anvilCastEid": "xyz789...",
"anvilTitle": "NDA Template"
}
]
}
Remind the developer to open each template in the Anvil dashboard to:
Generate a runnable DB migration script that:
cast_eid, etch_packet_eid) alongside existing DropboxSign columnstemplate-id-mapping.jsonDetect the developer's migration framework by searching for:
prisma/migrations/ → Generate a Prisma migrationmigrations/ with Knex-style files → Generate a Knex migrationmigrations/ with Sequelize-style files → Generate a Sequelize migrationGenerate the migration in the developer's existing format and save it to the appropriate directory.
Important: The developer runs the migration themselves — do NOT run it automatically. Tell them:
"I've generated the database migration at [path]. Please review it and run it when you're ready. It adds Anvil EID columns alongside your existing DropboxSign columns and populates them from the template ID mapping."
After all three steps are complete, pause and check in with the developer:
"Phase 4 is complete. Here's what was done:
./migrated-templates/castEid values are in the migration manifestWould you like to commit these changes now, or do you want to review anything first?"
Wait for the developer's response before committing or proceeding.
Now rewrite the application code to use Anvil instead of DropboxSign. Work file by file through the integration points discovered in Phase 1.
For all Anvil implementation patterns, reference the anvil-document-sdk skill — it has detailed guidance on client setup, createEtchPacket, embedded signing, webhooks, document download, and storage.
Read references/api-mapping.md for the side-by-side initialization code. Replace the DropboxSign client with the Anvil client.
Map each signatureRequestSendWithTemplate or signatureRequestCreateEmbeddedWithTemplate call to createEtchPacket. Use the field mapping from references/api-mapping.md:
title → nametemplate_ids → files[].castEid (using the new IDs from the template migration)signers → signers[] (with Anvil's signer structure)custom_fields → data.payloads (with field aliases)test_mode → isTestsigning_redirect_url → handled via AnvilEmbedFrame onEventReplace embeddedSignUrl + HelloSign.open() with generateEtchSignURL + AnvilEmbedFrame. See references/api-mapping.md for the complete before/after code.
Map DropboxSign webhook events to Anvil webhook events using references/api-mapping.md:
signature_request_signed → signerCompletesignature_request_all_signed_and_complete → etchPacketCompleteEventCallbackHelper verification and replace with Anvil's webhook verificationRegister webhooks programmatically using createWebhookAction (see anvil-document-sdk skill's webhook reference).
HELLOSIGN_API_KEY / DROPBOX_SIGN_API_KEY references with ANVIL_API_KEYHELLOSIGN_CLIENT_ID / DROPBOX_SIGN_CLIENT_ID references (used for embedded signing) — Anvil uses the API key for everything.env.example if it existsReplace references to DropboxSign columns with the new Anvil columns:
hellosign_template_id → cast_eidsignature_request_id → etch_packet_eidAfter Phase 5 is complete, pause and check in with the developer:
"Phase 5 is complete. Here's a summary of the code changes:
@dropbox/sign → @anvilco/anvil in [N] filescreateEtchPacketgenerateEtchSignURL + AnvilEmbedFrameWould you like to commit these changes now, or do you want to review anything first?"
Wait for the developer's response before committing or proceeding.
Guide the developer through verifying the migration works end-to-end.
Tell the developer:
"Let's verify the migration with Anvil's test mode first. Set isTest: true on your Etch packets — this watermarks documents but doesn't count against your plan. Make sure your Anvil API key is a development key for testing."
Walk through each integration point from Phase 1:
Template verification — For each migrated template:
fillPDF call to confirm data fills correctlySignature flow verification — For each signature request path:
isTest: trueAnvilEmbedFrame loads and the signing experience worksWebhook verification — For each webhook handler:
createWebhookAction or dashboard)Document download verification — Verify signed documents:
downloadDocumentsOnce the developer is satisfied everything works:
Remove DropboxSign SDK:
npm uninstall hellosign-sdk @dropbox/sign
Remove DropboxSign environment variables from .env, .env.example, and deployment configs:
HELLOSIGN_API_KEYDROPBOX_SIGN_API_KEYHELLOSIGN_CLIENT_IDDROPBOX_SIGN_CLIENT_IDRemove old database columns (optional — generate a migration): Ask: "Would you like me to generate a migration to remove the old DropboxSign columns? Or would you prefer to keep them as a backup for a while?"
Remove the migration scripts and manifests:
scripts/migrate-dropboxsign-templates.tsscripts/migrate-pdfs-to-anvil.ts (if copied)migrated-templates/ directorytemplate-id-mapping.jsondropboxsign-template-manifest.jsonanvil-migration-manifest.jsonFinal check: Search the codebase one more time for any remaining references to DropboxSign/HelloSign that were missed.
Tell the developer: "Migration complete! Your e-signature integration is now running on Anvil. Make sure to switch from your development key to your production key and set isTest: false when you're ready to go live."
npx claudepluginhub anvilco/anvil-plugins --plugin dropbox-anvil-migrationGuides zero-downtime Documenso migration from DocuSign/HelloSign using Strangler Fig pattern, feature flags, parallel runs, and TypeScript assessment scripts.
Automates Dropbox Sign operations via Composio's toolkit through Rube MCP. Always searches tools first for current schemas before executing.
Automates DocuSign e-signature workflows via Rube MCP/Composio: list templates, create/send envelopes, manage signatures/documents. Requires active DocuSign connection.