---
title: "Retrieve the verification outcome and detector results for a charge"
method: GET
path: "/api/v1/charges/{chargeId}/verification"
tags: ["Charges"]
---

# Retrieve the verification outcome and detector results for a charge

`GET /api/v1/charges/{chargeId}/verification`

## Request

- Base URL: `https://partner-api.monta.com`
- URL: `https://partner-api.monta.com/api/v1/charges/{chargeId}/verification`
- Auth: HTTP bearer

Required scope: `charge-verification:read` </br>Organization authorization: `supported`

**`not_run` does not mean the charge is clean.** Detectors run asynchronously after the charge completes, so a charge that has just finished legitimately reports `outcome: "not_run"` with zero counts and empty result arrays simply because nothing has been evaluated yet. The same value is returned when verification is disabled for the operator, or when every check turned out not to apply to the charge. Treating it as a pass will approve unverified home-charging reimbursements. Only `verified` means a check actually ran and passed; poll again later, or wait for the charge to settle, before acting on the verdict.

The roll-up ranks by how much attention is needed: `flagged` > `inconclusive` > `noted` > `verified`. `noted` carries findings the operator asked to record but does not have to answer.

## Path parameters

- `chargeId` integer, required

## Response `200`

Verification roll-up and every detector result, grouped by type

- ChargeVerification
  - `outcome` 'flagged' | 'inconclusive' | 'noted' | 'verified' | 'not_run' | 'unknown', required: Whole-charge verification verdict, ordered by how much attention it demands: `flagged` > `inconclusive` > `noted` > `verified`. `not_run` means nothing was evaluated.
  - `flags` integer, required: Number of results that flagged something, resolved ones included
  - `unresolvedFlags` integer, required: Number of flags no operator has resolved yet
  - `inconclusive` integer, required: Number of checks that could not reach a conclusion, typically for missing data
  - `confirmations` integer, required: Number of checks that passed
  - `notApplicable` integer, required: Number of checks that did not apply to this charge. These demand no attention and are ignored when deriving `outcome`.
  - `highestSeverity` 'info' | 'warn' | 'critical', nullable: Highest severity across every result. Null when there are no results.
  - `results` ChargeVerificationResults, required
    - `flags` VerificationResult[], required: Results that flagged something
      - `id` integer, required: Id of the verification result
      - `resultKey` string, required: Stable identifier of the detector that produced this result
      - `resultVersion` integer, required: Version of the detector logic that produced this result. Bumped when the rule changes meaning, so older results stay interpretable.
      - `category` 'assignment' | 'fraud' | 'data_quality' | 'compliance', required: What the detector was checking for
      - `severity` 'info' | 'warn' | 'critical', required: How much attention the result demands
      - `outcome` 'positive' | 'negative' | 'inconclusive' | 'not_applicable' | 'noted', required: What the detector concluded for this single check
      - `outcomeLabel` string, required: Human-readable label for `outcome`
      - `resultType` 'confirmation' | 'flag' | 'inconclusive' | 'not_applicable', required: Which bucket of the roll-up this result counts towards
      - `headline` string, nullable: One-line summary of the finding, when the detector produced one
      - `details` object, required: Detector-specific supporting values. The shape varies per `resultKey`; treat as opaque. Always an object, `{}` when the detector recorded nothing.
      - `detectedAt` string, date-time, required: When the detector produced this result (ISO8601: yyyy-MM-ddTHH:mm:ssZ)
      - `resolvedAt` string, date-time, nullable: When the result was resolved by an operator (ISO8601: yyyy-MM-ddTHH:mm:ssZ). Null while open.
      - `resolutionNote` string, nullable: Note the operator left when resolving the result
    - `inconclusive` VerificationResult[], required: Results that could not reach a conclusion
      - `id` integer, required: Id of the verification result
      - `resultKey` string, required: Stable identifier of the detector that produced this result
      - `resultVersion` integer, required: Version of the detector logic that produced this result. Bumped when the rule changes meaning, so older results stay interpretable.
      - `category` 'assignment' | 'fraud' | 'data_quality' | 'compliance', required: What the detector was checking for
      - `severity` 'info' | 'warn' | 'critical', required: How much attention the result demands
      - `outcome` 'positive' | 'negative' | 'inconclusive' | 'not_applicable' | 'noted', required: What the detector concluded for this single check
      - `outcomeLabel` string, required: Human-readable label for `outcome`
      - `resultType` 'confirmation' | 'flag' | 'inconclusive' | 'not_applicable', required: Which bucket of the roll-up this result counts towards
      - `headline` string, nullable: One-line summary of the finding, when the detector produced one
      - `details` object, required: Detector-specific supporting values. The shape varies per `resultKey`; treat as opaque. Always an object, `{}` when the detector recorded nothing.
      - `detectedAt` string, date-time, required: When the detector produced this result (ISO8601: yyyy-MM-ddTHH:mm:ssZ)
      - `resolvedAt` string, date-time, nullable: When the result was resolved by an operator (ISO8601: yyyy-MM-ddTHH:mm:ssZ). Null while open.
      - `resolutionNote` string, nullable: Note the operator left when resolving the result
    - `confirmations` VerificationResult[], required: Results that passed
      - `id` integer, required: Id of the verification result
      - `resultKey` string, required: Stable identifier of the detector that produced this result
      - `resultVersion` integer, required: Version of the detector logic that produced this result. Bumped when the rule changes meaning, so older results stay interpretable.
      - `category` 'assignment' | 'fraud' | 'data_quality' | 'compliance', required: What the detector was checking for
      - `severity` 'info' | 'warn' | 'critical', required: How much attention the result demands
      - `outcome` 'positive' | 'negative' | 'inconclusive' | 'not_applicable' | 'noted', required: What the detector concluded for this single check
      - `outcomeLabel` string, required: Human-readable label for `outcome`
      - `resultType` 'confirmation' | 'flag' | 'inconclusive' | 'not_applicable', required: Which bucket of the roll-up this result counts towards
      - `headline` string, nullable: One-line summary of the finding, when the detector produced one
      - `details` object, required: Detector-specific supporting values. The shape varies per `resultKey`; treat as opaque. Always an object, `{}` when the detector recorded nothing.
      - `detectedAt` string, date-time, required: When the detector produced this result (ISO8601: yyyy-MM-ddTHH:mm:ssZ)
      - `resolvedAt` string, date-time, nullable: When the result was resolved by an operator (ISO8601: yyyy-MM-ddTHH:mm:ssZ). Null while open.
      - `resolutionNote` string, nullable: Note the operator left when resolving the result

## Other responses

- `400`: The request is invalid
- `401`: Consumer with provided credentials was not found
- `403`: Operator doesn't have access to resource
- `404`: Entity with the provided id was not found

## Changes

- **2026-11-03** `0ca400461c52`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/monta/apis/monta-partner-api/changes/api/v1/charges/:chargeId/verification/get.md)

---

[API](https://skmtc.dev/monta/apis/monta-partner-api.md) - [All operations](https://skmtc.dev/monta/apis/monta-partner-api/llms.txt) - [OpenAPI document](https://skmtc.dev/monta/apis/monta-partner-api/revisions/0ca400461c52?raw)
