Appearance
Versioning & stability
There is no version number in the URL. The schema evolves additively, and the live schema (via open introspection) is always the source of truth.
What is stable
- Existing types, fields, and arguments keep their meaning. They are not renamed or removed within Phase 1.
- Error codes at
extensions.code(Errors) are part of the contract. - A field documented as nullable (e.g.
coverUrl) may start returning a value where it returnednull- this is additive and non-breaking.
What can change without notice
- New types, fields, arguments, and enum members may be added at any time.
- Opaque values -
playbackUrl,coverUrl, andid- may change in format. Use them as returned; never parse or hardcode them. - Human-readable error messages may be reworded (the codes stay stable).
Client obligations
Build clients that tolerate additive change:
- Select only the fields you use. Do not assume the full object shape.
- Tolerate unknown enum values. Map any
EpisodeStatus/StreamStatusyou do not recognize to a safe default (treat as not-playable) rather than crashing. See Types. - Treat opaque values as opaque. Never parse
playbackUrl,coverUrl, orid. - Branch on
extensions.code, not onmessage. - Check
statusbefore playback - a non-nullplaybackUrldoes not mean playable. See Playback & images.
Current scope (Phase 1)
Phase 1 is a public, read-only Content API:
- Read-only - there are no mutations.
- Content is
property → brands → seasons → episodes, plus curated livestreams(UNLIMITED streams only in Phase 1). - App-key management and content curation happen out of band, run by the Hope.Cloud team.