Skip to content

Errors

Errors use conventional HTTP status codes and always have the same body:

{
"error": {
"code": "expiry_too_long",
"message": "The expiration cannot exceed 90 days",
"details": { "maxDays": 90 }
}
}
Field Description
code Stable, machine-readable, snake_case. Branch on it. New codes may be added over time.
message Human-readable explanation in English, for logs. It may change: do not parse it.
details Optional object with context (e.g. issues of a validation error, orgId of consent_required).
Status Meaning Retry?
400 The request does not match the schema: invalid_request, with details.issues. No, fix the request.
401 Missing, invalid or expired credentials. Once, with a fresh token.
403 Authenticated but not allowed: missing permission, feature disabled, quota reached, IP not allowed… No.
404 The resource does not exist or is not visible to the caller. No.
409 Conflict with the current state (e.g. canceling a completed request). Re-read the resource first.
422 Business rule violation (e.g. a signer phone is required for SMS codes). No, fix the request.
429 Rate limit exceeded: rate_limited. Yes, after Retry-After seconds.
5xx Unexpected error (internal_error) or unavailability. Yes, with exponential backoff.

A 400 invalid_request lists every problem found in the body, query or path:

{
"error": {
"code": "invalid_request",
"message": "Invalid request",
"details": {
"issues": [
{ "code": "invalid_type", "path": ["signers", 0, "email"], "message": "Invalid input: expected string, received undefined" },
{ "code": "too_big", "path": ["title"], "message": "Too big: expected string to have <=200 characters" }
]
}
}
}
Terminal window
curl -s -w '\n%{http_code}\n' "$MLT_API_URL/v1/signature-requests/0192f3a1-7c2e-7b4d-9a61-400000000999" \
-H "Authorization: Bearer $MLT_TOKEN"
# {"error":{"code":"signature_request_not_found","message":"signature_request not found","details":{"id":"…"}}}
# 404

Generated from the API source: every code below can be returned by the public API. Each operation of the API reference lists the codes it can return, with examples.

General

CodeStatusMeaning
invalid_request422The request does not match the schema. `details.issues` lists each problem (path, message).
bad_request400The request body is not valid JSON (it cannot be parsed).
payload_too_large413The request body exceeds the size limit.
already_exists409A resource with the same unique key already exists.
still_referenced409The resource is still referenced by another resource.
concurrent_update409Concurrent update of the same resource: retry the request.
precondition_failed412The resource changed since it was read (`If-Match` / `version` is stale): read it again, then retry.
idempotency_key_reused422The `Idempotency-Key` was already used (within 24 hours) for a different request: use a new key.
idempotency_in_progress409A request with the same `Idempotency-Key` is still running: retry a little later.
idempotency_outcome_unknown409The request with the same `Idempotency-Key` was interrupted and its outcome is unknown (it is never run twice): check the resource, then retry with a new key.
invalid_reference422A referenced resource does not exist.
invalid_input422A value has an invalid format or is out of range.
timeout503The request took too long and was canceled. Retry later.
forbidden403The caller can see the resource but lacks the permission for this action.
feature_disabled403The feature (signature, registered mail, tasks) is not enabled for this entity.
quota_exceeded403The quota of the organization or entity is reached and set to block (see the `options` endpoints).
not_found404Unknown route.
entity_not_found404The entity does not exist or the caller has no access to it.
invalid_page_token422The `pageToken` is malformed or does not belong to this list.
invalid_contact422A linked `contactId` is not visible to the caller or does not belong to the resource entity.
invalid_node_path422Internal node reference is invalid.
rate_limited429Too many requests for this client in the current minute. Wait `Retry-After` seconds.
internal_error500Unexpected error. Retry later; contact support with the time of the call if it persists.

Authentication

