clientUserId, and returnUrl redirects in favor of Bearer API keys, a simpler create payload, and webhook- or poll-driven completion.
If you also prepare templates inside your product, migrate that first with Docusign → Embedded templates. Formable signing always starts from a prepared template.
New to Formable? Complete the Embedded signing walkthrough first, then use this page as a translation layer from Docusign envelopes and recipient views.
What you’re moving
In Docusign you typically:- Authenticate with OAuth and call account-scoped REST paths
- Create an envelope with a recipient that has a
clientUserId(embedded / captive signer) - Call
EnvelopeViews:createRecipientViewwith matching identity fields plus areturnUrl - Redirect or iframe the view URL (often ~5 minute TTL)
- Detect completion via Connect /
eventNotificationor thereturnUrlquery event, then download documents
- Authenticate with a Bearer API key (
fmbl_…) - Create an embedded signature request from a
templateIdwith asignersarray (each withemail,name, androle) - Mint a
signingUrlfrom each signer’srecipientSignatureId(noclientUserId, noreturnUrl) - Load it in a plain iframe (URL lasts 1 hour)
- Handle
document_completedor pollstatus, then download the signed envelope
accountId in the path.
Recommended order of work
1
Get a Formable API key
Create an organization and key in Settings. See Authentication. You do not need JWT or Authorization Code exchange for the standard integration.
2
Migrate templates and field IDs
Re-upload documents and place fields in Formable. If you embed template editing, follow Embedded templates migration.
3
Replace Envelopes:create
Map template roles and tab values to
signers, sender, and optional fields.4
Replace createRecipientView
Call create signing URL; drop
clientUserId, returnUrl, and authenticationMethod.5
Swap Connect for Formable webhooks
Register one org webhook URL and verify
Content-Sha256. See Webhooks.What’s similar
Several Docusign ideas transfer directly:- A reusable template still backs many sends.
- You still create a send unit (envelope → signature request), then open a short-lived URL for the signer.
- Prefill / tab values still happen at send time; Formable uses
fields: [{ fieldId, value }]. - Demo / non-billing traffic maps to
testMode: true(instead of relying only on a demo account). Test mode documents are watermarked and are not legally binding. - After completion you still fetch a combined signed PDF.
What’s different
These Docusign-specific pieces do not carry over:
You no longer maintain a parallel “captive signer” identity. Create the request when you’re ready to send, mint the URL when the user is ready to sign, and listen for completion out of band.
Concept map
Endpoint map
Auth
Docusign:/restapi/v2.1/accounts/{accountId}/....
Formable:
accountId in the path. Create the key in Settings and keep it on the server. Full details: Authentication.
Migrate the flow
1. Create the signature request (was: create envelope)
Docusign (simplified):Response
signers array on every create. Each signer needs email, name, and role. sender is optional and defaults to the org owner. Map tab / merge values to fields using Formable fieldIds from the template editor (not Docusign tabLabels). Save each signer’s recipientSignatureId to mint their signing URL.
2. Create the signing URL (was: recipient view)
Docusign:Response
clientUserId, returnUrl, or authenticationMethod. You do not re-send the signer’s email and name on the URL call — pass their recipientSignatureId from the create response. Formable URLs last 1 hour. Creating a URL for an already completed request returns 409.
3. Embed on the client
onSigningComplete instead of a Docusign returnUrl redirect for client UX. Confirm completion with document_completed or by polling status until Completed before downloading. See Embedded signing.
4. Download the signed PDF
Response
Content-Sha256 instead of X-DocuSign-Signature-1. See Verifying webhooks and Webhooks overview.
Differences to plan for
API keys instead of OAuth
API keys instead of OAuth
Drop JWT / Auth Code token exchange for a Bearer API key on your server. The organization is implied by the key, so paths omit
accountId.No clientUserId
No clientUserId
Embedded is the default. Create the request, then mint the URL when the user is ready. You do not mark recipients as captive at create time.
No returnUrl redirect
No returnUrl redirect
Listen for
onSigningComplete to update the client immediately. Confirm with a webhook or poll before downloading, then build any “signing finished” screen in your own app.Longer-lived signing URLs
Longer-lived signing URLs
Plan refresh logic around a 1 hour TTL instead of Docusign’s shorter recipient-view window. Still mint just in time; don’t store URLs for later sessions.
Checklist
1
Create a Formable API key
In Settings.
2
Prepare templates and field IDs
Or migrate the embedded template flow separately.
3
Replace Envelopes:create
Use create embedded signature request with
signers (including role), optional sender, and optional fields.4
Replace createRecipientView
Call create signing URL with each signer’s
recipientSignatureId; drop clientUserId, returnUrl, and authenticationMethod.5
Swap Connect for Formable webhooks
Handle
document_completed and download the signed envelope.Next steps
Embedded templates migration
Map Docusign template edit views to Formable.
Embedded signing walkthrough
Full Formable signing walkthrough.
Webhooks
Register endpoints and understand delivery.
Authentication
Bearer
fmbl_ API keys.