Organize the vault locally
Star, note, or block a file, or save a named filter — all without touching OnlyFans.
Who this is for: chatters and workspace owners (the organize grant).
These are Level-1 actions: everything below writes only to TEASE's own database. No engine, no readiness gate, no queue — nothing reaches OnlyFans, so there's nothing to poll and nothing that can fail asynchronously.
Favorite a file
curl -X POST "https://app.tease.link/api/admin/vault/{media_id}/favorite" \
-H "Authorization: Bearer $TEASE_API_KEY"curl -X DELETE "https://app.tease.link/api/admin/vault/{media_id}/favorite" \
-H "Authorization: Bearer $TEASE_API_KEY"Block a file ("don't send")
Blocking doesn't remove the file from OnlyFans — it's purely our own firewall. Once blocked, sending this media is refused from every send path: a direct DM, a chain step, a campaign, or a wall post. The decision lives in one place, so there's no second door around it.
curl -X POST "https://app.tease.link/api/admin/vault/{media_id}/block" \
-H "Authorization: Bearer $TEASE_API_KEY"DELETE the same path to lift the block.
Set a note
A free-text note, up to 2000 characters — "shot on phone", "already sent in June".
curl -X PUT "https://app.tease.link/api/admin/vault/{media_id}/note" \
-H "Authorization: Bearer $TEASE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text": "already sent in June"}'There's no separate delete endpoint — an empty text clears the note. A second endpoint for
"erase" would just be a second way to reach the same empty state.
Save a named collection
A collection is a saved filter, not a copy of the files — deleting one never touches the underlying media.
curl "https://app.tease.link/api/admin/vault/collections" \
-H "Authorization: Bearer $TEASE_API_KEY"curl -X POST "https://app.tease.link/api/admin/vault/collections" \
-H "Authorization: Bearer $TEASE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "Best sellers", "filters": {"q": "lingerie", "scope": "sorted"}}'name is required (up to 128 chars); filters is stored as-is, shaped however the search
screen assembled it.
curl -X PATCH "https://app.tease.link/api/admin/vault/collections/{collection_id}" \
-H "Authorization: Bearer $TEASE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "Top performers"}'curl -X DELETE "https://app.tease.link/api/admin/vault/collections/{collection_id}" \
-H "Authorization: Bearer $TEASE_API_KEY"Editing/note/deleting on a missing item
Every one of these actions requires the media_id to already exist in the vault index — a
favorite/block/note on a file we don't have is an honest 404, not a silent write. If the
index and the real vault have drifted, re-index
first.
What's next
Compare notes with what's actually earning: See what's actually selling.