CodeStatusMeaning
unauthenticated401Missing or malformed `Authorization: Bearer <token>` header.
invalid_token401The token is invalid, expired, or was requested without the API audience scope.
unknown_issuer401The token was issued by an identity instance that is not an active workspace.
api_key_revoked401The API key was revoked.
api_key_expired401The API key reached its expiry date.
no_account403The token is valid but its subject has no account (or service account) in this workspace.
ip_not_allowed403The API key has an IP allowlist and the request comes from another address.
humans_only403Managing integrations (API keys, webhooks, grants) is reserved to people signed in to the app.
unknown_client401The token was obtained by an OAuth client that is not a registered MyCLM client (the MyCLM apps, an API key, a partner application).

Partner applications

CodeStatusMeaning
machine_credentials_required403Provisioning requires the machine credentials (`client_credentials`) of the partner application, not a delegated token.
partner_app_revoked401The partner application was revoked.
insufficient_scope403The partner application does not have the scope required by this operation.
consent_required403The partner application has no access: no active grant on this organization (`details.orgId`), or, with a delegated token, the person has not authorized the application there. Send the person to `details.authorizeUrl` (delegated tokens).
partner_app_only403Reserved to partner applications.
role_escalation403The role cannot be given: partner applications cannot grant `owner`, and nobody can grant more rights than their own.
external_id_required422An `externalId` is required to look up this resource.
external_id_taken409This `externalId` is already used by another resource of the same kind.
invalid_grant422The authorization code is invalid, expired, already used, or the `redirectUri` / `codeVerifier` does not match.
grant_revoked409The grant behind the authorization code was revoked in the meantime.

Signature

CodeStatusMeaning
signature_request_not_found404The signature request does not exist or the caller cannot see it.
file_required422The multipart `file` part is missing.
file_too_large422The PDF exceeds 15 MB.
invalid_pdf422The file is not a readable PDF.
signers_required422At least one signer is required.
duplicate_signer_email422Two signers have the same email address.
invalid_expiration422The expiry date is invalid.
expiry_too_long422`expiresInDays` is above the maximum allowed by the entity settings.
vendor_not_allowed422The vendor is not allowed by the entity settings (also used by registered mail).
vendor_unavailable422The vendor is allowed but not configured on the platform.
vendor_unsupported_level422The vendor cannot deliver the requested eIDAS level.
eidas_level_not_allowed422The eIDAS level is not allowed by the entity settings.
auth_method_not_allowed422The signer authentication method is not allowed (or weaker than the required one).
signing_order_not_allowed422`signingOrder` can only be chosen when the entity lets the sender choose.
external_signers_not_allowed422The entity only allows signers from the organization.
handwritten_mention_requires_agency422A handwritten mention is drawn on site before sending: only for a signer who signs in agency (fields, participants and sending).
handwritten_mention_drawing_required422A handwritten mention has no drawing yet (`details.fieldIds`, `details.participantIds`): have it drawn before sending.
document_already_signed422The document already carries a digital signature: handwritten mentions cannot be burned into it (`details.documentId`).
signature_field_not_found404No handwritten mention with this id in the signature request.
notary_not_allowed422Notary participants are disabled by the entity settings.
signer_phone_required422A phone number (E.164) is required for `sms_otp` authentication.
signature_request_not_cancelable409Only requests waiting for signatures can be canceled.
signature_request_completed409The request is already completed.
signature_request_declined409The request was declined by a signer.
signature_request_canceled409The request was canceled.
signature_request_expired409The request expired.
signature_request_not_completed409The signed document exists only once the request is completed.
signed_document_not_available409The signed document is not available yet.
document_purged409The document was deleted by the retention policy (metadata and proof are kept).
document_archived409The document was archived by the retention policy.
signature_vendor_missing409The vendor of this request is no longer configured.

Registered mail

