API platform for user intelligence

Turn user behavior into structured relationships

Ship personalization, discovery, and analytics features without building a recommender from scratch. Send events, get back ranked users, groups, and feeds — on infrastructure you don't have to run.

Free tier availableTypeScript, Ruby, Python SDKsSelf-service signup

Building blocks

Eight primitives. One API. Every combination you need.

Describe your domain, send the events, and let the platform do the relationship math. Compose the pieces differently for every product you ship.

Vocabulary

Teach the platform your domain. Tags and topics become the shared language every other primitive understands.

Signals

Track what your users actually do. Likes, purchases, enrollments, views — any event, any weight, shaped to your product.

Affinities

Skip the modeling work. Send signals in, get ranked relationships between users and topics out — computed automatically.

Scoring

Decide what "relevant" means for your product. Swap presets to reshape results without touching the underlying data.

Clustering

Discover user segments you didn't know existed. FAISS + HDBSCAN surface groups from behavior — no manual rules required.

Campaigns

Put the right content in front of the right users. Budget controls, item targeting, and impression tracking built in.

Feed

Ship a personalized feed without running a recommender. One call returns a ranked stream — signals, affinities, and scoring already composed.

Analytics

See what's working without building a data pipeline. Engagement, affinity coverage, cluster shape, and campaign performance — queryable out of the box.

Three steps

From signup to a personalized feed in three calls

You decide what matters. The platform handles the indexing, scoring, and ranking behind it.

1

Describe what your users care about

Create a vocabulary of tags and topics — music genres, skill categories, product types, whatever matters in your product. Everything downstream hangs off this taxonomy.

POST /api/v1/vocabulary/tags
{
  "name": "jazz",
  "category": "genre",
  "description": "Jazz music"
}
2

Send the events you already have

Post a signal whenever a user interacts. You choose what each signal type means and how heavily it counts — nothing is hardcoded.

POST /api/v1/users/u_42/signals
{
  "signal_type": "listen",
  "tag_name": "jazz",
  "strength": 0.8
}
3

Ask for results when you need them

Affinities update on their own. Pull a ranked feed, read cluster membership, or launch a campaign — the same primitives back every call.

GET /api/v1/users/u_42/feed/ranked
// Returns users ranked by affinity,
// scored by your configured preset,
// filtered by consent layer.

Use cases

One toolkit. Every kind of product.

Creator platforms, marketplaces, learning apps, and professional networks all rely on the same primitives — composed differently for what you're building.

Creator & fan platforms

Match fans to creators they'll actually stick with, and keep private tiers private.

SignalsAffinitiesFeedScoring

Community apps

Surface the interest groups already forming inside your product — without hand-curating a single one.

VocabularyClusteringAnalytics

Marketplaces

Promote the right listings to the right buyers and measure what the promotion actually earned.

ScoringCampaignsAnalytics

Content platforms

Turn passive watch time into a feed that keeps getting sharper the longer users stay.

SignalsAffinitiesFeed

Learning platforms

Pair learners by skill, not by guesswork — and watch cohorts form as they progress.

ClusteringScoringSignals

Professional networks

Introduce people who should actually meet. Expertise-weighted matches, ranked by likely signal.

VocabularyAffinitiesScoring

Infrastructure

Production-ready before your first user signs up

Encryption, tenant isolation, and consent filtering are on by default — so the safe path and the fast path are the same path.

User PII stays encrypted — no extra work

Field-level encryption and blind search indexes run through ShrouDB Cipher by default. You never store plaintext.

Tenants are isolated from the first request

Every call is scoped to a client. Data, configuration, and scaling stay separate — no shared-state footguns to discover later.

Ship private tiers without building your own consent layer

Scope visibility and matchability per trust level. The data model already treats consent as a first-class filter.

Pay only for the tier you use

Start with the graph — signals, affinities, vocabulary. Turn on scoring, clustering, campaigns, and feed when your product needs them.

Your first API call is a minute away

Sign up, grab your key, and start sending signals. Free tier, no credit card.