# llms.txt
Source: https://docs.upriver.ai/ai/llmstxt
Documentation index for LLMs and AI tools
The [llms.txt file](https://llmstxt.org) is an industry standard that helps LLMs index content more efficiently, similar to how a sitemap helps search engines. AI tools can use this file to understand the Upriver documentation structure and find content relevant to user queries.
Upriver hosts an `llms.txt` file at the root of the documentation site that lists all available pages. This file is always up to date and requires no maintenance.
View the Upriver llms.txt at: [docs.upriver.ai/llms.txt](https://docs.upriver.ai/llms.txt)
## llms.txt structure
An `llms.txt` file is a plain Markdown file that contains:
* **Site title** as an H1 heading.
* **Structured content sections** with links and a description of each page in the documentation.
```md Example llms.txt theme={null}
# Upriver API Docs
## API Reference
- [Brands](https://docs.upriver.ai/api-reference/brands): Search and retrieve brand data
- [Creators](https://docs.upriver.ai/api-reference/creators): Look up creator profiles
- [Audiences](https://docs.upriver.ai/api-reference/audiences): Analyze audience insights
```
This structured approach allows LLMs to efficiently process the documentation at a high level and locate relevant content for user queries.
## llms-full.txt
The `llms-full.txt` file combines the entire Upriver documentation site into a single file as context for AI tools.
View the Upriver llms-full.txt at: [docs.upriver.ai/llms-full.txt](https://docs.upriver.ai/llms-full.txt)
# skill.md
Source: https://docs.upriver.ai/ai/skillmd
Give your AI agent the Upriver API reference
The [`skill.md`](https://docs.upriver.ai/skill.md) file is a structured, machine-readable API reference that tells AI agents what they can do with the Upriver API. It follows the [skill.md specification](https://agentskills.io/specification) and includes endpoint descriptions, required parameters, and usage guidance in a format LLMs can reliably work with.
View the Upriver skill.md at: [docs.upriver.ai/skill.md](https://docs.upriver.ai/skill.md)
Both `skill.md` and `llms.txt` help agents work with the Upriver API, but they serve different purposes.
* `skill.md` is a **capability summary**. It tells agents what actions are available, what inputs they need, and what constraints apply.
* `llms.txt` is a **documentation index**. It lists available pages with descriptions so agents know where to find information.
Use `skill.md` when you want agents to call the API directly. Use `llms.txt` when you want agents to browse the docs.
## Use skill.md with agents
### Skills CLI
Agents can process the skill.md with the [skills CLI](https://www.npmjs.com/package/skills).
```bash theme={null}
npx skills add https://docs.upriver.ai
```
### Claude Code / OpenClaw
Add the URL to your project context or reference it in a prompt:
```bash theme={null}
curl -s https://docs.upriver.ai/skill.md >> AGENTS.md
```
```
Use the Upriver API as described in https://docs.upriver.ai/skill.md
```
### Cursor / Windsurf
Add it as a doc in your project settings:
1. Go to **Settings → Docs**
2. Add `https://docs.upriver.ai/skill.md`
### ChatGPT / Claude.ai
Paste the URL or file contents into your conversation:
```
Here's the API reference: https://docs.upriver.ai/skill.md
Use it to help me call the Upriver API.
```
### Any agent or framework
Fetch it at build time or runtime:
```bash theme={null}
curl -s https://docs.upriver.ai/skill.md
```
The file is plain Markdown. Works anywhere that accepts text context.
## What's in the file
The skill.md includes:
* **Metadata**: API name, description, and base URL.
* **Authentication**: How to authenticate requests.
* **Endpoints**: Available actions organized by resource (brands, creators, audiences, trends, etc).
* **Parameters**: Required and optional inputs for each endpoint.
* **Usage guidance**: Tips on how to chain endpoints and handle responses.
# Get Usage
Source: https://docs.upriver.ai/api-reference/account/get-usage
/api-reference/openapi.json get /v1/usage
Get usage for the provided API key
# Dimensions
Source: https://docs.upriver.ai/api-reference/audience/dimensions
/api-reference/openapi.json post /v1/audience_dimensions
Extract atomic audience dimensions for a brand.
Dimensions are the building blocks of personas.
Returns granular behavioral, motivational, and lifestyle dimensions about
relevant audiences for a specified brand.
Each fact can be used for matching with user profiles.
**Verbosity** controls fact phrasing (applies only to the `fact` field):
- `verbose`: Full sentences with subject (e.g., 'This audience seeks healthy recipes')
- `standard` (default): Phrases without subject (e.g., 'seeks healthy recipes')
- `compact`: Keywords only (e.g., 'healthy recipes')
**Response includes:**
- Audience dimensions with classification and confidence scores
- Supporting evidence snippets (optional)
# Personas
Source: https://docs.upriver.ai/api-reference/audience/personas
/api-reference/openapi.json post /v2/audience_insights
Get detailed audience personas with psychographics, behaviors, motivators, and barriers. Ideal for creative strategy, targeting, and understanding your audience at a psychological level.
**Input:** Provide brand info, products, and industry context. Can chain output from Brand Research endpoint.
**Output:** 3-5 distinct personas with personality traits, behavioral patterns, motivations, and barriers.
**Citations Mode:**
- `async` (recommended): Fast response, fetch citations separately via continuation token
- `sync`: Include citations in response (slower)
- `none`: No citations (fastest)
# Personas - Citations
Source: https://docs.upriver.ai/api-reference/audience/personas--citations
/api-reference/openapi.json get /v2/audience_insights/{continuation_token}/citations
Retrieve citations and behavioral evidence for audience personas. Use the continuation token from the `v2/audience_insights` response.
**Recommended Usage:** Set `citations_mode=async` in the audience insights request, then call this endpoint to retrieve citations separately. This keeps the initial response fast while allowing deep citation analysis.
# Personas (v3)
Source: https://docs.upriver.ai/api-reference/audience/personas-v3
/api-reference/openapi.json post /v3/audience_insights
Get detailed audience personas for a brand.
**Input:** Brand URL, optional query and effort level.
**Output:** Personas with purchase triggers, barriers, behaviors, language patterns, and optional real world citations.
# Brand Research
Source: https://docs.upriver.ai/api-reference/brands/brand-research
/api-reference/openapi.json post /v1/brand/research
Provides details for a brand including identity, target audience, and brand language. Returns structured data optimized for chaining into the Audience Insights endpoint.
**Input Options:**
- Provide `brand_name` and/or `brand_url`
# Find Similar Topics
Source: https://docs.upriver.ai/api-reference/breakout-topics/find-similar-topics
/api-reference/openapi.json post /v1/topics/breakout/similar
Find topics similar to a given topic by embedding similarity.
# Get Breakout Topic
Source: https://docs.upriver.ai/api-reference/breakout-topics/get-breakout-topic
/api-reference/openapi.json get /v1/topics/breakout/{topic_id}
Get a single breakout topic by ID.
# Get Breakout Topics Metadata
Source: https://docs.upriver.ai/api-reference/breakout-topics/get-breakout-topics-metadata
/api-reference/openapi.json get /v1/topics/breakout/metadata
Get metadata about available verticals and categories for filtering.
Returns the taxonomy of verticals and their associated categories,
with human-readable display names for building filter UIs.
# Get Narrative
Source: https://docs.upriver.ai/api-reference/breakout-topics/get-narrative
/api-reference/openapi.json get /v1/topics/breakout/narratives/{narrative_id}
Get a narrative by ID with member topics.
# Get Topic Cluster View
Source: https://docs.upriver.ai/api-reference/breakout-topics/get-topic-cluster-view
/api-reference/openapi.json get /v1/topics/breakout/{topic_id}/cluster
Get a derived cluster view around a seed breakout topic.
# Get Topic Story View
Source: https://docs.upriver.ai/api-reference/breakout-topics/get-topic-story-view
/api-reference/openapi.json get /v1/topics/breakout/{topic_id}/story
Get the best available derived story surface around a seed topic.
# Get Topic Timeline View
Source: https://docs.upriver.ai/api-reference/breakout-topics/get-topic-timeline-view
/api-reference/openapi.json get /v1/topics/breakout/{topic_id}/timeline
Get a derived timeline view around a seed breakout topic.
# List Breakout Topics
Source: https://docs.upriver.ai/api-reference/breakout-topics/list-breakout-topics
/api-reference/openapi.json get /v1/topics/breakout
List breakout topics with optional filters.
Returns topics sorted by the specified sort order:
- 'relevance' (default): Dynamic score with time decay, momentum, and confidence
- 'importance': Static base importance score (no temporal factors)
# List Narratives
Source: https://docs.upriver.ai/api-reference/breakout-topics/list-narratives
/api-reference/openapi.json get /v1/topics/breakout/narratives
List narrative arcs, ordered by most recently updated.
# Search Breakout Topics
Source: https://docs.upriver.ai/api-reference/breakout-topics/search-breakout-topics
/api-reference/openapi.json post /v1/topics/breakout/search
Search breakout topics using hybrid vector + keyword search.
Supports three search modes:
- vector: Semantic similarity search using embeddings
- keyword: Full-text search using PostgreSQL tsvector
- hybrid: Combined vector and keyword search (default)
# Batch Creator Details
Source: https://docs.upriver.ai/api-reference/creators/batch-creator-details
/api-reference/openapi.json post /v1/creators/batch
Provides creator profile information for multiple creators in a single request. Returns associated channels and labels for each URL.
**Input:** Provide 1-10 social media profile URLs (e.g., https://youtube.com/@handle)
**Note:** Engagement metrics are not available for batch requests.
# Creator Profile by ID
Source: https://docs.upriver.ai/api-reference/creators/creator-profile-by-id
/api-reference/openapi.json get /v1/creators/{creator_id}
Lookup a creator profile by stable Upriver creator ID.
Returns the same payload shape as `GET /v1/creators` (URL lookup). The only difference is the lookup key (`creator_id` vs `url`).
If the ID has been merged into another creator, the response includes a `redirect` object in the JSON body and the `X-Creator-Redirect` header. Clients should update any stored creator ID to `redirect.canonical_creator_id`.
Use `include` for optional expansions.
# Creator Profile by URL
Source: https://docs.upriver.ai/api-reference/creators/creator-profile-by-url
/api-reference/openapi.json get /v1/creators
Lookup a creator profile by known social profile URL.
Returns the same payload shape as `GET /v1/creators/{creator_id}`. The only difference is the lookup key (`url` vs `creator_id`).
Use this endpoint when you have a channel/profile URL and do not yet have a stored `creator_id`. Use `include` for optional expansions.
# Product Details
Source: https://docs.upriver.ai/api-reference/products/product-details
/api-reference/openapi.json post /v1/brand/product
Provides details for a specific product including description, features, and pricing. Provide as much information as you have — more context improves accuracy.
**Input:**
- **product_name**: Required.
- **product_url**, **brand_url**, **brand_name**: Optional. At least one required to identify the brand.
**Effort Levels:**
- **low**: fast extraction from the product page.
- **high**: includes competitive research (alternatives).
# Products List
Source: https://docs.upriver.ai/api-reference/products/products-list
/api-reference/openapi.json post /v1/brand/products
Returns a list of products associated with a brand. Requires **brand_url** on every request, including pagination requests that send **cursor**. When **cursor** is provided, **brand_url** must match the brand encoded in that cursor.
Response format:
- **json**: Returns structured data with product list (default)
- **text**: Returns natural language report
The service prioritizes prominent and popular products from the brand's website.
# Sponsors
Source: https://docs.upriver.ai/api-reference/sponsorships/sponsors
/api-reference/openapi.json get /v1/sponsors
Search for brands that recently sponsored media channels/publications.
Provide exactly one scope filter: `categories` or `publication_url`.
- `categories`: Find sponsors active in those content verticals.
- `publication_url`: Find sponsors for a specific creator/publication.
Use `platforms`, date range, and confidence parameters to refine results.
# Sponsorships
Source: https://docs.upriver.ai/api-reference/sponsorships/sponsorships
/api-reference/openapi.json get /v1/sponsorships
Return individual sponsored placements (content-level rows).
Provide at least one of `sponsor_name`, `brand_id`, `publication_url`, or `categories`. These can be combined, except `publication_url` and `categories` cannot be used together.
# Media Categories
Source: https://docs.upriver.ai/api-reference/taxonomy/media-categories
/api-reference/openapi.json get /v1/media_categories
Returns the media categories split into L1 (top-level) and L2 (second-level) lists. These categories can be used as a filter for sponsors, sponsorships. and other endpoints which support filtering by categories.
# Media Categories Search
Source: https://docs.upriver.ai/api-reference/taxonomy/media-categories-search
/api-reference/openapi.json post /v1/categories/search
Find the most relevant categories from the taxonomy for a given freeform text. Useful for discovering the best category for brand industries, target audiences, etc. Returns ordered matches with confidence scores.
# Audio Playback
Source: https://docs.upriver.ai/api-reference/trends/audio-playback
/api-reference/openapi.json get /v2/trends/{trend_id}/playback
Return a playback URL for a trend's audio media
# Media Samples
Source: https://docs.upriver.ai/api-reference/trends/media-samples
/api-reference/openapi.json get /v2/trends/{trend_id}/media
Returns video and audio url samples for a trend
# Similar Trends
Source: https://docs.upriver.ai/api-reference/trends/similar-trends
/api-reference/openapi.json get /v2/trends/{trend_id}/similar
Find trends similar to a given trend via embedding similarity
# Traction Graph
Source: https://docs.upriver.ai/api-reference/trends/traction-graph
/api-reference/openapi.json get /v2/trends/{trend_id}/traction
Pre-computed traction graph points for a trend. Returns both 'all' and 'recent' windows with estimated curves plus separate blended activity curves.
# Trend Details
Source: https://docs.upriver.ai/api-reference/trends/trend-details
/api-reference/openapi.json get /v2/trends/{trend_id}
Get a specific trend by its id. Use the /trends/{id}/playback endpoint to get a refreshed audio playback URL.
# Trends List
Source: https://docs.upriver.ai/api-reference/trends/trends-list
/api-reference/openapi.json post /v2/trends/broad
Get the latest trending formats.
# Changelog
Source: https://docs.upriver.ai/changelog
Recent updates to the Upriver API
# Changelog
Stay up to date with the latest changes to the Upriver API.
***
## April 2026
### Sponsors API: Expanded Default Sponsor Types
`/v1/sponsors`, `/v1/sponsors/search`, and `/v1/sponsorships` now include `implicit_ad` and `affiliate` in the default `sponsor_types` set. Previously, only `explicit_ad`, `promotion`, and `unknown` were returned when the parameter was omitted. Pass `sponsor_types` explicitly to restrict results to specific types.
### Trends API: `newest` Sort for Broad Trends
`/v2/trends/broad` now accepts `sort_by=newest` to surface trends most recently activated in the API, ranked by latest published video activity.
### Sponsorships API: Scope Filter Now Required
`/v1/sponsorships` (GET and POST) now requires at least one of `sponsor_name`, `brand_id`, `publication_url`, or `categories`. Requests with no scope filters now return HTTP 400.
### Products API: `brand_url` Required on All Requests
`brand_url` is now required on all `/v1/brand/products` requests, including pagination requests that supply a `cursor`. Previously, `brand_url` could be omitted when paginating.
### Creator API: Engagement Metrics Reliability
Improved reliability of engagement metrics for creator profiles.
### Trends API: Singular Tag Parameter Aliases
`/v2/trends/broad` now accepts `tag` and `exclude_tag` as aliases for the `tags` and `exclude_tags` parameters, and accepts a bare string in addition to an array for both fields.
### Creator API: General Keyword Search
`/v1/creators/search` now accepts a `query` parameter for name and keyword-based creator discovery — no URL required. Supports filtering by `platforms`, `category_ids`, follower range, `creator_country`, and `creator_language`. Results include `score` and `match_signals` ranking metadata.
### Products API: App Store Support
`/v1/brand/products` now supports Apple App Store and Google Play URLs, returning a structured product entry with the app's name, description, price, and developer without requiring a full brand search.
### Products API: Input Validation and `brand_name` Deprecation
The `brand_name` parameter on `/v1/brand/products` is deprecated — brand name is now always resolved automatically from the URL for better accuracy. Marketplace, social media, and other non-brand URLs now return HTTP 400 immediately.
### Trends API: `sort_by` Parameter for Broad Trends
`/v2/trends/broad` now accepts a `sort_by` parameter: `recommended` (default, ranked by relevance and engagement) and `timeliness` to prioritize freshest currently-rising trends. The alias `freshness` is also accepted.
### Audience Insights: `purchase_motivations` Field
`/v3/audience_insights` persona segments now include a `purchase_motivations` field — the enduring outcomes, problems solved, and identity payoffs that drive the segment's interest in the product category. This complements the existing `purchase_triggers` and `purchase_barriers` fields.
### Sponsors API: Date Filtering
`/v1/sponsors` and `/v1/sponsors/search` now accept `days_back` (1–365, default 90), `since` (YYYY-MM-DD), and `until` (YYYY-MM-DD) parameters for filtering by sponsorship date range, matching the existing parameters on the sponsorships endpoints.
### Sponsors API: `industries` Parameter Removed
The deprecated `industries` filter has been removed from `/v1/sponsors` and `/v1/sponsors/search`. Use `categories` instead.
### Products API: Configurable Result Limit
`/v1/brand/products` now accepts a `limit` parameter (5–20, default 10) to control how many products are returned per request. Per-result credit pricing is now active at 1.2 credits per product with a 5-credit minimum per request.
### Usage API: Custom Date Range
`GET /v1/usage` now accepts optional `start_date` and `end_date` query parameters (YYYY-MM-DD) to retrieve usage data for a specific date range.
***
## March 2026
### Audience Insights: v3 Grounded Segments
`/v3/audience_insights` now returns two new fields per segment — `communities` (online spaces where the segment gathers) and `buying_mindset` (plain observations about purchasing behavior) — replacing the earlier fictional persona format with grounded audience intelligence. The `personality_traits` field is deprecated and now returns an empty array.
### Sponsors API: `newsletter` Platform Alias
The `platforms` filter on `/v1/sponsors/search` and `/v1/sponsorships/search` now accepts `"newsletter"` as a convenience alias, automatically expanding to Substack, Beehiiv, and Ghost publications.
### API: Authenticated Rate Limit Increase
Authenticated API requests are now rate-limited at 2,000 requests per 5 minutes, up from 300.
### Audience Insights: v2 Endpoint Deprecated
`/v2/audience_insights` is now deprecated; use `/v3/audience_insights` instead.
### Products API: Simplified Input Contract
`/v1/brand/products` now requires `brand_url` and returns `brand_name` in responses; the `auto` free-text input has been removed from both `/v1/brand/products` and `/v1/brand/research`. The legacy `/v1/product` endpoint has been removed.
### Creator API: Relative Engagement Benchmarks
Creator endpoints now support `include=relative_metrics` to see how a creator's engagement compares to peers in the same category and follower bucket. Returns per-channel engagement benchmarks with a `band` of `bottom_25`, `mid_50`, or `top_25`, along with the cohort details used for the comparison.
### Creator API: `channel_relationship` Field
The `channels[].relationship_type` field has been replaced by `channels[].channel_relationship` with clearer semantics. Primary channels are omitted (no field); secondary channels are now `"attached"` (a distinct show, brand, or project surface) or `"group"` (a shared or collab surface). The old `relationship_type` values (`owner`, `shared_owner`, `member_of_group`) are no longer returned.
### Sponsors API: `sort_by` Parameter
`POST /v1/sponsors/search` now accepts a `sort_by` parameter. The default `total_ads` ranks brands by most placements; `recent` ranks by most recent ad date instead.
### Usage API: Clarified Credit Fields
The `UsageByFeature` object in usage responses has been updated for clarity: `credit_cost` is renamed to `credit_rate` (the per-result credit multiplier), `usage` is renamed to `quantity` (the raw count of items delivered), and a new `credits_used` field is added showing the total credits charged (`quantity × credit_rate`).
### Creator API: Stable Creator ID Redirects
When a stored creator ID has been merged into another creator, `GET /v1/creators/{creator_id}` now returns HTTP 200 with the canonical creator, a `redirect` object in the body (`requested_creator_id`, `canonical_creator_id`, `reason`), and an `X-Creator-Redirect` response header — clients should update any stored ID to `redirect.canonical_creator_id`. Stable creator IDs are also now returned in `/v1/creators/search` results when `include=creator_id` is specified.
### Trends API: `content_structure` Field and Filter
Trend responses now include a `content_structure` field indicating the shared non-audio pattern across videos: `none` (sound-led only), `loose` (shared theme or aesthetic without a repeatable template), or `structured` (repeatable text, editing, or visual template). The trends list endpoint now accepts `content_structure` as a filter parameter.
### Creator API: Comma-Separated `include` Values
Creator endpoints now accept comma-separated `include` values (e.g., `include=engagement_metrics,bio`) in addition to repeated query parameters.
### Creator API: Batch Endpoint Cross-Platform Coverage
Fixed `/v1/creators/batch` returning incomplete single-platform profiles when the stored record was sparse — batch lookups now fall through to live research and return complete cross-platform profiles, matching single-creator lookup behavior. Labels are also now returned correctly on cached batch hits.
### Sponsors API: `brand_name` Hint for Brand-URL Search
`POST /v1/sponsors/search` now accepts an optional `brand_name` field alongside `brand_url`. Supplying the brand name improves category classification accuracy when discovering sponsors by URL.
### Creator API: Video Inventory Metrics
`include=video_metrics` now derives upload frequency from a dedicated trailing 12-week inventory window instead of the recent engagement sample. Responses include new `lookback_weeks`, `weeks_observed`, and `window_complete` fields.
### Breakout Topics: Search Result Fields
Fixed `relevance_score` and `computed_status` returning null or stale values in search results — both now reflect live scoring consistent with the list endpoint.
### Creator API: By-ID Endpoint Include Parity
`GET /v1/creators/{creator_id}` now supports all `include` values (`engagement_metrics`, `video_metrics`, `bio`, `audience`, `brand_safety`), matching `GET /v1/creators?url=`. Requests with invalid URLs now return HTTP 400 immediately instead of timing out.
### Trends API: `uses_specific_sound` Field
Trend responses now include a `uses_specific_sound` boolean indicating whether a trend requires a specific audio clip, making it easier to filter by creative flexibility.
### Trends API: Complete Video Sample Metadata
Fixed the trend detail endpoint stripping `published_at` and `duration_seconds` from `video_samples`. Both fields are now returned correctly.
### Breakout Topics: Citation Rate
Topic detail responses now include a `citation_rate` field — a daily breakdown of citation counts for charting topic momentum over time.
### Breakout Topics: Narratives
Breakout topics can now be grouped into narratives — storylines that connect related topics across angles and time.
### Trends API: New Filters
Added three new filter parameters: `timeliness_status` to control trend freshness (`recent`, `active`, `stale`), `brand_safety` for brand suitability filtering, and `topic_scope` to filter by how transferable a trend is (`universal`, `niche`, `event_specific`, `person_specific`).
### Trends API: Updated Response Fields
`content_format` has been replaced by `participation_type` (`open`, `timed`, `lip_sync`, `choreography`) with new `topic_scope` and `content_scenarios` response fields. Fields `origin`, `virality_reason`, `brand_categories`, and `audience_vibes` have been removed from trend responses.
***
## February 2026
### Creator API: Audience Demographics Schema
Audience age data now uses structured `min_age`/`max_age` integers instead of string ranges, and the `interests` field has been removed from audience responses. Geography segments now include a `country_name` field alongside the ISO code.
### Creator API: Audience Demographics
Audience demographics are now available on all creator endpoints via `include=audience`. Returns directional signals for age, gender, geography, languages, and interests.
### Creator API: Stable Creator IDs
Creator endpoints now support `include=creator_id` to return a stable Upriver creator ID. Use this ID with `GET /creators/{creator_id}` to reference the same creator across sessions without re-resolving URLs.
### Trends API: Content Filtering
Improved content filtering for trend recommendations.
### Audience Insights: Search and Citation Quality
Improved search relevance and citation quality for audience insights.
### Creator API: Audience Demographics Accuracy
Improved accuracy of creator audience demographic data.
### Brand Research: Brand Color Extraction
Improved accuracy of brand color extraction.
### Breakout Topics: Keyword Search Accuracy
Improved accuracy of breakout topics keyword search with better stemming, so queries return more relevant results.
### Breakout Topics: Entities
Added `include=entities` parameter to breakout topics. Returns named entities (people, organizations, places) extracted from each topic, ranked by mention frequency with fine-grained Wikidata type classifications.
### Creator API: Brand Safety Advisories
Brand safety `flags` have been renamed to `advisories` in API responses. Advisories now include inline citation markers with source attribution.
### Trends API: Sound Attribute Filters
The trends list endpoint now supports filtering by sound attributes for more targeted trend discovery.
### Breakout Topics: Improved Grouping
Related breakout topics are now grouped together, making it easier to follow a story across multiple angles.
### Creator API: Brand Safety
Brand safety analysis is now available for creators.
### Creator API: Terminated Account Filtering
Terminated creator accounts are now automatically excluded from API responses.
### Creator API: Engagement Metrics Latency
Engagement metrics now return significantly faster.
### Trends API: Sound Duration Fields
Trend responses now include a `sound_duration` field.
### Agent Skill & llms.txt
Upriver docs now include [`skill.md`](/ai/skillmd) and [`llms.txt`](/ai/llmstxt) for AI agents and coding assistants. These files provide structured API guidance, endpoint descriptions, and recommended workflows so your AI tools can integrate Upriver more effectively.
### Creator API: YouTube Data Freshness
Fixed an issue where YouTube creator follower counts could become stale and fail to refresh automatically.
### Audience Dimensions: Rate Limiting
Added per-user rate limiting to the `/v1/audience_dimensions` endpoint to ensure fair usage and system stability.
### Creator API: Enhanced Video Metrics
Creator video metrics now include `pct_over_8m` field showing the percentage of videos exceeding 8 minutes, useful for identifying long-form content creators. Also improved gaming category classification accuracy.
### Creator API: Real-Time Follower Counts
Creator API now refreshes stale subscriber and follower counts at request time, ensuring you always get current audience size data.
### Creator API: Video Metrics Enrichment
Added `include=video_metrics` parameter to creator endpoints. Get video duration and upload frequency data to estimate ad inventory opportunities.
### Audience Insights v3
New `/v3/audience_insights` endpoint with improved audience segmentation, simplified calling (just pass a `brand_url` instead of chaining endpoints), and a configurable `effort` parameter for faster or deeper analysis.
### Creator API: Twitch Metadata
Improved Twitch metadata in API responses.
### TikTok Trends: Enhanced Metadata
Trends API responses now include `tags` and `trend_type` fields for better trend categorization and filtering.
### Trends API: Duration Filtering
Added duration filtering to trends endpoints. Filter TikTok trends by video length to find content that matches your target format.
### Breakout Topics: Politics Vertical
Added Politics vertical to breakout topics filtering. Use the `/v1/breakout/metadata` endpoint to discover available verticals including the new Politics category.
### Trends API: Expanded Trend Types
Trends endpoints now support additional trend type classifications for more granular filtering and discovery.
### Trends API: Individual Trend Lookup
New GET `/v1/trends/{trend_id}` endpoint to retrieve a specific trend by ID with full trend details.
### Trends API: Optional Playback URLs
Added `include=playback` parameter to trend endpoints. Audio playback URLs are now fetched on demand rather than included by default, reducing response times when playback data isn't needed.
### Trends Search: Enhanced Metadata
Trends search results now include complete trend metadata (engagement stats, example videos, audio details) for richer context without requiring additional API calls.
### Breakout Topics: Citation Quality
Improved citation quality with better deduplication of wire service articles across topics.
### Breakout Topics: Improved Sorting Control
Replaced `use_dynamic_scoring` boolean with `sort_by` enum parameter. Choose `'relevance'` for time-sensitive trending topics or `'importance'` for stable base scores.
### Breakout Topics: Metadata Endpoint
New `/v1/breakout/metadata` endpoint for discovering available verticals and categories to filter breakout topics.
### Breakout Topics: Field Rename
Renamed `canonical_name` to `topic_name` in breakout topics responses. The old `canonical_name` field remains available but is deprecated.
### Creator API: Bio Enrichment
Creator profiles now include biographical summaries. Use `include=bio` to get a concise summary of the creator's background and content focus.
```bash theme={null}
GET /v1/creators?url=https://youtube.com/@MrBeast&include=bio
```
***
## January 2026
### Creator API: Enhanced Profile Data
Creator API responses now include enriched profile metadata and primary publication identifiers for better creator identification and categorization.
### TikTok Trends: Improved Video Relevance
Better video relevance scoring for more accurate trend recommendations.
### API Performance Improvements
* 3x speed improvement to the `/v1/audience_dimensions` endpoint
* Faster response times for `/v1/trends/broad` endpoint
* Improved YouTube channel resolution performance
### Creator API: Duplicate Profiles
Fixed an issue where the same YouTube channel could appear multiple times in search results.
### Breakout Topics: Multi-Label Classification
Topics can now be tagged with multiple labels simultaneously, enabling more nuanced topic categorization and filtering.
### Breakout Topics: Relevance and Momentum Tracking
Renamed `dynamic_score` to `relevance_score` for clarity. Added `trend` object to topic responses showing momentum indicators like velocity and acceleration for better understanding of topic trajectory.
### Breakout Topics: Enhanced Signal Quality
* Improved Reddit signal filtering to exclude routine discussion threads
* Added engagement scores to topic responses for better signal assessment
* Expanded sports coverage in topic monitoring
### Breakout Topics: Volume-Aware Momentum
Topic momentum scoring now adapts to conversation volume, providing more accurate trending signals across topics of different scales.
### Creator API: Labels and Tags
Added `labels` field to Creator API responses with stable category classifications. Labels use the same taxonomy as `media_categories` for consistent categorization across the platform. The existing `tags` field continues to provide flexible, free-form tagging.
### Breakout Topics: Improved Scoring
Better topic scoring with improved decay functions that adapt to the nature and popularity of each topic.
### Breakout Topics: Citations
Added `include_citations` parameter to the breakout topics endpoint. When enabled, returns source URLs for each detected topic.
### Breakout Topics: Quality Improvements
* More accurate topic deduplication
* More accurate citation attribution
* Added engagement scoring for better signal quality
### Brand Research API
Brand research endpoints consolidated to the v1 API path.
### Creator API: Performance
Major API performance improvements, especially for creators not previously tracked in our database.
### Breakout Topics API
New API for discovering emerging trending topics across news and social media.
### Audience Dimensions API
New `/v1/audience_dimensions` endpoint for structured audience profiling.
### Creator Batch Endpoint
New `/v1/creators/batch` endpoint for bulk creator lookups.
### Creator API: GET Endpoint
New GET `/v1/creators` endpoint for simplified creator lookups.
### Creator API: Engagement Metrics
Creator responses now include engagement metrics such as average views, likes, and comments across platforms. Metrics are computed from recent content and cached for performance.
### Creator API: Categories
Creator search results now include media categories and taxonomy classification.
***
## December 2025
### Trends Search API
New trend search endpoint for finding relevant TikTok trends by keyword.
### Sponsors Search API
New `/v1/sponsors/search` and `/v1/sponsorships/search` endpoints. Search by brand URL for sponsorship data.
### Per-Result Pricing
Flexible per-result billing for products, sponsors, and trends endpoints.
### Trends: Audio Playback
Added `playback_url` for audio trend samples.
***
## November 2025
### Product Research API
Improved product deduplication and filtering. Brand name search support for sponsors.
### Products API: Enhanced Search
Parallel search mode using multiple data providers. Response caching for faster lookups.
### Products API: Pagination
Added cursor-based pagination for products endpoint. Improved product result ranking.
### Categories Search API
New `/v1/categories/search` endpoint to explore media categories.
### Trends Matching API
New `/v1/trends/match` endpoint to find relevant TikTok trends for brands.
### Creator Search API
New `/v1/creators/search` endpoint to discover creators. Cross-platform profile resolution for YouTube, Instagram, TikTok, Twitter, and Twitch. Includes subscriber counts and profile metadata.
### Brand Research API
New `/v1/brand/research` endpoint for comprehensive brand intelligence. Returns brand overview, target audience, and positioning.
***
## October 2025
### Audience Insights v2: Personas
New `/v2/audience_insights` endpoint with improved persona generation. Includes personality traits and behavioral insights. Separate citations endpoint for source attribution.
### Sponsors API: Enhanced Data
Added brand domain and LinkedIn URL to sponsor responses.
### Sponsors API: Categories
Filter sponsorships by media categories.
### Categories API
New `/v1/categories` endpoint to browse the media category taxonomy.
### Sponsors API: Performance
Major performance improvements for sponsor and sponsorship lookups.
### TikTok Trends: Scoring
Enhanced trend scoring with engagement metrics. Audio and video quality scoring.
***
## September 2025
### Products API
New `/v1/brand/products` endpoint to discover products from brand websites.
### TikTok Trends API
New `/v1/trends/broad` endpoint for discovering trending TikTok content. Audio and video trend samples with usage instructions. Pagination support.
### Sponsor Discovery API
New `/v1/sponsors` endpoint to discover brands sponsoring content. New `/v1/sponsorships` endpoint for detailed sponsorship data. Industry and URL-based filtering.
### Audience Insights: Citations
Added citation finding capability with source URLs. Enhanced creative guidance with citations.
### Audience Insights: Schema Improvements
Simplified response schema with cleaner field naming. Updated personality and psychology field structures.
# Introduction
Source: https://docs.upriver.ai/index
API for real-time context on creators, audiences, brands, trends, and sponsorships
## What is Upriver?
[Upriver](https://upriver.ai/?ref=docs) provides an API that turns what's happening online into real-time, reliable context for AI applications.
## Core Features
Upriver specializes in evidence-backed analysis on norms, influences, and aesthetics that come from online communities.
* Brands: brands and how they're being discussed
* Products: product mentions and use cases
* Creators: relevant creators and profiles
* Audiences: personas, interests, language, and humor
* Trends: topics and formats gaining attention
* Sponsorships: Brand-creator relationships and placements
## Popular Use Cases
Developers blend Upriver's external data with internal data for uses cases like:
Ground AI outputs in what people actually care about
Power discovery and recommendations using relevance signals
Identify relevant brands, creators, or audiences
Surface our insights directly to end users
## For Agents + LLMs
Building with agents or coding assistants? Give them the skill.md and they can use the API directly.
Structured capabilities file for agents
Documentation index for LLMs
## Get Started
To get an API key, schedule an intro call:
20-minute intro call to discuss your use case and learn how Upriver can help.
# Metrics
Source: https://docs.upriver.ai/metrics
How engagement metrics and video metrics are calculated, which platforms they cover, and how to interpret them
The Creators API returns two optional metric objects per channel: **engagement metrics** and **video metrics**. Both are requested via the `include` query parameter and returned per-channel in the response.
```bash theme={null}
# Request both metric types
curl "https://api.upriver.ai/v1/creators/profile-by-url?\
url=https://youtube.com/@example&\
include=engagement_metrics,video_metrics" \
-H "X-API-Key: YOUR_KEY"
```
***
## Engagement Metrics
Engagement metrics summarize a creator's recent content performance — average views, likes, comments, and an overall engagement rate.
### Fields
| Field | Type | Description |
| --------------------- | ----------------- | ---------------------------------------------------------------------- |
| `avg_views` | `integer \| null` | Average view count across recent content |
| `avg_likes` | `integer \| null` | Average like count across recent content |
| `avg_comments` | `integer \| null` | Average comment count across recent content |
| `avg_engagement_rate` | `float \| null` | `(likes + comments) / views`, expressed as a decimal (e.g., 0.05 = 5%) |
### Platform Coverage
Engagement metrics are available on these platforms:
| Platform | Content Types Sampled | Metrics Available |
| ----------- | --------------------- | ------------------------------ |
| YouTube | Videos, Shorts | Views, Likes, Comments |
| Instagram | Posts, Reels | Views (reels), Likes, Comments |
| TikTok | Videos | Views, Likes, Comments |
| X (Twitter) | Posts | Views, Likes, Comments |
| Twitch | Videos, Clips | Views only |
Platforms not listed above (Substack, Spotify, Podcast) return channel metadata but do not include engagement metrics.
### How Calculation Works
Engagement metrics are computed from a creator's **recent posts per content type** on each platform.
Recent items are collected per content type — for example, YouTube Videos and Shorts are sampled separately.
Within each content type, metrics are averaged independently — average views, average likes, and average comments for that type alone.
When a creator has multiple content types (e.g., both Videos and Shorts), the per-type averages are combined using a **sample-size-weighted average**.
```
avg_views = (videos_avg_views * videos_sample_size + shorts_avg_views * shorts_sample_size)
/ (videos_sample_size + shorts_sample_size)
```
This keeps content types with more samples proportionally weighted.
Once the weighted averages are computed:
```
avg_engagement_rate = (avg_likes + avg_comments) / avg_views
```
This is only calculated when `avg_views > 0` and at least one of `avg_likes` or `avg_comments` is available.
### Example
A YouTube creator who publishes both long-form videos and Shorts:
| Content Type | Sample Size | Avg Views | Avg Likes |
| ------------ | ----------- | --------- | --------- |
| Videos | 10 | 100,000 | 4,000 |
| Shorts | 15 | 50,000 | 2,500 |
**Weighted avg\_views** = `(100,000 * 10 + 50,000 * 15) / (10 + 15)` = **70,000**
**Weighted avg\_likes** = `(4,000 * 10 + 2,500 * 15) / (10 + 15)` = **3,100**
The Shorts pull the averages down because there are more of them — which reflects that this creator's audience engages with Shorts differently than long-form videos.
### Response Example
```json theme={null}
{
"channels": [
{
"platform": "youtube",
"handle": "@example",
"engagement_metrics": {
"avg_views": 70000,
"avg_likes": 3100,
"avg_comments": 850,
"avg_engagement_rate": 0.056
}
}
]
}
```
***
## Video Metrics
Video metrics describe a creator's **upload cadence and video duration profile** over a trailing window. These are designed for ad inventory estimation — understanding how frequently a creator uploads, how long their videos are, and what percentage are eligible for mid-roll ads.
Video metrics are currently available for **YouTube only**.
### Fields
| Field | Type | Description |
| ---------------------- | ----------------- | --------------------------------------------------------------- |
| `avg_duration_seconds` | `integer \| null` | Average video duration in seconds within the lookback window |
| `uploads_per_week` | `float \| null` | Average uploads per week over the lookback window |
| `pct_over_8m` | `float \| null` | Percentage of videos over 8 minutes (eligible for mid-roll ads) |
| `lookback_weeks` | `integer \| null` | Lookback window length (currently fixed at 12 weeks) |
| `weeks_observed` | `integer \| null` | How many weeks of history were actually observed |
| `window_complete` | `boolean \| null` | `true` when a full lookback window was observed |
### Lookback Window
Video metrics use a **trailing 12-week window** from the current date. All uploads published within this window are included in the calculation.
```
|<------------ 12 weeks ------------>|
| now
| uploads in this range are counted |
```
### Coverage Metadata
The `weeks_observed` and `window_complete` fields tell you how much history was available:
| Scenario | `weeks_observed` | `window_complete` | Interpretation |
| ----------------------------- | ---------------- | ----------------- | ----------------------------- |
| Established creator | 12 | `true` | Full 12-week window observed |
| New creator (2 weeks old) | 2 | `false` | Only 2 weeks of history exist |
| Inactive creator (no uploads) | 12 | `true` | Full window, but 0 uploads |
When `window_complete` is `false`, treat `uploads_per_week` as a preliminary estimate based on limited history. The creator may not have been active long enough for the metric to stabilize.
### Mid-Roll Eligibility
`pct_over_8m` represents the percentage of videos in the window that are longer than 8 minutes (480 seconds). YouTube allows mid-roll ad breaks on videos over 8 minutes, making this a useful signal for ad inventory planning.
### Response Examples
```json theme={null}
{
"video_metrics": {
"avg_duration_seconds": 615,
"uploads_per_week": 1.75,
"pct_over_8m": 66.7,
"lookback_weeks": 12,
"weeks_observed": 12,
"window_complete": true
}
}
```
Full 12 weeks observed. About 1.75 uploads/week, averaging \~10 minutes, with two-thirds of videos eligible for mid-roll ads.
```json theme={null}
{
"video_metrics": {
"avg_duration_seconds": 420,
"uploads_per_week": 2.5,
"pct_over_8m": 25.0,
"lookback_weeks": 12,
"weeks_observed": 2,
"window_complete": false
}
}
```
Only 2 weeks of upload history exist. Metrics are calculated over those 2 weeks — the upload rate may not be representative of long-term behavior.
```json theme={null}
{
"video_metrics": {
"uploads_per_week": 0.0,
"lookback_weeks": 12,
"weeks_observed": 12,
"window_complete": true
}
}
```
Full window was observed, but no uploads fell within it. Duration and mid-roll fields are omitted.
***
## Engagement vs. Video Metrics
These two metric types answer different questions:
| | Engagement Metrics | Video Metrics |
| --------------------- | --------------------------------------------------------------- | --------------------------------------------------------- |
| **Question answered** | How does this creator's content perform? | How often and how long does this creator publish? |
| **Platforms** | YouTube, Instagram, TikTok, X, Twitch | YouTube only |
| **Sample basis** | Recent items per content type | All uploads in trailing 12-week window |
| **Key fields** | `avg_views`, `avg_likes`, `avg_comments`, `avg_engagement_rate` | `avg_duration_seconds`, `uploads_per_week`, `pct_over_8m` |
| **Use case** | Creator quality and audience responsiveness | Ad inventory estimation and upload consistency |
***
## Edge Cases
### Null Fields
Any metric field can be `null`. Common causes:
| Scenario | Result |
| ------------------------------------------------------------- | ---------------------------------------------------- |
| Platform doesn't support a metric (e.g., Twitch has no likes) | `avg_likes: null` |
| No content available for calculation | Entire metric object is omitted |
| Comments disabled on all sampled videos | `avg_comments: null` (excluded from engagement rate) |
| No uploads in the video metrics window | `avg_duration_seconds: null`, `pct_over_8m: null` |
### Engagement Rate Calculation
`avg_engagement_rate` requires:
* `avg_views > 0`
* At least one of `avg_likes` or `avg_comments` is non-null
If either condition isn't met, `avg_engagement_rate` is `null`. When only one of likes/comments is available (e.g., Twitch), the missing value is treated as 0 in the numerator.
### Data Freshness
Metrics are cached and refreshed periodically. If you need guaranteed fresh data for a specific creator, contact support.