Integration health for this Site
GET /api/v1/integration-status · operationId getIntegrationStatus
For developers: your server sends this request with a server key; it is not a button in the dashboard. To see the same information without code, open Connect your channels in the dashboard.
Server key last use, verify outcomes by code over seven days (allow, review and deny from the decision history; failure codes such as unauthorized, session_reinit_required or rate_limited), webhook delivery status with a fixed reason category, live browser sessions, database health and warnings such as policy_missing. Holds no identities or request values.
Authentication
Send Authorization: Bearer YOUR_SERVER_KEY (siteServerKey: Site server key in Authorization: Bearer <key> (the scheme is case-insensitive and required; a bare key is 401). Shown once on creation or rotation. Publishable keys cannot authenticate). Keep the server key in server-only configuration; never send it to a browser.
Responses
- 200: Integration status · body
object - 400: bad_request: the request is invalid; message says what to fix and field names the request field · body
Error - 401: unauthorized (missing or invalid server key, missing Bearer scheme) · body
Error - 403: forbidden: the call came from a browser page or another Site; call from your server with this Site’s server key · body
Error - 404: not_found: nothing with this ID on this Site (or it is past retention), or an unknown path · body
Error - 429: rate_limited: wait for Retry-After · body
Error· headersRetry-After - 500: internal_error: fail the protected action; do not retry automatically · body
Error - 503: service_unavailable: temporarily unavailable; only verify retries · body
Error
Success body fields
siteId(string, required)generatedAt(integer, required)windowDays(integer, required)behaviourCallsAgent(boolean, required): The Site setting "Behaviour signals can call Agent" (default true). True: behaviour clues of two or more different kinds agreeing in one page, with no physical-device input, make the session AI agent (high confidence). False: the same combination only keeps the session from reading Human (Unknown at most). Changed by a workspace owner or admin in Control › Rules; read-only here.database("ok" | "unavailable", required)keys(object[], required)keys[].id(string, required)keys[].status("current" | "retiring", required)keys[].expires(integer | null, required)keys[].lastUsedAt(integer | null, required)verify(object, required)verify.total(integer, required)verify.byCode(object, required)verify.lastDecisionAt(integer | null, required)verify.unsavedPolicyActions(object[], required)verify.unsavedPolicyActions[].actionId(string, required)verify.unsavedPolicyActions[].count(integer, required)verify.unsavedPolicyActions[].lastAt(integer | null, required)webhooks(object[], required)sdk(object, required)sdk.liveSessions(integer | null, required)sdk.sessionCap(integer | null, required)sdk.lastEvidenceAt(integer | null, required)warnings(object[], required)warnings[].code(string, required)warnings[].message(string, required)
Failures are not verdicts. Error bodies follow the Error schema: code is one of bad_request, unauthorized, session_reinit_required, forbidden, not_found, conflict, identity_required, payload_too_large, rate_limited, internal_error, service_unavailable, request_failed, approval_invalid, approval_used, approval_expired, approval_mismatch, step_up_not_held, step_up_mismatch, step_up_settled, step_up_expired, step_up_superseded, agent_tokens_disabled, tool_not_approved, tool_not_read_only. Errors and retries explains each code and what to do.
Example
curl -sS -X GET 'https://app.trytelltale.dev/api/v1/integration-status' \
-H "Authorization: Bearer $TELLTALE_SERVER_KEY"const response = await fetch("https://app.trytelltale.dev/api/v1/integration-status", {
method: "GET",
headers: {
Authorization: 'Bearer ' + process.env.TELLTALE_SERVER_KEY
},
signal: AbortSignal.timeout(5000)
});
const result = await response.json();Machine-readable contract: openapi.json. Request builder: the API explorer shows every operation as curl; it sends requests only on a local dashboard.