Payloads

Every webhook delivery carries exactly one record, in a flat, Ziperase-aligned schema. This page is the record contract — the rules every record follows, then the two big record types field by field.

The record contract

This is payload version 2. All records follow the same rules:

  • Flat snake_case scalars at the top level. No nested payload wrapper — the record's fields sit directly beside the envelope's event_id / event_type / created_at.
  • Typed child arrays. Repeated hardware (memory modules, drives, ports, batteries, test results) lives in arrays of flat rows, and every row carries the parent machine's hardware_id so rows remain self-describing if you flatten them into separate tables.
  • null means "not collected." A field the engine could not read is null, never omitted and never an empty string.
  • No batching. One record per POST — a 24-drive hotswap session is 24 separate wipe_session_completed deliveries, never one delivery with 24 reports.
  • Additive versioning. Within a major payload version, fields are added but never removed or renamed. Ignore unknown fields; do not reject a payload for carrying one you haven't seen.
  • Upsert on id + revision. Every record carries a stable id, its type, updated_at, and revision (the Unix-seconds form of updated_at). Apply a record when its revision is greater than or equal to the stored one; retries and re-reports never duplicate rows on your side.

The two small record shapes (wipe_session for ready/blocked events, certificate_report) are covered inline on the Event types page. The two large ones — asset_report and wipe_report — follow.


asset_report

Sent with the asset_reported event — fired once, at the machine's first boot: the machine's complete hardware picture, with the full test_result catalog still Not started. A full real-world example (a Dell Latitude 5540 with every child array populated) is at the bottom of this section.

Top-level fields

  • Name
    id
    Type
    string
    Description

    Stable asset_… identifier for the physical machine. Re-boots update this record; they never create a new id.

  • Name
    type
    Type
    string
    Description

    Always asset_report.

  • Name
    created_at
    Type
    timestamp
    Description

    When the machine was first seen by your account.

  • Name
    updated_at
    Type
    timestamp
    Description

    Last update to the record.

  • Name
    deleted_at
    Type
    null
    Description

    Always null.

  • Name
    uploaded_at
    Type
    timestamp
    Description

    The machine's most recent boot report (last_booted_at).

  • Name
    revision
    Type
    integer
    Description

    Unix seconds of updated_at — the upsert cursor.

  • Name
    software_version
    Type
    string
    Description

    Version of the erasure engine that produced the report.

  • Name
    hardware_id
    Type
    string
    Description

    The machine's DMI UUID and serial joined with a slash, e.g. 4c4c4544-…-b9c04f4b5933/74HRKY3. Repeated on every child-array row.

  • Name
    report_id
    Type
    string
    Description

    The boot report's CW-… record id, e.g. CW-20260812-000117.

  • Name
    batch_name
    Type
    string
    Description

    The report date as YYYY-MM-DD.

  • Name
    system_vendor
    Type
    string
    Description

    Machine manufacturer, e.g. Dell Inc.

  • Name
    system_model
    Type
    string
    Description

    Model, e.g. Latitude 5540.

  • Name
    system_uuid
    Type
    string
    Description

    DMI system UUID.

  • Name
    system_serial
    Type
    string
    Description

    System serial number.

  • Name
    system_family
    Type
    string
    Description

    Product family, e.g. Latitude.

  • Name
    system_sku_number
    Type
    string
    Description

    SKU number.

  • Name
    chassis_type
    Type
    string
    Description

    Chassis type, e.g. Notebook.

  • Name
    chassis_asset_tag
    Type
    string or null
    Description

    Asset tag, when set in firmware.

  • Name
    chassis_serial
    Type
    string
    Description

    Chassis serial.

  • Name
    cpu_vendor
    Type
    string
    Description

    CPU vendor string, e.g. GenuineIntel.

  • Name
    cpu_model
    Type
    string
    Description

    Full CPU model, e.g. 13th Gen Intel(R) Core(TM) i5-1335U.

  • Name
    cpu_speed_mhz
    Type
    integer
    Description

    Maximum clock in MHz, e.g. 4600.

  • Name
    cpu_speed_display
    Type
    string
    Description

    cpu_speed_mhz rendered for humans: 4600"4.60 GHz".

  • Name
    cpu_l2_cache
    Type
    string
    Description

    L2 cache size, e.g. 6.5 MiB.

  • Name
    cpu_l3_cache
    Type
    string
    Description

    L3 cache size, e.g. 12 MiB.

  • Name
    cpu_number_of_cores
    Type
    integer
    Description

    Total cores.

  • Name
    cpu_threads_per_core
    Type
    integer
    Description

    Threads per core.

  • Name
    cpu_cores_per_socket
    Type
    integer
    Description

    Cores per socket.

  • Name
    cpu_number_of_sockets
    Type
    integer
    Description

    Socket count.

  • Name
    bios
    Type
    string
    Description

    BIOS vendor, version, and date in one string, e.g. Dell Inc. 1.14.2 08/15/2024.

  • Name
    baseboard_vendor
    Type
    string
    Description

    Motherboard vendor.

  • Name
    baseboard_model
    Type
    string
    Description

    Motherboard model.

  • Name
    baseboard_serial
    Type
    string
    Description

    Motherboard serial.

  • Name
    firmware_mode
    Type
    string
    Description

    UEFI or Legacy BIOS.

  • Name
    secure_boot
    Type
    boolean
    Description

    Whether Secure Boot is enabled.

  • Name
    tpm
    Type
    string or null
    Description

    TPM version, e.g. 2.0.

  • Name
    primary_display_resolution
    Type
    string
    Description

    e.g. 1920x1080.

  • Name
    primary_display_size
    Type
    string
    Description

    Diagonal size, e.g. 15.6".

  • Name
    usb_version
    Type
    string
    Description

    Highest USB version detected, e.g. 3.10.

  • Name
    memory_total_capacity_bytes
    Type
    integer
    Description

    Total RAM in bytes — binary units, so 16 GB reports as 17179869184 (16 × 1024³).

  • Name
    memory_total_capacity_display
    Type
    string
    Description

    Human form of the above, e.g. "16.00 GB". Note the unit convention: memory capacities are binary, disk capacities decimal.

