# invalid_request

> A request or a value in it breaks one of the contract's rules: a missing field, a value too long, an option that does not exist.

HTTP `400` · `retryable` is `false`

The request reached Kabu but cannot be done as sent: the body is not JSON, a required field is missing, or a value
breaks a rule, such as a `title` over 120 characters or a confirm with five buttons. `param` points at the field, and
when several fields fail, `errors` lists each one.

**What to do:** fix the fields named in `param` and `errors`, then send the request again. The
[reference](/docs/api/messages) gives every field's limits, and `kabu send --dry-run` checks a message without sending
it.

## The response

Every error comes as `application/problem+json`; [Errors](/docs/errors) explains each field.

```json
{
  "type": "https://usekabu.com/docs/errors/invalid_request",
  "title": "Invalid request",
  "status": 400,
  "code": "invalid_request",
  "detail": "…",
  "hint": "…",
  "retryable": false,
  "request_id": "req_…",
  "doc_url": "https://usekabu.com/docs/errors/invalid_request"
}
```
