---
title: "Page observations of an audit"
method: GET
path: "/v1/audits/{auditId}/pages"
tags: ["Audits"]
---

# Page observations of an audit

`GET /v1/audits/{auditId}/pages`

## Request

- Base URL: `https://api.ironfang.com/audit`
- URL: `https://api.ironfang.com/audit/v1/audits/{auditId}/pages`
- Auth: one of:
  - HTTP bearer
  - HTTP bearer

Supply limit or cursor to opt into bounded pages ordered by immutable created_at then ID descending. Filter-only and queryless requests retain the legacy complete response. Filters are case-insensitive comma lists. change accepts new, changed, moved and unchanged; compliance accepts pass, warning, fail, error and none (no recorded state); capture accepts captured and error (failed is an alias). q is a literal substring of requested URL, final URL or title. total is always the unfiltered audit count. Paged lists include rule results but omit artifacts; use the observation detail endpoint for retained artifact metadata.

## Path parameters

- `auditId` string, uuid, required

## Query parameters

- `change` string
- `compliance` string
- `capture` string
- `q` string
- `limit` integer
- `cursor` string

## Response `200`

Retained observation metadata

- AuditPageList
  - `next_cursor` string: Opaque timestamp/ID boundary; absent on the final page and for legacy unpaged requests.
  - `pages` PageObservation[], required
    - `artifacts` Artifact[]
      - `audit_id` string, required
      - `byte_length` integer, required
      - `created_at` string, date-time, required
      - `derived_from_sha256` string
      - `expires_at` string, date-time
      - `hosted_state` 'available' | 'expiring' | 'deleted'
      - `id` string, required
      - `media_type` string, required
      - `name` string, required
      - `object_key` string, required
      - `organisation_id` string, required
      - `page_observation_id` string
      - `sha256` string, required
      - `transformation` string
      - `type` string, required
    - `audit_id` string, required
    - `canonical_url` string
    - `capture_status` 'captured' | 'error', required
    - `captured_at` string, date-time
    - `change_classification` 'NEW' | 'MOVED' | 'CHANGED' | 'UNCHANGED'
    - `compliance_state` 'PASS' | 'WARNING' | 'FAIL' | 'ERROR'
    - `created_at` string, date-time, required
    - `error` string
    - `final_url` string
    - `http_status` integer
    - `id` string, required
    - `merkle_proof` MerkleStep[]
      - `hash` string, required
      - `side` 'left' | 'right', required
    - `metadata` CaptureMetadata, required
      - `browser` string, required
      - `browser_version` string, required
      - `build_id` string, required
      - `capture_truncated` boolean, required
      - `colour_scheme` string, required
      - `device_scale_factor` number, required
      - `dns_answers` string[], nullable, required
      - `duration_ms` integer, required
      - `locale` string, required
      - `region` string, required
      - `remote_port` integer
      - `response_headers` object, nullable, required
      - `settle_ms` integer, required
      - `settle_outcome` string, required
      - `timezone` string, required
      - `tls_certificate_sha256` string
      - `tls_cipher` string
      - `tls_issuer` string
      - `tls_protocol` string
      - `tls_subject` string
      - `tls_valid_from` string
      - `tls_valid_to` string
      - `transformations` string[], nullable, required
      - `user_agent` string, required
      - `viewport_height` integer, required
      - `viewport_width` integer, required
      - `worker_id` string, required
    - `observed_remote_ip` string
    - `page_hash` string
    - `page_id` string, required
    - `previous_observation_id` string
    - `redirect_chain` Redirect[], nullable, required
      - `status_code` integer, required
      - `url` string, required
    - `requested_url` string, required
    - `rule_results` RuleResult[]
      - `audit_id` string, required
      - `evaluated_at` string, date-time, required
      - `evidence_excerpt` string
      - `expected` string
      - `id` string, required
      - `observed` string
      - `page_observation_id` string, required
      - `rule_id` string, required: The exact rule revision this result was evaluated against.
      - `rule_lineage_id` string, required: The rule across every revision of it. Match a finding on this rather than reading a rule's whole revision history to see whether a result is its own.
      - `rule_name` string, required
      - `rule_version` integer, required
      - `severity` 'info' | 'warning' | 'failure' | 'critical', required
      - `status` 'pass' | 'fail' | 'warning' | 'not_applicable' | 'error', required
    - `text_changed` boolean, required
    - `textual_change_score` number, required
    - `title` string
    - `visual_change_score` number, required
    - `visual_changed` boolean, required
  - `total` integer, required: Unfiltered observation count for this audit; not the matching count.

## Other responses

- `400`: Problem response
- `404`: Problem response

---

[API](https://skmtc.dev/ironfang/apis/ironfang-audit-api.md) · [All operations](https://skmtc.dev/ironfang/apis/ironfang-audit-api/llms.txt) · [OpenAPI document](https://skmtc.dev/ironfang/apis/ironfang-audit-api/revisions/7430deff2cbd?raw)
