---
title: "Paginated per-league capture-scope assets for internal service sync"
method: GET
path: "/api/internal/sync/league-assets"
tags: ["Internal Sync"]
---

# Paginated per-league capture-scope assets for internal service sync

`GET /api/internal/sync/league-assets`

## Request

- Base URL: `https://api.sponsorunited.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.sponsorunited.com/api/internal/sync/league-assets`
- Auth: API key in header `X-API-Key`
- TypeScript: <https://skmtc.dev/sponsorunited/apis/sponsorunited-api/docs/api/internal/sync/league-assets/get.ts> (a function with typed inputs; its response is checked against the schema)

Returns a cursor-paginated list of the assets in capture scope for each league: every league_items row whose item captures something per brand (hasFrequency or hasAmount), sits on a VENUE or PROPERTY platform, and is not soft-deleted. MEDIA assets are excluded — a broadcast or streaming commercial cannot be observed by a scout walking a venue. Key-asset status is a ranking hint, not a filter. Each row carries capture_type so the consumer knows which input to render, and item_subplatform because item_name alone is ambiguous. Intended for service-to-service consumption by vortex-api. Walk pages using the returned next_cursor as after_id until data is empty.

## Query parameters

- `after_id` integer, nullable
- `per_page` integer

## Response `200`

Paginated per-league capture-scope assets

- object
  - `data` LeagueAssetEntity[]
    - `id` integer: league_items row id. Use as the after_id cursor.
    - `league_id` integer: League the asset is in capture scope for.
    - `item_id` integer: Asset id. Identifies the tab; two assets in one league may share a name, so never key on item_name.
    - `item_name` string: Asset name, denormalized so consumers need no second lookup. NOT unique within a league — MLB carries eleven distinct assets under this exact name.
    - `item_platform` string, nullable: Platform name — the coarse family the asset belongs to. Intended for grouping a league's assets into something navigable, and for telling venue-observable assets apart from broadcast ones. Null when the item has no platform.
    - `item_subplatform` string, nullable: Subplatform name, and the only thing separating same-named assets. Null when the item has no subplatform. Consumers must use it to disambiguate labels.
    - `is_key_asset` integer: Whether the asset is flagged key for this league. A ranking hint, not a filter: key assets make sensible default tabs, non-key ones are opt-in.
    - `capture_type` 'frequency' | 'amount': What the asset captures per brand, and therefore the input the scout is given: 'frequency' counts occurrences and is pushed as items[].frequency; 'amount' records presence or quantity and is pushed as items[].value.
  - `next_cursor` integer, nullable: Id of the last record on this page. Pass as after_id on the next request. Null when data is empty.

## Other responses

- `401`: Missing or invalid API key
- `422`: Validation error

---

[API](https://skmtc.dev/sponsorunited/apis/sponsorunited-api.md) - [All operations](https://skmtc.dev/sponsorunited/apis/sponsorunited-api/llms.txt) - [OpenAPI document](https://skmtc.dev/sponsorunited/apis/sponsorunited-api/revisions/cbf1ca5bff8f?raw)
