Skip to content

Domains

A domain in CoreAPI is a self-contained vertical slice of functionality, following the domain-driven layout:

  • wire.go — single entry point for the domain, wires everything together
  • routes.go — route registration
  • handler.go — request handlers
  • models.go — domain models
  • config.go — the only place allowed to call os.Getenv for this domain

distribution and media are the reference implementations — new domains should be structured to match them.

A domain gets its own domain/<name>/index.md (plus guide.md, changelog.md, <name>.yaml as needed) once it has a stable API surface worth documenting on its own. Until then, it's a flat file directly under domain/ (or missing entirely) — that's a signal the domain is still early/unstable, not an oversight to silently patch over. Flat files get promoted to their own folder once the domain settles rather than the other way around.

This reflects the v3.4 ontology (18 domains). catalogue/ is not one of the 18 — it's a deprecated legacy alias still live on developer.castis.io that's being split across commerce/, content/, media/, and scheduling/. See the pending migration note at the bottom.

Domain Path Description
Identity /v1/identity Orgs, users, roles — who can act
Tenancy /v1/tenancy Who owns what; federation envelope for external system bindings
Provisioning (not documented) /v1/provisioning Physical/logical devices, CMDB class registry (PlatformComponent)
Commerce /v1/commerce Everything saleable + settlement — SaleableProduct, Order, RevenueSplit
Notification /v1/notifications Outbound messaging templates, deliveries, subscriptions
Privacy (not documented) /v1/privacy PDPA spine: consent, data-subject requests, retention, audit log
Content (not documented) /v1/content What the viewer browses — Channel, lineup, menu, banner, discovery, theme
Media /v1/media The bytes — assets, playlists, playout profiles, artwork (metadata over SeaweedFS)
Playback /v1/playback Runtime sessions only — session, DRM token, QoS, CMCD (coming)
Distribution /v1/distribution CDN orchestration — PoPs, caches, GSLB, ELB, StreamerNode
Scheduling /v1/scheduling Time-based programming — schedules, slots, EPG, blackout/recurrence
Advertising /v1/advertising Ad demand/delivery; revenue-out settles via commerce/RevenueSplit
Spatial (not documented) /v1/spatial Physical world model — venues, spaces, endpoints
Workflow (not documented) /v1/workflow Orchestration/release — workflow defs, actions, deployments, work orders
Engagement (not documented) /v1/engagement Guest-facing service — concierge, tickets, SLAs, conversations
Analytics /v1/analytics Measurement — dimensions, metric events, QoS reports (reads ClickHouse)
AI (not documented) /v1/ai Models/inference — occupancy, feature vectors, annotations, agents
Marketplace (not documented) /v1/marketplace Partner ecosystem — partners, offers, campaigns, API products/plans/keys
Tenant (not documented) Flat file only, not yet promoted to a full domain page

Pending: catalogue/ deprecation & split

catalogue/ is still live on developer.castis.io but is a deprecated alias in v3.4 — it's not one of the 18 domains and should not re-enter the domain list. It's a grab-bag that needs to be split and redirected:

Live under catalogue/ Real ontology home
playlists media/Playlist
media-channels content/Channel
banners content/Banner, BannerSection
rail-menus content/Rail + MenuTree / MenuNode
time-blocks scheduling/Slot
tags content/ContentMarker (or a shared tag entity)

Also flagged: Playlist is currently documented under catalogue but is actually a media/Playlist entity — pick one home.

Action item: split catalogue/'s surface across media/, content/, and scheduling/ docs, then mark/remove the catalogue/ alias so it doesn't get re-documented as its own domain.