Zulip's API will always return a JSON format response.
The HTTP status code indicates whether the request was successful
(200 = success, 4xx = user error, 5xx = server error).
Every response, both success and error responses, will contain at least
two keys:
msg: an internationalized, human-readable error message string.
result: either "error" or "success", which is redundant with the
HTTP status code, but is convenient when print debugging.
Every error response will also contain an additional key:
code: a machine-readable error string, with a default value of
"BAD_REQUEST" for general errors.
Clients should always check code, rather than msg, when looking for
specific error conditions. The string values for msg are
internationalized (e.g., the server will send the error message
translated into French if the user has a French locale), so checking
those strings will result in buggy code.
If a client needs information that is only present in the string value
of msg for a particular error response, then the developers
implementing the client should start a conversation here
in order to discuss getting a specific error code and/or relevant
additional key/value pairs for that error response.
In addition to the keys described above, some error responses will
contain other keys with further details that are useful for clients. The
specific keys present depend on the error code, and are documented at
the API endpoints where these particular errors appear.
Changes: Before Zulip 5.0 (feature level 76), all error responses
did not contain a code key, and its absence indicated that no specific
error code had been allocated for that error.
Common error responses
Documented below are some error responses that are common to many
endpoints:
Invalid API key
A typical failed JSON response for when the API key is invalid.
{"code":"INVALID_API_KEY","msg":"Invalid API key","result":"error"}
Missing request parameter
A typical failed JSON response for when a required request parameter
is not supplied.
The value of var_name contains information about the missing parameter.
In JSON success responses, all Zulip REST API endpoints may return
an array of parameters sent in the request that are not supported
by that specific endpoint.
While this can be expected, e.g., when sending both current and legacy
names for a parameter to a Zulip server of unknown version, this often
indicates either a bug in the client implementation or an attempt to
configure a new feature while connected to an older Zulip server that
does not support said feature.
Changes: The ignored_parameters_unsupported
array was added as a possible return value for all REST API endpoint
JSON success responses in Zulip 7.0 (feature level 167).