Read

get_taste_fingerprint

Returns a compact rollup of the creator's past curation decisions — card accept/reject counts, stated rationales, sequencing activity, and derived grounding signals — so the agent can match the creator's taste instead of starting cold.


Parameters

NameTypeRequiredDescription
outlineIdstringOutline ID to query. Omit to read the authenticated creator's own outline.

Response

FieldTypeWhat it means
outlineIdstringThe resolved outline ID whose fingerprint was computed.
fingerprint.totalDecisionsnumberTotal curation events recorded so far across all decision types.
fingerprint.byEventTypeobjectCount per event type — accepted, rejected, reordered, edited, cover_set, etc.
fingerprint.byEntityobjectCount per entity type — card, cover, copy, sequence, etc.
fingerprint.cards.acceptednumberNumber of cards the creator has accepted.
fingerprint.cards.rejectednumberNumber of cards the creator has rejected.
fingerprint.cards.rejectedHeadingsstring[]Headings of rejected cards. Treat as a blocklist — avoid proposing cards with similar titles.
fingerprint.sequencingActivitynumberHow many times the creator has reordered cards. A high count signals that card ordering matters to them.
fingerprint.coverDecisionsnumberNumber of cover-related decisions made (cover_set, cover_rejected, etc.).
fingerprint.rationalesstring[]Verbatim rationales the creator has stated via log_curation_decision. Up to 15, newest first.
fingerprint.recentarrayThe 10 most recent curation events, each with eventType, entity, entityRef, and at timestamp.
fingerprint.signalsstring[]Human-readable grounding hints derived from the data. Read these directly and act on them — this is the most important field.

Example

Request

json
{}

Response

json
{ "outlineId": "42", "fingerprint": { "totalDecisions": 23, "byEventType": { "accepted": 8, "rejected": 3, "edited": 9, "reordered": 3 }, "byEntity": { "card": 11, "copy": 9, "sequence": 3 }, "cards": { "accepted": 8, "rejected": 3, "rejectedHeadings": [ "My Story", "About Me", "FAQ" ] }, "sequencingActivity": 3, "coverDecisions": 0, "rationales": [ "Too generic — every photographer has this card", "Doesn't show personality" ], "recent": [ { "eventType": "accepted", "entity": "card", "entityRef": "card_abc123", "at": "2026-06-25T14:30:00Z" } ], "signals": [ "This creator has rejected 3 card(s): My Story, About Me, FAQ — avoid proposing similar.", "Card acceptance rate ~73% — calibrate how aggressively you propose.", "Stated preference: \"Too generic — every photographer has this card\"" ] } }

When to use

Call immediately after get_guidance and before proposing any cards or content. The signals array is the most important field — read it and adjust your proposals accordingly. A fingerprint with fewer than 5 decisions means propose conservatively.

Pair with log_curation_decision after the creator accepts or rejects suggestions to grow the fingerprint over time. The more decisions recorded, the more precisely the agent can match their taste on future calls.


Gotchas

Watch out

  • The signals array is the key output — don't just look at raw counts. Read signals and let them inform every subsequent proposal.
  • rejectedHeadings is a blocklist — treat it as such and avoid proposing cards with similar titles.
  • A fresh profile returns totalDecisions: 0 with a single signal to propose conservatively. That's normal — there's simply no history yet.
  • Call log_curation_decision after every accept or reject to keep the fingerprint growing. A fingerprint that never grows gives the agent nothing to work with.