---
title: "Re-read a satellite run"
method: GET
path: "/v1/satellite/runs/{run_id}"
tags: ["Satellite"]
---

# Re-read a satellite run

`GET /v1/satellite/runs/{run_id}`

## Request

- Base URL: `https://api.virlo.ai`
- URL: `https://api.virlo.ai/v1/satellite/runs/{run_id}`
- Auth: HTTP bearer

Returns the persisted result of any satellite run owned by your team. Free to call; you already paid when the run was created. Use this to access historical lookups without re-spending credits. To get fresh data, start a new lookup — that will cost credits again.

## Path parameters

- `run_id` string, required

## Response `200`

Run found and returned in full

- GetSatelliteRunResponseDto
  - `data` SatelliteRunDetailDto, required
    - `run_id` string, required
    - `type` 'creator_lookup' | 'sound_lookup' | 'hashtag_lookup' | 'video_outlier' | 'batch_creator', required: Discriminator: which kind of satellite run this is.
    - `platform` string, required
    - `status` string, required
    - `subject` string, nullable
    - `created_at` string, date-time, required
    - `completed_at` string, date-time, nullable
    - `credits_used` number, nullable
    - `request` object, nullable
    - `result` object, nullable: The persisted lookup result. For a creator_lookup started with data_intelligence=true, each entry in result.videos[] (and result.outliers.outlier_videos[]) additionally carries an `intelligence` object — the full per-video content analysis (hook, hook_type, content_format, visual_format, is_sponsored, brands_mentioned, cta_usages, sentiment, brand_safety_tier, language_detected, and ~35 more fields, identical to the CRA /v1/agents/:id/videos `intelligence` shape) — plus a per-video `intelligence_status` (ready | pending | disabled | failed | skipped). These populate once async enrichment finishes; poll the run-level `intelligence_status` for readiness.
    - `analysis` object, nullable: The grounded "what's working" analysis, present only on creator lookups started with data_intelligence=true. Null until the async enrichment + analysis finish (see intelligence_status). Structured breakdown of the hooks, formats, and patterns driving this creator's best videos.
    - `intelligence_status` string, nullable: Lifecycle of the Data-Intelligence enrichment for a data_intelligence=true run: "pending" | "ready" | "failed" | "skipped". "ready" means `analysis` and per-video intelligence are populated. Null on runs that did not opt in.
    - `error` string, nullable
    - `credits_refunded` number: Credits paid back for this run because part of it was not delivered: the whole charge when the lookup failed, the trend_analysis surcharge when no trends came out, the audience surcharge when no new snapshot was needed. Present only when a refund was made, on failed and completed runs alike.

## Other responses

- `401`: Unauthorized - missing or invalid API key
- `404`: Run not found or not owned by your team
- `429`: Rate limit exceeded (`rate_limit_exceeded`); see the Retry-After header

---

[API](https://skmtc.dev/virlo/apis/virlo-public-api.md) · [All operations](https://skmtc.dev/virlo/apis/virlo-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/virlo/apis/virlo-public-api/revisions/3b69c6145087?raw)
