Calendar

List calendar entries

Returns calendar entries scoped to the authenticated user's company.

Filter dimensions are mutually exclusive — the first match wins, in order: customer_id, vehicle_id, then the default timeframe. When no filter is supplied, returns entries from midnight today to midnight 30 days later (Europe/Rome) across all calendars.

Timeframe: from / to select the entries that overlap the instant window [from, to) — an entry ending exactly at from is not included.

Pagination (revision 2026-10-13 and later): every filter pages. Entries are ordered by start_time, then id; limit sets the page size (default 20, max 100) and next_starting_after, present while has_more is true, is the opaque cursor to send back as starting_after. The cursor marks a position, so entries created or deleted while paging don't shift the remaining pages. A cursor that is not one this endpoint issued → 422 on /starting_after.

Older revisions: the timeframe query ignores limit and returns the whole window, stopping at 2000 entries with has_more; the customer_id / vehicle_id lists return the first limit entries with has_more but no cursor. starting_after is validated and ignored.

get/v1/calendar-entries

Request

  • Base URL: https://api.officina.it
  • URL: https://api.officina.it/v1/calendar-entries
  • Auth: HTTP bearer

Query parameters

customer_idstring uuid
vehicle_idstring uuid
calendar_idstring

Restrict the timeframe listing to one parent calendar. Send it empty (calendar_id=) or omit it for "all calendars" — this tier stores no selection between requests. The effective selection is echoed in calendar_filter. Ignored when filtering by customer_id / vehicle_id.

fromstring date-time
tostring date-time
limitinteger
starting_afterstring

Response

Page of calendar entries.

object'list' required

Polymorphic discriminator.

has_moreboolean required

True if more results exist beyond this page. Use this for the "load more" UI — data.length alone is unreliable because a full page may still be the last page.

next_starting_afterstring

Opaque cursor for the next page. Present (and non-empty) when has_more is true; omitted otherwise. Pass the value verbatim as ?starting_after= on the follow-up request. Clients MUST NOT parse it — today it encodes an offset, tomorrow it may encode a (created_at, id) tuple without a wire-visible change.

urlstring required

The request path that produced this list.

Changes

No recorded changes to this operation across all 1 revision of this API.