API reference

Every documented endpoint of the modules above, generated from the live OpenAPI document.

This reference is generated from the OpenAPI document published by the API, so it always matches what is deployed. It covers the modules described in the guides.

The same document can be imported into Postman, Insomnia or a client generator. It declares the X-Api-Key header scheme, so authenticated requests work as soon as you add your key.

API keys

GET/api/authentication/api-keys

List the API keys owned by the authenticated user

200 API keys (token value is never returned here)403 No authenticated user
POST/api/authentication/api-keys

Create a new API key; the raw token is returned once in the response

Body
labelrequiredstring

201 API key created; raw token included (shown only once)403 No authenticated user422 Missing, blank or too long label
DELETE/api/authentication/api-keys/{id}

Revoke one of the authenticated user own API keys

Parameters
idrequiredpath · string · uuid
204 API key revoked (idempotent)403 No authenticated user404 API key not found for this user

Organization

GET/api/public/organizations/{slug}

Get an organization and its settings by slug

Parameters
slugrequiredpath · string

200 Organization found404 Organization not found
GET/api/public/organizations/{slug}/ils/locations

The SIGB location directory of an organization, for the public maps

Parameters
slugrequiredpath · string

200 Locations with their stable locationRef, library and access mode404 Organization not found or Catalog module disabled
GET/api/public/organizations/{slug}/opening-calendar

Project effective organization opening hours over a date range

Parameters
slugrequiredpath · string
fromrequiredquery · string · date
torequiredquery · string · date

200 Inclusive effective calendar projection400 Invalid or oversized date range

Events

GET/api/manager/cms-event-registrations

Retrieves the collection of CmsEventRegistration resources.

Parameters
pagequery · integerThe collection page number
event.idquery · string
event.id[]query · string[]

200 CmsEventRegistration collection
POST/api/manager/cms-event-registrations

Creates a CmsEventRegistration resource.

201 CmsEventRegistration resource created400 Invalid input422 An error occurred
PATCH/api/manager/cms-event-registrations/{id}

Updates the CmsEventRegistration resource.

Parameters
idrequiredpath · stringCmsEventRegistration identifier

200 CmsEventRegistration resource updated400 Invalid input404 Not found422 An error occurred
DELETE/api/manager/cms-event-registrations/{id}

Removes the CmsEventRegistration resource.

Parameters
idrequiredpath · stringCmsEventRegistration identifier
204 CmsEventRegistration resource deleted404 Not found
POST/api/manager/cms-event-registrations/{id}/cancel

Cancel a CMS event registration and notify the participant

Parameters
idrequiredpath · string · uuid
Body
reasonrequiredstring
204 Registration cancelled404 Registration not found422 Validation failed
POST/api/manager/cms-events

Creates a CmsEvent resource.

Body
coverIRI | null
coverPositionYinteger
titlestring
titleFont"geist" | "anton" | "oswald" | "poppins" | "hahmlet" | … (35 values)
slugrequiredstring
publishedAtstring · date-time | null
isPublishedrequiredboolean
contentstring
contentDocumentstring | null[] | nullCanonical Tiptap/ProseMirror document; content remains a transition fallback.
startAtstring · date-time | null
endAtstring · date-time | null
locationNamestring | null
locationUrlstring | null
onlineUrlstring | null
locationType"none" | "free" | "address" | "map"
locationLatitudenumber | null
locationLongitudenumber | null
locationAddressstring | null[] | null
locationMapIRI | null
locationMapPointstring | null[] | null
speakersstring | null[] | null
categoriesIRI[]
enableRegistrationboolean
enableEmailRegistrationboolean
membersOnlyboolean
capacityGuestsinteger
capacityinteger | null

201 CmsEvent resource created400 Invalid input422 An error occurred
GET/api/manager/cms-events/{id}

Retrieves a CmsEvent resource.

Parameters
idrequiredpath · stringCmsEvent identifier

200 CmsEvent resource404 Not found
PATCH/api/manager/cms-events/{id}

Updates the CmsEvent resource.

