---
title: "Start a video outlier analysis job"
method: POST
path: "/v1/satellite/video-outlier"
tags: ["Satellite"]
---

# Start a video outlier analysis job

`POST /v1/satellite/video-outlier`

## Request

- Base URL: `https://api.virlo.ai`
- URL: `https://api.virlo.ai/v1/satellite/video-outlier`
- Auth: HTTP bearer

Queues a video for outlier analysis. Returns immediately with a job_id. Poll GET /v1/satellite/video-outlier/status/:job_id for results. Supports YouTube, TikTok, and Instagram URLs.

## Request body

- AnalyzeVideoDto
  - `url` string, required: Full video URL. Supports YouTube, TikTok, and Instagram.
  - `platform` 'youtube' | 'tiktok' | 'instagram', required: The social media platform

## Response `200`

Job queued successfully

- SatelliteJobQueuedResponseDto
  - `data` SatelliteJobQueuedDataDto, required
    - `job_id` string, required
    - `status` string, required: Usually "processing". On a cache hit (same lookup repeated within the 6-hour window, answered by a run that covers every option asked for) the job is already done and this is "completed" — poll the status endpoint once to read the result, or re-read it free via GET /v1/satellite/runs/:run_id.
    - `cached` boolean: Present and true when the lookup was served from the 6-hour cache. The cache only answers with a run that covers every option this request asks for; a request it does not cover (for example trend_analysis=true after a plain lookup) runs fresh and is charged. Cached responses are free — no credits are deducted (X-Credits-Used: 0).

## Other responses

- `400`: Bad request - invalid or unsupported URL, or invalid platform
- `401`: Unauthorized - missing or invalid API key
- `429`: Too many requests - rate limit exceeded

---

[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)
