| GET | /api/site/account/avatar | session, authenticated (requireSiteAuthenticatedApiContext) | |
| PUT | /api/site/account/avatar | session, authenticated (requireSiteAuthenticatedApiContext) | |
| DELETE | /api/site/account/avatar | session, authenticated (requireSiteAuthenticatedApiContext) | |
| GET | /api/site/addon-roles | session, authenticated (requireSiteAuthenticatedApiContext) | What the caller may grant, and optionally what one person already holds. |
| POST | /api/site/addon-roles | session, authenticated (requireSiteAuthenticatedApiContext) | |
| DELETE | /api/site/addon-roles | session, authenticated (requireSiteAuthenticatedApiContext) | |
| GET | /api/site/admin/locales | session, site-admin (requireSiteAdminOnlyApiContext) | |
| PATCH | /api/site/admin/locales | session, site-admin (requireSiteAdminOnlyApiContext) | |
| DELETE | /api/site/admin/locales | session, site-admin (requireSiteAdminOnlyApiContext) | |
| GET | /api/site/admin/logs | session, developer-tools (requireSiteDeveloperApiContext) | |
| GET | /api/site/admin/logs/detail | session, developer-tools (requireSiteDeveloperApiContext) | |
| GET | /api/site/admin/media | session, developer-tools (requireSiteDeveloperApiContext) | |
| PATCH | /api/site/admin/media | session, developer-tools (requireSiteDeveloperApiContext) | |
| GET | /api/site/admin/settings | session, site-admin (requireSiteAdminOnlyApiContext) | |
| PATCH | /api/site/admin/settings | session, site-admin (requireSiteAdminOnlyApiContext) | |
| GET | /api/site/admin/users | session, site-admin (requireSiteAdminOnlyApiContext) | |
| POST | /api/site/admin/users | session, site-admin (requireSiteAdminOnlyApiContext) | |
| PUT | /api/site/admin/users | session, site-admin (requireSiteAdminOnlyApiContext) | |
| PATCH | /api/site/admin/users | session, site-admin (requireSiteAdminOnlyApiContext) | |
| DELETE | /api/site/admin/users | session, site-admin (requireSiteAdminOnlyApiContext) | |
| POST | /api/site/cms/area | session, structure-authoring (requireSiteBuilderApiContext) | |
| DELETE | /api/site/cms/area | session, structure-authoring (requireSiteBuilderApiContext) | |
| GET | /api/site/cms/area/draft | session, roles (requireSiteReviewApiContext) | |
| POST | /api/site/cms/area/modules | session, structure-authoring (requireSiteBuilderApiContext) | |
| DELETE | /api/site/cms/area/modules | session, structure-authoring (requireSiteBuilderApiContext) | |
| GET | /api/site/cms/area/modules/draft | session, roles (requireSiteReviewApiContext) | |
| POST | /api/site/cms/area/modules/publish | session, publishing (requireSitePublisherApiContext) | |
| DELETE | /api/site/cms/area/override | session, publishing (requireSitePublisherApiContext) | |
| POST | /api/site/cms/area/publish | session, publishing (requireSitePublisherApiContext) | |
| POST | /api/site/cms/area/structures | session, roles (requireSiteReviewApiContext) | |
| GET | /api/site/cms/module-usage | session, structure-authoring (requireSiteBuilderApiContext) | What a Module currently draws on this Site's published pages. |
| GET | /api/site/cms/navigation | session, roles (requireSiteReviewApiContext) | |
| POST | /api/site/cms/navigation | session, structure-authoring (requireSiteBuilderApiContext) | |
| DELETE | /api/site/cms/navigation | session, structure-authoring (requireSiteBuilderApiContext) | |
| GET | /api/site/cms/navigation/draft | session, roles (requireSiteReviewApiContext) | |
| POST | /api/site/cms/navigation/publish | session, publishing (requireSitePublisherApiContext) | |
| POST | /api/site/cms/page | session, structure-authoring (requireSiteBuilderApiContext) | |
| DELETE | /api/site/cms/page | session, structure-authoring (requireSiteBuilderApiContext) | |
| POST | /api/site/cms/page/create | session, structure-authoring (requireSiteBuilderApiContext) | |
| GET | /api/site/cms/page/draft | session, roles (requireSiteReviewApiContext) | |
| DELETE | /api/site/cms/page/override | session, publishing (requireSitePublisherApiContext) | |
| POST | /api/site/cms/page/publish | session, publishing (requireSitePublisherApiContext) | |
| GET | /api/site/cms/pages | session, roles (requireSiteReviewApiContext) | |
| POST | /api/site/cms/pages/{scopeId}/path | session, structure-authoring (requireSiteBuilderApiContext) | |
| GET | /api/site/cms/revisions | session, roles (requireSiteReviewApiContext) | |
| DELETE | /api/site/cms/revisions | session, structure-authoring (requireSiteBuilderApiContext) | |
| POST | /api/site/cms/revisions/restore | session, structure-authoring (requireSiteBuilderApiContext) | |
| GET | /api/site/cms/theme | session, roles (requireSiteReviewApiContext) | |
| POST | /api/site/cms/theme | session, structure-authoring (requireSiteBuilderApiContext) | |
| DELETE | /api/site/cms/theme | session, structure-authoring (requireSiteBuilderApiContext) | |
| GET | /api/site/cms/theme/draft | session, roles (requireSiteReviewApiContext) | |
| POST | /api/site/cms/theme/publish | session, publishing (requireSitePublisherApiContext) | |
| GET | /api/site/editor/content | session, roles (requireSiteReviewApiContext) | |
| PUT | /api/site/editor/content | session, roles (requireSiteReviewApiContext) | |
| POST | /api/site/editor/content/publish | session, publishing (requireSitePublisherApiContext) | |
| DELETE | /api/site/editor/content/publish | session, publishing (requireSitePublisherApiContext) | |
| POST | /api/site/editor/content/submit | session, roles (requireSiteReviewApiContext) | |
| DELETE | /api/site/editor/content/submit | session, roles (requireSiteReviewApiContext) | |
| GET | /api/site/editor/entries/{kind} | session, content-editing (requireSiteAuthorApiContext) | |
| PUT | /api/site/editor/entries/{kind} | session, content-editing (requireSiteAuthorApiContext) | |
| DELETE | /api/site/editor/entries/{kind} | session, content-editing (requireSiteAuthorApiContext) | |
| GET | /api/site/editor/entries/{kind}/categories | session, content-editing (requireSiteAuthorApiContext) | |
| PUT | /api/site/editor/entries/{kind}/categories | session, publishing (requireSitePublisherApiContext); session, content-editing (requireSiteAuthorApiContext) | |
| DELETE | /api/site/editor/entries/{kind}/categories | session, publishing (requireSitePublisherApiContext); session, content-editing (requireSiteAuthorApiContext) | |
| GET | /api/site/editor/entries/{kind}/curation | session, content-editing (requireSiteAuthorApiContext) | |
| PATCH | /api/site/editor/entries/{kind}/curation | session, publishing (requireSitePublisherApiContext) | |
| POST | /api/site/editor/entries/{kind}/publish | session, publishing (requireSitePublisherApiContext) | |
| DELETE | /api/site/editor/entries/{kind}/publish | session, publishing (requireSitePublisherApiContext) | |
| POST | /api/site/editor/entries/{kind}/submit | session, content-editing (requireSiteAuthorApiContext) | |
| DELETE | /api/site/editor/entries/{kind}/submit | session, content-editing (requireSiteAuthorApiContext) | |
| POST | /api/site/editor/page-meta | session, content-editing (requireSiteAuthorApiContext) | |
| GET | /api/site/editor/releases | session, roles (requireSiteReviewApiContext) | |
| GET | /api/site/editor/translations | session, content-editing (requireSiteAuthorApiContext) | |
| PATCH | /api/site/editor/translations | session, publishing (requireSitePublisherApiContext) | |
| DELETE | /api/site/editor/translations | session, roles (requireSiteReviewApiContext); session, publishing (requireSitePublisherApiContext) | |
| GET | /api/site/groups | session (requireSiteGroupMemberApiContext); session, authenticated (requireSiteAuthenticatedApiContext) | |
| POST | /api/site/groups | session, developer-tools (requireSiteDeveloperApiContext) | Creating a group is Site administration: a group is an authorization unit Pages, Navigation, and Assets refer to, so group membership must never confer the authority to create more of them. |
| PATCH | /api/site/groups | session (requireSiteGroupManagerApiContext) | |
| PUT | /api/site/groups | session (requireSiteGroupManagerApiContext) | |
| DELETE | /api/site/groups | session (requireSiteGroupManagerApiContext) | |
| GET | /api/site/groups/candidates | session (requireSiteGroupManagerAnywhereApiContext) | |
| GET | /api/site/media | session (requireMediaManagementSiteContext) | |
| GET | /api/site/media/{id} | session (requireMediaAssetContext) | |
| PATCH | /api/site/media/{id} | session (requireMediaAssetContext) | |
| DELETE | /api/site/media/{id} | session (requireMediaAssetContext) | |
| GET | /api/site/media/{id}/content | Asset delivery policy (public Assets need no session) | The bytes of one Asset, whole or in part. |
| HEAD | /api/site/media/{id}/content | Asset delivery policy (public Assets need no session) | The bytes of one Asset, whole or in part. |
| PUT | /api/site/media/{id}/owner | session (requireMediaAssetContext) | Handing one Asset over. |
| GET | /api/site/media/{id}/subsets/{subsetKey} | Asset delivery policy (public Assets need no session) | |
| HEAD | /api/site/media/{id}/subsets/{subsetKey} | Asset delivery policy (public Assets need no session) | |
| GET | /api/site/media/{id}/variants/{variantKey} | Asset delivery policy (public Assets need no session) | |
| HEAD | /api/site/media/{id}/variants/{variantKey} | Asset delivery policy (public Assets need no session) | |
| GET | /api/site/media/folders | session (requireMediaManagementSiteContext) | |
| POST | /api/site/media/folders | session (requireMediaManagementSiteContext) | |
| GET | /api/site/media/folders/{id} | session (requireMediaManagementSiteContext) | |
| PATCH | /api/site/media/folders/{id} | session (requireMediaManagementSiteContext) | |
| DELETE | /api/site/media/folders/{id} | session (requireMediaManagementSiteContext) | |
| PATCH | /api/site/media/spaces/{address} | session, authenticated (requireSiteAuthenticatedApiContext) | |
| PUT | /api/site/media/uploads/{token} | Site session, checked in the handler; session (requireMediaSpaceWriteContext) | |
| POST | /api/site/media/uploads/{token}/finalize | session (requireMediaSpaceWriteContext) | |
| POST | /api/site/media/uploads/{token}/report | Site session, checked in the handler; session (requireMediaSpaceWriteContext) | |
| POST | /api/site/media/uploads/init | session (requireMediaSpaceWriteContext) | |
| GET | /api/site/support/forward | session, support (requireSiteSupportApiContext) | Where this Site's tickets may be forwarded right now. |
| POST | /api/site/support/forward | session, support (requireSiteSupportApiContext) | Hands one ticket's work to one target: { ticketId, target, title? }. |
| POST | /api/site/support/link | session, support (requireSiteSupportApiContext) | Links a record that already exists elsewhere to one ticket: { ticketId, reference }. |
| GET | /api/site/support/queues | session, support (requireSiteSupportApiContext) | The Site's Support queues. |
| POST | /api/site/support/queues | session, developer-tools (requireSiteDeveloperApiContext) | Adds a queue. |
| PATCH | /api/site/support/queues/{queueId} | session, developer-tools (requireSiteDeveloperApiContext) | Edits one queue: its name, the group it routes to, its order, and whether it is retired. |
| POST | /api/site/support/request | session, authenticated (requireSiteAuthenticatedApiContext) | The way in for the person asking. |
| GET | /api/site/support/request/types | session, authenticated (requireSiteAuthenticatedApiContext) | What a person who is not Staff may ask for. |
| GET | /api/site/support/ticket-types | session, support (requireSiteSupportApiContext) | The Site's ticket types. |
| PATCH | /api/site/support/ticket-types | session, developer-tools (requireSiteDeveloperApiContext) | Sets what the catalogue as a whole says: requesterWindowDays, the window every type without its own falls back to. 0 switches automatic closing off for every type at once. |
| POST | /api/site/support/ticket-types | session, developer-tools (requireSiteDeveloperApiContext) | Adds a ticket type. |
| PATCH | /api/site/support/ticket-types/{typeId} | session, developer-tools (requireSiteDeveloperApiContext) | Edits one ticket type, and is where a Site decides who may ask for it. |
| GET | /api/site/support/tickets | session, support (requireSiteSupportApiContext) | |
| POST | /api/site/support/tickets | session, support (requireSiteSupportApiContext) | |
| GET | /api/site/support/tickets/{ticketId} | session, support (requireSiteSupportApiContext) | |
| PATCH | /api/site/support/tickets/{ticketId} | session, support (requireSiteSupportApiContext) | |
| POST | /api/site/support/tickets/{ticketId}/assignment | session, support (requireSiteSupportApiContext) | |
| GET | /api/site/support/tickets/{ticketId}/events | session, support (requireSiteSupportApiContext) | What happened to a ticket, oldest first: opened, moved on the ladder, taken, moved between queues, forwarded, closed. For Supporters only -- the history names queues, owners and where work was forwarded, which a requester is not told. |
| POST | /api/site/support/tickets/{ticketId}/tasks | session, support (requireSiteSupportApiContext) | |
| PATCH | /api/site/support/tickets/{ticketId}/tasks/{taskId} | session, support (requireSiteSupportApiContext) | |
| DELETE | /api/site/support/tickets/{ticketId}/tasks/{taskId} | session, support (requireSiteSupportApiContext) | |
| GET | /api/site/threads | session, authenticated (requireSiteAuthenticatedApiContext) | |
| POST | /api/site/threads | session, authenticated (requireSiteAuthenticatedApiContext) | |
| GET | /api/site/threads/{threadId} | session, authenticated (requireSiteAuthenticatedApiContext) | |
| PATCH | /api/site/threads/{threadId} | session, authenticated (requireSiteAuthenticatedApiContext) | Archiving and reopening. One row carries the status, so this is the thread closing for everyone -- and therefore only for its opener, Staff, or a Manager of a group in it (setThreadStatus decides). |
| POST | /api/site/threads/{threadId}/messages | session, authenticated (requireSiteAuthenticatedApiContext) | Writing into one conversation, addressed by path. |
| GET | /api/site/threads/{threadId}/messages/{messageId}/assets/{assetId} | session, authenticated (requireSiteAuthenticatedApiContext) | The bytes of one attachment, reached through the message that names it. |
| POST | /api/site/threads/{threadId}/messages/{messageId}/translate | session, authenticated (requireSiteAuthenticatedApiContext) | One message, read in another language, and nothing kept. |
| POST | /api/site/threads/{threadId}/participants | session, authenticated (requireSiteAuthenticatedApiContext) | Adds people or groups. It never removes: leaving is the participant's own flag, not somebody's edit. |
| POST | /api/site/threads/{threadId}/read | session, authenticated (requireSiteAuthenticatedApiContext) | |
| GET | /api/site/threads/candidates | session, authenticated (requireSiteAuthenticatedApiContext) | Who this person may address, and which kinds of thread this Site offers. |
| POST | /api/site/threads/messages | session, authenticated (requireSiteAuthenticatedApiContext) | The same write as /api/site/threads/{threadId}/messages, with the conversation in the body. |
| GET | /api/site/translation | session, authenticated (requireSiteAuthenticatedApiContext) | Whether this installation translates for this Site, and into what. |
| POST | /api/site/translation/detect | session, structure-authoring (requireSiteBuilderApiContext) | |
| GET | /api/site/user-state | session, authenticated (requireSiteAuthenticatedApiContext) | Everything this Site's active Modules kept about the person asking. |
| PATCH | /api/site/user-state | session, authenticated (requireSiteAuthenticatedApiContext) | One key written, every other namespace on the row untouched. |
| DELETE | /api/site/user-state | session, authenticated (requireSiteAuthenticatedApiContext) | One key removed, which is not the same as writing a falsy value. |