MideyeServer REST API Errors and Problem Types
Overview
Section titled “Overview”When a MideyeServer REST API call fails, the server answers with a JSON error body in the RFC 9457 Problem Details format (application/problem+json). The type field is a URL of the form https://www.mideye.com/problem/<name>. That URL leads to the matching section on this page.
You will usually see these errors when you call the API directly, for example from Ansible, Terraform, or scripts that automate the setup wizard. The web interface shows the same errors as messages in the page.
Response format
Section titled “Response format”{ "type": "https://www.mideye.com/problem/root-user-password-invalid", "title": "Bad Request", "status": 400, "detail": "Password must be minimum 9 characters, including at least one lowercase letter, one uppercase letter, one digit, one special character", "message": "error.http.400", "path": "/api/setup/complete"}| Field | Description |
|---|---|
type | Identifies the kind of error. Use it (not title) when your automation needs to branch on the error. |
title | Short summary. Usually the HTTP reason phrase, such as Bad Request. |
status | HTTP status code, repeated from the response. |
detail | Human-readable explanation of what went wrong, when the server has one. Can be null. |
message | Translation key used by the web interface, such as error.validation. |
path | The API path that was called. |
fieldErrors | Only for constraint-violation: a list of { objectName, field, message } entries, one per invalid field. |
params | Only for parameterized: values that are substituted into the message. |
Problem types
Section titled “Problem types”problem-with-message
Section titled “problem-with-message”Status: varies (400, 403, 404, 500 …)
The generic error type. The server uses it when no more specific type applies, for example when a requested record does not exist, when you lack permission, or when an unexpected server error occurs. Read status, message, and detail to find the cause.
If status is 500, check the server log (Logs → Log Files in the web interface) around the time of the request.
constraint-violation
Section titled “constraint-violation”Status: 400
The request body failed validation. Typical causes are a missing required field, a value that is too long, or a malformed IP address or hostname. The fieldErrors list names each invalid field. It is also used for invalid RADIUS clients (no name, or neither IP address nor NAS identifier), LDAP profiles, and Network Policy Servers.
Fix: correct the listed fields and send the request again.
parameterized
Section titled “parameterized”Status: 400
A validation or rate-limit error whose message needs extra values. The message field holds the error key (for example error.validation) and params holds the values.
Fix: read message and params to see which value was rejected.
entity-not-found
Section titled “entity-not-found”Status: 404
The record you asked for does not exist, for example a user, RADIUS client, or LDAP profile ID that has been deleted or never existed. This value appears in the message field of a problem-with-message response.
Fix: check the ID in the request URL.
invalid-password
Section titled “invalid-password”Status: 400
A password was rejected. This happens when:
- the current password given in a password change is wrong,
- a new password is empty, shorter than 4, or longer than 100 characters, or
- the password policy the server should check against is missing.
Fix: check the current password, and make sure the new one meets the password policy under Users and Tokens → Mideye User Settings.
root-user-password-invalid
Section titled “root-user-password-invalid”Status: 400 · Endpoint: POST /api/setup/complete
The root password sent during initial setup does not meet the user-set password policy. On a new installation the default policy requires:
- at least 9 characters,
- at least one lowercase letter,
- at least one uppercase letter,
- at least one digit, and
- at least one special character (anything other than a–z, A–Z, 0–9).
Newer server versions list the rules the password must meet in detail.
Fix: choose a password that meets every rule and run setup again.
server-already-setup
Section titled “server-already-setup”Status: 400 · Endpoints: /api/setup/*
The setup API was called on a server that has already been configured. The setup endpoints only work while the server is in the SETUP_REQUIRED state (see GET /api/setup/check-status).
Fix: nothing needs to be done if the server is already set up. To change the configuration, use the web interface or the regular API. Make automation idempotent by checking /api/setup/check-status before calling /api/setup/complete.
radius-client-and-radius-shared-secret-required
Section titled “radius-client-and-radius-shared-secret-required”Status: 400 · Endpoint: POST /api/setup/complete
The setup request contained a RADIUS client without a RADIUS shared secret, or a shared secret without a client. Setup accepts both or neither.
Fix: send both the RADIUS client and its shared secret, or leave both out and add them after setup under RADIUS Settings → RADIUS Clients.
duplicate-radius-attribute
Section titled “duplicate-radius-attribute”Status: 400
The same RADIUS attribute is defined more than once in a RADIUS response configuration.
Fix: remove the duplicate attribute and save again.
email-already-used, login-already-used, email-not-found
Section titled “email-already-used, login-already-used, email-not-found”Status: 400
Reserved problem types. Current MideyeServer versions do not return them. If you see one, you are running an old version. The name describes the error: the email address or username is already taken, or no user has that email address.