Parameters
idrequiredpath · stringCmsEvent identifier
Body
coverIRI | null
coverPositionYinteger
titlestring
titleFont"geist" | "anton" | "oswald" | "poppins" | "hahmlet" | … (35 values)
slugstring
publishedAtstring · date-time | null
isPublishedboolean
contentstring
contentDocumentstring | null[] | nullCanonical Tiptap/ProseMirror document; content remains a transition fallback.
startAtstring · date-time | null
endAtstring · date-time | null
locationNamestring | null
locationUrlstring | null
onlineUrlstring | null
locationType"none" | "free" | "address" | "map"
locationLatitudenumber | null
locationLongitudenumber | null
locationAddressstring | null[] | null
locationMapIRI | null
locationMapPointstring | null[] | null
speakersstring | null[] | null
categoriesIRI[]
enableRegistrationboolean
enableEmailRegistrationboolean
membersOnlyboolean
capacityGuestsinteger
capacityinteger | null

200 CmsEvent resource updated400 Invalid input404 Not found422 An error occurred
DELETE/api/manager/cms-events/{id}

Removes the CmsEvent resource.

Parameters
idrequiredpath · stringCmsEvent identifier
204 CmsEvent resource deleted404 Not found
POST/api/manager/cms-events/{id}/cancel

Cancel a CMS event and notify its participants

Parameters
idrequiredpath · string · uuid
Body
reasonrequiredstring
204 Event cancelled404 Event not found422 Validation failed
POST/api/manager/cms-events/{id}/duplicate

Duplicate a CMS event

Parameters
idrequiredpath · string · uuid
Body
titlestring | null

201 Event duplicated404 Event not found
POST/api/manager/cms-events/{id}/notify-participants

Send an email notification to all active participants of a CMS event

Parameters
idrequiredpath · string · uuid
Body
subjectrequiredstring
bodyrequiredstring

200 Notification sent404 Event not found422 Validation failed
GET/api/manager/statistics/cms-events

Aggregated CMS event and registration statistics

Parameters
organizationquery · stringOrganization slug (administrators only; defaults to caller organization)
fromquery · string · dateFirst day of the period, included (YYYY-MM-DD). Without it, the period has no start.
toquery · string · dateLast day of the period, included (YYYY-MM-DD). Without it, the period has no end.

200 CMS event and registration statistics
GET/api/public/cms-event-categories

Retrieves the collection of CmsEventCategory resources.

Parameters
pagequery · integerThe collection page number
namequery · string

200 CmsEventCategory collection
GET/api/public/cms-event-categories/item

Retrieves a CmsEventCategory resource.

200 CmsEventCategory resource404 Not found
GET/api/public/cms-events

Retrieves the collection of CmsEvent resources.

Parameters
pagequery · integerThe collection page number
categories.idquery · string
categories.id[]query · string[]
titlequery · string

200 CmsEvent collection
POST/api/public/cms-events/{id}/register

Register a participant to a CMS event

Parameters
idrequiredpath · string · uuid
Body
confirmationIdstring · uuid | null
emailstring · email | null
firstnamestring | null
lastnamestring | null
commentstring | null
guestsinteger | null

200 Registration created400 Registration disabled, capacity exceeded, or already registered404 Event not found422 Validation failed
GET/api/public/cms-events/item

Retrieves a CmsEvent resource.

200 CmsEvent resource404 Not found

Bookings

POST/api/manager/bookables

Creates a Bookable resource.