Child arrays

Every row in every array repeats the parent's hardware_id.

memory

One row per populated DIMM slot.

  • Name
    slot
    Type
    string
    Description

    Slot designator, e.g. DIMM A.

  • Name
    capacity_bytes
    Type
    integer
    Description

    Module size in bytes (binary units).

  • Name
    capacity_display
    Type
    string
    Description

    e.g. "8.00 GB".

  • Name
    description
    Type
    string
    Description

    Form factor, type, speed, and part, e.g. DIMM DDR4 3200 MT/s SK Hynix HMAA1GS6CJR6N-XN.

network

Physical network interfaces only — no virtual or tunnel interfaces.

  • Name
    vendor
    Type
    string
    Description

    e.g. Intel Corporation.

  • Name
    model
    Type
    string
    Description

    e.g. Raptor Lake PCH CNVi WiFi.

  • Name
    type
    Type
    string
    Description

    wireless when the interface name starts with wl, otherwise wired.

  • Name
    mac
    Type
    string
    Description

    Hardware address.

storage

  • Name
    vendor
    Type
    string
    Description

    e.g. Samsung Electronics Co Ltd.

  • Name
    model
    Type
    string
    Description

    e.g. NVMe SSD Controller PM9B1.

  • Name
    description
    Type
    string
    Description

    PCI class description, e.g. Non-Volatile memory controller.

disk

One row per physical drive, including SMART health.

  • Name
    display_name
    Type
    string
    Description

    e.g. Disk 1.

  • Name
    vendor
    Type
    null
    Description

    Always null (the vendor is part of model).

  • Name
    model
    Type
    string
    Description

    e.g. SAMSUNG MZVL2512HDJD-00BL2.

  • Name
    serial
    Type
    string
    Description

    Drive serial — the join key to wipe_report.serial.

  • Name
    firmware_version
    Type
    string
    Description

    Drive firmware revision.

  • Name
    capacity_bytes
    Type
    integer
    Description

    Capacity in bytes — decimal units for drives.

  • Name
    capacity_display
    Type
    string
    Description

    e.g. "512 GB", "1.5 TB".

  • Name
    medium_display
    Type
    string
    Description

    Rotational or Solid state.

  • Name
    transport
    Type
    string
    Description

    e.g. nvme, sata.

  • Name
    smart_overall_health_display
    Type
    string or null
    Description

    Good or Bad.

  • Name
    power_on_hours
    Type
    integer or null
    Description

    SMART power-on hours.

  • Name
    temperature_celsius
    Type
    integer or null
    Description

    Current drive temperature.

  • Name
    reallocated_sector_count
    Type
    integer or null
    Description

    SMART reallocated sectors.

  • Name
    system_serial
    Type
    string
    Description

    The host machine's serial, repeated for convenience.

