What every event must carry
Omit secrets, emails, and payment tokens from
payload and context.
Intent categories
These five categories are the ontology profile and intent reads speak.
Designed finer types you can map into those categories:
outcome.participateoutcome.purchaseoutcome.complete_collectionsentiment.positive/sentiment.negativeaffiliate.self_label/affiliate.group_associationhabit.repeated_interest/habit.repeated_activityactivation.ready_for_next_step
ontology_category as one of outcome, sentiment, affiliate, habit, activation. Put the finer type in event_type or payload if you need it.
Suggested event catalog
Use this as the first mapping workshop with Swapnice. You do not need all of them for a pilot.
Pilot minimum: one explicit claim (
profile.selected) and one behavioral conversion (purchase.completed).
Example events
- Explicit preference
- Purchase
- Repeated browse
Claims, not overwrites
If two sources disagree, both claims stay. The profile picker chooses a winner and keeps alternatives. Resolution today: highest confidence, then most recent. Designed rules that later resolution will also honor:- Explicit user-declared signals outrank inferred behavior
- Recency matters unless an older explicit signal is still active
- Higher-trust sources outrank lower-trust sources
- Truth can be context-specific (“favorite for apparel” ≠ “favorite for collectibles”)
- A claim is only usable for purposes still granted
- Revoke, delete, and correction requests remove that claim from purpose-scoped reads
resolution_method, evidence, and alternatives. Partners can see why a fact won.
Ordering, idempotency, and async
- Events for one
app_id+customer_idare FIFO through a single coordination object - Replaying the same
Idempotency-Keyreturns the originalevent_id - A reused key with a different body returns
409 idempotency_conflict POST /v1/eventsreturns202withprocessing_status: queued- Profile reads see the event after archive projection. If a profile is empty, wait and retry
GET /v1/events/:iduntilprocessed
POST /v1/events/batch accepts 1–100 of the same shape.
Confidence guidance
Garbage confidence makes profile reads harder to trust. Prefer fewer, cleaner events in the pilot.
Catalog objects
When the object is a card, SKU, or collectible, upsert it as an entry and use that id inobject. Intents then attach to a shared catalog instead of free-text names.