Welcome to Encatch Docs
Admin API ReferenceResponses

Error codes

Every error code the Response Submit API returns, with its HTTP status, the field it points at, and what it means.

A failed call returns application/problem+json (RFC 9457) with a stable code:

{
  "type": "about:blank",
  "title": "Unprocessable Entity",
  "status": 422,
  "code": "out_of_range",
  "detail": "Must be between 0 and 10.",
  "requestId": "4b1e0c7a92f3d811",
  "invalidParams": [
    {
      "name": "answers.how-likely-are-you-to-recommend-us",
      "code": "out_of_range",
      "message": "Must be between 0 and 10."
    }
  ]
}
FieldMeaning
codeStable machine-readable code. With more than one problem it is validation_failed.
detailHuman-readable summary. The wording may change.
requestIdQuote it when contacting support.
invalidParamsEvery problem with the request, each with name (the field, such as answers.<key>), its own code, and a message. There is one entry when code names a single check.

Validate Response lists the same codes in invalidParams, with a 200 status.

Handle codes, not messages

Match on code. New codes may be added over time. Handle an unknown code like any other error with the same HTTP status.

401 and 403 come from the API gateway, not the API. They have no code, only { "error": "..." }: api key is required, or publishable API keys cannot call /v2/admin routes. A 429 means an Admin API rate limit was reached.

Request

CodeStatusOnMeaning
malformed_body400bodyNot valid JSON, or a field has the wrong type (for example a status other than completed or partial). For uploads: not multipart, no boundary, or a missing part.
body_too_large413bodyThe JSON body is larger than 100 KB.
unsupported_field400, 422body, device.<key>, answers.<key>A field the API does not know: a top-level body field or multipart part (400), or a device key, address part, or extra key inside an answer (422).
form_id_mismatch400formIdformId in the body differs from the one in the URL.
invalid_idempotency_key400Idempotency-Key headerIdempotency-Key must be 1 to 255 characters.
idempotency_conflict422—The same Idempotency-Key or externalId was used in the last hour with a different body.
request_in_progress409—The first request with this Idempotency-Key or externalId is still being queued. Retry after the Retry-After seconds.
validation_failed422—More than one problem. Each one is in invalidParams with its own code.
temporarily_unavailable503—The queue or the file storage is unavailable. Retry later with the same Idempotency-Key.

Form

CodeStatusOnMeaning
invalid_form_id422formIdformId in the URL is not a UUID.
form_not_found404formIdNo form with this formId exists in the project.
form_not_live422formIdThe form is not published, or its live version has no questions.
api_channel_disabled422formIdThe API switch is off for this form (Distribution → API).
outside_schedule422formIdThe form is outside its schedule.
response_limit_reached422formIdThe form has reached its response limit.
usage_quota_exceeded422formIdThe organization's response quota is used up (production keys only).

Body fields

CodeStatusOnMeaning
language_not_available422languageNot one of the form's languages.
submitted_at_out_of_window422submittedAtOlder than 15 days, or more than 2 minutes in the future.
unknown_source_tracking_param422sourceTracking.<key>Not one of the form's source tracking parameters, or source tracking is off.
user_not_found422user.userNameNo identified user with this userName. Create it with Identify User first.
invalid_format422submittedAt, externalId, ipAddress, device, user.userName, answers.<key>Wrong format: submittedAt is not ISO 8601 with a time zone, externalId is not 1 to 255 characters, ipAddress is not IPv4 or IPv6, or an answer is not a valid email, website, date, phone number, or pattern match.
invalid_type422device.<key>, answers.<key>Wrong JSON type, for example a number where a string or an array is expected.
out_of_range422completionTimeInSeconds, answers.<key>Below 0, or outside the question's scale, number, or date limits.

Answers

All of these point at answers.<key>. See Answer formats for the value each question type takes.

CodeStatusMeaning
unknown_question422The key matches no question slug or UUID on the live version.
duplicate_answer422The same question is answered twice, by slug and by UUID.
not_answerable422The key is a screen that takes no answer (welcome, thank you, message, exit).
unsupported_question_type422A deprecated question type (annotation, UPI payment) that the API does not take.
too_short422Fewer characters than the question's minimum.
too_long422More characters than the question's maximum.
invalid_option422Not one of the question's options, rows, or columns.
duplicate_option422The same option is listed twice.
other_not_allowed422otherText sent without the Other option selected, or the question has no Other option.
incomplete_path422A nested selection path that stops before a leaf.
too_few_selections422Fewer selections than the question's minimum (choice, ranking, matrix).
too_many_selections422More selections than the question's maximum.
too_many_items422More question and answer pairs than the Q&A question allows.
field_disabled422An address part that is switched off on the question.
unsupported_scale422A rating matrix with text scale points, which the API cannot store yet.
too_many_files422More fileIds than the question's maximum.
duplicate_file422The same fileId is listed twice.
file_not_found422No upload with this fileId, it expired (24 hours), or it was uploaded for another question.
file_already_used422The fileId is already used by another response.
mode_not_allowed422The mode is off for the question, or the file's type does not match it (video, audio, photo).

Upload

Returned only by Upload File.

CodeStatusOnMeaning
invalid_question422questionIdquestionId is not a UUID, is not on this form, or is not a file, signature, or video question.
file_too_large413fileLarger than the question allows, or than the upload limit.
file_type_not_allowed415fileNot one of the question's file types.

Custom API

Returned only by custom format URLs. name points at the rule's target field.

CodeStatusMeaning
format_not_found404No custom format with this slug on the form.
path_matched_many422A JSONPath rule matched several values where the field takes one.
conversion_failed422The payload value could not be converted to the field's type.
option_not_mapped422The payload value has no entry in the rule's option map.
question_not_in_form422A rule targets a question the live version does not have.

Which endpoints return what

StatusSubmitValidateUploadCustom format
Success202200 (valid true or false)201202
400✓✓✓✓
404✓— (listed in invalidParams)✓✓
409✓——✓
413✓✓✓✓
415——✓—
422✓— (listed in invalidParams)✓✓
503✓—✓✓

Was this page helpful?