Body
coverIRI | null
coverPositionYinteger
bookableType"room" | "equipment"
calendarType"day" | "slot"
titlestring
slugrequiredstring
publishedAtstring · date-time | null
isPublishedboolean
autoValidateboolean
enableCheckInboolean
membersOnlyboolean
requireParticipantAccountsbooleanSub-requirement of membersOnly: every additional participant must be identified by an active patron account of the organization. Inert unless membersOnly is true AND patron-account access is enabled — no cross-field constraint on purpose, mirroring how a disabled module makes membersOnly itself inert.
countParticipantQuotaboolean
capacityGuestsinteger
contentstring
contentDocumentstring | null[] | nullCanonical Tiptap/ProseMirror document; content remains a transition fallback.
locationNamestring | null
locationUrlstring | null
capacityinteger | null
slotSize15 | 30 | 60 | nullContain the size time of a single defined slot (in minutes), only if applicable (range)
maxSlotPerReservationinteger | nullContain the number of slot that can be reserved in a single process, only if applicable (range)
minSlotPerReservationinteger | null
leadTimeAmountinteger | nullMinimum delay before a reservation may start; the unit decides the semantics (rolling hours, or calendar days at midnight org-time).
leadTimeUnit"hours" | "days" | null
maxAdvanceDaysinteger | nullBooking horizon: the last reservable day is today + maxAdvanceDays (calendar days, organization timezone). Null means unlimited.
minParticipantsinteger | nullMinimum total participants, holder included (a group room may require 2). Declarative: enforced against the declared guests count only.
equipmentsstring[] | null
settingsstring | null[] | null

201 Bookable resource created400 Invalid input422 An error occurred
PATCH/api/manager/bookables/{id}

Updates the Bookable resource.

Parameters
idrequiredpath · stringBookable identifier
Body
coverIRI | null
coverPositionYinteger
bookableType"room" | "equipment"
calendarType"day" | "slot"
titlestring
slugstring
publishedAtstring · date-time | null
isPublishedboolean
autoValidateboolean
enableCheckInboolean
membersOnlyboolean
requireParticipantAccountsbooleanSub-requirement of membersOnly: every additional participant must be identified by an active patron account of the organization. Inert unless membersOnly is true AND patron-account access is enabled — no cross-field constraint on purpose, mirroring how a disabled module makes membersOnly itself inert.
countParticipantQuotaboolean
capacityGuestsinteger
contentstring
contentDocumentstring | null[] | nullCanonical Tiptap/ProseMirror document; content remains a transition fallback.
locationNamestring | null
locationUrlstring | null
capacityinteger | null
slotSize15 | 30 | 60 | nullContain the size time of a single defined slot (in minutes), only if applicable (range)
maxSlotPerReservationinteger | nullContain the number of slot that can be reserved in a single process, only if applicable (range)
minSlotPerReservationinteger | null
leadTimeAmountinteger | nullMinimum delay before a reservation may start; the unit decides the semantics (rolling hours, or calendar days at midnight org-time).
leadTimeUnit"hours" | "days" | null
maxAdvanceDaysinteger | nullBooking horizon: the last reservable day is today + maxAdvanceDays (calendar days, organization timezone). Null means unlimited.
minParticipantsinteger | nullMinimum total participants, holder included (a group room may require 2). Declarative: enforced against the declared guests count only.
equipmentsstring[] | null
settingsstring | null[] | null

200 Bookable resource updated400 Invalid input404 Not found422 An error occurred
DELETE/api/manager/bookables/{id}

Removes the Bookable resource.

Parameters
idrequiredpath · stringBookable identifier
204 Bookable resource deleted404 Not found
GET/api/manager/bookables/{id}/closures

List slot closures for a bookable within a range

Parameters
idrequiredpath · string · uuid
fromrequiredquery · string · date-time
torequiredquery · string · date-time

200 Closures overlapping the requested range, ordered by start400 Missing "from" or "to" query parameter403 Bookable of another organization, or missing bookables.read permission404 Bookable not found
POST/api/manager/bookables/{id}/closures

Create a slot closure for a bookable

Parameters
idrequiredpath · string · uuid
Body
startAtrequiredstring · date-time
endAtrequiredstring · date-time

200 Existing matching closure returned201 Closure created400 Missing dates or end not after start404 Bookable not found
POST/api/manager/bookables/{id}/closures/batch

Create and/or delete several slot closures in a single request

Parameters
idrequiredpath · string · uuid

200 The closures that now exist for the submitted ranges, in submission order; deleted closures are not listed400 A range has end not after start404 Bookable not found422 Validation failed
POST/api/manager/bookables/{id}/duplicate

Duplicate a bookable, optionally with a new title

Parameters
idrequiredpath · string · uuid
Body
titlestring | nullTitle for the duplicated bookable; falls back to a default when omitted

201 Bookable duplicated404 Bookable not found
GET/api/manager/reservations

