Skip to content
Kelly

Developers

askkelly.aiGet a key

status

Copy page

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

MethodPathTitleAccessPriceMCP tool
GET/healthCheck that the service answerspublic[object Object]none
GET/v1/statusSee who is calling and what is leftpublic[object Object]none

GET /health

Check that the service answersLink to this section

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.

ResponseLink to this section

200 The service answers.

objectconstrequired

Always health.

Always "health".

okbooleanrequired

True whenever the process can answer.

servicestringrequired

Which service answered.

versionstringrequired

The running release.

dbbooleanrequirednullable

Whether the database answered; null when not configured.

redisbooleanrequirednullable

Whether Redis answered; null when not configured.

migratedbooleanrequirednullable

Whether migrations are applied; null when not checked.

ErrorsLink to this section

invalid_request · unsupported_api_version · internal_error

ExampleLink to this section

Request
GET https://api.askkelly.ai/health
Response, 200
{
  "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 leftLink to this section

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.

ResponseLink to this section

200 The caller as the API sees it.

objectconstrequired

Always status.

Always "status".

okbooleanrequired

Always true when the call is answered.

api_versionstringrequired

The API version this call was served at.

pattern ^\d{4}-\d{2}-\d{2}$

credentialstringrequired

How the caller was identified.

One of: anonymous, session, key, oauth (open: new values may be added).

modestringrequired

live data, or test: the sandbox's recorded Sunday.

One of: live, test (open: new values may be added).

planstringrequired

The plan the caller's limits and credits come from.

One of: anonymous, free, pro, developer, scale (open: new values may be added).

account_idstringrequirednullable

The caller's own account; null when keyless.

scopesarray of stringrequired

The scopes the credential carries, sorted.

rateobjectrequirednullable

The rate-limit window this call counted against; null when none applies.

Show 6 fields
policystringrequired

The policy's name, as in the RateLimit-Policy header.

limitintegerrequired

Requests allowed in the window.

remainingintegerrequired

Requests left in the window.

window_secondsintegerrequired

The window's length in seconds.

resetintegerrequired

When the window resets, in Unix seconds.

resourcestringrequired

The bucket: the operation's name, or all.

creditsobjectrequirednullable

Credits for the period; null when the caller has no allowance to count.

Show 6 fields
usedintegerrequired

Credits used so far in the period, this call included.

remainingintegerrequired

Credits left in the period.

lastintegerrequired

What this call cost: nothing, for status.

allowanceintegerrequired

The period's allowance.

periodstringrequired

The period: the UTC day for keyless callers (dYYYYMMDD), the billing period for accounts (mYYYYMMDD).

resetintegerrequired

When the period resets, in Unix seconds.

ErrorsLink to this section

invalid_request · credential_in_url · unsupported_api_version · unauthenticated · method_not_allowed · rate_limited · internal_error · service_unavailable

ExampleLink to this section

Request
GET https://api.askkelly.ai/v1/status
Response, 200
{
  "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
  }
}
Request
GET https://api.askkelly.ai/v1/status?api_key=kelly_test_EXAMPLE
Response, 400
{
  "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."
}
Request
POST https://api.askkelly.ai/v1/status
Authorization: Bearer $KELLY_API_KEY
Response, 405
{
  "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."
}
Request
GET https://api.askkelly.ai/v1/status
Authorization: Bearer $KELLY_API_KEY
Response, 200
{
  "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
  }
}
Request
GET https://api.askkelly.ai/v1/status
Authorization: Bearer kelly_test_00000000000000000000000000000000
Response, 401
{
  "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."
}
Request
GET https://api.askkelly.ai/v1/status
Authorization: Bearer $KELLY_API_KEY
Api-Version: 2020-01-01
Response, 400
{
  "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.

Support: support@askkelly.ai · Security and disclosure