Skip to content

Entities (business ontology) ​

Tangent describes your product in your nouns — Account, User, Subscription, Plan, Feature, Release, Ticket, Campaign — and every analysis and AI answer is limited to nouns your workspace has defined. The ontology is where those nouns live, and it is honest about where each one comes from.

Where to find it ​

Settings › Entities. Each entity shows its key, label, description, how an instance is identified, every field with its type and where the value is populated from, its relations, and whether Tangent can populate it today:

  • Populated from events — the entity is materialised from your event stream right now.
  • Needs a connector — the noun exists (the AI knows it and will refuse questions that need it rather than guess), but there are no rows until the owning system is connected.

Labels and descriptions are editable by workspace owners and admins; every save is a new version with the previous one kept, and is written to the audit log.

Accounts, from events alone ​

Send an account group on your events and Accounts appear without any connector:

json
{ "eventType": "feature_used", "userId": "u-42",
  "groups": { "account_id": "acme-corp" },
  "properties": { "plan": "growth", "industry": "fintech", "country": "US", "seats": 40 } }

plan, industry, country, seats (and tier, company_size, segment, region, account_name, domain) on an event that carries the account group become the account's properties — last value wins. Accounts › pick the account_id key › click a row for the account page: profile, properties, users, event mix.

Releases, from one event ​

A release_deployed event with a version property (optionally environment, commit, actor, description) becomes a release. Release Impact is built on this table.

Using entity fields in questions and filters ​

Any insight filter can name an entity field: account.plan = growth selects the users whose account is on the growth plan. Ask in English can do the same — "feature adoption for accounts on the growth plan" — and if you ask for a field that is not populated yet (say subscription.mrr before billing is connected), the answer says exactly which field is missing instead of substituting something else.

API ​

  • GET /api/ontology · PUT /api/ontology · POST /api/ontology/reset
  • GET /api/analytics/entities/accounts · GET /api/analytics/entities/accounts/{accountId}

Contract: docs/ONTOLOGY-SPEC.md in the repository.

Tangent — product analytics.