CodeStatusMeaning
registered_mail_not_found404The registered mail does not exist or the caller cannot see it.
registered_mail_item_not_found404Unknown item for this registered mail.
registered_mail_attachment_not_found404Unknown attachment for this registered mail.
registered_mail_proof_not_found404This proof is not available (yet) for the item.
recipient_update_not_found404Unknown recipient email change request.
sender_account_not_found404The sender account does not exist or the caller cannot see it.
subject_required422The subject is required.
subject_too_long422The subject is too long for the vendor.
recipients_required422At least one recipient is required to send.
too_many_recipients422Too many recipients (max 50).
too_many_followers422Too many followers (max 20).
duplicate_recipient_email422Two recipients have the same email address.
invalid_recipient422A recipient is incomplete.
recipient_company_required422Professional recipients need a company name.
sender_account_required422A verified sender account is required to send.
invalid_sender_account422The sender account does not belong to this entity.
sender_account_not_verified422The sender account is not verified at the vendor yet.
sender_account_not_linked422The sender account is not linked to a vendor account.
sender_account_vendor_mismatch422The sender account belongs to another vendor.
sender_company_required422Professional sender accounts need a company name.
sender_label_required422The sender account label is required.
reference_required422The entity requires a `reference` on every registered mail.
type_not_allowed422The registered mail type is not allowed by the entity settings.
attachments_limit_exceeded422Too many attachments, or total size above the entity limit.
registered_mail_already_sent409The mail was already sent with another idempotency key, or is no longer a draft.
registered_mail_canceled409The registered mail was canceled.
registered_mail_not_cancelable409Only drafts can be canceled.
registered_mail_item_not_retryable409Only items that failed before the vendor accepted them can be retried.
registered_mail_item_not_submitted409The item was not submitted to the vendor.
recipient_update_already_answered409The recipient email change request was already answered.
sender_account_exists409A sender account with this email already exists for the entity.
vendor_error409The registered mail vendor refused the operation or is unreachable. `message` carries the vendor reason.

Contacts

CodeStatusMeaning
contact_not_found404The contact does not exist or the caller cannot see it.
contact_name_required422A person needs a first name or a last name.
company_name_required422A company needs a name.
company_link_person_only422Only persons can be linked to a company.
invalid_company422`companyId` is not a visible company contact of the same entity.
invalid_phone422`phone` is not a valid phone number.
invalid_mobile_phone422`mobilePhone` is not a valid phone number.
invalid_siren422Invalid SIREN (9 digits, Luhn checksum).
invalid_siret422Invalid SIRET (14 digits, Luhn checksum).
siren_siret_mismatch422The SIRET does not start with the SIREN.
private_owner_only403Only the creator of a contact can change its visibility (`isPrivate`).
merge_same_contact422A contact cannot be merged into itself.
merge_kind_mismatch422Only contacts of the same kind can be merged.
import_file_required422The multipart `file` part is missing.
import_too_large422The CSV exceeds 5 MB or 5,000 rows.
import_empty422The CSV has no data row.
import_unknown_column422The mapping refers to a column that is not in the CSV header.

Tasks

CodeStatusMeaning
task_not_found404The task does not exist or the caller cannot see it.
invalid_assignee422The assignee cannot use tasks in this entity.
invalid_occurrence422`occurrenceAt` is not an occurrence of the task.
invalid_recurrence422The recurrence is invalid.
invalid_timezone422Unknown IANA time zone.

Structure & members

CodeStatusMeaning
organization_not_found404The organization does not exist or the caller has no access to it.
node_not_found404The node does not exist or the caller cannot see it.
membership_not_found404The membership does not exist or the caller cannot see it.
role_not_found404The role does not exist in this organization.
user_not_found404Unknown user.
invalid_node_name422Invalid node name.
invalid_parent422Entities go under the organization, groups under an entity or a group.
max_depth_reached422The organization tree is too deep.
role_other_org422The role belongs to another organization.
membership_move_other_entity422A membership can only move inside its entity.
cannot_delete_organization403The organization node itself cannot be deleted.
node_not_empty409The node still has children or members.
already_member409The user already has a membership in this entity.
last_owner409The last owner of an organization cannot be removed or demoted.
service_account409Service accounts (API keys) cannot be invited or provisioned as members.