Status checked by polling
A job asks every agreement for its status on a timer. Adobe's API usage guide warns that heavy polling can lead it to temporarily disable API access, and recommends webhooks instead.
Adobe Acrobat Sign API integration connects your own applications, portals and back-office systems to Acrobat Sign in code: agreements created through the REST API, status delivered by webhook, signing embedded in your product and signed data written back where it belongs. Twopir Consulting architects and builds those integrations, from the authentication model to retry handling, and the Apex services when Salesforce is the caller. Integrations your developers can still own after handover.
Trusted by 500+ organizations — including healthcare, legal and professional-services teams whose CRM, portals and business systems Twopir Consulting has connected.










What We Build With
Sending one agreement from a script takes an afternoon. Keeping thousands moving through a live system, with tokens expiring, rate limits applying and events arriving out of order, is a different job. These are the six faults we find most often when we review an existing Acrobat Sign integration.
A job asks every agreement for its status on a timer. Adobe's API usage guide warns that heavy polling can lead it to temporarily disable API access, and recommends webhooks instead.
Limits apply per user and per endpoint, by the minute, hour and day. Code that treats an HTTP 429 as a failure, or retries before the Retry-After interval, keeps getting throttled.
Acrobat Sign accounts live on shards, and each account has its own API access point. An integration that skips the base URI lookup works in one account and fails in the next.
Agreement creation in v6 is asynchronous. Ask for a signing URL straight away and Adobe documents a 404 with DOCUMENT_NOT_YET_AVAILABLE, which naive code logs as a failed send.
An integration key inherits the permissions of the user who created it. When that person changes role or leaves, the integration's access changes with them, often without anyone noticing.
Registration needs an endpoint that echoes the client ID back, and the URL cannot be changed once the webhook exists. Endpoints built in a hurry break on the first infrastructure move.
An Adobe Acrobat Sign API integration is custom code that lets another system create, send, track and retrieve agreements in Acrobat Sign without a person working in the Acrobat Sign interface. It is built on the Acrobat Sign REST API (version 6), which any language that can make REST calls can use, with webhooks for status events. Inside Salesforce, the Acrobat Sign managed package adds a second developer surface: global Apex services for agreement templates and agreement actions.
It is the route to take when no packaged connector fits: a customer portal or product that needs signing in its own screens, an internal system Adobe does not list as an integration, or a Salesforce process that needs more than configuration. Adobe owns the API, its limits and the Acrobat Sign developer guide that documents it. Your systems remain the system of record. Twopir Consulting designs the architecture, writes and tests the integration code, and hands it over documented.
This page is about code. Packaged connectors for Microsoft, HR and ERP systems are covered under Acrobat Sign integration services; the package's setup, objects and mapping under Adobe Acrobat Sign Salesforce integration; no-code routing and reminders under Acrobat Sign workflow automation; and templates and text tags under Acrobat Sign document automation and templates. The whole engagement model is on our Adobe Acrobat Sign consulting and implementation page.
Acrobat Sign offers more than one way in for developers, and most production integrations combine several. The design question is which surface carries which job, so that sending, status, signing and data return each use the route Adobe built for them.
| Developer surface | What it does | Best for | What to know before building |
|---|---|---|---|
| REST API v6 · agreements | Uploads documents, creates agreements with participants, roles and signing order, sends reminders and returns the signed PDF and form data. | Any system that starts agreements on its own: a portal, a product, a back-office service. | Creation is asynchronous. Agreements move through DRAFT, AUTHORING and IN_PROCESS, and form fields can be added only while in AUTHORING. |
| Webhooks | Push events to your endpoint when an agreement, web form or bulk send changes, registered at account, group, user or single-resource scope. | Keeping your records current without polling. | The endpoint must pass Adobe's verification handshake, and account or group webhooks need an account or group admin to register them. |
| Web forms API | Creates web forms (called widgets in the API) and returns embed code and a hosted URL; form data and the agreements behind it can be read back. | Forms the counterparty starts, embedded in your own site or app. | Every submission creates a separate agreement, so your data model needs one record per submission. |
| Signing URLs | Returns the URL at which a participant signs, so your application can open it directly; a post-sign redirect can bring the signer back. | Hosted or in-person signing inside your own flow, such as a tablet at a counter. | Request it once the agreement is out for signature, not straight after creation. |
| Salesforce · global Apex services | The package's AgreementTemplateService loads agreement templates with runtime variables; EchoSignApiService sends, reminds, cancels, updates and returns signing URLs. | Salesforce processes that need more than Flow and configuration can do. | The batch services process records in sets of five to stay within governor limits; design volumes around that. |
| Salesforce · Apex REST service | A package REST endpoint that loads an agreement template against a Salesforce record when an outside system calls it, and returns the agreement ID. | An external system that should start a Salesforce-owned agreement. | The caller authenticates to Salesforce, not to Acrobat Sign, so Salesforce access control applies. |
How the integration authenticates decides whose permissions it carries, how long its access lasts and what happens when people change roles. Acrobat Sign supports two models, and they suit different jobs.
| Question | OAuth 2.0 API application | Integration key |
|---|---|---|
| Whose access it uses | The user who signs in and consents, limited to the scopes the application requests. | The user who created the key, limited to the scopes chosen at creation. |
| Who can use it | Applications in your own account (CUSTOMER domain), or across other accounts (PARTNER domain, which Adobe must certify). | Enterprise accounts only. |
| How long access lasts | An access token valid for an hour, renewed with a refresh token; the authorization code itself is valid for five minutes. | Ten years from creation. The name and scopes cannot be edited afterwards. |
| How far its reach goes | Scope modifiers set the reach: self, group or account. Group and account need an admin and a Business or Enterprise plan. | Whatever the creating user can do, within the chosen scopes. |
| Built for | Applications where users act as themselves, and products used by many Acrobat Sign accounts. | System-to-system integrations with no interactive sign-in. |
Each user's actions run as that user, so the Acrobat Sign audit trail names a real person. We request only the scopes the integration uses, store refresh tokens as secrets, and design for the API access point that comes back with the token.
Access follows people, and it can be revoked without a release.
Where a server process sends on the organization's behalf, we create the key on a user that exists only for the integration, with just the scopes it needs, and record who owns it. Because a key cannot be edited, a scope change means a new key and a planned swap.
Access no longer depends on one employee's account.
An integration is more than the calls that send a document. These are the six workstreams in a typical engagement; smaller projects use a subset, and every one is built against Adobe's documented endpoints.
Documents and agreements created from your data, with the right participants in the right order, and the reusable parts kept in Acrobat Sign rather than re-uploaded each time.
Your system hears about views, signatures, declines and completion when they happen, instead of asking every few minutes.
Signing that happens inside your portal or at your counter, with the signer returned to your application when they finish.
What the signer typed and the signed PDF land in the system that needs them, with the agreement ID kept as the key between the two systems.
When Salesforce is the caller, code goes through the package's documented global services, so Adobe's upgrades keep reaching your org.
The parts nobody demos: what the integration does when Acrobat Sign says slow down, when a token expires, or when an account moves shard.
The basic Acrobat Sign workflow is send, track and retrieve. In production each step has a detail that decides whether it survives load. This is the sequence we build, with the documented endpoint for each step and the point where integrations usually go wrong.
Every account has its own API access point. The integration asks for it rather than assuming one host.
One file per request, as a multipart upload. Content reused across agreements belongs in the library instead.
Participants, roles, order and state set in one request. Inputs are validated first, because a bad email fails the call.
A webhook tells your system when the agreement changes. Polling stays as a fallback for systems behind a firewall.
Optional. When signing happens in your own screens, the integration fetches the signer's URL and opens it.
When the agreement completes, the signed PDF and the signer's field values are pulled back into your system.
Endpoint names and behaviour as published in Adobe's API best practices. Comparing e-signature platforms for the same build? See how we approach DocuSign API integration.
In a Salesforce org with the Acrobat Sign package, most custom code does not need to call the REST API at all. The package publishes its own extension points, and code built on them keeps working across Adobe's package upgrades. These are the ones Adobe documents, and what we use each for.
| Requirement | Documented extension point | What we watch for |
|---|---|---|
| Create an agreement from a template in code | AgreementTemplateService.load, with a master record and runtime variables for recipients and documents. | Templates stay admin-maintained; code passes only what changes per record. |
| Act on agreements already created | EchoSignApiService: send, remind, cancel, remove, update, document info, signing URLs, and changeRecipient from version 24.14. | Version gates. Methods added in later releases are checked against the installed package. |
| Process many records at once | EchoSignActionBatch, AgreementTemplateBatch and AgreementTemplateServiceBatch. | They run in sets of five to respect governor limits, which sets how long a large run takes. |
| React when signing progresses | Triggers on agreement status, on the signed file, on recipients and on agreement events, as Adobe recommends. | The package's own update order, and queueable jobs chained off its updates, which can hit the queueable limit. |
| Let an outside system start a Salesforce agreement | The package's Apex REST service, which loads a template against a master record and returns the agreement ID. | The caller's Salesforce access, and what happens on its side when the call returns an error. |
Configuration first, code second. Package setup, agreement templates and merge and data mapping are configuration, covered under Adobe Acrobat Sign Salesforce integration; Flow-based sending is under Acrobat Sign workflow automation. We write Apex only where those stop. Source: Adobe's Salesforce developer guide.
Custom integration timelines depend on how many systems are involved, how many agreement types they send, and how much existing code there is to work around. We estimate after the architecture phase, once those are known, not before.
We map the calling systems, the agreement types, the volumes and the system of record for each piece of data, and review any integration code already running.
DeliverableIntegration architecture and data contract
The authentication model and scopes agreed, the API application or integration key set up, and a separate Acrobat Sign sandbox requested through Adobe where your account can have one.
DeliverableWorking credentials outside production
Agreement creation, webhook handlers, signing and data return written against the documented endpoints, in short iterations demoed to your team.
DeliverableWorking integration in a test environment
Throttling, retries, token refresh, shard changes, duplicate events and partial failures handled, with logs that say what went wrong and where.
DeliverableError-handling design and alerting
Not only a clean signature: declines, cancellations, an expired upload, a 429 response, a webhook endpoint that is down, and two systems acting on one agreement.
DeliverablePassed test matrix and sign-off
Deployed with a rollback plan, documented for the developers who will own it, and rechecked after Acrobat Sign API or package changes.
DeliverableLive integration, runbook and code walkthrough
We have no published Adobe Acrobat Sign case study, and we will not present another tool's results as one. This engagement used Nintex and PandaDoc. It is shown because the integration problem is the one this page is about: document data out of Salesforce, signature status and results back in, with no one copying values between systems. Each figure is scoped to that engagement.
Agents used to copy deal data into Word templates and email PDFs for signature. After the build, contracts, offer letters and KYC forms were generated from Salesforce opportunity data at the document stage, and their signing status was written back to the opportunity, so managers could see which deals were waiting, signed or stuck.
250+ agents on one Salesforce platform, delivered in three phases.
A custom e-signature integration touches your CRM, your data model and whatever else already writes to those records. It holds up when the people building it understand all three, not only the API. We help growing and mid-market companies solve complex CRM, integration, and business system challenges, and enterprise teams bring us the same work at larger scale.
Before writing an integration, we check whether a packaged connector or the Salesforce package's configuration already does the job. Code is for what they cannot do, and we say so in the architecture review.
Asynchronous creation, shards, throttling, webhook verification and token lifetimes are designed in from the start, from Adobe's developer guide rather than from trial and error in production.
Governor limits, sharing, the package's own triggers and its update order. When Salesforce is one end of the integration, that knowledge is what keeps the two from fighting.
The public REST API, webhooks and the package's global Apex services. No screen scraping and no edits to the managed package, so Adobe's releases do not break what we built.
Documented code, a runbook and a walkthrough with the team that will own it. If you want us to stay, Salesforce support and managed services cover the integration too.
It depends on who the integration acts for. OAuth suits applications where users act as themselves, or a product used by many Acrobat Sign accounts: each user consents, the application gets an access token valid for an hour plus a refresh token, and scopes limit what it can do. An integration key suits a system-to-system job with no sign-in: it is available on enterprise accounts, carries the permissions of the user who created it, lasts ten years and cannot be edited. For keys we use a dedicated integration user, so access does not depend on one employee's account.
Use webhooks wherever your system can receive them. Adobe recommends them over polling and warns that heavy polling can lead it to temporarily disable API access. Polling remains a documented fallback, for example when the receiving system sits behind a firewall; when we use it, we poll only agreements that are still in progress, back off between calls and stop once the agreement reaches a final state. Webhook endpoints have to answer Adobe's verification request by echoing the application's client ID, and a webhook's URL cannot be changed after it is created, so we put them on a stable address.
Yes. Once an agreement is out for signature, the API returns the signing URL for each participant, and your application can open it in its own flow or on a tablet for in-person signing. A post-sign redirect can return the signer to your application when they finish. For forms the customer starts, the web forms API returns embed code for your site and a hosted URL. One timing detail matters: agreement creation is asynchronous, so a signing URL requested too early can return a 404 that only means processing has not finished.
Acrobat Sign answers with HTTP 429 and a Retry-After value. Limits apply per user and per endpoint, at minute, hour and day levels, and the rate depends on your plan. Since May 2025 Adobe also throttles under high system load, and accounts created after 20 May 2025 are penalised for retrying before the interval ends. We build every call path to wait for the Retry-After interval, back off exponentially and queue work rather than drop it, and we ask Adobe support about higher limits when volumes justify them.
In an org with the Acrobat Sign package, start with the package's global Apex services. AgreementTemplateService creates agreements from admin-maintained templates, EchoSignApiService acts on existing agreements, and the agreements stay on the package's Salesforce objects, with its status updates and data mapping. Calling the REST API directly from Apex means rebuilding much of that yourself. We reserve direct calls for requirements the package does not expose, and say which ones in the architecture review.
Yes. The Acrobat Sign package includes an Apex REST service that loads an agreement template against a Salesforce master record when another system calls it, and returns the new agreement ID or an error. The agreement is then created and tracked in Salesforce like any other. The calling system authenticates to Salesforce, so its access is governed by your Salesforce security model, and we design what it does when the call fails.
Usually, yes. Acrobat Sign supports a separate sandbox environment, which Adobe enables through your customer success manager, and the Salesforce package can be pointed at it by setting the environment name to Sandbox in its environment settings. We build and test there with credentials created for that environment, and promote to production only after the failure paths have passed. If your account has no sandbox, we agree a test approach with you before any code runs against production.
A first conversation covers the systems that need to send or receive agreements, how they would authenticate, and where an existing integration is struggling: enough to say whether code is the right answer and what the first build would involve. No obligation to proceed.
Talk to a Salesforce architect who builds on the Acrobat Sign API