---
title: "Get Verification"
method: GET
path: "/v1/verifications/{verification_id}"
tags: ["Verifications"]
---

# Get Verification

`GET /v1/verifications/{verification_id}`

## Request

- Base URL: `https://api.lumethic.com`
- URL: `https://api.lumethic.com/v1/verifications/{verification_id}`
- Auth: `OAuth2PasswordBearer` (a scheme the document does not define)

Retrieve detailed results for a specific photo verification.

Get the complete verification report including authenticity analysis results, processing status,
and all metadata comparisons for a single verification.

**Authentication Required**: Valid API key or JWT token

**Path Parameters**:
- **verification_id**: Unique identifier for the verification

**Response**: Returns a verification object containing:
- **id**: Verification unique identifier
- **name**: Original filename of the image
- **status**: Current processing status (pending, queued, in_progress, completed, failed)
- **result**: Authenticity determination (true = authentic, false = not authentic, null = pending)
- **created_at/updated_at**: Timestamps
- **results**: Array of detailed analysis results from each verification algorithm
- **account_id**: Your account identifier
- **rendition_info**: Processing transformation details
- **image_thumbnail_url**: CDN URL for verification thumbnail
- **raw_metadata/image_metadata**: EXIF and technical metadata

**Verification Results Include**:
- SSIM similarity scores between RAW and JPEG
- Perceptual hash comparisons
- EXIF metadata analysis
- Sensor signature verification
- Color histogram comparisons
- Processing chain validation

**Status Codes**:
- 200: Verification found and returned
- 404: Verification not found or access denied
- 401: Authentication required

## Path parameters

- `verification_id` string, required

## Headers

- `X-API-Key` string, nullable

## Response `200`

Verification details returned

