# service_not_ready

> The instance isn't ready

- Status: 503 Service Unavailable
- Returned by: /api/public
- Operations: [getReadiness](https://developers.rivr.io/reference/api-public/getReadiness.md)
- Retry (`retryWhen`): `same_request`
- Did anything happen? (`outcome`): `not_applicable` (No side effect)
- Rivr's services
- Page in the portal: https://developers.rivr.io/errors/service_not_ready
- Try it: `GET https://developers.rivr.io/errors/simulate/service_not_ready` answers with the code's exact wire form; `?succeedAfter=N&attempt=K` gives a 200 once `attempt` passes `N`

## What it means

`GET /api/public/health/ready`: the instance isn't ready to take traffic. `checks` says which check failed. Monitoring reads the endpoint; it isn't a partner call.

## What your system does

Ask again in a while.

## Is it worth retrying?

Yes. The same call can succeed in a while.

`retryWhen`: `same_request`. Send the very same request again, unchanged: the same `Idempotency-Key` and the same order id. Wait `Retry-After` seconds when the answer has the header, otherwise a short while that grows with each attempt.

## Did anything happen?

`outcome`: `not_applicable`. **No side effect.** The call has no side effect, since it is a read.

## More members in the response

- `checks`: Every check with its name, outcome and an explanation.

## Example: /api/public

```http
HTTP/1.1 503 Service Unavailable
Content-Type: application/json

{
  "title": "health/ready",
  "ready": false,
  "checks": [
    {
      "name": "startup",
      "ok": true,
      "detail": "alla hostade tjänster har startat"
    },
    {
      "name": "documentstore",
      "ok": false,
      "detail": "svarade inte (TimeoutException)"
    }
  ],
  "code": "service_not_ready",
  "type": "https://developers.rivr.io/errors/service_not_ready",
  "message": "The instance is not ready to take traffic. checks says which check failed."
}
```

The `title`, `detail`, `message` and `error_description` texts are exactly as the API writes them today.
