---
title: "Get reputation score for an agent"
method: GET
path: "/reputation/{agent_id}"
tags: ["Reputation"]
---

# Get reputation score for an agent

`GET /reputation/{agent_id}`

## Request

- Base URL: `https://api.mnemom.ai/v1`
- URL: `https://api.mnemom.ai/v1/reputation/{agent_id}`
- Auth: none required

Returns the agent's current reputation: numeric score (0–1000), letter grade (AAA–D, NR for not-rated), tier, five-component breakdown, 30-day trend, and an A2A trust extension block for interop. Private-visibility agents return 403 to non-owners. Public endpoint, IP-rate-limited (lookup bucket).

## Path parameters

- `agent_id` string, required

## Response `200`

Reputation score with A2A trust extension.

- ReputationScore: Agent reputation row computed by the reputation worker's 6-hour cron. Grade alphabet: `AAA AA+ AA A+ A B+ B C+ C D NR` (NR = not-rated, insufficient data). Score is an integer 0–1000.
  - `agent_id` string, required
  - `score` integer, nullable, required
  - `grade` string, nullable, required: AAA–D or NR.
  - `tier` string, nullable
  - `is_eligible` boolean, required
  - `checkpoint_count` integer, required
  - `checkpoint_accounting` object, nullable: Structured breakdown of how checkpoints were counted toward the score. `analyzed` is the scoring population; `excluded` buckets are mutually exclusive and `analyzed + synthetic + insufficient_thinking + quarantined = total`. Null for legacy rows computed before this field existed.
    - `total` integer, required: All checkpoints recorded for the agent.
    - `analyzed` integer, required: Checkpoints that counted toward the score (drives the X/50 eligibility gauge).
    - `excluded` object, required
      - `synthetic` integer, required: Synthetic (`ic-synthetic-*`) checkpoints.
      - `insufficient_thinking` integer, required: Zero-analysis checkpoints (no extraction confidence, thinking tokens, or analysis duration).
      - `quarantined` integer, required: Checkpoints referenced by a non-expired enforce advisory; excluded from scoring entirely.
    - `re_evaluated` object: How many of the agent's checkpoints carry each kind of re-evaluation annotation (counted over `total`, not the analyzed subset). Observability only — these are not an exclusion bucket and do not enter the score arithmetic. Absent on scores computed before this breakdown existed.
      - `corrected_clear` integer, required: Checkpoints explicitly corrected to `clear` (`re_evaluation_metadata.corrected_verdict = 'clear'`).
      - `corrected_non_clear` integer, required: Checkpoints corrected to a NON-clear verdict — a cross-turn escalation or a reviewer reclassification to `review_needed`/`boundary_violation`. These count against the score per the correction, not as exonerations; a non-zero value is why this agent's score differs from the pre-MNE-2156 calculation.
      - `resolved_no_correction` integer, required: Checkpoints re-evaluated with NO recorded correction — the trust-recovery convention, scored as `clear`.
  - `confidence` 'insufficient' | 'low' | 'medium' | 'high', required
  - `components` object[], required
    - `key` 'integrity_ratio' | 'compliance' | 'drift_stability' | 'trace_completeness' | 'coherence_compatibility', required
    - `label` string
    - `score` number, required
    - `weight` number, required
    - `weighted_score` number, required
    - `factors` unknown[]
      - unknown
  - `computed_at` string, date-time, nullable
  - `next_compute_at` string, date-time, nullable: Next scheduled recompute — the 00/06/12/18 UTC cron slot strictly after `computed_at` (`floor(computed_at/6h)*6h + 6h`). Null when `computed_at` is null.
  - `trend_30d` number, nullable
  - `visibility` 'public' | 'private', required: Reputation-publication axis — whether this agent's Trust Rating is published. Every registered agent's reputation is `public` by accountability standard (the default; that is the whole point of a portable, verifiable rating); `private` is a rare owner opt-out that 403s the read to non-owners. This is DISTINCT from `Agent.public` (the identity-record visibility axis) — they share the word "public" but govern different things.
  - `claimed` boolean
  - `agent_name` string, nullable
  - `a2a_trust_extension` object: A2A trust extension for interop. Only present on `GET /reputation/{agent_id}` (not on batch/compare rows).
    - `extension_uri` string
    - `provider` string
    - `score` number
    - `grade` string
    - `confidence` string
    - `verified_url` string, uri
    - `badge_url` string, uri
    - `methodology_url` string, uri
    - `last_updated` string, date-time

## Other responses

- `403`: Forbidden
- `404`: Resource not found
- `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)
