# status

Check that the API answers and see who it thinks you are and what you have left.

| Method | Path | Title | Access | Price | MCP tool |
| --- | --- | --- | --- | --- | --- |
| GET | [`/health`](#get-health) | Check that the service answers | public | [object Object] | none |
| GET | [`/v1/status`](#get-status) | See who is calling and what is left | public | [object Object] | none |

`GET /health`

## Check that the service answers
public, no key needed · [object Object] credits, not charged during the beta · status live

Always 200 while the process answers; the body says which dependencies are reachable. Served by both the API and the Wire service.

### Response
`200` The service answers.

- `object` const · required  
  Always `health`.  
  Always `"health"`.
- `ok` boolean · required  
  True whenever the process can answer.
- `service` string · required  
  Which service answered.
- `version` string · required  
  The running release.
- `db` boolean · required · nullable  
  Whether the database answered; null when not configured.
- `redis` boolean · required · nullable  
  Whether Redis answered; null when not configured.
- `migrated` boolean · required · nullable  
  Whether migrations are applied; null when not checked.

### Errors
[`invalid_request`](/problems/invalid_request) · [`unsupported_api_version`](/problems/unsupported_api_version) · [`internal_error`](/problems/internal_error)

### Example
```http
GET https://api.askkelly.ai/health
```

```json
{
  "object": "health",
  "ok": true,
  "service": "kelly-api",
  "version": "unknown",
  "db": true,
  "redis": true,
  "migrated": true
}
```

`GET /v1/status`

## See who is calling and what is left
public, no key needed · [object Object] credits, not charged during the beta · status live

Your credential, mode, plan and scopes, your rate-limit window and your credits for the period, with the same values in the response headers. It costs nothing and is never refused for quota, so it is the call to make first, with or without a key.

### Response
`200` The caller as the API sees it.

- `object` const · required  
  Always `status`.  
  Always `"status"`.
- `ok` boolean · required  
  Always true when the call is answered.
- `api_version` string · required  
  The API version this call was served at.  
  pattern ^\d{4}-\d{2}-\d{2}$
- `credential` string · required  
  How the caller was identified.  
  One of: `anonymous`, `session`, `key`, `oauth` (open: new values may be added).
- `mode` string · required  
  live data, or test: the sandbox's recorded Sunday.  
  One of: `live`, `test` (open: new values may be added).
- `plan` string · required  
  The plan the caller's limits and credits come from.  
  One of: `anonymous`, `free`, `pro`, `developer`, `scale` (open: new values may be added).
- `account_id` string · required · nullable  
  The caller's own account; null when keyless.
- `scopes` array of string · required  
  The scopes the credential carries, sorted.
- `rate` object · required · nullable  
  The rate-limit window this call counted against; null when none applies.
  - `policy` string · required  
    The policy's name, as in the RateLimit-Policy header.
  - `limit` integer · required  
    Requests allowed in the window.
  - `remaining` integer · required  
    Requests left in the window.
  - `window_seconds` integer · required  
    The window's length in seconds.
  - `reset` integer · required  
    When the window resets, in Unix seconds.
  - `resource` string · required  
    The bucket: the operation's name, or `all`.
- `credits` object · required · nullable  
  Credits for the period; null when the caller has no allowance to count.
  - `used` integer · required  
    Credits used so far in the period, this call included.
  - `remaining` integer · required  
    Credits left in the period.
  - `last` integer · required  
    What this call cost: nothing, for status.
  - `allowance` integer · required  
    The period's allowance.
  - `period` string · required  
    The period: the UTC day for keyless callers (dYYYYMMDD), the billing period for accounts (mYYYYMMDD).
  - `reset` integer · required  
    When the period resets, in Unix seconds.

### Errors
[`invalid_request`](/problems/invalid_request) · [`credential_in_url`](/problems/credential_in_url) · [`unsupported_api_version`](/problems/unsupported_api_version) · [`unauthenticated`](/problems/unauthenticated) · [`method_not_allowed`](/problems/method_not_allowed) · [`rate_limited`](/problems/rate_limited) · [`internal_error`](/problems/internal_error) · [`service_unavailable`](/problems/service_unavailable)

### Example
```http
GET https://api.askkelly.ai/v1/status
```

```json
{
  "object": "status",
  "ok": true,
  "api_version": "2026-10-05",
  "credential": "anonymous",
  "mode": "live",
  "plan": "anonymous",
  "account_id": null,
  "scopes": [],
  "rate": {
    "policy": "anon-tool",
    "limit": 60,
    "remaining": 59,
    "window_seconds": 600,
    "reset": 1791135600,
    "resource": "get_status"
  },
  "credits": {
    "used": 0,
    "remaining": 200,
    "last": 0,
    "allowance": 200,
    "period": "d20261004",
    "reset": 1791158400
  }
}
```

```http
GET https://api.askkelly.ai/v1/status?api_key=kelly_test_EXAMPLE
```

```json
{
  "type": "https://docs.askkelly.ai/problems/credential_in_url",
  "title": "Credential in URL",
  "status": 400,
  "code": "credential_in_url",
  "detail": "A key or token was sent in the URL, where logs and browser history keep it. Send it in the Authorization header, and rotate it: treat it as exposed.",
  "param": "api_key",
  "doc_url": "https://docs.askkelly.ai/problems/credential_in_url",
  "request_id": "req_c69998a66ec6c1ead5848670",
  "retryable": false,
  "display_message": "This app sent a password-like value in a web address; it should be replaced."
}
```

```http
POST https://api.askkelly.ai/v1/status
Authorization: Bearer $KELLY_API_KEY
```

```json
{
  "type": "https://docs.askkelly.ai/problems/method_not_allowed",
  "title": "Method not allowed",
  "status": 405,
  "code": "method_not_allowed",
  "detail": "This path does not accept that HTTP method; the Allow header lists the ones it does.",
  "param": null,
  "doc_url": "https://docs.askkelly.ai/problems/method_not_allowed",
  "request_id": "req_3ff72a1881e276fa5982bb96",
  "retryable": false,
  "display_message": "That action is not available here."
}
```

```http
GET https://api.askkelly.ai/v1/status
Authorization: Bearer $KELLY_API_KEY
```

```json
{
  "object": "status",
  "ok": true,
  "api_version": "2026-10-05",
  "credential": "key",
  "mode": "test",
  "plan": "free",
  "account_id": "acct_n0y9wqdrz2b9fyx6vmsy",
  "scopes": [
    "read:odds",
    "read:players",
    "read:reference",
    "run:answers",
    "wire:connect"
  ],
  "rate": {
    "policy": "free",
    "limit": 120,
    "remaining": 119,
    "window_seconds": 60,
    "reset": 1791135060,
    "resource": "all"
  },
  "credits": {
    "used": 0,
    "remaining": 1000,
    "last": 0,
    "allowance": 1000,
    "period": "m20261001",
    "reset": 1793491200
  }
}
```

```http
GET https://api.askkelly.ai/v1/status
Authorization: Bearer kelly_test_00000000000000000000000000000000
```

```json
{
  "type": "https://docs.askkelly.ai/problems/unauthenticated",
  "title": "Authentication required",
  "status": 401,
  "code": "unauthenticated",
  "detail": "The API key is not valid. Check it, or create a new one on your account page.",
  "param": "Authorization",
  "doc_url": "https://docs.askkelly.ai/problems/unauthenticated",
  "request_id": "req_c1dc19cfcab0be9f5c6c5719",
  "retryable": false,
  "display_message": "Please sign in to continue."
}
```

```http
GET https://api.askkelly.ai/v1/status
Authorization: Bearer $KELLY_API_KEY
Api-Version: 2020-01-01
```

```json
{
  "type": "https://docs.askkelly.ai/problems/unsupported_api_version",
  "title": "Unsupported API version",
  "status": 400,
  "code": "unsupported_api_version",
  "detail": "Api-Version must be one of: 2026-10-05 (or omitted for 2026-10-05).",
  "param": "Api-Version",
  "doc_url": "https://docs.askkelly.ai/problems/unsupported_api_version",
  "request_id": "req_9932ee84dbcb30ac683ba6c7",
  "retryable": false,
  "display_message": "This app asked for an API version that is not available."
}
```

Generated from Kelly API 2026-10-05.

---

Generated from Kelly API 2026-10-05

Support: support@askkelly.ai · Security and disclosure: https://docs.askkelly.ai/security

Information is the edge. Odds are information, not advice · 21+ · Get help
