---
title: "Calculate a fair sponsorship rate (OCRS)"
method: POST
path: "/rate-card"
---

# Calculate a fair sponsorship rate (OCRS)

`POST /rate-card`

## Request

- Base URL: `https://creatorscore.io/api/v1`
- URL: `https://creatorscore.io/api/v1/rate-card`
- Auth: API key in header `X-API-Key`

Computes Fair Rate = BMV × CM × RM × QA × MA with a confidence band, from inputs you supply. BMV = creative_floor + bayesian_median_views × cpm / 1000 (since OCRS v1.1); instagram_stories is priced per 15-second frame — pass deliverables = frame count (v1.2); linkedin_post and linkedin_video are priced per 1,000 IMPRESSIONS — pass median impressions in medianViews (v1.3); the response breakdown exposes bmv, creative_floor, and media_value separately. Cross-platform packages (v1.3): pass `package`, an array of extra platform lines (each on that platform's OWN median reach with a reuse mode: crosspost | adapted | native); the response adds `package` with the total, its band, the per-line breakdown, and the discount vs. pricing every platform standalone. Pure sourced math — no scrape, no scoring, no database. FREE — costs 0 credits. Independent of the CreatorScore trust score. Only platform, medianViews, and niche are required; other fields default to a neutral (1.0-factor) choice, and engagementRate defaults to the niche benchmark.

## Request body

- object
  - `platform` 'tiktok' | 'instagram_reels' | 'instagram_stories' | 'youtube_shorts' | 'youtube_longform' | 'linkedin_post' | 'linkedin_video', required
  - `medianViews` number, required: Median views per post (median IMPRESSIONS for LinkedIn formats).
  - `niche` string, required: See GET /rate-card for valid niche IDs.
  - `engagementRate` number: Percent, e.g. 6.2. Defaults to niche benchmark.
  - `postCount` integer
  - `geo` string
  - `season` string
  - `lengthBucket` string
  - `concept` string
  - `onLocation` boolean
  - `hasProps` boolean
  - `hiredCrew` boolean
  - `customSet` boolean
  - `extras` integer
  - `deliverables` integer
  - `rightsTier` string
  - `exclusivity3mo` boolean
  - `exclusivity6mo` boolean
  - `perpetual` boolean
  - `actualPaid` number: Optional — compare an offer against the fair band (against the package total when `package` is passed).
  - `package` object[]: Optional (v1.3) — extra platforms the same campaign is cross-posted to. Each line is priced on that platform's OWN median reach; fields not given inherit from the primary.
    - `platform` 'tiktok' | 'instagram_reels' | 'instagram_stories' | 'youtube_shorts' | 'youtube_longform' | 'linkedin_post' | 'linkedin_video', required
    - `reuse` 'crosspost' | 'adapted' | 'native': crosspost = same file re-posted; adapted = native re-cut / new hook from the same shoot; native = separately shot content for this platform.
    - `medianViews` number, required: This platform's own median views (impressions for LinkedIn).
    - `postCount` integer
    - `engagementRate` number
    - `lengthBucket` string
    - `deliverables` integer: Deliverables on this platform, e.g. story frames.

## Response `200`

Fair rate, confidence band, and multiplier breakdown (plus `package` when extra lines were passed).

- object

## Other responses

- `400`: Invalid input.
- `401`: Missing or invalid API key.
- `429`: Per-key rate limit hit (120 req/min). Retry after the duration in the Retry-After header.

---

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