
Clearer Docusign API error message and status code improvements
Docusign updated 16 API error messages and adjusted HTTP status codes for rate-limiting and recipient limit errors. Here's what changed, how it affects your integration, and what to do before the production rollout completes.

Docusign is rolling out a set of improvements to error messages and HTTP status codes for resource limit scenarios across our platform. These changes make it easier to understand what failed, why it happened, and how to fix it.
This post explains what changed across three areas (error message clarity, HTTP status code alignment, and a new send-limit error) and walks through how to assess whether your integration is affected and what steps to take if it is.
Key takeaways
16 API error messages across document, envelope, recipient, and usage limit scenarios now include clear, actionable language: what failed, why it happened, and how to fix it.
API rate-limiting errors (hourly and burst limits) now correctly return HTTP 429 instead of 400, making them compatible with standard backoff and retry libraries.
Cumulative recipient limit errors now return HTTP 400 instead of 429, correctly reflecting account configuration constraints rather than throttling behavior.
A new error,
ENVELOPE_SEND_LIMIT_EXCEEDED, separates send limit enforcement from billing errors.If your integration parses the
errorCodefield, you likely don't need to make changes. If you rely on exact error message strings or hardcoded HTTP status code assumptions for rate limits, plan a test pass now.
What’s changing
1. Clear, actionable error messages
Sixteen API error messages have been updated across document, envelope, recipient, and usage-limit scenarios. The new messages are standardized to clearly communicate:
What went wrong
Why it happened
How to resolve it
For example, the previous DOCUMENT_LIMIT_EXCEEDED message read: “The document limit on the envelope has been exceeded.”
Now, the message reads: “You have reached the maximum number of documents allowed in a single transaction. You can send up to 130 documents in a single transaction.”
This change makes the same error immediately actionable without needing to read documentation or look up other resources. 2. Consistent HTTP status codes for rate-limiting errors
Several limits-related errors are moving to HTTP status codes that better reflect their meaning in standard HTTP semantics.
Cumulative recipient limit errors (such as RECIPIENT_LIMIT_EXCEEDED in cumulative scenarios) now return 400 Bad Request instead of 429 Too Many Requests, because they reflect account-level configuration and transaction composition rather than throttling.
API rate limiting and polling errors now return 429 Too Many Requests instead of 400 Bad Request, because they represent throttling behavior where a retry after a delay is appropriate.
For example, hourly and burst rate limits for polling and API calls now consistently return status code 429, and the response text tells you that you’ve hit a limit and should try again later, and to use a webhook, if you aren’t already.
This alignment means you can plug Docusign into standard retry libraries and backoff strategies that already treat 429 as a rate-limit signal.
3. New error for send limits
A new error code, ENVELOPE_SEND_LIMIT_EXCEEDED, now handles cases where an account exceeds its configured send limit within a rolling multi-day window.
This new error returns a 400 status code with the message:
“This account has reached its send limit within a ####-day period. Please try again in a few days, or ask your administrator for help.”
How these changes affect existing integrations
For most integrations, this transition should be smooth. However, there are a few cases where you might see behavior changes worth testing for
Safe by default: integrations that parse errorCode
If your integration handles errors by parsing the errorCode field in the response and using that value to branch logic (for example, deciding whether to retry, showing a specific message, or escalating), you don’t need to make any structural changes. These updates are non-breaking for integrations that key off errorCode rather than matching error message strings or assuming specific HTTP status codes for rate limiting scenarios.
Validating in lower environments is still recommended, but you shouldn’t need to refactor to your error handling.
Potentially impacted: string matching and hardcoded status assumptions
Your integration may be affected if it:
Performs exact string matching on
errorMessage(for example,if (errorMessage == "The document limit on the envelope has been exceeded"))Assumes that specific limits-related conditions always return HTTP 400 instead of 429, or vice versa, and uses only the status code to make retry decisions
In those cases, the new messages and status codes may cause:
Certain conditional checks to stop firing
Retry logic to change behavior (for example, if you previously treated all 400s as non-retryable and all 429s as retryable)
Monitoring dashboards or alert thresholds that are keyed off status codes to show different distributions
If that sounds like your integration, plan on a test pass and possibly a targeted refactor.
How to get started
Availability: This update applies to all Docusign accounts, plans, and environments. No configuration is required since changes are applied automatically.
Rollout schedule: The developer environment is now updated. The production rollout is in progress and is expected to be completed in July 2026.
Recommended steps before production rollout completes:
Review your error handling logic. Check whether you match on
errorMessagestrings or use hardcoded HTTP status code assumptions for rate-limit scenarios.Update your logic to key off instead of message strings.
Confirm that 429 responses trigger backoff and retry behavior in your integration.
Validate your flows in the developer environment, where the changes are already live.
If you need additional time to update your integration, work with your Docusign support or customer success contact to request an extension.
Full list of updated error codes and messages
The table below shows all updated errors. "HTTP status" columns refer to the HTTP response code returned. Error names (codes) are unchanged unless noted.
Error Name | Previous Error Code | Previous Error Message | Updated Error Code | Updated Error Message |
COMBINED_DOCUMENT_SIZE_OVER_LIMIT | 400 | An error occurred while downloading the document. Try downloading the documents in a .zip file Total size of all documents being downloaded exceeds the allowed limit: 100MB. Please try to single download each documents | No change | Documents being downloaded exceed the allowed limit of 100 MB. Try downloading all your agreements as a .zip file, or download each file individually. |
DELIVERY_METHOD_RECIPIENT_LIMIT_EXCEEDED | 400 | The limit on recipients with a specific delivery method has been exceeded. An envelope cannot have more than 10 SMS/WhatsApp recipients. | No change | You can choose up to #### SMS or WhatsApp recipients per send. |
DOCUMENT_LIMIT_EXCEEDED | 400 | The document limit on the envelope has been exceeded. | No change | You have reached the maximum number of documents allowed in a single transaction. You can send up to 130 documents in a single transaction. |
DOCUMENT_SIZE_LIMIT_EXCEEDED | 400 | The total document size on the envelope has exceeded the allowed limit. | No change | You have reached the maximum upload limit allowed for a single transaction. The total size of all uploaded documents cannot exceed 200MB. |
FORMAT_CONVERSION_ERROR | 400 | The data could not be converted. The document is too large. | No change | One or more documents uploaded exceeds the maximum allowed single file size limit of 50 MB. You can make your document(s) smaller or break up the document(s) into multiple parts. |
Document_Contains_Too_Many_Pages | 400 | The PDF's page count, {user upload page count} exceeds the limit: 2000 | No change | One or more documents exceeds the maximum page limit of 2000 pages. You can make your document(s) smaller or break up the document(s) into multiple parts. |
API_REQUEST_IS_THROTTLED | 429 | [API Action name, for example GetDocument / PutDocument] call blocked | No change | We blocked your [API Action Name] call, because a similar request is already in progress. Try again after your current request completes. |
ENVELOPE_DRAFT_LIMIT_EXCEEDED | 400 | The maximum number of envelope drafts for the account has been exceeded. Please send or delete some drafts, and try again. | No change | Your Drafts folder is full. Please Send or Delete draft transactions to re-enable the ability to save more drafts. |
HOURLY_APIINVOCATION_LIMIT_EXCEEDED | 400 | The maximum number of hourly API invocations has been exceeded. The hourly limit is ###. | 429 | You've exceeded your hourly API invocations. Your limit is ####. Please try again later. |
HOURLY_ENVELOPE_POLLING_LIMIT_EXCEEDED | 400 | The maximum number of hourly polling calls for the envelope has been exceeded. The hourly limit is 250. | 429 | Your account has reached the hourly limit of #### polling calls. To prevent this from happening again, enable webhooks to allow for real-time, automatic updates. |
Hourly_APIInvocation_Envelope_Limit_Exceeded | 400 | The maximum number of hourly API invocations for the envelope has been exceeded. The hourly limit is ###. | 429 | You've exceeded your hourly API invocations. Your limit is ####. Please try again later. |
BURST_APIINVOCATION_LIMIT_EXCEEDED | 400 | The maximum number of burst API invocations has been exceeded. The burst limit is #### | 429 | You've exceeded your burst API invocations. Your limit is ####. Please try again later. |
BURST_ENVELOPE_POLLING_LIMIT_EXCEEDED | 400 | The maximum number of burst polling calls for the envelope has been exceeded. The burst limit is ### | 429 | Your account has reached the limit of #### polling calls. To prevent this from happening again, enable webhooks to allow for real-time, automatic updates. |
Burst_APIInvocation_Envelope_Limit_Exceeded | 400 | The maximum number of burst API invocations for the envelope has been exceeded. The burst limit is #### | 429 | You've exceeded your burst API invocations. Your limit is ####. Please try again later. |
RECIPIENT_LIMIT_EXCEEDED | 429 | The cumulative recipient limit has been exceeded. | 400 | You have reached the maximum number of recipients permitted for a single transaction in your account. Please ask your administrator to increase your limit. |
RECIPIENT_LIMIT_EXCEEDED | 400 | The recipient limit on the envelope has been exceeded. | No change | You have reached the maximum number of recipients allowed for a single transaction. Please remove some recipients, or split them across multiple transactions. |
ENVELOPE_ALLOWANCE_EXCEEDED | 400 | The envelope allowance for the account has been exceeded. Note: The billing error code was incorrectly firing when the service protection limit exceeded. The new ENVELOPE_SEND_LIMIT_EXCEEDED error now handles that scenario. ENVELOPE_ALLOWANCE_EXCEEDED now fires only for billing credit exhaustion. | No change | This account is out of credits. Ask your administrator to add more. |
ENVELOPE_SEND_LIMIT_EXCEEDED(new) | N/A | N/A | 400 | This account has reached its send limit within a ####-day period. Please try again in a few days, or ask your administrator for help. |
Frequently asked questions
Are any API limits changing as part of this update?
No. This update does not change any underlying system limits such as envelope size, document count, page count, or API call volume. Only the error message text and HTTP status codes are changing.
Will this break my existing integration?
It depends on how your integration handles errors. If you parse the errorCode field and use value to drive your logic, you should be unaffected. If your integration relies on exact errorMessage string matching, or assumes that rate-limiting conditions always return 400 rather than 429, you may see behavior changes and should plan to test and update your code.
How can I tell if I need to make changes?
Review your error handling logic for three patterns:
Exact matching on
errorMessagestringsUsing only the HTTP status code (400 vs 429) to decide when to retry
Monitoring or alerting thresholds that are keyed to specific status code distributions
If you find any of those patterns, update your logic to key off errorCode, treat 429 as a rate limit signal with backoff and retry, and validate your flows in demo before the production rollout completes.
What if I need more time to update my integration?
If you need additional time, work with your Docusign support or customer success contact to request an extension.
Next steps
The developer environment already reflects all of the changes described in this post, so you can test your error handling behavior there today.
As the production rollout completes, review your integration using the guidance in the "How these changes affect existing integrations" section above.
If you encounter error responses where more clarity would still help, share your feedback (or questions) with Docusign by adding a comment on this Community thread.

Cassandra has been writing for Docusign since early 2018. Since then, Cassandra has created a wide range of the guides, code examples, videos, and other content you can find throughout the Developer Center, particularly around Connect and Authentication. She currently lives outside of Seattle with her Saint Bernard, Zoey.
Related posts
Docusign IAM is the agreement platform your business needs





