Get cohort-matched content recommendations
Given a content item or an audience filter, find unseen vault items ranked for fit to that cohort.
Who this is for: chatters composing a send to a specific audience.
recommend is the vault's highest-leverage read: give it a cohort, and it returns unseen
content — items that cohort has never been sent — ranked by how well it fits what that cohort
actually buys.
curl "https://app.tease.link/api/admin/vault/recommend?source=tiktok&rfm_tag=whale&limit=20" \
-H "Authorization: Bearer $TEASE_API_KEY"Query parameters
Provide either content_id (build the cohort from that content's buyers) or one or more
audience filters — the same filter shape the broadcast composer uses. All are optional and
combine as AND.
| Field | Type | Description |
|---|---|---|
content_id | integer | Build the cohort from the buyers of this content instead of explicit filters. |
source | string | Acquisition source (e.g. tiktok). |
country | string | ISO country code. |
rfm_tag | string | Lifecycle/RFM tag (e.g. whale, dormant). |
spend_min / spend_max | integer | Lifetime spend bounds, in cents. |
inactive_days | integer | Only fans inactive at least this many days. |
bought_ppv | boolean | Restrict to fans who have (or haven't) bought a PPV. |
new_vs_returning | string | new or returning. |
is_trial | boolean | Restrict to trial (or non-trial) fans. |
limit | integer | 1–200. Defaults to 20. |
Response shape
{
"items": [
{
"media_id": "m_88130",
"title": "red set — full video",
"tags": ["lingerie", "solo"],
"cover": true,
"unlock_rate": 0.4,
"fit_reason": "the cohort buys 'lingerie' — this content is in the same theme, unlock-rate 40%"
}
],
"cohort_summary": {
"filters": { "source": "tiktok", "rfm_tag": "whale" },
"source": "tiktok",
"fan_count": 312
},
"thin": false
}Ranking is fit × unlock-rate: fit comes from how strongly the item's tags overlap the tags this cohort has actually paid to unlock in the last 30 days (not just tags it's seen). Items already sent to any fan in the cohort are excluded outright.
| Field | Description |
|---|---|
fit_reason | A short, human-readable reason — empty string ("") when the ranking fell back to unlock-rate alone (see thin below), never a fabricated explanation. |
cohort_summary.fan_count | Size of the resolved audience. When built from content_id, also carries from_content_id and buyer_count. |
thin | true when the cohort has no buying-tag signal yet (a new or very small cohort). Items are then ranked by unlock-rate alone, and fit_reason is empty for all of them — treat the order as a weaker suggestion. |
Recommendations reuse the exact same audience engine (materialize_audience) as the broadcast
composer and content_cohorts — there is no second, parallel cohort definition to fall out of
sync with.
What's next
Send the top recommendation as a drop if it's a whole folder, or check what's actually selling to see the tags this ranking is drawing from.