video and audio

  • Name
    vendor
    Type
    null
    Description

    Always null.

  • Name
    model
    Type
    string
    Description

    e.g. Intel Iris Xe Graphics / Intel Corporation Raptor Lake-P/U/H cAVS.

port

External connectors, from the firmware's port tables.

  • Name
    type
    Type
    string
    Description

    e.g. USB, Video Port, Audio Port.

  • Name
    designator
    Type
    string
    Description

    Firmware designator, e.g. USB1, HDMI, Audio Jack.

  • Name
    connector
    Type
    string
    Description

    Connector kind, e.g. USB Type-C, HDMI, Mini Jack (headphones).

battery

  • Name
    name
    Type
    string
    Description

    e.g. BAT0.

  • Name
    manufacturer
    Type
    string
    Description

    e.g. SMP.

  • Name
    serial
    Type
    string
    Description

    Battery serial.

  • Name
    chemistry
    Type
    string
    Description

    e.g. Li-poly.

  • Name
    health_pct
    Type
    integer
    Description

    Full-charge capacity as a percentage of design capacity.

  • Name
    cycle_count
    Type
    integer
    Description

    Charge cycles.

  • Name
    full_wh
    Type
    number
    Description

    Current full-charge capacity in Wh.

  • Name
    design_wh
    Type
    number
    Description

    Design capacity in Wh.

test_result

The machine's hardware test snapshot — the same rows delivered by hardware_tests_completed. The array always contains the full test catalog: at first boot (when asset_reported fires) every row is Not started; outcomes replace those rows as later hardware_tests_completed events update the record.

  • Name
    name
    Type
    string
    Description

    The test's wire id: keyboard, display, usb_ports, battery, wifi_adapter, bluetooth, webcam, audio, or touchscreen (the catalog may grow).

  • Name
    name_display
    Type
    string
    Description

    The engine's label for the test, e.g. Keyboard, USB Ports, WiFi Adapter.

  • Name
    result_display
    Type
    string
    Description

    Display mapping of the engine's status: passedPass, failedFail, not_startedNot started, not_applicableNot applicable. A test with no submitted status defaults to Not started; any other status passes through unmapped.

  • Name
    notes
    Type
    string
    Description

    Operator detail, e.g. no image; empty string when none.

optical, peripheral, extra

Always present, always [] — reserved by the schema for compatibility. Don't be surprised by them; don't wait for them to fill.

Full example

asset_reported delivery