Manager reservation directory, 25 rows per page

Parameters
organizationrequiredquery · string
localequery · string
qquery · stringIdentity search: snapshot name, linked profile, SIGB fullname or email
periodquery · "upcoming" | "history" | "all"
statusquery · string
bookablequery · string · uuid
fromquery · string · date
toquery · string · dateInclusive calendar date
pagequery · integer

200 items, totalItems, page and pageSize; ordered by start then UUID400 Invalid filters401 Authentication required403 Organization, permission or module access denied
GET/api/manager/reservations/{id}

One reservation with its identity, companion count, retained companions and reservation-wide check-in

Parameters
idrequiredpath · string · uuid
organizationrequiredquery · string
localequery · string

200 Reservation row; guests excludes the holder, participantDetails contains retained active companions, checkedInAt applies to the whole reservation401 Authentication required403 Organization, permission or module access denied404 Reservation not found in this organization
PATCH/api/manager/reservations/{id}

Updates the Reservation resource.

Parameters
idrequiredpath · stringReservation identifier
Body
validatedboolean

200 Reservation resource updated400 Invalid input404 Not found422 An error occurred
DELETE/api/manager/reservations/{id}

Removes the Reservation resource.

Parameters
idrequiredpath · stringReservation identifier
204 Reservation resource deleted404 Not found
POST/api/manager/reservations/{id}/cancel

Cancel a reservation as a manager

Parameters
idrequiredpath · string · uuid
Body
reasonrequiredstring
204 Reservation cancelled404 Reservation not found422 Validation failed
POST/api/manager/reservations/{id}/validate

Validate a reservation, optionally reassigning it to another bookable

Parameters
idrequiredpath · string · uuid
Body
newBookablestring · uuid | nullId of a bookable to reassign the reservation to before validating

200 Reservation validated400 Target bookable not found or slot already reserved404 Reservation not found
GET/api/manager/statistics/bookables

Aggregated bookable and reservation statistics

Parameters
organizationquery · stringOrganization slug (administrators only; defaults to caller organization)
fromquery · string · dateFirst day of the period, included (YYYY-MM-DD). Without it, the period has no start.
toquery · string · dateLast day of the period, included (YYYY-MM-DD). Without it, the period has no end.

200 Bookable and reservation statistics
GET/api/public/bookables

Retrieves the collection of Bookable resources.

Parameters
pagequery · integerThe collection page number
titlequery · string
bookableTypequery · string
bookableType[]query · string[]
equipmentquery · stringFilter bookables by equipment. Allowed values: table, paperboard, projector, whiteboard, wheelchair_access, power_outlet.

200 Bookable collection
GET/api/public/bookables/{id}/checkin

Names shown on the on-site check-in page before the patron submits

Parameters
idrequiredpath · string · uuid

200 Bookable title, organization name and calendar type404 Bookable not found, not published, or check-in disabled
POST/api/public/bookables/{id}/checkin

Check in to a reservation on-site by scanning the printed QR code

Parameters
idrequiredpath · string · uuid
Body
emailrequiredstring · email
latituderequirednumber
longituderequirednumber

200 Reservation checked in (a repeated check-in returns the same reservation)400 Too far from the venue, no open reservation, deadline missed (reservation_expired), or check-in not configured404 Bookable not found, not published, or check-in disabled422 Validation failed
GET/api/public/bookables/{id}/closures

List slot closures for a published bookable within a range

Parameters
idrequiredpath · string · uuid
fromrequiredquery · string · date-time
torequiredquery · string · date-time

200 Closures overlapping the requested range, ordered by start400 Missing "from" or "to" query parameter404 Bookable not found or not published
POST/api/public/bookables/{id}/participants/validate

Check named participants without creating a reservation or sending mail

Parameters
idrequiredpath · string · uuid
organizationrequiredquery · string
Body
participantsstring · email[]

200 Email eligibility only; no profile or usage counts403 Authenticated member or organization staff required404 Unavailable resource or feature422 Invalid list429 Retry later
POST/api/public/bookables/{id}/reservation

Create a reservation for a bookable

