Agnost AI Dashboard API
Analytics and metrics for the dashboard
Analytics and metrics for the dashboard
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/agnost-ai-dashboard-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
openapi: 3.2.0
info:
title: Agnost AI Alerts Dashboard API
description: 'Complete REST API for Agnost AI: an analytics and monitoring platform for AI agents.
**Authentication**:
- SDK ingestion endpoints (`/api/v1/*`) use `x-org-id` header (UUID)
- Dashboard endpoints use `Authorization: Bearer <jwt>` + `x-org-id` header, or `x-api-key` header
- API key management uses JWT only (no API key auth)
'
version: 2.1.2
contact:
name: Agnost AI
url: https://agnost.ai
servers:
- url: https://api.agnost.ai
description: Production
tags:
- name: Dashboard
description: Analytics and metrics for the dashboard
paths:
/dashboard/api/dashboard:
post:
tags:
- Dashboard
summary: Get dashboard metrics
operationId: getDashboardMetrics
security:
- BearerAuth: []
OrgScope: []
- ApiKey: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/QueryFilters'
responses:
'200':
description: Dashboard metrics including totals, daily stats, success rate
/dashboard/api/login-summary:
get:
tags:
- Dashboard
summary: Generate login summary
description: 'Generates a fresh 48-hour login summary for the selected organization.
The response is not persisted; dashboard clients request it after org
selection settles, then keep it in memory for the current page session.
If no recent data exists, the endpoint returns a generic `summary_text`
with an empty `sections` array.
'
operationId: getLoginSummary
security:
- BearerAuth: []
OrgScope: []
- ApiKey: []
parameters:
- name: org_id
in: query
required: false
description: Organization ID. Optional when org scope is supplied by JWT/API-key auth or `x-org-id`.
schema:
type: string
format: uuid
responses:
'200':
description: Generated login summary
content:
application/json:
schema:
type: object
properties:
id:
type: string
format: uuid
org_id:
type: string
format: uuid
window_start:
type: string
format: date-time
window_end:
type: string
format: date-time
generated_at:
type: string
format: date-time
summary_text:
type: string
description: LLM-written summary capped at 90 words, or a generic no-data fallback.
sections:
type: array
items:
type: object
properties:
key:
type: string
example: errors
title:
type: string
example: Critical errors
href:
type: string
example: /errors
items:
type: array
items:
type: object
properties:
title:
type: string
detail:
type: string
count:
type: integer
href:
type: string
example:
id: 89d7ad7e-0248-4f98-abfa-1278ce5b7b4a
org_id: 5344ec46-cfc4-478a-805f-8c9d0b5ed66a
window_start: '2026-07-06T12:00:00Z'
window_end: '2026-07-08T12:00:00Z'
generated_at: '2026-07-08T12:00:00Z'
summary_text: Critical errors remained concentrated in policy checks and webhook probes, with feature-request and billing-dispute intents leading the last 48 hours.
sections:
- key: errors
title: Critical errors
href: /errors
items:
- title: policy_check
detail: 4 critical errors in the last 48 hours
count: 4
href: /errors
'400':
$ref: '#/components/responses/BadRequest'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/ServerError'
/dashboard/api/user-stories:
post:
tags:
- Dashboard
summary: Get user stories (conversations)
operationId: getUserStories
security:
- BearerAuth: []
OrgScope: []
- ApiKey: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/QueryFilters'
responses:
'200':
description: Recent conversations with event summaries
/dashboard/api/tool-stats:
post:
tags:
- Dashboard
summary: Get tool usage statistics
operationId: getToolStats
security:
- BearerAuth: []
OrgScope: []
- ApiKey: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/QueryFilters'
responses:
'200':
description: Tool usage breakdown
/dashboard/api/tool-checkpoint-stats:
post:
tags:
- Dashboard
summary: Get tool checkpoint timing stats
operationId: getToolCheckpointStats
security:
- BearerAuth: []
OrgScope: []
- ApiKey: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/QueryFilters'
responses:
'200':
description: Checkpoint timing statistics
/dashboard/api/tool-time-series:
post:
tags:
- Dashboard
summary: Get tool usage time series
operationId: getToolTimeSeries
security:
- BearerAuth: []
OrgScope: []
- ApiKey: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/QueryFilters'
responses:
'200':
description: Time-series data per tool
/dashboard/api/tool-error-distribution:
post:
tags:
- Dashboard
summary: Get error distribution by tool
operationId: getToolErrorDistribution
security:
- BearerAuth: []
OrgScope: []
- ApiKey: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/QueryFilters'
responses:
'200':
description: Error distribution data
/dashboard/api/errors:
post:
tags:
- Dashboard
summary: Get error events
operationId: getErrors
security:
- BearerAuth: []
OrgScope: []
- ApiKey: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/QueryFilters'
responses:
'200':
description: Paginated error list
/dashboard/api/errors/export:
post:
tags:
- Dashboard
summary: Export errors as CSV
operationId: exportErrors
security:
- BearerAuth: []
OrgScope: []
- ApiKey: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/QueryFilters'
responses:
'200':
description: CSV file download
content:
text/csv:
schema:
type: string
/dashboard/api/raw-logs:
post:
tags:
- Dashboard
summary: Get raw event logs
operationId: getRawLogs
security:
- BearerAuth: []
OrgScope: []
- ApiKey: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/QueryFilters'
responses:
'200':
description: Paginated raw log list
/dashboard/api/raw-logs/export:
post:
tags:
- Dashboard
summary: Export raw logs as CSV
operationId: exportRawLogs
security:
- BearerAuth: []
OrgScope: []
- ApiKey: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/QueryFilters'
responses:
'200':
description: CSV file download
content:
text/csv:
schema:
type: string
/dashboard/api/raw-logs/count:
post:
tags:
- Dashboard
summary: Get total count for raw logs query
description: 'Returns the total event count matching the same filters as `/raw-logs`,
served from the `event_daily_stats` materialized view for sub-second
latency. The frontend issues this in parallel with `/raw-logs` so the
page renders immediately and the total fills in when ready.
Returns `{"total_count": null}` when the filter set cannot be answered
by the materialized view (search query, client_config, connection_type,
or arbitrary metadata keys other than event_type).
'
operationId: getRawLogsCount
security:
- BearerAuth: []
OrgScope: []
- ApiKey: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/QueryFilters'
responses:
'200':
description: Total count, or null if filters are MV-incompatible
content:
application/json:
schema:
type: object
properties:
total_count:
type:
- integer
- 'null'
/dashboard/api/event-io:
post:
tags:
- Dashboard
summary: Get input/output for a specific event
operationId: getEventIO
security:
- BearerAuth: []
OrgScope: []
- ApiKey: []
requestBody:
content:
application/json:
schema:
type: object
required:
- event_id
properties:
event_id:
type: string
format: uuid
responses:
'200':
description: Event input and output data
/dashboard/api/metadata-distribution:
post:
tags:
- Dashboard
summary: Get metadata key distribution
operationId: getMetadataDistribution
security:
- BearerAuth: []
OrgScope: []
- ApiKey: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/QueryFilters'
responses:
'200':
description: Distribution of metadata keys
/dashboard/api/command-center-summary:
post:
tags:
- Dashboard
summary: Get combined command center data
description: Combines metrics, user stories, errors, and tool stats in one call
operationId: getCommandCenterSummary
security:
- BearerAuth: []
OrgScope: []
- ApiKey: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/QueryFilters'
responses:
'200':
description: Combined dashboard data
content:
application/json:
schema:
type: object
properties:
metrics:
type: object
user_stories:
type: object
errors:
type: object
tool_stats:
type: array
/dashboard/api/tools-dashboard:
post:
tags:
- Dashboard
summary: Get combined tools dashboard data
description: Combines tool stats, time series, and saved charts
operationId: getToolsDashboard
security:
- BearerAuth: []
OrgScope: []
- ApiKey: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/QueryFilters'
responses:
'200':
description: Combined tools data
/dashboard/api/dashboard/charts:
get:
tags:
- Dashboard
summary: List saved dashboard charts
operationId: listDashboardCharts
security:
- BearerAuth: []
OrgScope: []
- ApiKey: []
responses:
'200':
description: List of chart configurations
post:
tags:
- Dashboard
summary: Create dashboard chart
operationId: createDashboardChart
security:
- BearerAuth: []
OrgScope: []
- ApiKey: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: Chart created
/dashboard/api/dashboard/charts/{id}:
delete:
tags:
- Dashboard
summary: Delete dashboard chart
operationId: deleteDashboardChart
security:
- BearerAuth: []
OrgScope: []
- ApiKey: []
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
responses:
'204':
description: Chart deleted
/dashboard/api/dashboard/charts/reorder:
put:
tags:
- Dashboard
summary: Reorder dashboard charts
operationId: reorderDashboardCharts
security:
- BearerAuth: []
OrgScope: []
- ApiKey: []
requestBody:
content:
application/json:
schema:
type: object
required:
- chart_ids
properties:
chart_ids:
type: array
items:
type: string
format: uuid
responses:
'200':
description: Charts reordered
components:
responses:
Forbidden:
description: No access to the requested organization
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
ServerError:
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
BadRequest:
description: Invalid request body
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
QueryFilters:
type: object
properties:
time_range:
$ref: '#/components/schemas/TimeRange'
connection_type:
oneOf:
- type: string
- type: array
items:
type: string
agent_name:
oneOf:
- type: string
- type: array
items:
type: string
metadata_filters:
type: array
items:
type: object
properties:
key:
type: string
value:
type: string
page:
type: integer
default: 1
page_size:
type: integer
default: 20
TimeRange:
type: string
enum:
- 1min
- 1h
- 1d
- 1w
- 1m
- all
default: 1w
Error:
type: object
properties:
error:
type: string
required:
- error
example:
error: Invalid request body
securitySchemes:
OrgId:
type: apiKey
in: header
name: x-org-id
description: Organization ID (UUID). Used by SDKs for event ingestion. Header is case-insensitive.
BearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
description: JWT token from OAuth login.
ApiKey:
type: apiKey
in: header
name: x-api-key
description: API key (`agnost_<64-hex>`) for programmatic dashboard access. Issued via Settings → API Keys.
OrgScope:
type: apiKey
in: header
name: x-org-id
description: Optional. Selects which organization a JWT- or API-key-authenticated request targets when the credential has access to multiple.