{
  "event_id": "3f7a2b9c-8d1e-4a5f-b6c7-d8e9f0a1b2c3",
  "event_type": "asset_reported",
  "id": "asset_01J4QZ8T2M9V6XW3YB5NC7DEFG",
  "type": "asset_report",
  "created_at": "2026-08-12T16:58:11Z",
  "updated_at": "2026-08-12T16:58:11Z",
  "deleted_at": null,
  "uploaded_at": "2026-08-12T16:58:11Z",
  "revision": 1786813091,
  "software_version": "0.9.0",
  "hardware_id": "4c4c4544-0034-5a10-8052-b9c04f4b5933/74HRKY3",
  "report_id": "CW-20260812-000117",
  "batch_name": "2026-08-12",
  "system_vendor": "Dell Inc.",
  "system_model": "Latitude 5540",
  "system_uuid": "4c4c4544-0034-5a10-8052-b9c04f4b5933",
  "system_serial": "74HRKY3",
  "system_family": "Latitude",
  "system_sku_number": "0B30",
  "chassis_type": "Notebook",
  "chassis_asset_tag": null,
  "chassis_serial": "74HRKY3",
  "cpu_vendor": "GenuineIntel",
  "cpu_model": "13th Gen Intel(R) Core(TM) i5-1335U",
  "cpu_speed_mhz": 4600,
  "cpu_speed_display": "4.60 GHz",
  "cpu_l2_cache": "6.5 MiB",
  "cpu_l3_cache": "12 MiB",
  "cpu_number_of_cores": 10,
  "cpu_threads_per_core": 1,
  "cpu_cores_per_socket": 10,
  "cpu_number_of_sockets": 1,
  "bios": "Dell Inc. 1.14.2 08/15/2024",
  "baseboard_vendor": "Dell Inc.",
  "baseboard_model": "0C3Y7M",
  "baseboard_serial": "/74HRKY3/CNFCW003AI00TC/",
  "firmware_mode": "UEFI",
  "secure_boot": true,
  "tpm": "2.0",
  "primary_display_resolution": "1920x1080",
  "primary_display_size": "15.6\"",
  "usb_version": "3.10",
  "memory_total_capacity_bytes": 17179869184,
  "memory_total_capacity_display": "16.00 GB",
  "memory": [
    {
      "hardware_id": "4c4c4544-0034-5a10-8052-b9c04f4b5933/74HRKY3",
      "slot": "DIMM A",
      "capacity_bytes": 8589934592,
      "capacity_display": "8.00 GB",
      "description": "DIMM DDR4 3200 MT/s SK Hynix HMAA1GS6CJR6N-XN"
    },
    {
      "hardware_id": "4c4c4544-0034-5a10-8052-b9c04f4b5933/74HRKY3",
      "slot": "DIMM B",
      "capacity_bytes": 8589934592,
      "capacity_display": "8.00 GB",
      "description": "DIMM DDR4 3200 MT/s SK Hynix HMAA1GS6CJR6N-XN"
    }
  ],
  "network": [
    {
      "hardware_id": "4c4c4544-0034-5a10-8052-b9c04f4b5933/74HRKY3",
      "vendor": "Intel Corporation",
      "model": "Raptor Lake PCH CNVi WiFi",
      "type": "wireless",
      "mac": "a4:42:3b:8e:11:02"
    },
    {
      "hardware_id": "4c4c4544-0034-5a10-8052-b9c04f4b5933/74HRKY3",
      "vendor": "Intel Corporation",
      "model": "Ethernet Connection (23) I219-LM",
      "type": "wired",
      "mac": "8c:8c:aa:4e:22:17"
    }
  ],
  "storage": [
    {
      "hardware_id": "4c4c4544-0034-5a10-8052-b9c04f4b5933/74HRKY3",
      "vendor": "Samsung Electronics Co Ltd",
      "model": "NVMe SSD Controller PM9B1",
      "description": "Non-Volatile memory controller"
    }
  ],
  "disk": [
    {
      "hardware_id": "4c4c4544-0034-5a10-8052-b9c04f4b5933/74HRKY3",
      "display_name": "Disk 1",
      "vendor": null,
      "model": "SAMSUNG MZVL2512HDJD-00BL2",
      "serial": "S64FNE2R504071",
      "firmware_version": "GXA7601Q",
      "capacity_bytes": 512110190592,
      "capacity_display": "512 GB",
      "medium_display": "Solid state",
      "transport": "nvme",
      "smart_overall_health_display": "Good",
      "power_on_hours": 1244,
      "temperature_celsius": 38,
      "reallocated_sector_count": 0,
      "system_serial": "74HRKY3"
    }
  ],
  "optical": [],
  "video": [
    {
      "hardware_id": "4c4c4544-0034-5a10-8052-b9c04f4b5933/74HRKY3",
      "vendor": null,
      "model": "Intel Iris Xe Graphics"
    }
  ],
  "audio": [
    {
      "hardware_id": "4c4c4544-0034-5a10-8052-b9c04f4b5933/74HRKY3",
      "vendor": null,
      "model": "Intel Corporation Raptor Lake-P/U/H cAVS"
    }
  ],
  "port": [
    {
      "hardware_id": "4c4c4544-0034-5a10-8052-b9c04f4b5933/74HRKY3",
      "type": "USB",
      "designator": "USB1",
      "connector": "USB Type-C"
    },
    {
      "hardware_id": "4c4c4544-0034-5a10-8052-b9c04f4b5933/74HRKY3",
      "type": "Video Port",
      "designator": "HDMI",
      "connector": "HDMI"
    },
    {
      "hardware_id": "4c4c4544-0034-5a10-8052-b9c04f4b5933/74HRKY3",
      "type": "Audio Port",
      "designator": "Audio Jack",
      "connector": "Mini Jack (headphones)"
    }
  ],
  "peripheral": [],
  "battery": [
    {
      "hardware_id": "4c4c4544-0034-5a10-8052-b9c04f4b5933/74HRKY3",
      "name": "BAT0",
      "manufacturer": "SMP",
      "serial": "2718",
      "chemistry": "Li-poly",
      "health_pct": 94,
      "cycle_count": 112,
      "full_wh": 51.9,
      "design_wh": 54.6
    }
  ],
  "extra": [],
  "test_result": [
    {
      "hardware_id": "4c4c4544-0034-5a10-8052-b9c04f4b5933/74HRKY3",
      "name": "keyboard",
      "name_display": "Keyboard",
      "result_display": "Not started",
      "notes": ""
    },
    {
      "hardware_id": "4c4c4544-0034-5a10-8052-b9c04f4b5933/74HRKY3",
      "name": "display",
      "name_display": "Display",
      "result_display": "Not started",
      "notes": ""
    },
    {
      "hardware_id": "4c4c4544-0034-5a10-8052-b9c04f4b5933/74HRKY3",
      "name": "usb_ports",
      "name_display": "USB Ports",
      "result_display": "Not started",
      "notes": ""
    },
    {
      "hardware_id": "4c4c4544-0034-5a10-8052-b9c04f4b5933/74HRKY3",
      "name": "battery",
      "name_display": "Battery",
      "result_display": "Not started",
      "notes": ""
    },
    {
      "hardware_id": "4c4c4544-0034-5a10-8052-b9c04f4b5933/74HRKY3",
      "name": "wifi_adapter",
      "name_display": "WiFi Adapter",
      "result_display": "Not started",
      "notes": ""
    },
    {
      "hardware_id": "4c4c4544-0034-5a10-8052-b9c04f4b5933/74HRKY3",
      "name": "bluetooth",
      "name_display": "Bluetooth",
      "result_display": "Not started",
      "notes": ""
    },
    {
      "hardware_id": "4c4c4544-0034-5a10-8052-b9c04f4b5933/74HRKY3",
      "name": "webcam",
      "name_display": "Webcam",
      "result_display": "Not started",
      "notes": ""
    },
    {
      "hardware_id": "4c4c4544-0034-5a10-8052-b9c04f4b5933/74HRKY3",
      "name": "audio",
      "name_display": "Audio",
      "result_display": "Not started",
      "notes": ""
    },
    {
      "hardware_id": "4c4c4544-0034-5a10-8052-b9c04f4b5933/74HRKY3",
      "name": "touchscreen",
      "name_display": "Touchscreen",
      "result_display": "Not started",
      "notes": ""
    }
  ]
}

