# Error Catalog

User Verification v2 returns errors in this form:

```json
{
  "code": 422,
  "status": "failed",
  "message": "invalid nik"
}
```

| HTTP status | Meaning | Common messages |
| --- | --- | --- |
| `400` | The request timed out. | `access timeout` |
| `401` | Authentication or merchant credentials are invalid. | `invalid authorization`, `invalid merchant key`, `authentication failed` |
| `403` | The merchant cannot use the feature or channel, or has no balance. | `forbidden`, `insufficient balance`, `forbidden channel` |
| `422` | A required request field failed validation. | Field-specific empty, length, format, base64, size, or image-type messages. |
| `500` | Privy encountered an unexpected server error. | `internal server error` |

## Validation errors

An HTTP `422` can identify a problem with `trId`, `nik`, `name`, `dob`, `phone`,
`email`, `ktp`, `selfie`, or `channel`. Validate the request locally before you
send it, but use the returned `message` as the authoritative reason for a
rejected request.

Image validation distinguishes among an invalid value, invalid base64,
excessive decoded size, an unsupported image type, and dimensions outside the
accepted ranges. Resolution errors identify whether the KTP or selfie is below
the minimum or above the maximum width or height. Channel validation also
distinguishes an unknown channel from an invalid format or length.

See the [API Explorer](/b2b-digital-certificate/api) for every documented error
example.
