TEASEDocs
ProductsClubHow-to

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.

On this page