Current schedule for a council's own property id (public feeds only)

The council-id form of the public schedule resource (7 Sep 2026): the same address-free Schedule keyed by the council's own identifier for the property — the value its address list uses — under the council's GSS code. It is the public form for councils whose identifiers are not UPRNs. Same rules as /schedules/uprn/{uprn}: exists only with PUBLIC_FEEDS=1, resolves only what the store already holds, and requires exactly one property to answer. A uniquely mapped stale schedule may enter the bounded background-refresh path; an unknown, malformed or ambiguous identifier creates no work. id is the canonical form: whitespace removed, a ReCollect GUID:service:tenant reduced to its lower-case GUID, RFC 3986 unreserved characters only; anything else is 404.

get/schedules/council/{gss}/{id}

Request

  • Base URL: https://whenisbins.com/v1
  • URL: https://whenisbins.com/v1/schedules/council/{gss}/{id}
  • Auth: one of:
    • none
    • HTTP bearer

Path parameters

gssstring required
Example:E09000005
idstring required
Example:2083293

Query parameters

view'compact'

compact returns the CompactSchedule: the same answer with every container-appearance block and the legacy colour fields removed from each collection, for a reminder or "what goes out tomorrow?" check (about 1 KB against about 9 KB). Nothing about which answer is served, its freshness or the refresh it may queue changes. The compact body has its own ETag; send back the one received for the same view. Any other value is 400 invalid_request.

Headers

If-None-Matchstring
Example:"a1b2c3"

Response

The current schedule (the CompactSchedule when view=compact was requested); council_id echoes the request.

property_idstring required

Echo of the requested property id (mockup amendment 5) — clients should assert it matches what they asked for.

address_match'exact' | 'street' | 'postcode' | 'postcode_representative' required

exact includes a citizen's own pick. street/postcode = council publishes at that granularity (notes explain). postcode_representative = a labelled same-postcode neighbour answer. It may follow explicit consent, measured evidence that permits automatic serving, or the narrower provisional interim gate. It is never presented as an exact-property result.

date_confidence'published_calendar' | 'council_projection' | 'next_collection_only' required

published_calendar = real dates the council publishes. council_projection = dates published by the council's own projected calendar, or one next date calculated by the service's bounded normal-weekday rule (holiday changes may be missing). Council-published dates are retained through the 92-day horizon; only the service's own calculation is limited to one occurrence. next_collection_only = nothing beyond the next date(s) exists — do not imply more is coming.

date_completeness'next_only' | 'limited_horizon' | 'full_horizon' | 'weekday_only' required

Separate from validity: next_only is concrete next date(s), limited_horizon is a valid incomplete slice, full_horizon was verified across the serving horizon, and weekday_only contains council-published weekday wording that could not safely be translated into dates. Weekday projections are limited_horizon and contain at most the next date for each collection type. A nearby UK bank holiday does not suppress that date; any explicit council exception the run saw takes precedence.

evidence_granularity'property' | 'street' | 'postcode' | 'area' | 'round' required

The level at which the council publishes the schedule evidence; separate from how the requested address was matched.

retrieved_atstring date-time nullable required

When we fetched this from the council (answers are cached). Null for historical cached lookups whose original retrieval time was not retained; never substitute the time the cache was read.

refresh_due_atstring date-time nullable required

The instant this answer stops being fresh under the service's refresh policy — retrieved_at plus 28 days, or plus 7 days while today is within a fortnight of a UK bank holiday. Before it, the answer is an acceptable cache and no refresh is owed. After it, a read of the schedule resource queues a background refresh and still returns the answer as it stands; a later read returns the refreshed answer with a new retrieved_at, refresh_due_at and ETag. It is policy, not a promise of when the refresh runs. Null when retrieved_at is null.

source_revalidated_atstring date-time

When a shared source artifact was most recently conditionally revalidated.

artifact_versionstring

Opaque content-hash and parser-version identity for a deterministic shared calendar.

provisionalboolean

Present and true only on an INTERIM answer: a same-postcode neighbour's schedule, served in under a second while the lookup for this exact property is still running. It is always accompanied by address_match: postcode_representative, dates_complete: false on every collection, and a notes caveat naming the neighbour. The lookup carrying it is partial, never done.

An interim is never cached: it does not appear at GET /v1/schedules/{property_token}, in a calendar feed, in a reminder or in an email, and it is replaced in place by the exact answer as soon as that arrives. A client that treats it as final is misreading it — keep polling the lookup.

It is fail-closed: the council must pass the measured zero-mismatch gate and the postcode's held comparable neighbours must also pass the serve-time verification gate. See docs/interim-then-upgrade-serving-2026-08-27.md for the internal evidence thresholds; clients must rely on provisional, not reproduce those policies.

notesstring

Plain-English caveats written for the citizen (assisted collections, communal bins, granularity, …).

source_urlstring uri

The council's own checker page ("check on your council's site"): the page the serving run actually read, else the council's known checker page from our council intel. https only.

uprnstring

The property's Unique Property Reference Number, present only when the service has verified it against OS Open UPRN AND public feeds are on (PUBLIC_FEEDS=1). It keys the shareable public calendar https://whenisbins.com/{uprn}.ics and the /schedules/uprn/{uprn} form of this resource. Canonical digits, no zero padding.

council_idstring

The council's own identifier for the property (the value its address list uses), canonical form, present only when the service captured it from an exact match AND public feeds are on. Keys https://whenisbins.com/{council.id}/{council_id}.ics and the /schedules/council/{gss}/{id} form of this resource — the public calendar for councils whose identifiers are not UPRNs.

calendar_urlstring uri

The property's public, subscribable iCalendar feed, present only when public feeds are on AND the Schedule carries a uprn or a council_id. Always the uprn form when there is a uprn, otherwise https://whenisbins.com/{council.id}/{council_id}.ics. Use this value as given rather than assembling a link. It is a website resource, not a /v1 route: collection dates only, no address or personal details, one event per collection date (?per=service for one per service, ?download=1 for a one-off file). Reading it never creates a lookup. Give it to a person to subscribe to; its dates are this Schedule's dates, so read date_confidence and date_completeness here before describing how far ahead it reaches. Absent means there is no public calendar for this property; never build one from property_id.

Changes

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