- VerificationApiResponseV2: Enhanced verification response with attestation data (v2).
  - `id` string, uuid, required: Unique identifier for the verification
  - `psd_export` PsdExportSummary: Compact PSD-export state embedded in the v2 verification response.
    - `available` boolean, required
    - `status` 'pending' | 'queued' | 'in_progress' | 'completed' | 'failed': Processing status of a photo verification. - pending: Verification created, awaiting processing - queued: Added to processing queue - in_progress: Actively being analyzed - completed: Analysis finished (check result field for outcome) - failed: Analysis failed due to an error
    - `expires_at` string, date-time, nullable
  - `anchored_in` AnchoredIn[], nullable: Offloads whose anchored hash lists contain this verification's RAW file (ACQUISITION_MANIFEST_PLAN.md §4). anchored_at is attested by the timestamp authority; it is distinct from and earlier than verification time.
    - `offload_id` string, uuid, required
    - `offload_label` string, nullable, required
    - `anchored_at` string, date-time, nullable, required
    - `match_algorithm` 'sha512' | 'sha256' | 'xxh64', required
    - `match_grade` 'content_bound' | 'event_only', required: Hash-binding strength of an anchor. content_bound: the hash binds file contents. event_only: the anchor proves the offload event only.
  - `status` 'pending' | 'queued' | 'in_progress' | 'completed' | 'failed', required: Processing status of a photo verification. - pending: Verification created, awaiting processing - queued: Added to processing queue - in_progress: Actively being analyzed - completed: Analysis finished (check result field for outcome) - failed: Analysis failed due to an error
  - `failure_reason` string, nullable: Why a `failed` verification failed, in client terms: `sandbox_rejected` (the RAW sandbox rejected the file; its message is in `raw_metadata.raw_validation_error`), `attempts_exhausted` (every processing attempt died the same way, e.g. timed out on a very large RAW; a plain retry will not help) or `processing_error` (ours; worth a retry). Null unless status is `failed`. Decoder refusals do not fail: they complete as `unrated_unsupported_format` with the variant named.
  - `results` VerificationResult[], required: Array of detailed results from each verification algorithm
    - `verificator_id` string, uuid, required
    - `verification_id` string, uuid, required
    - `details` object, required
    - `result` boolean, nullable, required
    - `confidence_score` number, required
    - `id` string, uuid, required
    - `updated_at` string, date-time, required
    - `created_at` string, date-time, required
  - `result` boolean, nullable, required: Overall authenticity determination: true = authentic, false = not authentic, null = pending
  - `result_confidence` number, nullable, required: Legacy 0.0-1.0 score. NOT a probability of authenticity: for pair verifications it is the plain mean of the six non-informational checks (RAW_AUTHENTICITY, RECAPTURE, SSIM, IMAGEHASH, HISTOGRAM, FACES; EXIF, C2PA and image forensics are excluded). SSIM, IMAGEHASH and HISTOGRAM measure how closely the JPEG matches a neutral render of the RAW, so cropping, grading and resizing lower it; FACES contributes a fixed 0.8 when neither file has a face and RECAPTURE a fixed 0.9 when clean, so an unedited camera JPEG scores about 0.95. An abstaining check contributes 0.0. For image-only verifications it is the C2PA check's own confidence. Key on assurance_level; do not present this value as a percentage of certainty.
  - `assurance_level` 'verified' | 'provisional' | 'provenance' | 'unrated' | 'flagged': Graded authenticity outcome (replaces the flat pass/fail). - verified: RAW+JPEG pair, capture forensically verified, zero abstentions. - provisional: pair, capture verified with one incidental abstention. - provenance: JPEG-only, C2PA capture-claim from a trusted device signer; provenance only, capture NOT forensically verified. - unrated: no usable evidence (see the accompanying reason code). Image-only screening that raises advisory forensic flags also lands here (``unrated_indeterminate``) — the flags stay in ``results[].details`` but, being uncalibrated, they do not brand the photo or demand human review. - flagged: checks failed / tampering indicators. Only ``verified`` and ``provisional`` set ``capture_verified=True``.
  - `assurance_reason` string, nullable: Qualifier for the level, e.g. 'unrated_no_evidence' or 'unrated_unsupported_format'
  - `verdict` 'ai_declared' | 'modified_after_signing' | 'provenance_verified' | 'self_declared_ai' | 'unrated': Evidence-report verdict category (EVIDENCE_REPORT_BACKEND_SPEC §3). Additive to ``AssuranceLevel``: the legacy level is derived from the verdict by a fixed mapping, so the two fields can never contradict. Exactly one verdict applies, decided by precedence over fact/declaration findings only — observations never participate.
  - `verdict_reason` 'watermark_detected' | 'c2pa_generative_declared' | 'tampered' | 'invalid_signature' | 'c2pa_trusted_capture' | 'untrusted_signer_generative' | 'iptc_digital_source_type' | 'generator_metadata' | 'container_signature' | 'untrusted_signer' | 'trust_unverified' | 'no_capture_claim' | 'no_trusted_timestamp' | 'unlisted_actions_present' | 'computational_capture_only' | 'unrated_indeterminate' | 'unrated_reviewed_clean' | 'unrated_no_evidence': Machine-readable refinement of the verdict (EVIDENCE_REPORT_BACKEND_SPEC §3). A closed enum so the frontend can pre-translate every value. Includes codes for checks that ship in later phases (watermarks, IPTC) — additive rollout without a schema change.
  - `evidence_report` EvidenceReport: Single-image evidence report (EVIDENCE_REPORT_BACKEND_SPEC §2.2-2.3). Assembled on read from stored verificator results; emits stable codes only.
    - `verdict` 'ai_declared' | 'modified_after_signing' | 'provenance_verified' | 'self_declared_ai' | 'unrated', required: Evidence-report verdict category (EVIDENCE_REPORT_BACKEND_SPEC §3). Additive to ``AssuranceLevel``: the legacy level is derived from the verdict by a fixed mapping, so the two fields can never contradict. Exactly one verdict applies, decided by precedence over fact/declaration findings only — observations never participate.
    - `verdict_reason` 'watermark_detected' | 'c2pa_generative_declared' | 'tampered' | 'invalid_signature' | 'c2pa_trusted_capture' | 'untrusted_signer_generative' | 'iptc_digital_source_type' | 'generator_metadata' | 'container_signature' | 'untrusted_signer' | 'trust_unverified' | 'no_capture_claim' | 'no_trusted_timestamp' | 'unlisted_actions_present' | 'computational_capture_only' | 'unrated_indeterminate' | 'unrated_reviewed_clean' | 'unrated_no_evidence', required: Machine-readable refinement of the verdict (EVIDENCE_REPORT_BACKEND_SPEC §3). A closed enum so the frontend can pre-translate every value. Includes codes for checks that ship in later phases (watermarks, IPTC) — additive rollout without a schema change.
    - `findings` EvidenceFinding[]
      - `id` string, required: Stable finding code, e.g. 'c2pa.manifest' (EVIDENCE_REPORT_BACKEND_SPEC §5.3)
      - `layer` 'provenance' | 'watermark' | 'file' | 'physics', required
      - `kind` 'fact' | 'declaration' | 'observation', required: Kind taxonomy for evidence findings (EVIDENCE_REPORT_BACKEND_SPEC §5.3). Only facts (and generative declarations, for `self_declared_ai`) may drive the verdict; observations never do — enforced in the derivation, which takes no observation input.
      - `result` string, required: Finding-specific result value; observations use consistent|inconsistent|unclear
      - `statement` string, required: i18n code for what was observed; resolved by the frontend
      - `why_it_matters` string, required: i18n code for why it matters (incl. benign explanations)
      - `details` object: Structured measurement evidence for the expandable view. Never contains detector confidences.
    - `coverage` EvidenceCoverage, required: What was and wasn't checked. Mandatory: silent degradation is a spec violation.
      - `ran` string[]: Checks that ran and whose findings are shown
      - `unavailable` CoverageEntry[]: Checks Lumethic cannot run at all yet (e.g. unlicensed watermark detectors)
        - `check` string, required: Stable check id, e.g. 'ela', 'synthid'
        - `reason` string, required: Why the check has this coverage state, e.g. 'non_jpeg_input'
      - `skipped` CoverageEntry[]: Checks skipped for this input (format, resolution, preconditions)
        - `check` string, required: Stable check id, e.g. 'ela', 'synthid'
        - `reason` string, required: Why the check has this coverage state, e.g. 'non_jpeg_input'
      - `withheld` CoverageEntry[]: Checks that ran but whose findings are withheld pending corpus calibration (§9 dark-shipping)
        - `check` string, required: Stable check id, e.g. 'ela', 'synthid'
        - `reason` string, required: Why the check has this coverage state, e.g. 'non_jpeg_input'
      - `errored` string[]: Checks that raised; errors are never findings
    - `boundaries` string, required: i18n code for the what-this-cannot-tell-you block
    - `next_step` 'raw_verification' | 'request_verification': The flip (product spec P6): the constructive path out of the report.
  - `verification_mode` 'raw_pair' | 'image_only': Which inputs a verification was run against. - raw_pair: RAW + JPEG pair through the full comparison pipeline. - image_only: single JPEG through the dedicated C2PA-only flow.
  - `capture_verified` boolean: True only when optical capture was forensically verified (verified/provisional). Integrators should treat this as the authoritative 'passed' signal.
  - `raw_metadata` object, nullable, required: EXIF and technical metadata from the RAW file
  - `image_metadata` object, nullable, required: EXIF and technical metadata from the JPEG file
  - `rendition_info` RenditionInfo, required: Rendition information containing transformation and dimension details.
    - `image_thumbnail_url` string, required
    - `raw_thumbnail_url` string, required
    - `rendition_longest_edge` integer, required
    - `rendition_thumbnail_longest_edge` integer, required
    - `crop_percentage` number, required
    - `crop_pixels` CropInfo, required
      - `top` integer, required
      - `bottom` integer, required
      - `left` integer, required
      - `right` integer, required
    - `rotation_degrees` number, required
    - `resize_info` ResizeInfo, required
      - `width_scale` number, required
      - `height_scale` number, required
    - `bounding_box` BoundingBox, required: Represents a bounding box that can be non-rectangular due to perspective transforms.
      - `corners` array[], required
        - unknown[]
          - unknown
    - `original_image_width` integer, required
    - `original_image_height` integer, required
    - `original_raw_width` integer, required
    - `original_raw_height` integer, required
    - `rendition_image_width` integer, required
    - `rendition_image_height` integer, required
    - `rendition_raw_width` integer, required
    - `rendition_raw_height` integer, required
    - `thumbnail_image_width` integer, required
    - `thumbnail_image_height` integer, required
    - `thumbnail_raw_width` integer, required
    - `thumbnail_raw_height` integer, required
    - `exp_shift` number, nullable
    - `gamma_power` number, nullable
    - `gamma_slope` number, nullable
    - `no_auto_bright` boolean
    - `lens_correction_aperture` number, nullable
    - `lens_correction_focal_length` number, nullable
    - `lens_correction_distance` number, nullable
    - `lens_correction_crop_factor` number, nullable
    - `lens_correction_source` string, nullable
    - `lens_correction_fit` object, nullable
    - `alignment_transform` AlignmentTransformInfo: Exact aligned-pair geometry for the PSD export (PSD_EXPORT_PLAN.md step 3). Maps: original JPEG -> (per-axis scale) -> working JPEG -> (homography) -> working raw frame -> (translate by -crop_offset) -> aligned crop. Present only when the pipeline tracked every step exactly.
      - `homography` array[], required
        - number[]
      - `crop_offset_x` integer, required
      - `crop_offset_y` integer, required
      - `image_working_width` integer, required
      - `image_working_height` integer, required
      - `raw_working_width` integer, required
      - `raw_working_height` integer, required
      - `image_scale_x` number, required
      - `image_scale_y` number, required
      - `raw_scale_x` number, required
      - `raw_scale_y` number, required
    - `alignment_fallback` boolean
    - `alignment_inlier_count` integer, nullable
    - `alignment_rmse_px` number, nullable
    - `alignment_rmse_frac` number, nullable
    - `alignment_ecc_refined` boolean, nullable
    - `alignment_template_outside_fraction` number, nullable
    - `alignment_raw_covered_fraction` number, nullable
    - `alignment_inlier_extent_fraction` number, nullable
    - `alignment_residual_by_radius` number[], nullable
  - `rendition_corrected_info` RenditionInfo, required: Rendition information containing transformation and dimension details.
    - `image_thumbnail_url` string, required
    - `raw_thumbnail_url` string, required
    - `rendition_longest_edge` integer, required
    - `rendition_thumbnail_longest_edge` integer, required
    - `crop_percentage` number, required
    - `crop_pixels` CropInfo, required
      - `top` integer, required
      - `bottom` integer, required
      - `left` integer, required
      - `right` integer, required
    - `rotation_degrees` number, required
    - `resize_info` ResizeInfo, required
      - `width_scale` number, required
      - `height_scale` number, required
    - `bounding_box` BoundingBox, required: Represents a bounding box that can be non-rectangular due to perspective transforms.
      - `corners` array[], required
        - unknown[]
          - unknown
    - `original_image_width` integer, required
    - `original_image_height` integer, required
    - `original_raw_width` integer, required
    - `original_raw_height` integer, required
    - `rendition_image_width` integer, required
    - `rendition_image_height` integer, required
    - `rendition_raw_width` integer, required
    - `rendition_raw_height` integer, required
    - `thumbnail_image_width` integer, required
    - `thumbnail_image_height` integer, required
    - `thumbnail_raw_width` integer, required
    - `thumbnail_raw_height` integer, required
    - `exp_shift` number, nullable
    - `gamma_power` number, nullable
    - `gamma_slope` number, nullable
    - `no_auto_bright` boolean
    - `lens_correction_aperture` number, nullable
    - `lens_correction_focal_length` number, nullable
    - `lens_correction_distance` number, nullable
    - `lens_correction_crop_factor` number, nullable
    - `lens_correction_source` string, nullable
    - `lens_correction_fit` object, nullable
    - `alignment_transform` AlignmentTransformInfo: Exact aligned-pair geometry for the PSD export (PSD_EXPORT_PLAN.md step 3). Maps: original JPEG -> (per-axis scale) -> working JPEG -> (homography) -> working raw frame -> (translate by -crop_offset) -> aligned crop. Present only when the pipeline tracked every step exactly.
      - `homography` array[], required
        - number[]
      - `crop_offset_x` integer, required
      - `crop_offset_y` integer, required
      - `image_working_width` integer, required
      - `image_working_height` integer, required
      - `raw_working_width` integer, required
      - `raw_working_height` integer, required
      - `image_scale_x` number, required
      - `image_scale_y` number, required
      - `raw_scale_x` number, required
      - `raw_scale_y` number, required
    - `alignment_fallback` boolean
    - `alignment_inlier_count` integer, nullable
    - `alignment_rmse_px` number, nullable
    - `alignment_rmse_frac` number, nullable
    - `alignment_ecc_refined` boolean, nullable
    - `alignment_template_outside_fraction` number, nullable
    - `alignment_raw_covered_fraction` number, nullable
    - `alignment_inlier_extent_fraction` number, nullable
    - `alignment_residual_by_radius` number[], nullable
  - `raw_photo_hash` string, nullable, required: SHA-256 hash of the RAW file for integrity verification
  - `image_photo_hash` string, nullable, required: SHA-256 hash of the JPEG file for integrity verification
  - `image_thumbnail_url` string, nullable, required: CDN URL for the verification thumbnail image
  - `name` string, nullable, required: User-provided name or original filename
  - `request_id` string, uuid, nullable: The verification request this record answers, when it came in through a request link
  - `pipeline_build` string, nullable: CI image tag of the pipeline that produced the result; a build identifier
  - `tags` TagResponse[]: Account tags on this verification (owner-only; never on public responses)
    - `id` string, uuid, required: Tag identifier
    - `name` string, required: Display name (case preserved; matching is case-insensitive)
    - `color` string, nullable: Optional '#rrggbb' colour
  - `comment_count` integer: Number of internal comments on this verification
  - `account_id` string, uuid, required: Account that owns this verification
  - `updated_at` string, date-time, required: ISO 8601 timestamp of last update
  - `created_at` string, date-time, required: ISO 8601 timestamp when verification was created
  - `security_score` number, nullable: Device security score from 0.0 to 1.0 if attestation was provided. Higher = more trustworthy.
  - `attestation_validated` boolean: Whether device attestation was provided and validated
  - `device_fingerprint_id` string, uuid, nullable: Unique identifier for the device that captured the photo
  - `camera_fingerprint_id` string, uuid, nullable: Unique identifier for the camera hardware used
  - `sequence_number` integer, nullable: Sequential capture number from the app session for tamper detection
  - `integrity_score` number, nullable: App integrity score from attestation (0.0 to 1.0)
  - `jailbreak_indicators` string[], nullable: List of detected jailbreak/root indicators on the device
  - `capture_gps_latitude` number, nullable: GPS latitude at time of capture
  - `capture_gps_longitude` number, nullable: GPS longitude at time of capture

## Other responses

- `404`: Verification not found
- `422`: Validation Error

---

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