Trust & stability
Audience & versioning
The family-safe default, and what v1 promises not to break.
Audience
The API defaults to family-safe. Every event, class, camp, and place carries an audience field — kids, families, teens, adults, or all_ages. Adult-only content is excluded by default on every list endpoint; a detail read (GET /v1/events/{id}) always returns the item regardless of audience, so a permalink resolves either way.
GET /v1/philadelphia/events # adults-only rows excluded
GET /v1/philadelphia/events?audience=adults # only adults-only rows
GET /v1/philadelphia/events?audience=all # every audience
GET /v1/philadelphia/events?audience=teens,families # a specific combinationVersioning & stability
The version lives in the path (/v1/...) only — no version header, no Accept override. v1 is frozen: every path, parameter, and response field named in the endpoint reference is a promise. New optional parameters, new response fields, and new error.code values are additive and may appear at any time — parse permissively.
x-stability: beta or experimental on an operation or parameter marks the exceptions to the freeze; everything else unmarked is stable.
Timestamp fields
| Suffix | Meaning |
|---|---|
*_at | UTC, RFC 3339 (starts_at, created_at) |
*_local | Naive local wall-clock time, no offset, read against the object's own timezone |
*_on | A calendar date |
What to do
- Pass
audience=all(or name a specific audience) explicitly when your use case needs it — don't rely on the default staying family-safe forever without checking. - Don't build on a
betaorexperimentalsurface without watching for change notices; unmarked surface is safe to depend on. - Format
*_atfields as UTC in your own storage, and convert to*_local's timezone only for display.