Parameters
idrequiredpath · string · uuid
Body
confirmationIdstring · uuid | null
startAtrequiredstring · date-time
endAtrequiredstring · date-time
emailstring · email | null
firstnamestring | null
lastnamestring | null
commentstring | null
guestsinteger | null
participantsstring · email[]Additional participants' emails, one per person, when the bookable requires named participant accounts. `guests` is then derived from this list server-side.

200 Reservation created400 Slot unavailable, already reserved, or guests exceed capacity404 Bookable not found or not published422 Validation failed
POST/api/public/bookables/available

Find available bookables for a day or a time range

Body
organizationrequiredstringOrganization slug
mode"day" | "range" | nullAvailability mode; inferred as "day" when "date" is provided, otherwise "range"
datestring · date | nullDay to check (YYYY-MM-DD), required for day mode
fromstring · date-time | nullRange start, required for range mode
tostring · date-time | nullRange end, required for range mode
bookableType"room" | "equipment" | null
equipmentstring | null

200 List of available bookables400 Missing or invalid date/range, type, or equipment404 Organization not found
GET/api/public/bookables/item

Retrieves a Bookable resource.

200 Bookable resource404 Not found
GET/api/public/reservations

Retrieves the collection of Reservation resources.

Parameters
pagequery · integerThe collection page number
bookable.organization.idquery · string
bookable.organization.id[]query · string[]
bookable.organization.slugquery · string
bookable.organization.slug[]query · string[]
bookable.idquery · string
bookable.id[]query · string[]
validatedquery · boolean
validated[]query · boolean[]
startAt[before]query · string
startAt[strictly_before]query · string
startAt[after]query · string
startAt[strictly_after]query · string
endAt[before]query · string
endAt[strictly_before]query · string
endAt[after]query · string
endAt[strictly_after]query · string

200 Reservation collection
POST/api/public/reservations/cancel

Cancel a reservation by its public token

Parameters
tokenrequiredquery · string
204 Reservation cancelled (or already cancelled)400 Token is required404 Reservation not found
POST/api/public/reservations/participants

Complete a reservation group as its authenticated holder

Body
participantsstring[]
participantsAgreementboolean
204 Participants added400 Eligibility, quota or capacity refusal403 Not the holder404 Reservation unavailable
GET/api/public/reservations/view

View a reservation by its public token

Parameters
tokenrequiredquery · string

200 Reservation found400 Token is required404 Reservation not found

Pages

POST/api/manager/cms-pages

Creates a CmsPage resource.

Body
parentIRI | null
coverIRI | null
coverPositionYinteger
titlestring
slugrequiredstring
publishedAtstring · date-time | null
isPublishedboolean
isAiIndexableboolean
contentstring
contentDocumentstring | null[] | nullCanonical Tiptap/ProseMirror document; content remains a transition fallback.
categoriesIRI[]

201 CmsPage resource created400 Invalid input422 An error occurred
GET/api/manager/cms-pages/{id}

Retrieves a CmsPage resource.

Parameters
idrequiredpath · stringCmsPage identifier

200 CmsPage resource404 Not found
PATCH/api/manager/cms-pages/{id}

Updates the CmsPage resource.

Parameters
idrequiredpath · stringCmsPage identifier
Body
parentIRI | null
coverIRI | null
coverPositionYinteger
titlestring
slugstring
publishedAtstring · date-time | null
isPublishedboolean
isAiIndexableboolean
contentstring
contentDocumentstring | null[] | nullCanonical Tiptap/ProseMirror document; content remains a transition fallback.
categoriesIRI[]

200 CmsPage resource updated400 Invalid input404 Not found422 An error occurred
DELETE/api/manager/cms-pages/{id}

Removes the CmsPage resource.

Parameters
idrequiredpath · stringCmsPage identifier
204 CmsPage resource deleted404 Not found
POST/api/manager/cms-pages/{id}/duplicate

Duplicate a CMS page

Parameters
idrequiredpath · string · uuid
Body
titlestring | null

201 Page duplicated404 Page not found
GET/api/public/cms-page-categories

Retrieves the collection of CmsPageCategory resources.

