Creator pillar · v0.15.1
channel Channel
A single channel on a creator platform.
$id · https://corpospec.com/schemas/v0.15.1/channel.schema.json
Fields
| Field | Type | Required | Description |
|---|---|---|---|
| description | string | yes | |
| entity_id | PathRef | yes | Owning legal entity (`PathRef` to `entity/`). |
| first_synced_at | IsoDate | yes | First-fetch timestamp; immutable on subsequent re-syncs. |
| id | PathRef | yes | CorpoSpec PathRef (e.g. `creator/channels/unstarter-yt`). |
| made_for_kids | boolean | yes | Channel-wide kids designation; affects monetisation eligibility and audience-snapshot interpretation on platforms that surface it (e.g. YouTube `madeForKids`). |
| platform | CreatorPlatform | yes | Cross-platform discriminator on `Channel`. Identifies the host platform a channel lives on. Open-ended by design: new platforms extend the enum without breaking the channel shape — connectors map each platform onto the existing platform-agnostic field set (`platform_channel_id`, `platform_uploads_id`, `provenance`, statistics, breakdowns) without renaming or restructuring. |
| platform_channel_id | string | yes | Platform-side stable identifier for this channel. Format is platform-specific (YouTube emits `UC…` channel IDs; Twitch emits numeric user IDs; TikTok emits `@handle` SecUIDs). Treated as an opaque token by CorpoSpec; the connector layer interprets it. Persisted indefinitely as a structural identifier. |
| privacy_status | ChannelPrivacyStatus | yes | Channel-level privacy status. Public, unlisted, and private are the three states common to YouTube, Twitch, Vimeo, and most creator platforms; values map onto each platform's native enum at the connector boundary. |
| provenance | SyncProvenance | yes | Provenance metadata for this channel record. The `retention_tier` reflects the strictest tier across the record's fields — snippet text typically purges with the upstream platform's derived-data window, while structural identifiers (channel ID, uploads collection, channel-creation timestamp) are persisted indefinitely. Stamped with the strictest applicable tier so the cache-purge job can decide conservatively. |
| published_at | string | yes | Channel-creation timestamp on the platform; immutable. Persisted indefinitely as a structural identifier. |
| statistics | ChannelStatistics | yes | Most-recent-synced statistics for the channel. Snapshot semantics: every field is valid as of the parent record's `provenance.synced_at`. Long-horizon growth curves (year-over-year subscriber deltas, lifetime view trajectories) are reconstructed from the daily audience-snapshot history rather than from successive channel re-syncs. |
| title | string | yes | |
| country | IsoCountry? | — | ISO 3166-1 alpha-2 country. |
| custom_url | string? | — | Creator handle (e.g. `@unstarter`). May be unset for new channels. |
| default_language | string? | — | BCP-47 language code. Optional. |
| keywords | string? | — | Creator-authored search keywords. Free-form text (e.g. YouTube's space-separated `brandingSettings.channel.keywords`). High-signal positioning input for AI agents. |
| platform_uploads_id | string? | — | Platform-side identifier for the channel's enumerable uploads collection, where the platform exposes one. YouTube uses an uploads playlist ID; platforms that paginate uploads by channel ID directly leave this empty. Optional and platform-specific. |
| thumbnail_default_url | string? | — | Default thumbnail URL (HTTPS; ephemeral). |
| thumbnail_high_url | string? | — | High thumbnail URL. |
| thumbnail_medium_url | string? | — | Medium thumbnail URL. |
| topic_categories | string[] | — | Topic descriptors as URL references (e.g. Wikipedia URLs from YouTube `topicDetails.topicCategories`). |
| unsubscribed_trailer_video_id | string? | — | Featured "first impression" video for visitors who are not yet subscribed. Stored as a `creator/videos/` PathRef once the video table is populated; the platform's raw video identifier is accepted on first sync. |
Definitions
Shared types referenced within this schema.
ChannelPrivacyStatus
Channel-level privacy status. Public, unlisted, and private are the
three states common to YouTube, Twitch, Vimeo, and most creator
platforms; values map onto each platform's native enum at the
connector boundary.
enum: "public", "private", "unlisted"
ChannelStatistics
Most-recent-synced statistics for the channel.
Snapshot semantics: every field is valid as of the parent record's
`provenance.synced_at`. Long-horizon growth curves (year-over-year
subscriber deltas, lifetime view trajectories) are reconstructed from
the daily audience-snapshot history rather than from successive
channel re-syncs.
type: object
CreatorPlatform
Cross-platform discriminator on `Channel`. Identifies the host
platform a channel lives on. Open-ended by design: new platforms
extend the enum without breaking the channel shape — connectors map
each platform onto the existing platform-agnostic field set
(`platform_channel_id`, `platform_uploads_id`, `provenance`,
statistics, breakdowns) without renaming or restructuring.
enum: "youtube"
DataClass
Classification of a synced field's data sensitivity. Drives subject-
rights workflows and cache-purge retention decisions.
IsoCountry
ISO 3166-1 alpha-2 country code.
pattern: ^[A-Z]{2}$
IsoDate
ISO 8601 date (YYYY-MM-DD).
type: string
PathRef
Path-based cross-reference relative to .corpospec/ root.
Pattern: `^[a-z0-9_-]+(/[a-z0-9_.-]+)+$`
pattern: ^[a-z0-9_-]+(/[a-z0-9_.-]+)+$
RetentionTier
Retention policy applied to a synced record. Tiers are named after the
discipline they impose; the connector layer maps each upstream surface
onto the appropriate tier.
- `thirty_day_strict` — atomic records that auto-purge or refresh at
the thirty-day boundary. The dominant tier on platforms whose
Terms of Service impose a thirty-day cache discipline on derived
data (e.g. YouTube Developer Policies §III.E.4 for Data API
outputs).
- `thirty_day_aggregate_with_lineage` — atomic record purges at
thirty days; the aggregate computed from it may be retained when
accompanied by explicit `derived_from` + `derivation_method`
lineage.
- `auth_lifetime` — atomic record retains against active OAuth
authorisation; tears down on token revocation or tenant deletion.
Used for analytics surfaces whose ToS explicitly exempt them from
the thirty-day rule (e.g. YouTube Analytics API per §III.E.4).
- `creator_authored` — data the tenant originates rather than fetches;
no upstream-platform retention constraint applies.
- `metadata_indefinite` — structural identifiers and immutable
timestamps the upstream ToS explicitly permits to retain.
SourceAttribution
Source attribution for a synced field. Records the kind of upstream
surface that produced the value; combined with the parent record's
`platform`, this fully attributes any value back to its origin.
Open-ended by design: new connector kinds (e.g. monetary or content-
owner APIs) extend without breaking changes. The platform discriminator
(`Channel.platform`) carries the brand identity; this enum carries
only the kind of API surface the value came from.
SyncProvenance
Provenance metadata stamped on every synced atomic record across the
creator pillar. Per-record granularity; the `retention_tier` reflects
the strictest tier of any field on the record so the cache-purge job
can decide conservatively. Field-level retention distinctions are
documented in each entity type's struct doc-comments — the schema
documents the static taxonomy, the data carries only the per-fetch
state.
type: object
Reference in your YAML
# yaml-language-server: $schema=https://corpospec.com/schemas/v0.15.1/channel.schema.json