---
title: "List Scan Children"
method: GET
path: "/api/v1/scans/{scan_id}/children"
tags: ["scans"]
---

# List Scan Children

`GET /api/v1/scans/{scan_id}/children`

## Request

- Base URL: `https://app.kaminari.ad`
- URL: `https://app.kaminari.ad/api/v1/scans/{scan_id}/children`
- Auth: HTTP bearer

List the ad-discovery child scans of a publisher scan.

## Path parameters

- `scan_id` string, uuid, required

## Query parameters

- `page` integer
- `limit` integer

## Response `200`

Successful Response

- PaginatedResponseScanBriefResponse
  - `items` ScanBriefResponse[], required
    - `id` string, uuid, required
    - `url` string, required
    - `country_code` string, required
    - `proxy_type` string
    - `status` 'pending' | 'running' | 'crawled' | 'checking' | 'checking_async' | 'rechecking' | 'completed' | 'partial' | 'failed' | 'cancelled', required: Status of a scan through its lifecycle. Ordered: pending(0) → running(1) → crawled(2) → checking(3) → checking_async(4) → terminal(5). Forward-only transitions enforced by advance_status() in the DB (see status_order() Postgres function). ``CHECKING_ASYNC`` means all inline parts (regexp + domain checks) have been applied and we are waiting only on async parts (LLM batch today, SafeBrowsing / VirusTotal tomorrow). UI can show partial tags + alerts at this stage; only classification is still pending. ``RECHECKING`` is a **transient** state used **only** by the recheck flow. The recheck use case atomically moves a scan from a terminal state into ``RECHECKING``, wipes prior tags (CH tombstones), wipes scan_part_state, then atomically transitions to ``CHECKING`` with fresh ``expected_parts``. Both transitions bypass the forward-only ``advance_status()`` guard via dedicated repository methods. Why RECHECKING exists: stale ``check.parts.*`` messages for a now- rechecking scan must NOT write tags (those would survive the wipe without tombstones, corrupting the post-recheck tag set). Consumers check ``WRITE_BLOCKED_STATUSES`` and skip the message when the scan is in ``RECHECKING``. Defence in depth — the TagWriterAdapter's UoW also re-reads the scan status before save.
    - `offer_url` string, required
    - `screenshot_url` string
    - `report_url` string
    - `public_report_url` string
    - `labels` object
    - `classification` ScanClassificationResponse: Classification result for a scan — AI category + IAB V3 + brand + custom taxonomies.
      - `brand` string, nullable
      - `ai_category` AiCategoryResponse: Freeform AI category tiers (legacy ``iab_v3`` semantics).
        - `tier1` string, required
        - `tier2` string, nullable
        - `tier3` string, nullable
        - `tier4` string, nullable
      - `iab_v3` IabV3CategoryResponse: Canonical IAB Content Taxonomy V3 category tiers (validated).
        - `tier1` string, required
        - `tier2` string, nullable
        - `tier3` string, nullable
        - `tier4` string, nullable
      - `custom_taxonomies` ScanTaxonomyClassificationResponse[]
        - `taxonomy_id` string, uuid, required
        - `taxonomy_name` string, required
        - `taxonomy_slug` string, required
        - `taxonomy_version` integer, required
        - `leaf_node_id` string, uuid, nullable, required
        - `tier1` string, nullable, required
        - `tier2` string, nullable
        - `tier3` string, nullable
        - `tier4` string, nullable
        - `used_default` boolean
    - `elapsed_ms` integer, required
    - `created_at` string, date-time, required
    - `campaign_id` string, uuid, nullable
    - `campaign_name` string, nullable
    - `is_ad_tag` boolean
    - `is_vast` boolean
    - `parent_scan_id` string, uuid, nullable
    - `ad_discovery` boolean
    - `slot_index` integer, nullable
    - `ad_kind` string, nullable
    - `network` string
    - `network_host` string
    - `emulator_display_name` string
    - `emulator_category` string
    - `repeat_index` integer
    - `repeat_total` integer
    - `repeat_session_id` string, uuid, nullable
    - `retry_attempt` integer
    - `retry_max_attempts` integer
  - `total` integer, required
  - `page` integer, required
  - `limit` integer, required
  - `pages` integer, required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/kaminari/apis/kaminari-ad-api.md) · [All operations](https://skmtc.dev/kaminari/apis/kaminari-ad-api/llms.txt) · [OpenAPI document](https://skmtc.dev/kaminari/apis/kaminari-ad-api/revisions/013f86e2fd32?raw)