Parameters
pagequery · integerThe collection page number
namequery · string

200 CmsPageCategory collection
GET/api/public/cms-page-categories/item

Retrieves a CmsPageCategory resource.

200 CmsPageCategory resource404 Not found
GET/api/public/cms-page-tree

Published page navigation without draft metadata

Parameters
organizationrequiredquery · stringSlug of the organization whose pages are listed.

200 Published page navigation summaries
GET/api/public/cms-pages

Retrieves the collection of CmsPage resources.

Parameters
pagequery · integerThe collection page number
categories.idquery · string
categories.id[]query · string[]
parent.idquery · string
parent.id[]query · string[]
titlequery · string
exists[parent]query · boolean

200 CmsPage collection
GET/api/public/cms-pages/item

Retrieves a CmsPage resource.

200 CmsPage resource404 Not found

Catalogue

POST/api/public/ils/browse

Structured catalog listing (novelties by type/library, recency-sorted) — no keywords, no relevance ranking

Body
organizationstring
canonicalType"book" | "comic" | "manga" | "serial" | "score" | … (14 values) | nullRestricts the listing to one document type.
noveltyAfterstring | nullOnly records displayed as novelties since this month ('YYYY-MM').
libraryCodestring | nullOwning library code (852 $b / 995 $b), e.g. 'bcur'.
locationRefstring | null
locationCodestring | nullPhysical shelf, as a raw ILS location code (852 $c / 949 $4 / 995 $c), e.g. '810010072' — the "what is on this shelf" listing. Codes, not labels. Prefer locationRef for new map associations.
callNumberRegexesstring[]Call-number regexes narrowing $locationCode down to ONE physical shelf when several shelves share a location code (the map builder's per-shelf `regexes`). A record matches when any regex matches the call number of a holding AT that location. Ignored without $locationCode; patterns the Postgres regex engine rejects (they are authored/tested as JS regexes in the map builder) are skipped individually rather than failing the listing.
callNumberRangesobject[]Call-number ranges narrowing $locationCode down to one shelf, read in shelf order (docs/call-number-order.md): a copy matches when its stored sort key lies from `from` (inclusive) up to `to`, whatever continues `to` included. Either bound may be omitted. A copy matching any range or any regex is kept. Ignored without $locationCode.
callNumberRanges[].fromstring | null
callNumberRanges[].tostring | null
shelfSegmentsobject[]Rayon segments narrowing $locationCode down to one shelf (docs/shelf-model.md): a copy matches when its `shelf` descriptor names this rayon (and order, when given) and its key lies from `from` (inclusive) up to `to` (exclusive). Keys are `loupe-shelf-2` keys; either bound may be omitted. A copy matching any segment, range or regex is kept. Ignored without $locationCode.
shelfSegments[].rayonstring
shelfSegments[].orderstring | null
shelfSegments[].fromstring | null
shelfSegments[].tostring | null
recordIdsstring[]Records a shelf names directly (an exhibition), by public id (SIGB bibliographic id or harvest source id). They are listed whatever their location, alongside the location's matching copies.
excludeRecordIdsstring[]Records named by other shelves' selections: they stand there, not on this shelf's rayons, so the listing leaves them out.
sortstring'recency' (default, novelty-first) or 'callNumber' — the physical shelf order, sorted on the call number of the holding matched at $locationCode; requires $locationCode. With shelf segments, copies sort by segment, in the order given, then by shelf key.
offsetinteger
limitinteger
facetsobject[]Type values are canonical types; genre values are exact catalog labels from /ils/genres or canonical genre slugs; one included publication year or year range ("2025-2026").
liveLookupsboolean

200 Catalog listing422 Validation failed
GET/api/public/ils/genres

List the top catalog genres available for an organization

Parameters
organizationrequiredquery · string
limitquery · integer

200 Catalog genres400 Invalid request
POST/api/public/ils/item

Fetch a single catalog item by ID (ILS)

Body
organizationstring
idstring

200 Catalog item422 Validation failed
POST/api/public/ils/items

Fetch multiple catalog items by ID (ILS)

Body
organizationstring
idsobject[]

200 Catalog items422 Validation failed
POST/api/public/ils/search

Search the library catalog (ILS)

Body
organizationstring
langstring
sortobject
queryFieldobject
queryPrecisionobject
queryValuestring
retrievalModestringThe model chooses semantic discovery or a structured catalog listing.
userQuerystring | null
facetProvenanceobject
facetSourceScopestring | nullOpaque identity of the source that resolved these facet values.
offsetinteger
limitinteger
facetsobject[]Free-form facet payload — interpreted by each provider. Shape: { facetName: { facetValue: operator } }
semanticQuerystring | nullOptional rewritten semantic THEME of the request, used for the dense (vector) side of the RAG engine when present — richer than the bare `queryValue` keywords ("un polar cosy dans les Alpes" instead of "polar"). The sparse/lexical side and the live provider keep using `queryValue`.
liveLookupsbooleanWhether indexed (RAG) results wait for the live SIGB lookup (availability, provider covers, catalog URL) before answering. Result grids that never display availability opt out: the harvested notice renders at once and the record detail performs its own live lookup. Live-engine searches ignore it.

200 Search results422 Validation failed
GET/api/public/ils/types

List the top Loupe catalog types available for an organization

Parameters
organizationrequiredquery · string
limitquery · integer

200 Catalog types400 Invalid request

Footfall

GET/api/public/organizations/{organizationSlug}/maps/{mapSlug}/affluence/zones

Live occupancy of the affluence zones linked to a map (public)

Parameters
organizationSlugrequiredpath · string
mapSlugrequiredpath · string

200 Per-zone live occupancy for the map404 Map not found

Maps

GET/api/public/organizations/{organizationSlug}/map-places

Search the named public places of an organization's maps

Parameters
organizationSlugrequiredpath · string
qrequiredquery · string
mapSlugquery · string
layerIdquery · string
storeyquery · integer
types[]query · "legend" | "room" | "object" | "box"[]
limitquery · integer

200 Ranked public map places400 Missing or too-short query403 The map module is not enabled404 Unknown organization
GET/api/public/organizations/{organizationSlug}/maps/{mapSlug}

Get the public definition of a map by slug

Parameters
organizationSlugrequiredpath · string
mapSlugrequiredpath · string
wirequery · "prototype-v1" | "regional-v15"

200 Map definition404 Map not found
GET/api/public/organizations/{organizationSlug}/maps/{mapSlug}/layers/{layerId}

Get one thematic layer of a public map

Returns the same document as the full map definition, restricted to one layer: its layers list holds only the requested layer, and only the labels and tours of that layer are kept.

Parameters
organizationSlugrequiredpath · string
mapSlugrequiredpath · string
layerIdrequiredpath · string
wirequery · "prototype-v1" | "regional-v15"

200 Projected map definition404 Map or layer not found
POST/api/public/organizations/{organizationSlug}/maps/{mapSlug}/renderer-errors

Report a browser GPU failure on a public map

Body
kindrequiredstring
backendrequiredstring
renderProfilerequiredstring
widthrequiredinteger
heightrequiredinteger
storeyrequiredinteger
reasonstring
errorTypestring
messagestring
userAgentstring
204 Diagnostic recorded404 Map not public422 Invalid diagnostic429 Rate limited

Messages

GET/api/manager/threads

Retrieves the collection of Thread resources.

Parameters
pagequery · integerThe collection page number
tokenquery · string
token[]query · string[]
contactNamequery · string
contactEmailquery · string
typequery · string
type[]query · string[]
acquisition.acquisitionStatusquery · string
acquisition.acquisitionStatus[]query · string[]

200 Thread collection
GET/api/manager/threads/{id}

Retrieves a Thread resource.

Parameters
idrequiredpath · stringThread identifier

200 Thread resource404 Not found
PATCH/api/manager/threads/{id}

Updates the Thread resource.

Parameters
idrequiredpath · stringThread identifier
Body
status"new" | "open" | "pending" | "on_hold" | "resolved" | "closed"
assigneeIRI | nullStaff member currently owning the thread. Null = unassigned. Set/cleared via PATCH (IRI or null); SET NULL on user removal so the thread survives.
priority"low" | "normal" | "high"
contactNamestring
contactEmailstring

200 Thread resource updated400 Invalid input404 Not found422 An error occurred
DELETE/api/manager/threads/{id}

Removes the Thread resource.

Parameters
idrequiredpath · stringThread identifier
204 Thread resource deleted404 Not found
POST/api/manager/threads/acquisitions/convert

Convert a general thread into an acquisition request

Body
threadIdstring
titlestring
authorstring | null
isbnstring | null
publisherstring | null
publicationYearinteger | null
formatstring | null
notesstring | null

200 Thread converted400 Thread is already an acquisition request404 Thread not found409 Thread version conflict422 Validation failed428 If-Match header required
POST/api/manager/threads/acquisitions/decide

Move an acquisition request through its decision workflow

Body
threadIdstring
decisionstring`start_review` (re)opens the evaluation; `approve` / `reject` decide; `request_info` hands the ball back to the patron; `mark_transmitted` records the manual push to the ILS.
reasonstring | nullRequired when rejecting; optional context otherwise.
ilsReferencestring | nullRequired when marking as transmitted.

200 Decision recorded400 Invalid transition or missing reason/reference404 Thread not found409 Thread version conflict422 Validation failed428 If-Match header required
POST/api/manager/threads/acquisitions/precheck

Dedup pre-check against the selected organization catalog and open suggestions

Body
organizationstring | nullOrganization slug — required publicly; managers may select an authorized organization.
titlestring | null
isbnstring | null
authorstring | null
excludeThreadIdstring | nullManager only: exclude this thread from the duplicate lookup (self-check).

200 Pre-check result400 Missing search criteria
POST/api/manager/threads/acquisitions/revert

Turn an acquisition request back into a general thread

Body
threadIdstring

200 Thread reverted400 Thread is not an acquisition request404 Thread not found409 Thread version conflict422 Validation failed428 If-Match header required
POST/api/manager/threads/acquisitions/update

Edit the bibliographic fields of an acquisition request

Body
threadIdstring
titlestring
authorstring | null
isbnstring | null
publisherstring | null
publicationYearinteger | null
formatstring | null
notesstring | null

200 Acquisition updated400 Thread is not an acquisition request404 Thread not found409 Thread version conflict422 Validation failed428 If-Match header required
POST/api/manager/threads/reply

Reply to a message thread as a manager

Body
threadIdstring
messagestring
kindstring`reply` = public message sent to the contact; `note` = internal staff-only note (no email, no status change).
mentionedUserIdsstring[]User ids (UUID) mentioned in an internal note — each is notified. Ignored for public replies.

200 Reply posted404 Thread not found422 Validation failed
POST/api/manager/threads/start

Start a message thread as a manager

Body
organizationstring
contactEmailstring
contactNamestring
messagestring

201 Thread created422 Validation failed
POST/api/public/threads/acquisitions/precheck

Check whether a suggested document is already held or already suggested

Body
organizationstring | nullOrganization slug — required publicly; managers may select an authorized organization.
titlestring | null
isbnstring | null
authorstring | null
excludeThreadIdstring | nullManager only: exclude this thread from the duplicate lookup (self-check).

200 Pre-check result400 Missing organization or search criteria
POST/api/public/threads/acquisitions/start

Suggest a purchase as a public user (creates an acquisition thread)

Body
organizationstring
emailstring | null
namestring | null
titlestring
authorstring | null
isbnstring | null
publisherstring | null
publicationYearinteger | null
formatstring | null
commentstring | nullFree-text justification shown as the thread's first message.

201 Acquisition thread created422 Validation failed
POST/api/public/threads/reply

Reply to a message thread as a public user

Body
tokenstring
namestring | null
messagestring

200 Reply posted404 Thread not found422 Validation failed
POST/api/public/threads/start

Start a message thread as a public user

Body
organizationstring
emailstring | null
namestring | null
messagestring

201 Thread created422 Validation failed
GET/api/public/threads/token/{token}

Get a message thread by its public token

Parameters
tokenrequiredpath · string

200 Thread found404 Thread not found