wipe_report

Sent with every wipe_session_completed event — one record per drive, for successes and failures alike. A full verbatim example is on the Event types page.

  • Name
    id
    Type
    string
    Description

    The wipe result's wr_… identifier.

  • Name
    type
    Type
    string
    Description

    Always wipe_report.

  • Name
    product
    Type
    string
    Description

    engine or hotswap — which product performed the wipe.

  • Name
    created_at
    Type
    timestamp
    Description

    When the wipe result row was created (first receipt).

  • Name
    updated_at
    Type
    timestamp
    Description

    Last update; revision is its Unix-seconds form.

  • Name
    deleted_at
    Type
    null
    Description

    Always null.

  • Name
    hardware_id
    Type
    string or null
    Description

    The source machine's DMI uuid/serial — populated when the drive's serial matched a reported machine. null for hotswap wipes and for machines that never sent an asset report, along with asset_id and system_serial.

  • Name
    asset_id
    Type
    string or null
    Description

    The matched machine's asset_… id, or null (see above).

  • Name
    system_serial
    Type
    string or null
    Description

    The matched machine's serial, or null (see above).

  • Name
    report_id
    Type
    string
    Description

    The session's job_id — same value as job_id.

  • Name
    job_id
    Type
    uuid
    Description

    The wipe authorization's job id, issued at check-in. Joins to wipe_session_ready (whose record id is this UUID) and to certificate_generated.job_id. Wipe submission is idempotent on it.

  • Name
    batch_name
    Type
    string
    Description

    Date as YYYY-MM-DD.

  • Name
    vendor
    Type
    null
    Description

    Always null (vendor is part of model).

  • Name
    model
    Type
    string
    Description

    Drive model, e.g. SAMSUNG MZVL2512HDJD-00BL2.

  • Name
    serial
    Type
    string
    Description

    Drive serial — the join key to asset_report.disk[].serial.

  • Name
    capacity_bytes
    Type
    integer
    Description

    Reported capacity in GB × 10⁹ (decimal units, like all drive capacities).

  • Name
    capacity_display
    Type
    string
    Description

    e.g. "512 GB".

  • Name
    erase_algorithm
    Type
    string
    Description

    Machine-readable snake_case algorithm, e.g. nist_800_88_r2_purge.

  • Name
    erase_algorithm_display
    Type
    string
    Description

    The algorithm exactly as it appears on screens and certificates, e.g. NIST 800-88 R2 Purge.

  • Name
    erase_technique
    Type
    string
    Description

    The concrete technique used, e.g. NVMe Sanitize — crypto erase.

  • Name
    erase_level
    Type
    string or null
    Description

    Purge, Clear, Destroy, or null.

  • Name
    status_display
    Type
    string
    Description

    Completed, Failed, or Cancelled.

  • Name
    erase_result_display
    Type
    string
    Description

    Pass if — and only if — the wipe completed.

  • Name
    erase_start_time
    Type
    timestamp
    Description

    When the erasure started.

  • Name
    erase_finish_time
    Type
    timestamp
    Description

    When it finished.

  • Name
    erase_duration_seconds
    Type
    integer
    Description

    Elapsed seconds.

  • Name
    erase_duration_display
    Type
    string
    Description

    e.g. "00h37m".

  • Name
    wipe_status
    Type
    string or null
    Description

    Raw status: completed, failed, or cancelled. null on legacy rows reads as completed.

  • Name
    passes_completed
    Type
    integer or null
    Description

    Overwrite passes; null for crypto-erase and block-erase techniques, which don't overwrite.

  • Name
    validation
    Type
    string or null
    Description

    approved or rejected; absent/null reads as approved.

  • Name
    disposition
    Type
    string
    Description

    e.g. sanitized, review, destroy.

  • Name
    markings_removed
    Type
    boolean
    Description

    Whether media markings/labels were removed.

  • Name
    tool_components
    Type
    string
    Description

    Tooling used, e.g. nvme-cli 2.4.

  • Name
    verification_result
    Type
    string
    Description

    Human-readable verification outcome, e.g. Pass — 32/32 fingerprint sectors overwritten.

  • Name
    verification_hash
    Type
    string
    Description

    SHA-256 over the re-read verification bytes.

  • Name
    certificate_status
    Type
    string
    Description

    pending, generating, complete, or failed. Don't wait on it — at delivery time it is usually still pending; the certificate announces itself via certificate_generated.

  • Name
    certificate_url
    Type
    string or null
    Description

    null until the certificate PDF is uploaded.

  • Name
    license_token_id
    Type
    string
    Description

    The ltok_… token that authorized the wipe.

  • Name
    operator
    Type
    string
    Description

    The operating technician's name.


Joining disks to wipe reports

The drive serial is the join key across record types: asset_report.disk[].serialwipe_report.serial.

An asset_report tells you which drives a machine contains; each wipe_report tells you one drive was erased. Match on serial to attach wipe outcomes to the drive rows of your inventory — the same matching AVERASE itself performs to populate wipe_report.hardware_id / asset_id / system_serial. Remember those three are null for hotswap wipes (drives erased in a bay chassis, detached from their source machine), so serial-level joins are the only link you can count on universally.


Migrating from payload v1

If you consumed the v1 payloads, here is everything that changed:

v1v2
Envelope idRenamed to event_id
reports: [] array of reports per deliveryGone — exactly one record per delivery, flat at the top level
Batch size capsGone — no batching exists to cap
Free-form fingerprint document on asset eventsReplaced by the flat Ziperase machine record (asset_report)
Nested test_results objectReplaced by the test_result array of flat rows
Wipe report field namesRenamed to the Ziperase disk names: serial, erase_algorithm / erase_algorithm_display, erase_start_time, erase_result_display, and so on
Test ping with reportsTest ping no longer carries reports
Headers, HMAC signing, retries, auto-disableUnchanged — verification code and delivery handling carry over as-is

Was this page helpful?