Developers

The TruckeeVibes events API

A free, read-only JSON list of events around Truckee and North Lake Tahoe. No key, no sign-up. Please show the credit line with the data.

Endpoint

GET https://truckeevibes.com/api/v1/events

curl 'https://truckeevibes.com/api/v1/events?scope=vibes&area=truckee&limit=20'
curl 'https://truckeevibes.com/api/v1/events?scope=lights&season=christmas&year=2026'

Parameters

NameValuesMeaning
scopevibes (default) or lightsvibes = the TruckeeVibes list. lights = the events shown on Truckee Lights and Truckee Frights for one season.
seasonhalloween or christmasRequired with scope=lights; not allowed otherwise.
yearfour digits, 2025 to 2100The season’s December year. Required with scope=lights.
fromYYYY-MM-DDFirst local day (Pacific). Earlier than today means now: ended events never come back.
toYYYY-MM-DDLast local day (Pacific), inclusive. The window is at most 120 days.
areacomma list, up to 10Area slugs, e.g. truckee,donner_lake. scope=vibes only.
categorycomma list, up to 10Category slugs, e.g. music,outdoors. scope=vibes only.
limit1 to 500Events per page. Default 200 (vibes) or 500 (lights).
cursoropaqueThe nextCursor of the previous page.

Unknown or repeated parameters are refused. Events are ordered by start time, then id; follow nextCursor until it is null.

Response

One JSON object. The JSON Schema is the contract; new fields may be added within v1, nothing is removed or renamed.

FieldTypeMeaning
version1API major version.
scope"vibes" | "lights"vibes = the TruckeeVibes list; lights = the events shown on Truckee Lights / Truckee Frights for one season.
season"halloween" | "christmas" | nullThe season (scope=lights), else null.
yearinteger | nullThe season's December year (scope=lights), else null.
dataAtstring (date-time)When the database produced this page (UTC).
stalebooleanAlways false in v1: there is no stale fallback (an outage is a 503). Kept so clients can keep checking it.
pageCompletebooleantrue when this is the last page (nextCursor is null).
mirrorobjectFreshness of the Truckee Lights mirror (scope=lights). Always state none for scope=vibes.
regionobjectThe region the list covers.
countintegerEvents on this page.
nextCursorstring | nullPass as cursor= for the next page; null on the last page.
attributionobjectCredit line to show with the data.
eventsarray of eventEvents ordered by start time, then id.

Event fields

FieldTypeMeaning
idstring (uuid)Stable event id (a Truckee Lights id for origin=lights).
origin"lights" | "vibes"Where the event comes from.
formerIdsarray of string (uuid)Ids of events merged into this one (up to 5 hops).
pageUrlstring | nullThe event's TruckeeVibes page, when it has one.
titlestring
descriptionstring | nullOrganizer text; only on origin=lights rows.
summarystring | nullOur one-line summary; only on origin=vibes rows.
startsAtstring (date-time)Start (UTC).
endsAtstring | null (date-time)End (UTC), when known. All-day events end at local midnight after the last day.
allDayboolean
startDatestring | null (date)First local day of an all-day event.
endDatestring | null (date)Day after the last local day of an all-day event (exclusive).
timeKnownbooleanfalse when the source gave a date but no time.
venuestring | null
addressstring | null
townstring | null
latnumber | null
lngnumber | null
categoriesarray of stringCategory slugs.
age"all_ages" | "family" | "18_plus" | "21_plus" | "unknown"
adultsOnlyboolean21 and over.
urlstring | nullThe organizer's page for the event.
ticketUrlstring | null

Errors

Caching

CORS

Browsers on truckeelights.com, truckeefrights.com and truckeevibes.com get access-control-allow-origin. This is etiquette, not access control: the data is public, and server-side calls work from anywhere. Please cache responses and keep request rates modest.

Versioning

Within /api/v1 changes are additive only. A breaking change ships as /api/v2, and v1 keeps working.

Embed

const res = await fetch('https://truckeevibes.com/api/v1/events?scope=vibes&limit=20');
const { events, attribution } = await res.json();
// show attribution.name linked to attribution.url with the list