status
Copy page
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 | Check that the service answers | public | [object Object] | none |
| GET | /v1/status | See who is calling and what is left | public | [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.
objectconstrequiredAlways health.
Always "health".
okbooleanrequiredTrue whenever the process can answer.
servicestringrequiredWhich service answered.
versionstringrequiredThe running release.
dbbooleanrequirednullableWhether the database answered; null when not configured.
redisbooleanrequirednullableWhether Redis answered; null when not configured.
migratedbooleanrequirednullableWhether migrations are applied; null when not checked.
ErrorsLink to this section
invalid_request · unsupported_api_version · internal_error
ExampleLink to this section
GET https://api.askkelly.ai/health{
"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.
objectconstrequiredAlways status.
Always "status".
okbooleanrequiredAlways true when the call is answered.
api_versionstringrequiredThe API version this call was served at.
pattern ^\d{4}-\d{2}-\d{2}$
credentialstringrequiredHow the caller was identified.
One of: anonymous, session, key, oauth (open: new values may be added).
modestringrequiredlive data, or test: the sandbox's recorded Sunday.
One of: live, test (open: new values may be added).
planstringrequiredThe plan the caller's limits and credits come from.
One of: anonymous, free, pro, developer, scale (open: new values may be added).
account_idstringrequirednullableThe caller's own account; null when keyless.
scopesarray of stringrequiredThe scopes the credential carries, sorted.
rateobjectrequirednullableThe rate-limit window this call counted against; null when none applies.
Show 6 fields
policystringrequiredThe policy's name, as in the RateLimit-Policy header.
limitintegerrequiredRequests allowed in the window.
remainingintegerrequiredRequests left in the window.
window_secondsintegerrequiredThe window's length in seconds.
resetintegerrequiredWhen the window resets, in Unix seconds.
resourcestringrequiredThe bucket: the operation's name, or all.
creditsobjectrequirednullableCredits for the period; null when the caller has no allowance to count.
Show 6 fields
usedintegerrequiredCredits used so far in the period, this call included.
remainingintegerrequiredCredits left in the period.
lastintegerrequiredWhat this call cost: nothing, for status.
allowanceintegerrequiredThe period's allowance.
periodstringrequiredThe period: the UTC day for keyless callers (dYYYYMMDD), the billing period for accounts (mYYYYMMDD).
resetintegerrequiredWhen 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
GET https://api.askkelly.ai/v1/status{
"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
}
}GET https://api.askkelly.ai/v1/status?api_key=kelly_test_EXAMPLE{
"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."
}POST https://api.askkelly.ai/v1/status
Authorization: Bearer $KELLY_API_KEY{
"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."
}GET https://api.askkelly.ai/v1/status
Authorization: Bearer $KELLY_API_KEY{
"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
}
}GET https://api.askkelly.ai/v1/status
Authorization: Bearer kelly_test_00000000000000000000000000000000{
"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."
}GET https://api.askkelly.ai/v1/status
Authorization: Bearer $KELLY_API_KEY
Api-Version: 2020-01-01{
"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.