---
title: "Compute AAP integrity score"
method: GET
path: "/integrity/{agent_id}"
tags: ["Integrity"]
---

# Compute AAP integrity score

`GET /integrity/{agent_id}`

## Request

- Base URL: `https://api.mnemom.ai/v1`
- URL: `https://api.mnemom.ai/v1/integrity/{agent_id}`
- Auth: one of:
  - none
  - API key in header `X-Mnemom-Api-Key`
  - HTTP bearer
  - API key in cookie `mnemom_session`

## Path parameters

- `agent_id` string, required

## Response `200`

Integrity score

- IntegrityScore
  - `agent_id` string
  - `total_traces` integer
  - `verified_traces` integer
  - `violation_count` integer
  - `integrity_score` number: MNE-7126: violation-free rate among CHECKPOINTED traces = verified_traces / (verified_traces + violation_count). Value between 0 and 1; 1.0 when there are no violations, regardless of how many traces were checkpointed. This is INTEGRITY (did checkpointed traces pass?), NOT verification coverage — see verification_coverage.
  - `verification_coverage` number: MNE-7126: fraction of ALL traces that received a verification verdict = (verified_traces + violation_count) / total_traces. Value between 0 and 1; 0 when there are no traces. This is COVERAGE (how much of the agent's activity was checkpointed?), a signal DISTINCT from integrity_score — a low value means un-checkpointed / observe-mode traces, never a violation.
  - `bounded_refusal_count` integer: MNE-596: count of traces AAP structurally flagged but reclassified as a correctly policy-refused attack (AIP independently confirmed clear; no bounded action was ever executed). Logged for transparency — already counted toward verified_traces and excluded from violation_count, so it does not reduce integrity_score.

## Other responses

- `400`: Bad request
- `401`: Authentication required
- `403`: Forbidden
- `404`: Resource not found
- `409`: Resource conflict — the request cannot proceed because of a current state conflict (e.g., resource already exists, version mismatch, in-flight idempotency key with a different body).
- `429`: Rate-limit exceeded. The global per-IP limiter (100 requests/minute, applied to every `/v1/*` route) rejected this request. Back off until the window resets — `Retry-After` carries the cooldown in seconds and `X-RateLimit-Reset` the absolute reset time.
- `500`: Server error — request was well-formed but the server failed to fulfill it. Typically a downstream dependency (DB / RPC / external API) returned an unexpected error.

---

[API](https://skmtc.dev/mnemom/apis/mnemom-api.md) · [All operations](https://skmtc.dev/mnemom/apis/mnemom-api/llms.txt) · [OpenAPI document](https://skmtc.dev/mnemom/apis/mnemom-api/revisions/274b7a6ea182?raw)
