Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
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.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/anomalyarmor-ai:anomalyarmor-ai-public-metrics-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Anomalyarmor Ai Public Metrics API
version: 1.0.0
contact:
name: AnomalyArmor Support
url: https://anomalyarmor.ai/support
license:
name: Proprietary
description: 'Operations tagged public-metrics across 3 of this provider''s published API definitions: anomalyarmor.ai-openapi.json, app.anomalyarmor.ai-openapi.json, docs.anomalyarmor.ai-openapi.json. Each path carries the servers of the definition it was published in.'
servers:
- url: http://localhost:8000
description: Development server
- url: https://api.anomalyarmor.ai
description: Production server
tags:
- name: public-metrics
paths:
/api/v1/sdk/metrics/dry-run:
post:
tags:
- public-metrics
summary: Metrics Dry Run
description: 'Dry-run a metric threshold against historical snapshots.
Tests how often a proposed threshold would have triggered alerts based on
historical metric values.
**SDK Usage:**
```python
from anomalyarmor import Client
client = Client()
result = client.metrics.dry_run(
asset_id="asset-uuid",
metric_id="metric-uuid",
threshold_type="upper",
threshold_value=1000,
lookback_days=7,
)
print(f"Alert rate: {result.alert_rate_percent}%")
print(f"Recommendation: {result.recommendation}")
```'
operationId: metrics_dry_run_api_v1_sdk_metrics_dry_run_post
parameters:
- name: Authorization
in: header
required: false
schema:
type: string
title: Authorization
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/MetricsDryRunRequest'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/StandardResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
servers:
- url: http://localhost:8000
description: Development server
- url: https://api.anomalyarmor.ai
description: Production server
/api/v1/sdk/metrics/{asset_id}/summary:
get:
tags:
- public-metrics
summary: Get Metrics Summary
description: 'Get metrics summary for an asset.
Accepts asset UUID, qualified name (e.g., "postgresql.mydb"), or asset name.
**SDK Usage:**
```python
from anomalyarmor import Client
client = Client()
summary = client.metrics.summary("asset-uuid")
print(f"Active metrics: {summary.active_metrics}")
```'
operationId: get_metrics_summary_api_v1_sdk_metrics__asset_id__summary_get
parameters:
- name: asset_id
in: path
required: true
schema:
type: string
title: Asset Id
- name: Authorization
in: header
required: false
schema:
type: string
title: Authorization
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/StandardResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
servers:
- url: http://localhost:8000
description: Development server
- url: https://api.anomalyarmor.ai
description: Production server
/api/v1/sdk/metrics/{asset_id}:
get:
tags:
- public-metrics
summary: List Metrics
description: 'List metrics for an asset.
Accepts asset UUID, qualified name (e.g., "postgresql.mydb"), or asset name.
**SDK Usage:**
```python
from anomalyarmor import Client
client = Client()
metrics = client.metrics.list("asset-uuid")
for m in metrics:
print(f"{m.metric_type}: {m.latest_value}")
```'
operationId: list_metrics_api_v1_sdk_metrics__asset_id__get
parameters:
- name: asset_id
in: path
required: true
schema:
type: string
title: Asset Id
- name: metric_type
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
description: Filter by metric type
title: Metric Type
description: Filter by metric type
- name: is_active
in: query
required: false
schema:
anyOf:
- type: boolean
- type: 'null'
description: Filter by active status
title: Is Active
description: Filter by active status
- name: limit
in: query
required: false
schema:
type: integer
maximum: 1000
minimum: 1
description: Max results
default: 50
title: Limit
description: Max results
- name: offset
in: query
required: false
schema:
type: integer
minimum: 0
description: Offset for pagination
default: 0
title: Offset
description: Offset for pagination
- name: Authorization
in: header
required: false
schema:
type: string
title: Authorization
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/StandardResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
post:
tags:
- public-metrics
summary: Create Metric
description: 'Create a new metric.
Requires read-write or admin scope.
Accepts asset UUID, qualified name (e.g., "postgresql.mydb"), or asset name.
**SDK Usage:**
```python
from anomalyarmor import Client
client = Client()
metric = client.metrics.create(
"asset-uuid",
metric_type="null_percent",
table_path="catalog.schema.table",
column_name="email",
)
```'
operationId: create_metric_api_v1_sdk_metrics__asset_id__post
parameters:
- name: asset_id
in: path
required: true
schema:
type: string
title: Asset Id
- name: Authorization
in: header
required: false
schema:
type: string
title: Authorization
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/MetricDefinitionCreate'
responses:
'201':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/StandardResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
servers:
- url: http://localhost:8000
description: Development server
- url: https://api.anomalyarmor.ai
description: Production server
/api/v1/sdk/metrics/{asset_id}/{metric_id}:
get:
tags:
- public-metrics
summary: Get Metric
description: 'Get metric details with optional snapshots.
Accepts asset UUID, qualified name (e.g., "postgresql.mydb"), or asset name.
**SDK Usage:**
```python
from anomalyarmor import Client
client = Client()
metric = client.metrics.get("asset-uuid", "metric-uuid")
print(f"Latest value: {metric.latest_value}")
```'
operationId: get_metric_api_v1_sdk_metrics__asset_id___metric_id__get
parameters:
- name: asset_id
in: path
required: true
schema:
type: string
title: Asset Id
- name: metric_id
in: path
required: true
schema:
type: string
title: Metric Id
- name: include_snapshots
in: query
required: false
schema:
type: boolean
description: Include recent snapshots
default: true
title: Include Snapshots
description: Include recent snapshots
- name: snapshot_limit
in: query
required: false
schema:
type: integer
maximum: 365
minimum: 1
description: Max snapshots
default: 30
title: Snapshot Limit
description: Max snapshots
- name: Authorization
in: header
required: false
schema:
type: string
title: Authorization
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/StandardResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
patch:
tags:
- public-metrics
summary: Update Metric
description: 'Update a metric.
Requires read-write or admin scope.
Accepts asset UUID, qualified name (e.g., "postgresql.mydb"), or asset name.
**SDK Usage:**
```python
from anomalyarmor import Client
client = Client()
metric = client.metrics.update("asset-uuid", "metric-uuid", is_active=False)
```'
operationId: update_metric_api_v1_sdk_metrics__asset_id___metric_id__patch
parameters:
- name: asset_id
in: path
required: true
schema:
type: string
title: Asset Id
- name: metric_id
in: path
required: true
schema:
type: string
title: Metric Id
- name: Authorization
in: header
required: false
schema:
type: string
title: Authorization
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/MetricDefinitionUpdate'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/StandardResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
delete:
tags:
- public-metrics
summary: Delete Metric
description: 'Delete a metric.
Requires read-write or admin scope.
Accepts asset UUID, qualified name (e.g., "postgresql.mydb"), or asset name.
**SDK Usage:**
```python
from anomalyarmor import Client
client = Client()
client.metrics.delete("asset-uuid", "metric-uuid")
```'
operationId: delete_metric_api_v1_sdk_metrics__asset_id___metric_id__delete
parameters:
- name: asset_id
in: path
required: true
schema:
type: string
title: Asset Id
- name: metric_id
in: path
required: true
schema:
type: string
title: Metric Id
- name: Authorization
in: header
required: false
schema:
type: string
title: Authorization
responses:
'204':
description: Successful Response
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
servers:
- url: http://localhost:8000
description: Development server
- url: https://api.anomalyarmor.ai
description: Production server
/api/v1/sdk/metrics/{asset_id}/{metric_id}/capture:
post:
tags:
- public-metrics
summary: Trigger Metric Capture
description: 'Trigger an immediate metric capture.
Requires read-write or admin scope.
Accepts asset UUID, qualified name (e.g., "postgresql.mydb"), or asset name.
**SDK Usage:**
```python
from anomalyarmor import Client
client = Client()
result = client.metrics.capture("asset-uuid", "metric-uuid")
print(f"Captured {result[''snapshot_count'']} snapshots")
```'
operationId: trigger_metric_capture_api_v1_sdk_metrics__asset_id___metric_id__capture_post
parameters:
- name: asset_id
in: path
required: true
schema:
type: string
title: Asset Id
- name: metric_id
in: path
required: true
schema:
type: string
title: Metric Id
- name: Authorization
in: header
required: false
schema:
type: string
title: Authorization
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/StandardResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
servers:
- url: http://localhost:8000
description: Development server
- url: https://api.anomalyarmor.ai
description: Production server
/api/v1/sdk/metrics/{asset_id}/{metric_id}/snapshots:
get:
tags:
- public-metrics
summary: List Metric Snapshots
description: 'List snapshots for a metric.
Accepts asset UUID, qualified name (e.g., "postgresql.mydb"), or asset name.
**SDK Usage:**
```python
from anomalyarmor import Client
client = Client()
snapshots = client.metrics.snapshots("asset-uuid", "metric-uuid")
for s in snapshots:
print(f"{s.captured_at}: {s.value}")
```'
operationId: list_metric_snapshots_api_v1_sdk_metrics__asset_id___metric_id__snapshots_get
parameters:
- name: asset_id
in: path
required: true
schema:
type: string
title: Asset Id
- name: metric_id
in: path
required: true
schema:
type: string
title: Metric Id
- name: limit
in: query
required: false
schema:
type: integer
maximum: 1000
minimum: 1
description: Max results
default: 100
title: Limit
description: Max results
- name: offset
in: query
required: false
schema:
type: integer
minimum: 0
description: Offset for pagination
default: 0
title: Offset
description: Offset for pagination
- name: Authorization
in: header
required: false
schema:
type: string
title: Authorization
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/StandardResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
servers:
- url: http://localhost:8000
description: Development server
- url: https://api.anomalyarmor.ai
description: Production server
components:
schemas:
MetricDefinitionCreate:
properties:
table_path:
type: string
maxLength: 500
title: Table Path
description: Fully qualified table path
column_name:
anyOf:
- type: string
maxLength: 255
- type: 'null'
title: Column Name
description: Column name (NULL for table-level metrics)
time_column:
anyOf:
- type: string
maxLength: 255
- type: 'null'
title: Time Column
description: Column containing timestamp/date for time-windowed queries. When set, metric queries filter by this column using capture_interval bounds.
metric_type:
$ref: '#/components/schemas/MetricType'
description: Type of metric to track
capture_interval:
type: string
maxLength: 100
title: Capture Interval
description: Capture interval (hourly, daily, weekly, or cron)
group_by_columns:
anyOf:
- items:
type: string
type: array
- type: 'null'
title: Group By Columns
description: Optional dimensional grouping columns
sensitivity:
type: integer
maximum: 5.0
minimum: 1.0
title: Sensitivity
description: Stddev multiplier for anomaly detection (1-5)
default: 3
percentile_value:
anyOf:
- type: number
maximum: 1.0
minimum: 0.0
- type: string
- type: 'null'
title: Percentile Value
description: 'For PERCENTILE metric type: the percentile to track (0.0-1.0)'
operating_period_mode:
type: string
enum:
- 'off'
- auto
- schedule
title: Operating Period Mode
description: 'Operating-period awareness (TECH-984): ''off'' pools all history, ''schedule'' segments by operating_schedule_id, ''auto'' learns a calendar from history'
default: 'off'
operating_schedule_id:
anyOf:
- type: string
format: uuid
- type: 'null'
title: Operating Schedule Id
description: Public UUID of the operating schedule (required for 'schedule' mode)
type: object
required:
- table_path
- metric_type
- capture_interval
title: MetricDefinitionCreate
description: 'Request schema for creating a metric definition.
TECH-689: Includes percentile_value for PERCENTILE metric type.
Note: asset_id is extracted from the URL path, not the request body.'
MetricsDryRunRequest:
properties:
asset_id:
type: string
title: Asset Id
description: Asset UUID or qualified name
metric_id:
type: string
title: Metric Id
description: Metric UUID to test
threshold_type:
type: string
title: Threshold Type
description: 'Type of threshold: ''upper'', ''lower'', ''deviation'''
threshold_value:
type: number
title: Threshold Value
description: Threshold value to test (absolute or percent deviation)
lookback_days:
type: integer
maximum: 30.0
minimum: 1.0
title: Lookback Days
description: Days of history to analyze
default: 7
type: object
required:
- asset_id
- metric_id
- threshold_type
- threshold_value
title: MetricsDryRunRequest
description: Request to dry-run metric threshold alert.
MetricDefinitionUpdate:
properties:
capture_interval:
anyOf:
- type: string
maxLength: 100
- type: 'null'
title: Capture Interval
time_column:
anyOf:
- type: string
maxLength: 255
- type: 'null'
title: Time Column
description: Column for time-windowed queries. Pass empty string to clear.
sensitivity:
anyOf:
- type: integer
maximum: 5.0
minimum: 1.0
- type: 'null'
title: Sensitivity
is_active:
anyOf:
- type: boolean
- type: 'null'
title: Is Active
operating_period_mode:
anyOf:
- type: string
enum:
- 'off'
- auto
- schedule
- type: 'null'
title: Operating Period Mode
description: Operating-period awareness mode (TECH-984)
operating_schedule_id:
anyOf:
- type: string
format: uuid
- type: 'null'
title: Operating Schedule Id
description: Public UUID of the operating schedule ('schedule' mode)
type: object
title: MetricDefinitionUpdate
description: "Request schema for updating a metric definition.\n\nNote on clearing optional fields:\n To clear time_column (remove time-windowed filtering), pass an empty string \"\".\n The service layer converts empty strings to NULL in the database."
HTTPValidationError:
properties:
detail:
items:
$ref: '#/components/schemas/ValidationError'
type: array
title: Detail
type: object
title: HTTPValidationError
MetricType:
type: string
enum:
- distinct_count
- null_percentage
- mean
- sum
- min
- max
- duplicate_count
- duplicate_percent
- percentile
title: MetricType
description: 'Types of metrics that can be tracked.
Statistical metrics compute aggregate values over time with ML-based anomaly detection.'
StandardResponse:
properties:
success:
type: boolean
title: Success
data:
anyOf:
- {}
- type: 'null'
title: Data
message:
anyOf:
- type: string
- type: 'null'
title: Message
error:
anyOf:
- type: string
- type: 'null'
title: Error
meta:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
title: Meta
type: object
required:
- success
title: StandardResponse
description: Standard API response wrapper.
ValidationError:
properties:
loc:
items:
anyOf:
- type: string
- type: integer
type: array
title: Location
msg:
type: string
title: Message
type:
type: string
title: Error Type
type: object
required:
- loc
- msg
- type
title: ValidationError
x-refined-from:
- anomalyarmor.ai-openapi.json
- app.anomalyarmor.ai-openapi.json
- docs.anomalyarmor.ai-openapi.json