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
| Name | Type | Required | Description |
|---|---|---|---|
| outlineId | string | — | Outline ID to query. Omit to read the authenticated creator's own outline. |
Response
| Field | Type | What it means |
|---|---|---|
| outlineId | string | The resolved outline ID whose fingerprint was computed. |
| fingerprint.totalDecisions | number | Total curation events recorded so far across all decision types. |
| fingerprint.byEventType | object | Count per event type — accepted, rejected, reordered, edited, cover_set, etc. |
| fingerprint.byEntity | object | Count per entity type — card, cover, copy, sequence, etc. |
| fingerprint.cards.accepted | number | Number of cards the creator has accepted. |
| fingerprint.cards.rejected | number | Number of cards the creator has rejected. |
| fingerprint.cards.rejectedHeadings | string[] | Headings of rejected cards. Treat as a blocklist — avoid proposing cards with similar titles. |
| fingerprint.sequencingActivity | number | How many times the creator has reordered cards. A high count signals that card ordering matters to them. |
| fingerprint.coverDecisions | number | Number of cover-related decisions made (cover_set, cover_rejected, etc.). |
| fingerprint.rationales | string[] | Verbatim rationales the creator has stated via log_curation_decision. Up to 15, newest first. |
| fingerprint.recent | array | The 10 most recent curation events, each with eventType, entity, entityRef, and at timestamp. |
| fingerprint.signals | string[] | 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
signalsarray is the key output — don't just look at raw counts. Readsignalsand let them inform every subsequent proposal. rejectedHeadingsis a blocklist — treat it as such and avoid proposing cards with similar titles.- A fresh profile returns
totalDecisions: 0with a single signal to propose conservatively. That's normal — there's simply no history yet. - Call
log_curation_decisionafter every accept or reject to keep the fingerprint growing. A fingerprint that never grows gives the agent nothing to work with.