diff --git a/openapi-raw.yaml b/openapi-raw.yaml
index 132929285..7e06eae17 100644
--- a/openapi-raw.yaml
+++ b/openapi-raw.yaml
@@ -929,6 +929,47 @@ paths:
seo:
title: '_t__ApiAppList::SEO::TITLE'
description: '_t__ApiAppList::SEO::DESCRIPTION'
+ /notification/retry:
+ post:
+ tags:
+ - 'Callbacks and Events'
+ summary: 'Resend an API notification asynchronously.'
+ description: 'Queues an API notification by event_type and id. A new notification event is generated from current object state.'
+ operationId: apiNotificationRetry
+ responses:
+ '202':
+ description: 'Resend queued'
+ 4XX:
+ description: failed_operation
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
+ examples:
+ 400_example:
+ $ref: '#/components/examples/Error400Response'
+ 401_example:
+ $ref: '#/components/examples/Error401Response'
+ 402_example:
+ $ref: '#/components/examples/Error402Response'
+ 403_example:
+ $ref: '#/components/examples/Error403Response'
+ 429_example:
+ $ref: '#/components/examples/Error429Response'
+ 404_example:
+ $ref: '#/components/examples/Error404Response'
+ 4XX_example:
+ $ref: '#/components/examples/Error4XXResponse'
+ security:
+ -
+ api_key: []
+ -
+ oauth2:
+ - request_signature
+ - signature_request_access
+ x-hideOn:
+ - doc
+ - sdk
'/bulk_send_job/{bulk_send_job_id}':
get:
tags:
@@ -5026,6 +5067,8 @@ paths:
$ref: '#/components/examples/Error429Response'
404_example:
$ref: '#/components/examples/Error404Response'
+ 409_example:
+ $ref: '#/components/examples/Error409Response'
4XX_example:
$ref: '#/components/examples/Error4XXResponse'
security:
@@ -13928,3 +13971,241 @@ x-webhooks:
responses:
'200':
$ref: '#/components/responses/EventCallbackResponse'
+x-error-codes:
+ bad_request:
+ http_status: 400
+ summary: '_t__ErrorCatalog::bad_request::SUMMARY'
+ cause: '_t__ErrorCatalog::bad_request::CAUSE'
+ remediation: '_t__ErrorCatalog::bad_request::REMEDIATION'
+ retryable: 'no'
+ unauthorized:
+ http_status: 401
+ summary: '_t__ErrorCatalog::unauthorized::SUMMARY'
+ cause: '_t__ErrorCatalog::unauthorized::CAUSE'
+ remediation: '_t__ErrorCatalog::unauthorized::REMEDIATION'
+ retryable: 'no'
+ payment_required:
+ http_status: 402
+ summary: '_t__ErrorCatalog::payment_required::SUMMARY'
+ cause: '_t__ErrorCatalog::payment_required::CAUSE'
+ remediation: '_t__ErrorCatalog::payment_required::REMEDIATION'
+ retryable: 'no'
+ forbidden:
+ http_status: 403
+ summary: '_t__ErrorCatalog::forbidden::SUMMARY'
+ cause: '_t__ErrorCatalog::forbidden::CAUSE'
+ remediation: '_t__ErrorCatalog::forbidden::REMEDIATION'
+ retryable: 'no'
+ not_found:
+ http_status: 404
+ summary: '_t__ErrorCatalog::not_found::SUMMARY'
+ cause: '_t__ErrorCatalog::not_found::CAUSE'
+ remediation: '_t__ErrorCatalog::not_found::REMEDIATION'
+ retryable: 'no'
+ conflict:
+ http_status: 409
+ summary: '_t__ErrorCatalog::conflict::SUMMARY'
+ cause: '_t__ErrorCatalog::conflict::CAUSE'
+ remediation: '_t__ErrorCatalog::conflict::REMEDIATION'
+ retryable: conditional
+ exceeded_rate:
+ http_status: 429
+ summary: '_t__ErrorCatalog::exceeded_rate::SUMMARY'
+ cause: '_t__ErrorCatalog::exceeded_rate::CAUSE'
+ remediation: '_t__ErrorCatalog::exceeded_rate::REMEDIATION'
+ retryable: 'yes'
+ backoff: '_t__ErrorCatalog::exceeded_rate::BACKOFF'
+ unknown:
+ http_status: 500
+ summary: '_t__ErrorCatalog::unknown::SUMMARY'
+ cause: '_t__ErrorCatalog::unknown::CAUSE'
+ remediation: '_t__ErrorCatalog::unknown::REMEDIATION'
+ retryable: conditional
+ backoff: '_t__ErrorCatalog::unknown::BACKOFF'
+ team_invite_failed:
+ http_status: 403
+ summary: '_t__ErrorCatalog::team_invite_failed::SUMMARY'
+ cause: '_t__ErrorCatalog::team_invite_failed::CAUSE'
+ remediation: '_t__ErrorCatalog::team_invite_failed::REMEDIATION'
+ retryable: 'no'
+ max_faxes:
+ http_status: 429
+ summary: '_t__ErrorCatalog::max_faxes::SUMMARY'
+ cause: '_t__ErrorCatalog::max_faxes::CAUSE'
+ remediation: '_t__ErrorCatalog::max_faxes::REMEDIATION'
+ retryable: 'yes'
+ backoff: '_t__ErrorCatalog::max_faxes::BACKOFF'
+ invalid_recipient:
+ http_status: 400
+ summary: '_t__ErrorCatalog::invalid_recipient::SUMMARY'
+ cause: '_t__ErrorCatalog::invalid_recipient::CAUSE'
+ remediation: '_t__ErrorCatalog::invalid_recipient::REMEDIATION'
+ retryable: 'no'
+ signature_request_cancel_failed:
+ http_status: 400
+ summary: '_t__ErrorCatalog::signature_request_cancel_failed::SUMMARY'
+ cause: '_t__ErrorCatalog::signature_request_cancel_failed::CAUSE'
+ remediation: '_t__ErrorCatalog::signature_request_cancel_failed::REMEDIATION'
+ retryable: 'no'
+ signature_request_remove_failed:
+ http_status: 400
+ summary: '_t__ErrorCatalog::signature_request_remove_failed::SUMMARY'
+ cause: '_t__ErrorCatalog::signature_request_remove_failed::CAUSE'
+ remediation: '_t__ErrorCatalog::signature_request_remove_failed::REMEDIATION'
+ retryable: 'no'
+ maintenance:
+ http_status: 503
+ summary: '_t__ErrorCatalog::maintenance::SUMMARY'
+ cause: '_t__ErrorCatalog::maintenance::CAUSE'
+ remediation: '_t__ErrorCatalog::maintenance::REMEDIATION'
+ retryable: 'yes'
+ backoff: '_t__ErrorCatalog::maintenance::BACKOFF'
+ method_not_supported:
+ http_status: 405
+ summary: '_t__ErrorCatalog::method_not_supported::SUMMARY'
+ cause: '_t__ErrorCatalog::method_not_supported::CAUSE'
+ remediation: '_t__ErrorCatalog::method_not_supported::REMEDIATION'
+ retryable: 'no'
+ invalid_reminder:
+ http_status: 400
+ summary: '_t__ErrorCatalog::invalid_reminder::SUMMARY'
+ cause: '_t__ErrorCatalog::invalid_reminder::CAUSE'
+ remediation: '_t__ErrorCatalog::invalid_reminder::REMEDIATION'
+ retryable: 'no'
+ unavailable:
+ http_status: 503
+ summary: '_t__ErrorCatalog::unavailable::SUMMARY'
+ cause: '_t__ErrorCatalog::unavailable::CAUSE'
+ remediation: '_t__ErrorCatalog::unavailable::REMEDIATION'
+ retryable: 'yes'
+ backoff: '_t__ErrorCatalog::unavailable::BACKOFF'
+ unprocessable_entity:
+ http_status: 422
+ summary: '_t__ErrorCatalog::unprocessable_entity::SUMMARY'
+ cause: '_t__ErrorCatalog::unprocessable_entity::CAUSE'
+ remediation: '_t__ErrorCatalog::unprocessable_entity::REMEDIATION'
+ retryable: conditional
+ backoff: '_t__ErrorCatalog::unprocessable_entity::BACKOFF'
+ signature_request_expired:
+ http_status:
+ - 400
+ - 403
+ summary: '_t__ErrorCatalog::signature_request_expired::SUMMARY'
+ cause: '_t__ErrorCatalog::signature_request_expired::CAUSE'
+ remediation: '_t__ErrorCatalog::signature_request_expired::REMEDIATION'
+ retryable: 'no'
+ deleted:
+ http_status: 410
+ summary: '_t__ErrorCatalog::deleted::SUMMARY'
+ cause: '_t__ErrorCatalog::deleted::CAUSE'
+ remediation: '_t__ErrorCatalog::deleted::REMEDIATION'
+ retryable: 'no'
+x-oauth-error-codes:
+ invalid_grant:
+ http_status:
+ - 400
+ - 401
+ summary: '_t__OAuthErrorCatalog::invalid_grant::SUMMARY'
+ cause: '_t__OAuthErrorCatalog::invalid_grant::CAUSE'
+ remediation: '_t__OAuthErrorCatalog::invalid_grant::REMEDIATION'
+ retryable: 'no'
+ invalid_client:
+ http_status: 400
+ summary: '_t__OAuthErrorCatalog::invalid_client::SUMMARY'
+ cause: '_t__OAuthErrorCatalog::invalid_client::CAUSE'
+ remediation: '_t__OAuthErrorCatalog::invalid_client::REMEDIATION'
+ retryable: 'no'
+ invalid_request:
+ http_status: 400
+ summary: '_t__OAuthErrorCatalog::invalid_request::SUMMARY'
+ cause: '_t__OAuthErrorCatalog::invalid_request::CAUSE'
+ remediation: '_t__OAuthErrorCatalog::invalid_request::REMEDIATION'
+ retryable: 'no'
+ unauthorized_client:
+ http_status:
+ - 401
+ - 403
+ summary: '_t__OAuthErrorCatalog::unauthorized_client::SUMMARY'
+ cause: '_t__OAuthErrorCatalog::unauthorized_client::CAUSE'
+ remediation: '_t__OAuthErrorCatalog::unauthorized_client::REMEDIATION'
+ retryable: 'no'
+ unsupported_grant_type:
+ http_status: 400
+ summary: '_t__OAuthErrorCatalog::unsupported_grant_type::SUMMARY'
+ cause: '_t__OAuthErrorCatalog::unsupported_grant_type::CAUSE'
+ remediation: '_t__OAuthErrorCatalog::unsupported_grant_type::REMEDIATION'
+ retryable: 'no'
+ payment_required:
+ http_status: 402
+ summary: '_t__OAuthErrorCatalog::payment_required::SUMMARY'
+ cause: '_t__OAuthErrorCatalog::payment_required::CAUSE'
+ remediation: '_t__OAuthErrorCatalog::payment_required::REMEDIATION'
+ retryable: 'no'
+ addon_required:
+ http_status: 402
+ summary: '_t__OAuthErrorCatalog::addon_required::SUMMARY'
+ cause: '_t__OAuthErrorCatalog::addon_required::CAUSE'
+ remediation: '_t__OAuthErrorCatalog::addon_required::REMEDIATION'
+ retryable: 'no'
+ invalid_scope:
+ http_status: 400
+ summary: '_t__OAuthErrorCatalog::invalid_scope::SUMMARY'
+ cause: '_t__OAuthErrorCatalog::invalid_scope::CAUSE'
+ remediation: '_t__OAuthErrorCatalog::invalid_scope::REMEDIATION'
+ retryable: 'no'
+ quota_reached:
+ http_status: 402
+ summary: '_t__OAuthErrorCatalog::quota_reached::SUMMARY'
+ cause: '_t__OAuthErrorCatalog::quota_reached::CAUSE'
+ remediation: '_t__OAuthErrorCatalog::quota_reached::REMEDIATION'
+ retryable: 'no'
+ server_error:
+ http_status: 500
+ summary: '_t__OAuthErrorCatalog::server_error::SUMMARY'
+ cause: '_t__OAuthErrorCatalog::server_error::CAUSE'
+ remediation: '_t__OAuthErrorCatalog::server_error::REMEDIATION'
+ retryable: 'yes'
+ backoff: '_t__OAuthErrorCatalog::server_error::BACKOFF'
+ temporary_unavailable:
+ http_status: 503
+ summary: '_t__OAuthErrorCatalog::temporary_unavailable::SUMMARY'
+ cause: '_t__OAuthErrorCatalog::temporary_unavailable::CAUSE'
+ remediation: '_t__OAuthErrorCatalog::temporary_unavailable::REMEDIATION'
+ retryable: 'yes'
+ backoff: '_t__OAuthErrorCatalog::temporary_unavailable::BACKOFF'
+x-error-events:
+ signature_request_invalid:
+ event_type: signature_request_invalid
+ delivery: webhook
+ summary: '_t__ErrorEventCatalog::signature_request_invalid::SUMMARY'
+ cause: '_t__ErrorEventCatalog::signature_request_invalid::CAUSE'
+ remediation: '_t__ErrorEventCatalog::signature_request_invalid::REMEDIATION'
+ retryable: conditional
+ unknown_error:
+ event_type: unknown_error
+ delivery: webhook
+ summary: '_t__ErrorEventCatalog::unknown_error::SUMMARY'
+ cause: '_t__ErrorEventCatalog::unknown_error::CAUSE'
+ remediation: '_t__ErrorEventCatalog::unknown_error::REMEDIATION'
+ retryable: conditional
+ file_error:
+ event_type: file_error
+ delivery: webhook
+ summary: '_t__ErrorEventCatalog::file_error::SUMMARY'
+ cause: '_t__ErrorEventCatalog::file_error::CAUSE'
+ remediation: '_t__ErrorEventCatalog::file_error::REMEDIATION'
+ retryable: conditional
+ template_error:
+ event_type: template_error
+ delivery: webhook
+ summary: '_t__ErrorEventCatalog::template_error::SUMMARY'
+ cause: '_t__ErrorEventCatalog::template_error::CAUSE'
+ remediation: '_t__ErrorEventCatalog::template_error::REMEDIATION'
+ retryable: conditional
+ sign_url_invalid:
+ event_type: sign_url_invalid
+ delivery: webhook
+ summary: '_t__ErrorEventCatalog::sign_url_invalid::SUMMARY'
+ cause: '_t__ErrorEventCatalog::sign_url_invalid::CAUSE'
+ remediation: '_t__ErrorEventCatalog::sign_url_invalid::REMEDIATION'
+ retryable: 'yes'
diff --git a/openapi-sdk.yaml b/openapi-sdk.yaml
index ed174d3ca..ca3f70444 100644
--- a/openapi-sdk.yaml
+++ b/openapi-sdk.yaml
@@ -5087,6 +5087,8 @@ paths:
$ref: '#/components/examples/Error429Response'
404_example:
$ref: '#/components/examples/Error404Response'
+ 409_example:
+ $ref: '#/components/examples/Error409Response'
4XX_example:
$ref: '#/components/examples/Error4XXResponse'
security:
@@ -11943,7 +11945,7 @@ components:
description: 'Path at which an error occurred.'
type: string
error_name:
- description: 'Name of the error.'
+ description: 'Name of the error. See the `x-error-codes` catalog in openapi file for a complete list of possible error codes with detailed information including HTTP status codes, causes, remediation steps, and retry guidance.'
type: string
type: object
FaxResponse:
@@ -14507,3 +14509,241 @@ x-webhooks:
responses:
200:
$ref: '#/components/responses/EventCallbackResponse'
+x-error-codes:
+ bad_request:
+ http_status: 400
+ summary: 'The request contained invalid or malformed parameters.'
+ cause: 'A parameter failed validation, or the request body was malformed.'
+ remediation: 'Inspect error_msg and error_path, correct the offending parameter, and resend.'
+ retryable: 'no'
+ unauthorized:
+ http_status: 401
+ summary: 'The credentials supplied are missing or invalid.'
+ cause: 'Missing, malformed, or invalid API key or OAuth access token.'
+ remediation: 'Verify the API key or OAuth token and the Authorization header, then retry.'
+ retryable: 'no'
+ payment_required:
+ http_status: 402
+ summary: 'The account must be credited or upgraded to perform this action.'
+ cause: 'The action requires a paid plan, additional quota, or API credits.'
+ remediation: 'Upgrade the plan or add the required credits/quota, then retry.'
+ retryable: 'no'
+ forbidden:
+ http_status: 403
+ summary: 'The action is not allowed for these credentials or in the current context.'
+ cause: 'The authenticated account lacks access to the resource or operation.'
+ remediation: 'Confirm the account has access to the resource and the required permissions.'
+ retryable: 'no'
+ not_found:
+ http_status: 404
+ summary: 'Nothing matches the requested resource.'
+ cause: 'The resource id does not exist or is not visible to this account.'
+ remediation: 'Verify the id and that the resource belongs to the authenticated account.'
+ retryable: 'no'
+ conflict:
+ http_status: 409
+ summary: 'The request was well-formed but conflicts with the current state.'
+ cause: 'The target resource is in a state incompatible with the request (e.g. a signature request is still being set up).'
+ remediation: 'Wait briefly and retry, or listen for a callback event confirming the resource is ready.'
+ retryable: conditional
+ exceeded_rate:
+ http_status: 429
+ summary: 'Your account''s API request rate limit has been exceeded.'
+ cause: 'Too many requests were sent within the rate-limit window for this request type.'
+ remediation: 'Pace requests using the X-RateLimit-* response headers and retry after the window resets.'
+ retryable: 'yes'
+ backoff: 'Honor X-Ratelimit-Reset (Unix epoch); otherwise exponential backoff with jitter. No Retry-After header is sent.'
+ unknown:
+ http_status: 500
+ summary: 'An unexpected error occurred.'
+ cause: 'An unhandled server-side error, or a status code without a more specific error_name.'
+ remediation: 'Retry transient failures; if it persists, contact support with the request details.'
+ retryable: conditional
+ backoff: 'For transient 5xx, retry with exponential backoff; otherwise do not retry.'
+ team_invite_failed:
+ http_status: 403
+ summary: 'The team invitation could not be completed.'
+ cause: 'The invitee already belongs to a team, or the invite is otherwise not permitted.'
+ remediation: 'Confirm the invitee is not already on a team before inviting.'
+ retryable: 'no'
+ max_faxes:
+ http_status: 429
+ summary: 'Too many fax transmissions are currently pending or transmitting.'
+ cause: 'The account has reached the limit of concurrent in-flight fax transmissions.'
+ remediation: 'Wait for outstanding transmissions to complete, then retry.'
+ retryable: 'yes'
+ backoff: 'Retry with exponential backoff once pending transmissions clear.'
+ invalid_recipient:
+ http_status: 400
+ summary: 'The recipient (fax number or email address) is invalid.'
+ cause: 'A recipient value did not pass validation.'
+ remediation: 'Correct the recipient value and resend.'
+ retryable: 'no'
+ signature_request_cancel_failed:
+ http_status: 400
+ summary: 'The signature request could not be cancelled.'
+ cause: 'The caller is not the requester, or the request is already fully executed/closed.'
+ remediation: 'Only the requester can cancel, and only before the request is fully executed.'
+ retryable: 'no'
+ signature_request_remove_failed:
+ http_status: 400
+ summary: 'Access to the signature request could not be removed.'
+ cause: 'The signature request has not yet been fully executed, so access cannot be revoked.'
+ remediation: 'Wait until all parties have signed, or call /signature_request/cancel to cancel incomplete requests instead.'
+ retryable: 'no'
+ maintenance:
+ http_status: 503
+ summary: 'The request could not be completed because the site is under maintenance.'
+ cause: 'The API is in a scheduled maintenance window.'
+ remediation: 'Retry once the maintenance window ends.'
+ retryable: 'yes'
+ backoff: 'Retry later with exponential backoff.'
+ method_not_supported:
+ http_status: 405
+ summary: 'The HTTP method is not supported for this endpoint.'
+ cause: 'The request used a verb the endpoint does not accept.'
+ remediation: 'Use the HTTP method documented for the endpoint.'
+ retryable: 'no'
+ invalid_reminder:
+ http_status: 400
+ summary: 'The signature request reminder was invalid.'
+ cause: 'A reminder was attempted against an ineligible request (e.g. embedded, closed, or expired).'
+ remediation: 'Only send reminders for eligible (non-embedded, open) signature requests.'
+ retryable: 'no'
+ unavailable:
+ http_status: 503
+ summary: 'The service is temporarily unavailable.'
+ cause: 'A downstream dependency or the service itself is temporarily unavailable.'
+ remediation: 'Retry later with exponential backoff.'
+ retryable: 'yes'
+ backoff: 'Retry later with exponential backoff and jitter.'
+ unprocessable_entity:
+ http_status: 422
+ summary: 'The request was understood but the target entity cannot be processed.'
+ cause: 'The resource is still being processed, or it is in an error state.'
+ remediation: 'If the resource is still processing, wait and retry; if it is in an error state, recreate/resend it instead of retrying.'
+ retryable: conditional
+ backoff: 'If still processing, retry with exponential backoff; if in an error state, do not retry.'
+ signature_request_expired:
+ http_status:
+ - 400
+ - 403
+ summary: 'The signature request has expired.'
+ cause: 'The operation targets a request whose expiration has passed. Most endpoints return 400; final-copy/download endpoints return 403.'
+ remediation: 'The request can no longer be acted upon; create a new signature request.'
+ retryable: 'no'
+ deleted:
+ http_status: 410
+ summary: 'The request was cancelled or deleted.'
+ cause: 'The resource has been cancelled or removed and is no longer available.'
+ remediation: 'Do not retry; the resource is permanently gone.'
+ retryable: 'no'
+x-oauth-error-codes:
+ invalid_grant:
+ http_status:
+ - 400
+ - 401
+ summary: 'The OAuth grant (authorization code or refresh token) is invalid or expired.'
+ cause: 'The code/token was already used, expired, or does not match the client.'
+ remediation: 'Re-initiate the OAuth flow to obtain a fresh authorization code.'
+ retryable: 'no'
+ invalid_client:
+ http_status: 400
+ summary: 'The OAuth client credentials are invalid.'
+ cause: 'The client_id or client_secret is unrecognized or incorrect.'
+ remediation: 'Verify the client_id and client_secret from the API app settings.'
+ retryable: 'no'
+ invalid_request:
+ http_status: 400
+ summary: 'The OAuth request is malformed or missing required parameters.'
+ cause: 'A required parameter is missing, or the request format is invalid.'
+ remediation: 'Check the request against the OAuth token endpoint documentation.'
+ retryable: 'no'
+ unauthorized_client:
+ http_status:
+ - 401
+ - 403
+ summary: 'The OAuth client is not authorized to perform this action.'
+ cause: 'The app has not been approved, or the action is outside the granted scopes.'
+ remediation: 'Ensure the app is approved and the required scopes are granted.'
+ retryable: 'no'
+ unsupported_grant_type:
+ http_status: 400
+ summary: 'The grant type is not supported.'
+ cause: 'The grant_type parameter value is not recognized.'
+ remediation: 'Use authorization_code or refresh_token as the grant_type.'
+ retryable: 'no'
+ payment_required:
+ http_status: 402
+ summary: 'The account requires a paid plan to use this OAuth app.'
+ cause: 'The authorizing account does not have a plan that supports this integration.'
+ remediation: 'Upgrade the account to a plan that includes OAuth app access.'
+ retryable: 'no'
+ addon_required:
+ http_status: 402
+ summary: 'An add-on is required to use this OAuth app.'
+ cause: 'The account plan does not include the add-on needed for this integration.'
+ remediation: 'Add the required add-on to the account subscription.'
+ retryable: 'no'
+ invalid_scope:
+ http_status: 400
+ summary: 'The requested OAuth scope is invalid.'
+ cause: 'The scope parameter contains values not permitted for the app.'
+ remediation: 'Request only scopes that the app is configured to use.'
+ retryable: 'no'
+ quota_reached:
+ http_status: 402
+ summary: 'The account has reached its usage quota for this OAuth app.'
+ cause: 'The authorizing account has exhausted its quota for the integration.'
+ remediation: 'Contact the app owner or upgrade the account quota.'
+ retryable: 'no'
+ server_error:
+ http_status: 500
+ summary: 'An internal server error occurred during OAuth processing.'
+ cause: 'An unexpected error on the server side while handling the OAuth request.'
+ remediation: 'Retry the request; if it persists, contact support.'
+ retryable: 'yes'
+ backoff: 'Retry with exponential backoff.'
+ temporary_unavailable:
+ http_status: 503
+ summary: 'The OAuth service is temporarily unavailable.'
+ cause: 'The service is under maintenance or experiencing temporary issues.'
+ remediation: 'Retry after a short delay.'
+ retryable: 'yes'
+ backoff: 'Retry with exponential backoff.'
+x-error-events:
+ signature_request_invalid:
+ event_type: signature_request_invalid
+ delivery: webhook
+ summary: 'Asynchronous error while processing a signature request.'
+ cause: 'A signature request could not be processed (e.g. invalid tags, fields, or merge data).'
+ remediation: 'Inspect event.event_metadata.event_message in the callback, correct the request, and resend.'
+ retryable: conditional
+ unknown_error:
+ event_type: unknown_error
+ delivery: webhook
+ summary: 'An unspecified asynchronous processing error occurred.'
+ cause: 'An unexpected error occurred while processing the request asynchronously.'
+ remediation: 'Check the request status in the API dashboard; retry or contact support if it persists.'
+ retryable: conditional
+ file_error:
+ event_type: file_error
+ delivery: webhook
+ summary: 'Asynchronous error while processing an uploaded file.'
+ cause: 'A file attached to a request could not be processed.'
+ remediation: 'Resend the request with a supported, non-corrupt file.'
+ retryable: conditional
+ template_error:
+ event_type: template_error
+ delivery: webhook
+ summary: 'Asynchronous error while creating a template.'
+ cause: 'Template file processing failed (e.g. unsupported or corrupt file).'
+ remediation: 'Recreate the template with a valid file; check status in the API dashboard.'
+ retryable: conditional
+ sign_url_invalid:
+ event_type: sign_url_invalid
+ delivery: webhook
+ summary: 'An embedded signing URL has expired or become invalid.'
+ cause: 'The embedded sign_url is no longer valid (e.g. expired).'
+ remediation: 'Generate a fresh embedded sign_url via the embedded sign URL endpoint.'
+ retryable: 'yes'
diff --git a/openapi.yaml b/openapi.yaml
index 41e64091d..e94b17b87 100644
--- a/openapi.yaml
+++ b/openapi.yaml
@@ -5087,6 +5087,8 @@ paths:
$ref: '#/components/examples/Error429Response'
404_example:
$ref: '#/components/examples/Error404Response'
+ 409_example:
+ $ref: '#/components/examples/Error409Response'
4XX_example:
$ref: '#/components/examples/Error4XXResponse'
security:
@@ -11923,7 +11925,7 @@ components:
description: 'Path at which an error occurred.'
type: string
error_name:
- description: 'Name of the error.'
+ description: 'Name of the error. See the `x-error-codes` catalog in openapi file for a complete list of possible error codes with detailed information including HTTP status codes, causes, remediation steps, and retry guidance.'
type: string
type: object
FaxResponse:
@@ -14542,3 +14544,241 @@ x-webhooks:
responses:
200:
$ref: '#/components/responses/EventCallbackResponse'
+x-error-codes:
+ bad_request:
+ http_status: 400
+ summary: 'The request contained invalid or malformed parameters.'
+ cause: 'A parameter failed validation, or the request body was malformed.'
+ remediation: 'Inspect error_msg and error_path, correct the offending parameter, and resend.'
+ retryable: 'no'
+ unauthorized:
+ http_status: 401
+ summary: 'The credentials supplied are missing or invalid.'
+ cause: 'Missing, malformed, or invalid API key or OAuth access token.'
+ remediation: 'Verify the API key or OAuth token and the Authorization header, then retry.'
+ retryable: 'no'
+ payment_required:
+ http_status: 402
+ summary: 'The account must be credited or upgraded to perform this action.'
+ cause: 'The action requires a paid plan, additional quota, or API credits.'
+ remediation: 'Upgrade the plan or add the required credits/quota, then retry.'
+ retryable: 'no'
+ forbidden:
+ http_status: 403
+ summary: 'The action is not allowed for these credentials or in the current context.'
+ cause: 'The authenticated account lacks access to the resource or operation.'
+ remediation: 'Confirm the account has access to the resource and the required permissions.'
+ retryable: 'no'
+ not_found:
+ http_status: 404
+ summary: 'Nothing matches the requested resource.'
+ cause: 'The resource id does not exist or is not visible to this account.'
+ remediation: 'Verify the id and that the resource belongs to the authenticated account.'
+ retryable: 'no'
+ conflict:
+ http_status: 409
+ summary: 'The request was well-formed but conflicts with the current state.'
+ cause: 'The target resource is in a state incompatible with the request (e.g. a signature request is still being set up).'
+ remediation: 'Wait briefly and retry, or listen for a callback event confirming the resource is ready.'
+ retryable: conditional
+ exceeded_rate:
+ http_status: 429
+ summary: 'Your account''s API request rate limit has been exceeded.'
+ cause: 'Too many requests were sent within the rate-limit window for this request type.'
+ remediation: 'Pace requests using the X-RateLimit-* response headers and retry after the window resets.'
+ retryable: 'yes'
+ backoff: 'Honor X-Ratelimit-Reset (Unix epoch); otherwise exponential backoff with jitter. No Retry-After header is sent.'
+ unknown:
+ http_status: 500
+ summary: 'An unexpected error occurred.'
+ cause: 'An unhandled server-side error, or a status code without a more specific error_name.'
+ remediation: 'Retry transient failures; if it persists, contact support with the request details.'
+ retryable: conditional
+ backoff: 'For transient 5xx, retry with exponential backoff; otherwise do not retry.'
+ team_invite_failed:
+ http_status: 403
+ summary: 'The team invitation could not be completed.'
+ cause: 'The invitee already belongs to a team, or the invite is otherwise not permitted.'
+ remediation: 'Confirm the invitee is not already on a team before inviting.'
+ retryable: 'no'
+ max_faxes:
+ http_status: 429
+ summary: 'Too many fax transmissions are currently pending or transmitting.'
+ cause: 'The account has reached the limit of concurrent in-flight fax transmissions.'
+ remediation: 'Wait for outstanding transmissions to complete, then retry.'
+ retryable: 'yes'
+ backoff: 'Retry with exponential backoff once pending transmissions clear.'
+ invalid_recipient:
+ http_status: 400
+ summary: 'The recipient (fax number or email address) is invalid.'
+ cause: 'A recipient value did not pass validation.'
+ remediation: 'Correct the recipient value and resend.'
+ retryable: 'no'
+ signature_request_cancel_failed:
+ http_status: 400
+ summary: 'The signature request could not be cancelled.'
+ cause: 'The caller is not the requester, or the request is already fully executed/closed.'
+ remediation: 'Only the requester can cancel, and only before the request is fully executed.'
+ retryable: 'no'
+ signature_request_remove_failed:
+ http_status: 400
+ summary: 'Access to the signature request could not be removed.'
+ cause: 'The signature request has not yet been fully executed, so access cannot be revoked.'
+ remediation: 'Wait until all parties have signed, or call /signature_request/cancel to cancel incomplete requests instead.'
+ retryable: 'no'
+ maintenance:
+ http_status: 503
+ summary: 'The request could not be completed because the site is under maintenance.'
+ cause: 'The API is in a scheduled maintenance window.'
+ remediation: 'Retry once the maintenance window ends.'
+ retryable: 'yes'
+ backoff: 'Retry later with exponential backoff.'
+ method_not_supported:
+ http_status: 405
+ summary: 'The HTTP method is not supported for this endpoint.'
+ cause: 'The request used a verb the endpoint does not accept.'
+ remediation: 'Use the HTTP method documented for the endpoint.'
+ retryable: 'no'
+ invalid_reminder:
+ http_status: 400
+ summary: 'The signature request reminder was invalid.'
+ cause: 'A reminder was attempted against an ineligible request (e.g. embedded, closed, or expired).'
+ remediation: 'Only send reminders for eligible (non-embedded, open) signature requests.'
+ retryable: 'no'
+ unavailable:
+ http_status: 503
+ summary: 'The service is temporarily unavailable.'
+ cause: 'A downstream dependency or the service itself is temporarily unavailable.'
+ remediation: 'Retry later with exponential backoff.'
+ retryable: 'yes'
+ backoff: 'Retry later with exponential backoff and jitter.'
+ unprocessable_entity:
+ http_status: 422
+ summary: 'The request was understood but the target entity cannot be processed.'
+ cause: 'The resource is still being processed, or it is in an error state.'
+ remediation: 'If the resource is still processing, wait and retry; if it is in an error state, recreate/resend it instead of retrying.'
+ retryable: conditional
+ backoff: 'If still processing, retry with exponential backoff; if in an error state, do not retry.'
+ signature_request_expired:
+ http_status:
+ - 400
+ - 403
+ summary: 'The signature request has expired.'
+ cause: 'The operation targets a request whose expiration has passed. Most endpoints return 400; final-copy/download endpoints return 403.'
+ remediation: 'The request can no longer be acted upon; create a new signature request.'
+ retryable: 'no'
+ deleted:
+ http_status: 410
+ summary: 'The request was cancelled or deleted.'
+ cause: 'The resource has been cancelled or removed and is no longer available.'
+ remediation: 'Do not retry; the resource is permanently gone.'
+ retryable: 'no'
+x-oauth-error-codes:
+ invalid_grant:
+ http_status:
+ - 400
+ - 401
+ summary: 'The OAuth grant (authorization code or refresh token) is invalid or expired.'
+ cause: 'The code/token was already used, expired, or does not match the client.'
+ remediation: 'Re-initiate the OAuth flow to obtain a fresh authorization code.'
+ retryable: 'no'
+ invalid_client:
+ http_status: 400
+ summary: 'The OAuth client credentials are invalid.'
+ cause: 'The client_id or client_secret is unrecognized or incorrect.'
+ remediation: 'Verify the client_id and client_secret from the API app settings.'
+ retryable: 'no'
+ invalid_request:
+ http_status: 400
+ summary: 'The OAuth request is malformed or missing required parameters.'
+ cause: 'A required parameter is missing, or the request format is invalid.'
+ remediation: 'Check the request against the OAuth token endpoint documentation.'
+ retryable: 'no'
+ unauthorized_client:
+ http_status:
+ - 401
+ - 403
+ summary: 'The OAuth client is not authorized to perform this action.'
+ cause: 'The app has not been approved, or the action is outside the granted scopes.'
+ remediation: 'Ensure the app is approved and the required scopes are granted.'
+ retryable: 'no'
+ unsupported_grant_type:
+ http_status: 400
+ summary: 'The grant type is not supported.'
+ cause: 'The grant_type parameter value is not recognized.'
+ remediation: 'Use authorization_code or refresh_token as the grant_type.'
+ retryable: 'no'
+ payment_required:
+ http_status: 402
+ summary: 'The account requires a paid plan to use this OAuth app.'
+ cause: 'The authorizing account does not have a plan that supports this integration.'
+ remediation: 'Upgrade the account to a plan that includes OAuth app access.'
+ retryable: 'no'
+ addon_required:
+ http_status: 402
+ summary: 'An add-on is required to use this OAuth app.'
+ cause: 'The account plan does not include the add-on needed for this integration.'
+ remediation: 'Add the required add-on to the account subscription.'
+ retryable: 'no'
+ invalid_scope:
+ http_status: 400
+ summary: 'The requested OAuth scope is invalid.'
+ cause: 'The scope parameter contains values not permitted for the app.'
+ remediation: 'Request only scopes that the app is configured to use.'
+ retryable: 'no'
+ quota_reached:
+ http_status: 402
+ summary: 'The account has reached its usage quota for this OAuth app.'
+ cause: 'The authorizing account has exhausted its quota for the integration.'
+ remediation: 'Contact the app owner or upgrade the account quota.'
+ retryable: 'no'
+ server_error:
+ http_status: 500
+ summary: 'An internal server error occurred during OAuth processing.'
+ cause: 'An unexpected error on the server side while handling the OAuth request.'
+ remediation: 'Retry the request; if it persists, contact support.'
+ retryable: 'yes'
+ backoff: 'Retry with exponential backoff.'
+ temporary_unavailable:
+ http_status: 503
+ summary: 'The OAuth service is temporarily unavailable.'
+ cause: 'The service is under maintenance or experiencing temporary issues.'
+ remediation: 'Retry after a short delay.'
+ retryable: 'yes'
+ backoff: 'Retry with exponential backoff.'
+x-error-events:
+ signature_request_invalid:
+ event_type: signature_request_invalid
+ delivery: webhook
+ summary: 'Asynchronous error while processing a signature request.'
+ cause: 'A signature request could not be processed (e.g. invalid tags, fields, or merge data).'
+ remediation: 'Inspect event.event_metadata.event_message in the callback, correct the request, and resend.'
+ retryable: conditional
+ unknown_error:
+ event_type: unknown_error
+ delivery: webhook
+ summary: 'An unspecified asynchronous processing error occurred.'
+ cause: 'An unexpected error occurred while processing the request asynchronously.'
+ remediation: 'Check the request status in the API dashboard; retry or contact support if it persists.'
+ retryable: conditional
+ file_error:
+ event_type: file_error
+ delivery: webhook
+ summary: 'Asynchronous error while processing an uploaded file.'
+ cause: 'A file attached to a request could not be processed.'
+ remediation: 'Resend the request with a supported, non-corrupt file.'
+ retryable: conditional
+ template_error:
+ event_type: template_error
+ delivery: webhook
+ summary: 'Asynchronous error while creating a template.'
+ cause: 'Template file processing failed (e.g. unsupported or corrupt file).'
+ remediation: 'Recreate the template with a valid file; check status in the API dashboard.'
+ retryable: conditional
+ sign_url_invalid:
+ event_type: sign_url_invalid
+ delivery: webhook
+ summary: 'An embedded signing URL has expired or become invalid.'
+ cause: 'The embedded sign_url is no longer valid (e.g. expired).'
+ remediation: 'Generate a fresh embedded sign_url via the embedded sign URL endpoint.'
+ retryable: 'yes'
diff --git a/sdks/dotnet/docs/ErrorResponseError.md b/sdks/dotnet/docs/ErrorResponseError.md
index 13dacc1bf..17a09526f 100644
--- a/sdks/dotnet/docs/ErrorResponseError.md
+++ b/sdks/dotnet/docs/ErrorResponseError.md
@@ -5,7 +5,7 @@ Contains information about an error that occurred.
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
-**ErrorMsg** | **string** | Message describing an error. | **ErrorName** | **string** | Name of the error. | **ErrorPath** | **string** | Path at which an error occurred. | [optional]
+**ErrorMsg** | **string** | Message describing an error. | **ErrorName** | **string** | Name of the error. See the `x-error-codes` catalog in openapi file for a complete list of possible error codes with detailed information including HTTP status codes, causes, remediation steps, and retry guidance. | **ErrorPath** | **string** | Path at which an error occurred. | [optional]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/sdks/dotnet/src/Dropbox.Sign/Model/ErrorResponseError.cs b/sdks/dotnet/src/Dropbox.Sign/Model/ErrorResponseError.cs
index f1b9ca907..aace1465b 100644
--- a/sdks/dotnet/src/Dropbox.Sign/Model/ErrorResponseError.cs
+++ b/sdks/dotnet/src/Dropbox.Sign/Model/ErrorResponseError.cs
@@ -43,7 +43,7 @@ protected ErrorResponseError() { }
///
/// Message describing an error. (required).
/// Path at which an error occurred..
- /// Name of the error. (required).
+ /// Name of the error. See the `x-error-codes` catalog in openapi file for a complete list of possible error codes with detailed information including HTTP status codes, causes, remediation steps, and retry guidance. (required).
public ErrorResponseError(string errorMsg = default(string), string errorPath = default(string), string errorName = default(string))
{
@@ -86,9 +86,9 @@ public static ErrorResponseError Init(string jsonData)
public string ErrorMsg { get; set; }
///
- /// Name of the error.
+ /// Name of the error. See the `x-error-codes` catalog in openapi file for a complete list of possible error codes with detailed information including HTTP status codes, causes, remediation steps, and retry guidance.
///
- /// Name of the error.
+ /// Name of the error. See the `x-error-codes` catalog in openapi file for a complete list of possible error codes with detailed information including HTTP status codes, causes, remediation steps, and retry guidance.
[DataMember(Name = "error_name", IsRequired = true, EmitDefaultValue = true)]
public string ErrorName { get; set; }
diff --git a/sdks/java-v1/docs/ErrorResponseError.md b/sdks/java-v1/docs/ErrorResponseError.md
index 656aa5c7f..9db1a2dd3 100644
--- a/sdks/java-v1/docs/ErrorResponseError.md
+++ b/sdks/java-v1/docs/ErrorResponseError.md
@@ -9,7 +9,7 @@ Contains information about an error that occurred.
| Name | Type | Description | Notes |
|------------ | ------------- | ------------- | -------------|
| `errorMsg`*_required_ | ```String``` | Message describing an error. | |
-| `errorName`*_required_ | ```String``` | Name of the error. | |
+| `errorName`*_required_ | ```String``` | Name of the error. See the `x-error-codes` catalog in openapi file for a complete list of possible error codes with detailed information including HTTP status codes, causes, remediation steps, and retry guidance. | |
| `errorPath` | ```String``` | Path at which an error occurred. | |
diff --git a/sdks/java-v1/src/main/java/com/dropbox/sign/model/ErrorResponseError.java b/sdks/java-v1/src/main/java/com/dropbox/sign/model/ErrorResponseError.java
index e9624c65f..dfe621edd 100644
--- a/sdks/java-v1/src/main/java/com/dropbox/sign/model/ErrorResponseError.java
+++ b/sdks/java-v1/src/main/java/com/dropbox/sign/model/ErrorResponseError.java
@@ -88,7 +88,9 @@ public ErrorResponseError errorName(@javax.annotation.Nonnull String errorName)
}
/**
- * Name of the error.
+ * Name of the error. See the `x-error-codes` catalog in openapi file for a complete
+ * list of possible error codes with detailed information including HTTP status codes, causes,
+ * remediation steps, and retry guidance.
*
* @return errorName
*/
diff --git a/sdks/java-v2/docs/ErrorResponseError.md b/sdks/java-v2/docs/ErrorResponseError.md
index 656aa5c7f..9db1a2dd3 100644
--- a/sdks/java-v2/docs/ErrorResponseError.md
+++ b/sdks/java-v2/docs/ErrorResponseError.md
@@ -9,7 +9,7 @@ Contains information about an error that occurred.
| Name | Type | Description | Notes |
|------------ | ------------- | ------------- | -------------|
| `errorMsg`*_required_ | ```String``` | Message describing an error. | |
-| `errorName`*_required_ | ```String``` | Name of the error. | |
+| `errorName`*_required_ | ```String``` | Name of the error. See the `x-error-codes` catalog in openapi file for a complete list of possible error codes with detailed information including HTTP status codes, causes, remediation steps, and retry guidance. | |
| `errorPath` | ```String``` | Path at which an error occurred. | |
diff --git a/sdks/java-v2/src/main/java/com/dropbox/sign/model/ErrorResponseError.java b/sdks/java-v2/src/main/java/com/dropbox/sign/model/ErrorResponseError.java
index af87ec4aa..9398b0489 100644
--- a/sdks/java-v2/src/main/java/com/dropbox/sign/model/ErrorResponseError.java
+++ b/sdks/java-v2/src/main/java/com/dropbox/sign/model/ErrorResponseError.java
@@ -101,7 +101,7 @@ public ErrorResponseError errorName(@jakarta.annotation.Nonnull String errorName
}
/**
- * Name of the error.
+ * Name of the error. See the `x-error-codes` catalog in openapi file for a complete list of possible error codes with detailed information including HTTP status codes, causes, remediation steps, and retry guidance.
* @return errorName
*/
@jakarta.annotation.Nonnull
diff --git a/sdks/node/docs/model/ErrorResponseError.md b/sdks/node/docs/model/ErrorResponseError.md
index 38ca84b82..d6f63922f 100644
--- a/sdks/node/docs/model/ErrorResponseError.md
+++ b/sdks/node/docs/model/ErrorResponseError.md
@@ -7,7 +7,7 @@ Contains information about an error that occurred.
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
| `errorMsg`*_required_ | ```string``` | Message describing an error. | |
-| `errorName`*_required_ | ```string``` | Name of the error. | |
+| `errorName`*_required_ | ```string``` | Name of the error. See the `x-error-codes` catalog in openapi file for a complete list of possible error codes with detailed information including HTTP status codes, causes, remediation steps, and retry guidance. | |
| `errorPath` | ```string``` | Path at which an error occurred. | |
[[Back to Model list]](../../README.md#models) [[Back to API list]](../../README.md#endpoints) [[Back to README]](../../README.md)
diff --git a/sdks/node/model/errorResponseError.ts b/sdks/node/model/errorResponseError.ts
index 577bb5dd5..a039029d6 100644
--- a/sdks/node/model/errorResponseError.ts
+++ b/sdks/node/model/errorResponseError.ts
@@ -33,7 +33,7 @@ export class ErrorResponseError {
*/
"errorMsg": string;
/**
- * Name of the error.
+ * Name of the error. See the `x-error-codes` catalog in openapi file for a complete list of possible error codes with detailed information including HTTP status codes, causes, remediation steps, and retry guidance.
*/
"errorName": string;
/**
diff --git a/sdks/php/docs/Model/ErrorResponseError.md b/sdks/php/docs/Model/ErrorResponseError.md
index b600e94c8..09b0a2ac8 100644
--- a/sdks/php/docs/Model/ErrorResponseError.md
+++ b/sdks/php/docs/Model/ErrorResponseError.md
@@ -7,7 +7,7 @@ Contains information about an error that occurred.
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
| `error_msg`*_required_ | ```string``` | Message describing an error. | |
-| `error_name`*_required_ | ```string``` | Name of the error. | |
+| `error_name`*_required_ | ```string``` | Name of the error. See the `x-error-codes` catalog in openapi file for a complete list of possible error codes with detailed information including HTTP status codes, causes, remediation steps, and retry guidance. | |
| `error_path` | ```string``` | Path at which an error occurred. | |
[[Back to Model list]](../../README.md#models) [[Back to API list]](../../README.md#endpoints) [[Back to README]](../../README.md)
diff --git a/sdks/php/src/Model/ErrorResponseError.php b/sdks/php/src/Model/ErrorResponseError.php
index 65c09c1dc..527d8c0dc 100644
--- a/sdks/php/src/Model/ErrorResponseError.php
+++ b/sdks/php/src/Model/ErrorResponseError.php
@@ -358,7 +358,7 @@ public function getErrorName()
/**
* Sets error_name
*
- * @param string $error_name name of the error
+ * @param string $error_name Name of the error. See the `x-error-codes` catalog in openapi file for a complete list of possible error codes with detailed information including HTTP status codes, causes, remediation steps, and retry guidance.
*
* @return self
*/
diff --git a/sdks/python/docs/ErrorResponseError.md b/sdks/python/docs/ErrorResponseError.md
index f6052d69f..3ed2233f1 100644
--- a/sdks/python/docs/ErrorResponseError.md
+++ b/sdks/python/docs/ErrorResponseError.md
@@ -6,7 +6,7 @@ Contains information about an error that occurred.
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
| `error_msg`*_required_ | ```str``` | Message describing an error. | |
-| `error_name`*_required_ | ```str``` | Name of the error. | |
+| `error_name`*_required_ | ```str``` | Name of the error. See the `x-error-codes` catalog in openapi file for a complete list of possible error codes with detailed information including HTTP status codes, causes, remediation steps, and retry guidance. | |
| `error_path` | ```str``` | Path at which an error occurred. | |
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/sdks/python/dropbox_sign/models/error_response_error.py b/sdks/python/dropbox_sign/models/error_response_error.py
index 4f17bb6ee..8939b3297 100644
--- a/sdks/python/dropbox_sign/models/error_response_error.py
+++ b/sdks/python/dropbox_sign/models/error_response_error.py
@@ -32,7 +32,9 @@ class ErrorResponseError(BaseModel):
""" # noqa: E501
error_msg: StrictStr = Field(description="Message describing an error.")
- error_name: StrictStr = Field(description="Name of the error.")
+ error_name: StrictStr = Field(
+ description="Name of the error. See the `x-error-codes` catalog in openapi file for a complete list of possible error codes with detailed information including HTTP status codes, causes, remediation steps, and retry guidance."
+ )
error_path: Optional[StrictStr] = Field(
default=None, description="Path at which an error occurred."
)
diff --git a/sdks/ruby/docs/ErrorResponseError.md b/sdks/ruby/docs/ErrorResponseError.md
index e18e4037e..21ef5eb0c 100644
--- a/sdks/ruby/docs/ErrorResponseError.md
+++ b/sdks/ruby/docs/ErrorResponseError.md
@@ -7,6 +7,6 @@ Contains information about an error that occurred.
| Name | Type | Description | Notes |
| ---- | ---- | ----------- | ----- |
| `error_msg`*_required_ | ```String``` | Message describing an error. | |
-| `error_name`*_required_ | ```String``` | Name of the error. | |
+| `error_name`*_required_ | ```String``` | Name of the error. See the `x-error-codes` catalog in openapi file for a complete list of possible error codes with detailed information including HTTP status codes, causes, remediation steps, and retry guidance. | |
| `error_path` | ```String``` | Path at which an error occurred. | |
diff --git a/sdks/ruby/lib/dropbox-sign/models/error_response_error.rb b/sdks/ruby/lib/dropbox-sign/models/error_response_error.rb
index b1b85ff45..baf8d72d1 100644
--- a/sdks/ruby/lib/dropbox-sign/models/error_response_error.rb
+++ b/sdks/ruby/lib/dropbox-sign/models/error_response_error.rb
@@ -23,7 +23,7 @@ class ErrorResponseError
# @return [String]
attr_accessor :error_msg
- # Name of the error.
+ # Name of the error. See the `x-error-codes` catalog in openapi file for a complete list of possible error codes with detailed information including HTTP status codes, causes, remediation steps, and retry guidance.
# @return [String]
attr_accessor :error_name
diff --git a/translations/en.yaml b/translations/en.yaml
index f32507e4f..730b48fca 100644
--- a/translations/en.yaml
+++ b/translations/en.yaml
@@ -1727,7 +1727,7 @@
"ErrorResponseError::DESCRIPTION": Contains information about an error that occurred.
"ErrorResponseError::ERROR_MSG": Message describing an error.
"ErrorResponseError::ERROR_PATH": Path at which an error occurred.
-"ErrorResponseError::ERROR_NAME": Name of the error.
+"ErrorResponseError::ERROR_NAME": Name of the error. See the `x-error-codes` catalog in openapi file for a complete list of possible error codes with detailed information including HTTP status codes, causes, remediation steps, and retry guidance.
"Error::400": Error 400 bad_request
"Error::401": Error 401 unauthorized
@@ -1887,3 +1887,167 @@
"accountUpdateEventCallback::SEO::DESCRIPTION": "The Dropbox Sign API allows you to build with a wide range of tools. To find out how to consume Dropbox Sign Events at the account level, click here."
"appCreateEventCallback::SEO::TITLE": "App Callbacks | API Documentation | Dropbox Sign for Developers"
"appCreateEventCallback::SEO::DESCRIPTION": "The Dropbox Sign API allows you to build with a wide range of tools. To find out how to consume Dropbox Sign Events at the App level, click here."
+
+##################
+# Error Catalog #
+##################
+
+"ErrorCatalog::bad_request::SUMMARY": "The request contained invalid or malformed parameters."
+"ErrorCatalog::bad_request::CAUSE": "A parameter failed validation, or the request body was malformed."
+"ErrorCatalog::bad_request::REMEDIATION": "Inspect error_msg and error_path, correct the offending parameter, and resend."
+
+"ErrorCatalog::unauthorized::SUMMARY": "The credentials supplied are missing or invalid."
+"ErrorCatalog::unauthorized::CAUSE": "Missing, malformed, or invalid API key or OAuth access token."
+"ErrorCatalog::unauthorized::REMEDIATION": "Verify the API key or OAuth token and the Authorization header, then retry."
+
+"ErrorCatalog::payment_required::SUMMARY": "The account must be credited or upgraded to perform this action."
+"ErrorCatalog::payment_required::CAUSE": "The action requires a paid plan, additional quota, or API credits."
+"ErrorCatalog::payment_required::REMEDIATION": "Upgrade the plan or add the required credits/quota, then retry."
+
+"ErrorCatalog::forbidden::SUMMARY": "The action is not allowed for these credentials or in the current context."
+"ErrorCatalog::forbidden::CAUSE": "The authenticated account lacks access to the resource or operation."
+"ErrorCatalog::forbidden::REMEDIATION": "Confirm the account has access to the resource and the required permissions."
+
+"ErrorCatalog::not_found::SUMMARY": "Nothing matches the requested resource."
+"ErrorCatalog::not_found::CAUSE": "The resource id does not exist or is not visible to this account."
+"ErrorCatalog::not_found::REMEDIATION": "Verify the id and that the resource belongs to the authenticated account."
+
+"ErrorCatalog::conflict::SUMMARY": "The request was well-formed but conflicts with the current state."
+"ErrorCatalog::conflict::CAUSE": "The target resource is in a state incompatible with the request (e.g. a signature request is still being set up)."
+"ErrorCatalog::conflict::REMEDIATION": "Wait briefly and retry, or listen for a callback event confirming the resource is ready."
+
+"ErrorCatalog::exceeded_rate::SUMMARY": "Your account's API request rate limit has been exceeded."
+"ErrorCatalog::exceeded_rate::CAUSE": "Too many requests were sent within the rate-limit window for this request type."
+"ErrorCatalog::exceeded_rate::REMEDIATION": "Pace requests using the X-RateLimit-* response headers and retry after the window resets."
+"ErrorCatalog::exceeded_rate::BACKOFF": "Honor X-Ratelimit-Reset (Unix epoch); otherwise exponential backoff with jitter. No Retry-After header is sent."
+
+"ErrorCatalog::unknown::SUMMARY": "An unexpected error occurred."
+"ErrorCatalog::unknown::CAUSE": "An unhandled server-side error, or a status code without a more specific error_name."
+"ErrorCatalog::unknown::REMEDIATION": "Retry transient failures; if it persists, contact support with the request details."
+"ErrorCatalog::unknown::BACKOFF": "For transient 5xx, retry with exponential backoff; otherwise do not retry."
+
+"ErrorCatalog::team_invite_failed::SUMMARY": "The team invitation could not be completed."
+"ErrorCatalog::team_invite_failed::CAUSE": "The invitee already belongs to a team, or the invite is otherwise not permitted."
+"ErrorCatalog::team_invite_failed::REMEDIATION": "Confirm the invitee is not already on a team before inviting."
+
+"ErrorCatalog::max_faxes::SUMMARY": "Too many fax transmissions are currently pending or transmitting."
+"ErrorCatalog::max_faxes::CAUSE": "The account has reached the limit of concurrent in-flight fax transmissions."
+"ErrorCatalog::max_faxes::REMEDIATION": "Wait for outstanding transmissions to complete, then retry."
+"ErrorCatalog::max_faxes::BACKOFF": "Retry with exponential backoff once pending transmissions clear."
+
+"ErrorCatalog::invalid_recipient::SUMMARY": "The recipient (fax number or email address) is invalid."
+"ErrorCatalog::invalid_recipient::CAUSE": "A recipient value did not pass validation."
+"ErrorCatalog::invalid_recipient::REMEDIATION": "Correct the recipient value and resend."
+
+"ErrorCatalog::signature_request_cancel_failed::SUMMARY": "The signature request could not be cancelled."
+"ErrorCatalog::signature_request_cancel_failed::CAUSE": "The caller is not the requester, or the request is already fully executed/closed."
+"ErrorCatalog::signature_request_cancel_failed::REMEDIATION": "Only the requester can cancel, and only before the request is fully executed."
+
+"ErrorCatalog::signature_request_remove_failed::SUMMARY": "Access to the signature request could not be removed."
+"ErrorCatalog::signature_request_remove_failed::CAUSE": "The signature request has not yet been fully executed, so access cannot be revoked."
+"ErrorCatalog::signature_request_remove_failed::REMEDIATION": "Wait until all parties have signed, or call /signature_request/cancel to cancel incomplete requests instead."
+
+"ErrorCatalog::maintenance::SUMMARY": "The request could not be completed because the site is under maintenance."
+"ErrorCatalog::maintenance::CAUSE": "The API is in a scheduled maintenance window."
+"ErrorCatalog::maintenance::REMEDIATION": "Retry once the maintenance window ends."
+"ErrorCatalog::maintenance::BACKOFF": "Retry later with exponential backoff."
+
+"ErrorCatalog::deleted::SUMMARY": "The request was cancelled or deleted."
+"ErrorCatalog::deleted::CAUSE": "The resource has been cancelled or removed and is no longer available."
+"ErrorCatalog::deleted::REMEDIATION": "Do not retry; the resource is permanently gone."
+
+"ErrorCatalog::method_not_supported::SUMMARY": "The HTTP method is not supported for this endpoint."
+"ErrorCatalog::method_not_supported::CAUSE": "The request used a verb the endpoint does not accept."
+"ErrorCatalog::method_not_supported::REMEDIATION": "Use the HTTP method documented for the endpoint."
+
+"ErrorCatalog::invalid_reminder::SUMMARY": "The signature request reminder was invalid."
+"ErrorCatalog::invalid_reminder::CAUSE": "A reminder was attempted against an ineligible request (e.g. embedded, closed, or expired)."
+"ErrorCatalog::invalid_reminder::REMEDIATION": "Only send reminders for eligible (non-embedded, open) signature requests."
+
+"ErrorCatalog::unavailable::SUMMARY": "The service is temporarily unavailable."
+"ErrorCatalog::unavailable::CAUSE": "A downstream dependency or the service itself is temporarily unavailable."
+"ErrorCatalog::unavailable::REMEDIATION": "Retry later with exponential backoff."
+"ErrorCatalog::unavailable::BACKOFF": "Retry later with exponential backoff and jitter."
+
+"ErrorCatalog::unprocessable_entity::SUMMARY": "The request was understood but the target entity cannot be processed."
+"ErrorCatalog::unprocessable_entity::CAUSE": "The resource is still being processed, or it is in an error state."
+"ErrorCatalog::unprocessable_entity::REMEDIATION": "If the resource is still processing, wait and retry; if it is in an error state, recreate/resend it instead of retrying."
+"ErrorCatalog::unprocessable_entity::BACKOFF": "If still processing, retry with exponential backoff; if in an error state, do not retry."
+
+"ErrorCatalog::signature_request_expired::SUMMARY": "The signature request has expired."
+"ErrorCatalog::signature_request_expired::CAUSE": "The operation targets a request whose expiration has passed. Most endpoints return 400; final-copy/download endpoints return 403."
+"ErrorCatalog::signature_request_expired::REMEDIATION": "The request can no longer be acted upon; create a new signature request."
+
+########################
+# OAuth Error Catalog #
+########################
+
+"OAuthErrorCatalog::invalid_grant::SUMMARY": "The OAuth grant (authorization code or refresh token) is invalid or expired."
+"OAuthErrorCatalog::invalid_grant::CAUSE": "The code/token was already used, expired, or does not match the client."
+"OAuthErrorCatalog::invalid_grant::REMEDIATION": "Re-initiate the OAuth flow to obtain a fresh authorization code."
+
+"OAuthErrorCatalog::invalid_client::SUMMARY": "The OAuth client credentials are invalid."
+"OAuthErrorCatalog::invalid_client::CAUSE": "The client_id or client_secret is unrecognized or incorrect."
+"OAuthErrorCatalog::invalid_client::REMEDIATION": "Verify the client_id and client_secret from the API app settings."
+
+"OAuthErrorCatalog::invalid_request::SUMMARY": "The OAuth request is malformed or missing required parameters."
+"OAuthErrorCatalog::invalid_request::CAUSE": "A required parameter is missing, or the request format is invalid."
+"OAuthErrorCatalog::invalid_request::REMEDIATION": "Check the request against the OAuth token endpoint documentation."
+
+"OAuthErrorCatalog::unauthorized_client::SUMMARY": "The OAuth client is not authorized to perform this action."
+"OAuthErrorCatalog::unauthorized_client::CAUSE": "The app has not been approved, or the action is outside the granted scopes."
+"OAuthErrorCatalog::unauthorized_client::REMEDIATION": "Ensure the app is approved and the required scopes are granted."
+
+"OAuthErrorCatalog::unsupported_grant_type::SUMMARY": "The grant type is not supported."
+"OAuthErrorCatalog::unsupported_grant_type::CAUSE": "The grant_type parameter value is not recognized."
+"OAuthErrorCatalog::unsupported_grant_type::REMEDIATION": "Use authorization_code or refresh_token as the grant_type."
+
+"OAuthErrorCatalog::payment_required::SUMMARY": "The account requires a paid plan to use this OAuth app."
+"OAuthErrorCatalog::payment_required::CAUSE": "The authorizing account does not have a plan that supports this integration."
+"OAuthErrorCatalog::payment_required::REMEDIATION": "Upgrade the account to a plan that includes OAuth app access."
+
+"OAuthErrorCatalog::addon_required::SUMMARY": "An add-on is required to use this OAuth app."
+"OAuthErrorCatalog::addon_required::CAUSE": "The account plan does not include the add-on needed for this integration."
+"OAuthErrorCatalog::addon_required::REMEDIATION": "Add the required add-on to the account subscription."
+
+"OAuthErrorCatalog::invalid_scope::SUMMARY": "The requested OAuth scope is invalid."
+"OAuthErrorCatalog::invalid_scope::CAUSE": "The scope parameter contains values not permitted for the app."
+"OAuthErrorCatalog::invalid_scope::REMEDIATION": "Request only scopes that the app is configured to use."
+
+"OAuthErrorCatalog::quota_reached::SUMMARY": "The account has reached its usage quota for this OAuth app."
+"OAuthErrorCatalog::quota_reached::CAUSE": "The authorizing account has exhausted its quota for the integration."
+"OAuthErrorCatalog::quota_reached::REMEDIATION": "Contact the app owner or upgrade the account quota."
+
+"OAuthErrorCatalog::server_error::SUMMARY": "An internal server error occurred during OAuth processing."
+"OAuthErrorCatalog::server_error::CAUSE": "An unexpected error on the server side while handling the OAuth request."
+"OAuthErrorCatalog::server_error::REMEDIATION": "Retry the request; if it persists, contact support."
+"OAuthErrorCatalog::server_error::BACKOFF": "Retry with exponential backoff."
+
+"OAuthErrorCatalog::temporary_unavailable::SUMMARY": "The OAuth service is temporarily unavailable."
+"OAuthErrorCatalog::temporary_unavailable::CAUSE": "The service is under maintenance or experiencing temporary issues."
+"OAuthErrorCatalog::temporary_unavailable::REMEDIATION": "Retry after a short delay."
+"OAuthErrorCatalog::temporary_unavailable::BACKOFF": "Retry with exponential backoff."
+
+#############################
+# Webhook Error Events #
+#############################
+
+"ErrorEventCatalog::signature_request_invalid::SUMMARY": "Asynchronous error while processing a signature request."
+"ErrorEventCatalog::signature_request_invalid::CAUSE": "A signature request could not be processed (e.g. invalid tags, fields, or merge data)."
+"ErrorEventCatalog::signature_request_invalid::REMEDIATION": "Inspect event.event_metadata.event_message in the callback, correct the request, and resend."
+
+"ErrorEventCatalog::unknown_error::SUMMARY": "An unspecified asynchronous processing error occurred."
+"ErrorEventCatalog::unknown_error::CAUSE": "An unexpected error occurred while processing the request asynchronously."
+"ErrorEventCatalog::unknown_error::REMEDIATION": "Check the request status in the API dashboard; retry or contact support if it persists."
+
+"ErrorEventCatalog::file_error::SUMMARY": "Asynchronous error while processing an uploaded file."
+"ErrorEventCatalog::file_error::CAUSE": "A file attached to a request could not be processed."
+"ErrorEventCatalog::file_error::REMEDIATION": "Resend the request with a supported, non-corrupt file."
+
+"ErrorEventCatalog::template_error::SUMMARY": "Asynchronous error while creating a template."
+"ErrorEventCatalog::template_error::CAUSE": "Template file processing failed (e.g. unsupported or corrupt file)."
+"ErrorEventCatalog::template_error::REMEDIATION": "Recreate the template with a valid file; check status in the API dashboard."
+
+"ErrorEventCatalog::sign_url_invalid::SUMMARY": "An embedded signing URL has expired or become invalid."
+"ErrorEventCatalog::sign_url_invalid::CAUSE": "The embedded sign_url is no longer valid (e.g. expired)."
+"ErrorEventCatalog::sign_url_invalid::REMEDIATION": "Generate a fresh embedded sign_url via the embedded sign URL endpoint."