← All migration plugins

Migrate from BoldSign to Anvil

BoldSign sends from flat PDF templates with fields placed by absolute bounds. Those map cleanly onto Anvil Casts, so the migration is mostly mechanical.
Install in Claude Code
/plugin marketplace add anvilco/anvil-plugins
/plugin install boldsign-anvil-migration@anvil-plugins
Type both into Claude Code: the first adds Anvil's plugin catalog, the second installs the BoldSign plugin. Then ask Claude to migrate.
The mental model
A BoldSign document sent from a template becomes an Anvil Etch packet built from a Cast, and BoldSign’s roles, positioned form fields, embedded sign links, and webhook events become Anvil signer IDs, field aliases, embedded signers, and webhook actions.
Cast is Anvil's word for a template: a reusable document with named fields your code fills through the API.

Two BoldSign specifics the plugin handles outright

Regional hosts drop out: one global Anvil endpoint replaces eu-api.boldsign.com in your config. Webhooks change shape too, from dashboard setup to programmatic createWebhookAction.
export-boldsign-templates.ts
Downloads your templates as PDFs with a role and field metadata manifest. Standalone, with no BoldSign SDK required.

BoldSign to Anvil, term by term

Most of a migration is vocabulary. Here is the map the plugin works from – it keeps these names straight so you do not have to.
BoldSignAnvilWhat it is
Document (signature request)Etch packetThe signing transaction. createEtchPacket returns an etchPacketEid.
Template (templateId)Cast (castEid)A reusable PDF with positioned form fields.
Role (roleIndex)Signer idA named signing slot; in Anvil an arbitrary signer id you map to fields.
signerType (Signer / InPersonSigner)signerType ('email' / 'embedded')Whether the signer signs by email or in your app.
Form field (fieldType + bounds)FieldA signable box positioned by bounds and page number.
Form field id / nameField alias (aliasId)Your data key for a field.
existingFormFieldsFill data (data.payloads)Prefilled field values.
signerOrderroutingOrderSigning order; equal values sign in parallel.
getEmbeddedSignLinkgenerateEtchSignURLThe per-signer embedded signing URL.
Completed eventetchPacketCompleteAll signers done; documents downloadable.
Sandbox modeisTestWatermarked, non-billed test documents.
X-API-KEYANVIL_API_KEYAuth. One key per org, no account discovery. OAuth or child orgs act for a client.

What the rewrite looks like

BoldSign attaches prefill values to roles by field id. Anvil separates the two: signers carry their fields, and prefill data is a keyed payload.
Before – BoldSign
// Fields on a template are attached to ROLES (by roleIndex), not to people.
const body = {
  title: 'NDA for Acme Corp',
  message: 'Hi, please review and sign the attached NDA.',
  enableSigningOrder: true,
  roles: [
    {
      roleIndex: 1,
      signerName: 'Jane Smith',
      signerEmail: 'jane@example.com',
      signerType: 'Signer',
      signerOrder: 1,
      existingFormFields: [{ id: 'CompanyName', value: 'Acme Corp' }],
    },
  ],
  cc: [{ emailAddress: 'records@acme.com' }],
}

const res = await fetch(
  'https://api.boldsign.com/v1/template/send?templateId=tmpl_abc123',
  {
    method: 'POST',
    headers: { 'X-API-KEY': process.env.BOLDSIGN_API_KEY, 'Content-Type': 'application/json' },
    body: JSON.stringify(body),
  }
)
const { documentId } = await res.json()
After – Anvil
const {
  data,
  errors,
} = await anvilClient.createEtchPacket({
  variables: {
    files: [ ... ],
    data: { ... },
    signers: [ ... ],
  },
})

How the migration runs

The plugin works through six steps, showing you what it found and what it plans to change before it touches your BoldSign integration.
Step 1 of 6
Discovery
Scans your codebase for every integration point – SDK imports, API calls, environment variables, webhook handlers, and database columns holding provider IDs.

Where BoldSign and Anvil differ

No migration is a pure find-and-replace. These are the gaps the plugin raises during mapping – each tagged with what it will cost you to close, from a straight swap to a decision worth making up front.
Works the sameA direct equivalent – nothing to decide.
Minor changeThe same capability, reached a different way in the API call.
Plan for reworkSupported, but you will write code for it.
Signing order
Works the same
routingOrder is a direct equivalent; equal values sign in parallel.
Embedded signing
Works the same
getEmbeddedSignLink becomes generateEtchSignURL in AnvilEmbedFrame.
Roles and prefill
Minor change
Roles become signer ids, and existingFormFields becomes a data payload keyed by field alias.
Revoke and void
Minor change
Handled as an app-level state change or a packet void.
White labeling and branding
Minor change
Anvil uses CSS themes: more powerful, but you supply a CSS file.
Document metadata and labels
Minor change
Moves to your own database; you likely track this data already.
CC recipients
Minor change
Becomes a non-signing recipient or an app-level notification.
Embedded request and sending
Plan for rework
createEmbeddedRequestUrl is a sender-side UI for composing documents in-app, a different surface from the sign URL. Low impact if your sending is programmatic, real work if users compose in your app.
Decline to sign
Plan for rework
A straightforward UI addition with custom state at the app level.
Expiration and reminders
Plan for rework
Handled as app-level scheduling if hard deadlines matter.
Bulk send
Plan for rework
A loop over createEtchPacket instead of a batch call; the client handles rate limiting.
Signer authentication (access code, SMS, email OTP, ID)
Plan for rework
Build an auth wall in front of the sign URL if verification is compliance-critical.
OAuth multi-tenant and on-behalf sending
Plan for rework
BoldSign supports acting for another account. Anvil supports this: register an Anvil OAuth app for each tenant to authorize, or give each tenant a child organization with its own API key. Both are Enterprise features.

Coming from somewhere else?

We publish a purpose-built migration plugin for each of these too.
See every migration plugin

Get a demo
(from a real person)

Schedule some time on our calendar to talk through your specific use case and see which Anvil products can help.
    Want to try Anvil first?
    Want to try Anvil first?