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 togetherroutes.go— route registrationhandler.go— request handlersmodels.go— domain modelsconfig.go— the only place allowed to callos.Getenvfor 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.