---
title: "A page's observation history, newest first"
method: GET
path: "/v1/pages/{pageId}/observations"
tags: ["Pages"]
---

# A page's observation history, newest first

`GET /v1/pages/{pageId}/observations`

## Request

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

Returns paginated observations for a page within the authenticated organisation. Supply the returned next_cursor to continue through older observations, ordered by immutable created_at then ID descending. Lists include rule results but omit artifacts. Empty and foreign page IDs return an empty list. Repeated and unknown query parameters are rejected.

## Path parameters

- `pageId` string, uuid, required

## Query parameters

- `limit` integer
- `cursor` string

## Response `200`

Retained observation metadata

- ObservationList
  - `next_cursor` string, required: Opaque timestamp/ID boundary; empty on the final page.
  - `observations` 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

## Other responses

- `400`: 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)
