AnomalyArmor Public Metrics API

The public-metrics API from AnomalyArmor — 6 operation(s) for public-metrics.

Operations 9

POST /api/v1/sdk/metrics/dry-run Metrics Dry Run #
GET /api/v1/sdk/metrics/{asset_id}/summary Get Metrics Summary #
GET /api/v1/sdk/metrics/{asset_id} List Metrics #
POST /api/v1/sdk/metrics/{asset_id} Create Metric #
GET /api/v1/sdk/metrics/{asset_id}/{metric_id} Get Metric #
PATCH /api/v1/sdk/metrics/{asset_id}/{metric_id} Update Metric #
DELETE /api/v1/sdk/metrics/{asset_id}/{metric_id} Delete Metric #
POST /api/v1/sdk/metrics/{asset_id}/{metric_id}/capture Trigger Metric Capture #
GET /api/v1/sdk/metrics/{asset_id}/{metric_id}/snapshots List Metric Snapshots #

Work with this as data

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 Specification

anomalyarmor-ai-public-metrics-api-openapi.yml Raw ↑
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