/api/v1 endpoint reference
Every route registered under the api/v1 prefix — 114 endpoints across routes/api.php, routes/web.php and the in-monorepo plugin route files. Generated from the live route table; regenerate with php artisan docs:reference.
The /api/v1/_ping and /api/v1/_scoped probes register only under local/testing (this file is generated under testing, so they appear here); the Stripe webhook (/webhooks/stripe) is not under v1 and is intentionally absent.
Scopes without an endpoint. These scopes are declared in app/Support/Api/ApiScopes.php but no registered route matches the endpoint they name — a granted key would authorise nothing:
inventory:read— claimsGET /api/v1/plugins/inventory/vehicles, but no route matches
| Method | URI | Scope / permission | Controller@action | Middleware |
|---|---|---|---|---|
| GET | /api/v1/_ping | — | Closure | api |
| GET | /api/v1/_scoped | scope:context:read | Closure | api, scope:context:read |
| POST | /api/v1/ai/proxy | can:ai.use.rooftop | \Ai\AiProxyController@proxy | web, session-api, can:ai.use.rooftop, App\Http\Middleware\AiRateLimit, App\Http\Middleware\AiBodySizeLimit |
| POST | /api/v1/channels/dm | — | Vctrs\Plugins\Channels\Http\Controllers\ChannelApiController@dmOpen | web, auth, tenant |
| GET | /api/v1/channels/mentions/recent | — | Vctrs\Plugins\Channels\Http\Controllers\ChannelApiController@myRecentMentions | web, auth, tenant |
| GET | /api/v1/channels/mentions/unread-count | — | Vctrs\Plugins\Channels\Http\Controllers\ChannelApiController@unreadMentionCount | web, auth, tenant |
| GET | /api/v1/channels/messages/reactions-batch | — | Vctrs\Plugins\Channels\Http\Controllers\ChannelApiController@messagesReactionsBatch | web, auth, tenant |
| GET | /api/v1/channels/messages/search | — | Vctrs\Plugins\Channels\Http\Controllers\ChannelApiController@messagesSearch | web, auth, tenant |
| DELETE | /api/v1/channels/messages/{messageId} | — | Vctrs\Plugins\Channels\Http\Controllers\ChannelApiController@messagesDelete | web, auth, tenant |
| PATCH | /api/v1/channels/messages/{messageId} | — | Vctrs\Plugins\Channels\Http\Controllers\ChannelApiController@messagesEdit | web, auth, tenant |
| POST | /api/v1/channels/messages/{messageId}/react | — | Vctrs\Plugins\Channels\Http\Controllers\ChannelApiController@messagesReact | web, auth, tenant |
| GET | /api/v1/channels/messages/{messageId}/reactions | — | Vctrs\Plugins\Channels\Http\Controllers\ChannelApiController@messagesReactions | web, auth, tenant |
| GET | /api/v1/channels/messages/{parentMessageId}/thread | — | Vctrs\Plugins\Channels\Http\Controllers\ChannelApiController@messagesThread | web, auth, tenant |
| GET | /api/v1/channels/{channelId}/members | — | Vctrs\Plugins\Channels\Http\Controllers\ChannelApiController@membersList | web, auth, tenant |
| POST | /api/v1/channels/{channelId}/members | — | Vctrs\Plugins\Channels\Http\Controllers\ChannelApiController@membersAdd | web, auth, tenant |
| DELETE | /api/v1/channels/{channelId}/members/{userId} | — | Vctrs\Plugins\Channels\Http\Controllers\ChannelApiController@membersRemove | web, auth, tenant |
| GET | /api/v1/channels/{channelId}/messages | — | Vctrs\Plugins\Channels\Http\Controllers\ChannelApiController@messagesList | web, auth, tenant |
| POST | /api/v1/channels/{channelId}/messages | — | Vctrs\Plugins\Channels\Http\Controllers\ChannelApiController@messagesSend | web, auth, tenant |
| POST | /api/v1/channels/{channelId}/mute-toggle | — | Vctrs\Plugins\Channels\Http\Controllers\ChannelApiController@muteToggle | web, auth, tenant |
| POST | /api/v1/channels/{channelId}/notification-level | — | Vctrs\Plugins\Channels\Http\Controllers\ChannelApiController@notificationLevelSet | web, auth, tenant |
| POST | /api/v1/channels/{channelId}/pin-toggle | — | Vctrs\Plugins\Channels\Http\Controllers\ChannelApiController@pinToggle | web, auth, tenant |
| POST | /api/v1/channels/{channelId}/read | — | Vctrs\Plugins\Channels\Http\Controllers\ChannelApiController@markRead | web, auth, tenant |
| GET | /api/v1/context | scope:context:read | Api\ContextController@index | api, scope:context:read |
| GET | /api/v1/context-hub/ai/grounding-context | can:context_hub.view | Vctrs\Plugins\ContextHub\Http\Controllers\AiController@groundingContext | web, session-api, can:context_hub.view |
| GET | /api/v1/context-hub/destinations | can:context_hub.view | Vctrs\Plugins\ContextHub\Http\Controllers\SyndicationController@destinationsList | web, session-api, can:context_hub.view |
| POST | /api/v1/context-hub/destinations | can:context_hub.manage.destinations | Vctrs\Plugins\ContextHub\Http\Controllers\SyndicationController@destinationUpsert | web, session-api, can:context_hub.manage.destinations |
| GET | /api/v1/context-hub/destinations/{id} | can:context_hub.view | Vctrs\Plugins\ContextHub\Http\Controllers\SyndicationController@destinationGet | web, session-api, can:context_hub.view |
| GET | /api/v1/context-hub/introspect/available-fields | can:context_hub.view | Vctrs\Plugins\ContextHub\Http\Controllers\IntrospectController@availableFields | web, session-api, can:context_hub.view |
| GET | /api/v1/context-hub/introspect/field-usage | can:context_hub.view | Vctrs\Plugins\ContextHub\Http\Controllers\IntrospectController@fieldUsage | web, session-api, can:context_hub.view |
| GET | /api/v1/context-hub/introspect/publish-destinations | can:context_hub.view | Vctrs\Plugins\ContextHub\Http\Controllers\IntrospectController@publishDestinations | web, session-api, can:context_hub.view |
| POST | /api/v1/context-hub/mappings | can:context_hub.manage.mappings | Vctrs\Plugins\ContextHub\Http\Controllers\SyndicationController@mappingUpsert | web, session-api, can:context_hub.manage.mappings |
| GET | /api/v1/context-hub/records | can:context_hub.view | Vctrs\Plugins\ContextHub\Http\Controllers\RecordQueryController@list | web, session-api, can:context_hub.view |
| GET | /api/v1/context-hub/records-summary | can:context_hub.view | Vctrs\Plugins\ContextHub\Http\Controllers\RecordQueryController@summary | web, session-api, can:context_hub.view |
| GET | /api/v1/context-hub/records/{id} | can:context_hub.view | Vctrs\Plugins\ContextHub\Http\Controllers\RecordQueryController@get | web, session-api, can:context_hub.view |
| GET | /api/v1/context-hub/runs | can:context_hub.view | Vctrs\Plugins\ContextHub\Http\Controllers\SyndicationController@runsList | web, session-api, can:context_hub.view |
| GET | /api/v1/context-hub/sections | — | Vctrs\Plugins\ContextHub\Http\Controllers\SectionController@list | web, session-api |
| GET | /api/v1/context-hub/sections/{sectionKey} | — | Vctrs\Plugins\ContextHub\Http\Controllers\SectionController@get | web, session-api |
| GET | /api/v1/context-hub/sections/{sectionKey}/syndication-targets | can:context_hub.view | Vctrs\Plugins\ContextHub\Http\Controllers\SectionController@syndicationTargets | web, session-api, can:context_hub.view |
| GET | /api/v1/dealer-dna/{rooftopId} | scope:dealer_dna:read | Api\DealerDnaController@show | api, scope:dealer_dna:read |
| GET | /api/v1/dealergraph | scope:dealergraph:read | Api\DealergraphController@index | api, scope:dealergraph:read |
| GET | /api/v1/dealergraph/{entityId} | scope:dealergraph:read | Api\DealergraphController@show | api, scope:dealergraph:read |
| POST | /api/v1/gamification/badges | can:gamification.badges.manage.rooftop | Vctrs\Plugins\Gamification\Http\Controllers\BadgeUpsertController@store | web, auth, tenant, can:gamification.badges.manage.rooftop |
| POST | /api/v1/gamification/challenges | can:gamification.challenges.manage.rooftop | Vctrs\Plugins\Gamification\Http\Controllers\ChallengeUpsertController@store | web, auth, tenant, can:gamification.challenges.manage.rooftop |
| GET | /api/v1/gamification/group-leaderboard | can:gamification.view.group | Vctrs\Plugins\Gamification\Http\Controllers\LeaderboardController@group | web, auth, tenant, can:gamification.view.group |
| GET | /api/v1/gamification/leaderboard | can:gamification.view.rooftop | Vctrs\Plugins\Gamification\Http\Controllers\LeaderboardController@rooftop | web, auth, tenant, can:gamification.view.rooftop |
| GET | /api/v1/gamification/me/badges | — | Vctrs\Plugins\Gamification\Http\Controllers\MeController@badges | web, auth, tenant |
| GET | /api/v1/gamification/me/balance | — | Vctrs\Plugins\Gamification\Http\Controllers\MeController@balance | web, auth, tenant |
| GET | /api/v1/gamification/me/challenge-progress | can:gamification.view.rooftop | Vctrs\Plugins\Gamification\Http\Controllers\MeController@challengeProgress | web, auth, tenant, can:gamification.view.rooftop |
| GET | /api/v1/gamification/me/ledger | — | Vctrs\Plugins\Gamification\Http\Controllers\MeController@ledger | web, auth, tenant |
| GET | /api/v1/gamification/redemptions | can:gamification.view.rooftop | Vctrs\Plugins\Gamification\Http\Controllers\RedemptionController@index | web, auth, tenant, can:gamification.view.rooftop |
| POST | /api/v1/gamification/redemptions | — | Vctrs\Plugins\Gamification\Http\Controllers\RedemptionController@store | web, auth, tenant |
| POST | /api/v1/gamification/redemptions/{id}/decide | can:gamification.redemption.approve.rooftop | Vctrs\Plugins\Gamification\Http\Controllers\RedemptionController@decide | web, auth, tenant, can:gamification.redemption.approve.rooftop |
| GET | /api/v1/gamification/rewards | can:gamification.view.rooftop | Vctrs\Plugins\Gamification\Http\Controllers\RewardController@index | web, auth, tenant, can:gamification.view.rooftop |
| POST | /api/v1/gamification/rewards | can:gamification.rewards.manage.rooftop | Vctrs\Plugins\Gamification\Http\Controllers\RewardController@store | web, auth, tenant, can:gamification.rewards.manage.rooftop |
| POST | /api/v1/gamification/spiff | can:gamification.spiff.create.rooftop | Vctrs\Plugins\Gamification\Http\Controllers\SpiffController@store | web, auth, tenant, can:gamification.spiff.create.rooftop |
| GET | /api/v1/mentions/recent | — | Dashboard\MentionController@recent | web, session-api |
| GET | /api/v1/mentions/unread-count | — | Dashboard\MentionController@unreadCount | web, session-api |
| GET | /api/v1/partner-hub/catalog | can:partner-hub.room.read | Vctrs\Plugins\PartnerHub\Http\Controllers\RoomReadController@catalog | web, auth, tenant, can:partner-hub.room.read |
| GET | /api/v1/partner-hub/rooms | can:partner-hub.room.read | Vctrs\Plugins\PartnerHub\Http\Controllers\RoomReadController@index | web, auth, tenant, can:partner-hub.room.read |
| GET | /api/v1/partner-hub/rooms/current | can:partner-hub.room.read | Vctrs\Plugins\PartnerHub\Http\Controllers\RoomReadController@current | web, auth, tenant, can:partner-hub.room.read |
| GET | /api/v1/partner-hub/rooms/{id} | can:partner-hub.room.read | Vctrs\Plugins\PartnerHub\Http\Controllers\RoomReadController@show | web, auth, tenant, can:partner-hub.room.read |
| GET | /api/v1/partner-hub/rooms/{roomId}/action-items | can:partner-hub.room.read | Vctrs\Plugins\PartnerHub\Http\Controllers\ActionItemController@list | web, auth, tenant, can:partner-hub.room.read |
| GET | /api/v1/partner-hub/rooms/{roomId}/collateral | can:partner-hub.collateral.read | Vctrs\Plugins\PartnerHub\Http\Controllers\CollateralController@list | web, auth, tenant, can:partner-hub.collateral.read |
| GET | /api/v1/partner-hub/rooms/{roomId}/contacts | can:partner-hub.room.read | Vctrs\Plugins\PartnerHub\Http\Controllers\ContactController@list | web, auth, tenant, can:partner-hub.room.read |
| GET | /api/v1/partner-hub/rooms/{roomId}/meetings | can:partner-hub.room.read | Vctrs\Plugins\PartnerHub\Http\Controllers\MeetingController@index | web, auth, tenant, can:partner-hub.room.read |
| GET | /api/v1/partner-hub/rooms/{roomId}/meetings/last | can:partner-hub.room.read | Vctrs\Plugins\PartnerHub\Http\Controllers\MeetingController@last | web, auth, tenant, can:partner-hub.room.read |
| GET | /api/v1/partner-hub/rooms/{roomId}/meetings/next | can:partner-hub.room.read | Vctrs\Plugins\PartnerHub\Http\Controllers\MeetingController@next | web, auth, tenant, can:partner-hub.room.read |
| GET | /api/v1/partner-hub/rooms/{roomId}/recordings | can:partner-hub.recordings.read | Vctrs\Plugins\PartnerHub\Http\Controllers\RecordingController@index | web, auth, tenant, can:partner-hub.recordings.read |
| GET | /api/v1/partner-hub/rooms/{roomId}/releases | can:partner-hub.room.read | Vctrs\Plugins\PartnerHub\Http\Controllers\ReleaseController@list | web, auth, tenant, can:partner-hub.room.read |
| GET | /api/v1/plugins/staff/directory | scope:staff:directory:read | Vctrs\Plugins\StaffHub\Http\Controllers\StaffDirectoryController@index | scope:staff:directory:read |
| GET | /api/v1/plugins/staff/directory/{id} | scope:staff:directory:read | Vctrs\Plugins\StaffHub\Http\Controllers\StaffDirectoryController@show | scope:staff:directory:read |
| DELETE | /api/v1/plugins/store | — | Plugins\PluginStoreController@destroy | api |
| GET | /api/v1/plugins/store | — | Plugins\PluginStoreController@show | api |
| PUT | /api/v1/plugins/store | — | Plugins\PluginStoreController@put | api |
| GET | /api/v1/plugins/store/list | — | Plugins\PluginStoreController@list | api |
| GET | /api/v1/search | — | Dashboard\SearchController@query | web, session-api |
| GET | /api/v1/timeline/calendar | can:timeline.create.entry | Vctrs\Plugins\Timeline\Http\Controllers\TimelineCalendarController@list | web, auth, tenant, can:timeline.create.entry |
| POST | /api/v1/timeline/calendar | can:timeline.manage.calendar | Vctrs\Plugins\Timeline\Http\Controllers\TimelineCalendarController@create | web, auth, tenant, can:timeline.manage.calendar |
| DELETE | /api/v1/timeline/calendar/{id} | can:timeline.manage.calendar | Vctrs\Plugins\Timeline\Http\Controllers\TimelineCalendarController@delete | web, auth, tenant, can:timeline.manage.calendar |
| PATCH | /api/v1/timeline/calendar/{id} | can:timeline.manage.calendar | Vctrs\Plugins\Timeline\Http\Controllers\TimelineCalendarController@update | web, auth, tenant, can:timeline.manage.calendar |
| GET | /api/v1/timeline/definitions | can:timeline.create.entry | Vctrs\Plugins\Timeline\Http\Controllers\TimelineApiController@definitionsList | web, auth, tenant, can:timeline.create.entry |
| POST | /api/v1/timeline/definitions | can:timeline.manage.definitions | Vctrs\Plugins\Timeline\Http\Controllers\TimelineApiController@definitionsCreate | web, auth, tenant, can:timeline.manage.definitions |
| DELETE | /api/v1/timeline/definitions/{id} | can:timeline.manage.definitions | Vctrs\Plugins\Timeline\Http\Controllers\TimelineApiController@definitionsArchive | web, auth, tenant, can:timeline.manage.definitions |
| GET | /api/v1/timeline/definitions/{id} | can:timeline.create.entry | Vctrs\Plugins\Timeline\Http\Controllers\TimelineApiController@definitionsGet | web, auth, tenant, can:timeline.create.entry |
| PATCH | /api/v1/timeline/definitions/{id} | can:timeline.manage.definitions | Vctrs\Plugins\Timeline\Http\Controllers\TimelineApiController@definitionsUpdate | web, auth, tenant, can:timeline.manage.definitions |
| GET | /api/v1/timeline/entries | can:timeline.create.entry | Vctrs\Plugins\Timeline\Http\Controllers\TimelineApiController@entriesList | web, auth, tenant, can:timeline.create.entry |
| POST | /api/v1/timeline/entries | can:timeline.create.entry | Vctrs\Plugins\Timeline\Http\Controllers\TimelineApiController@entriesCreate | web, auth, tenant, can:timeline.create.entry |
| DELETE | /api/v1/timeline/entries/{id} | can:timeline.delete.entry | Vctrs\Plugins\Timeline\Http\Controllers\TimelineApiController@entriesArchive | web, auth, tenant, can:timeline.delete.entry |
| GET | /api/v1/timeline/entries/{id} | can:timeline.create.entry | Vctrs\Plugins\Timeline\Http\Controllers\TimelineApiController@entriesGet | web, auth, tenant, can:timeline.create.entry |
| PATCH | /api/v1/timeline/entries/{id} | can:timeline.update.entry | Vctrs\Plugins\Timeline\Http\Controllers\TimelineApiController@entriesUpdate | web, auth, tenant, can:timeline.update.entry |
| POST | /api/v1/timeline/entries/{id}/assign | can:timeline.update.entry | Vctrs\Plugins\Timeline\Http\Controllers\TimelineApiController@entriesAssign | web, auth, tenant, can:timeline.update.entry |
| GET | /api/v1/timeline/entries/{id}/history | can:timeline.create.entry | Vctrs\Plugins\Timeline\Http\Controllers\TimelineApiController@entriesHistory | web, auth, tenant, can:timeline.create.entry |
| POST | /api/v1/timeline/entries/{id}/notes | can:timeline.update.entry | Vctrs\Plugins\Timeline\Http\Controllers\TimelineApiController@entriesAddNote | web, auth, tenant, can:timeline.update.entry |
| DELETE | /api/v1/timeline/entries/{id}/purge | can:timeline.delete.entry | Vctrs\Plugins\Timeline\Http\Controllers\TimelineApiController@entriesDelete | web, auth, tenant, can:timeline.delete.entry |
| POST | /api/v1/timeline/entries/{id}/status | can:timeline.update.entry | Vctrs\Plugins\Timeline\Http\Controllers\TimelineApiController@entriesUpdateStatus | web, auth, tenant, can:timeline.update.entry |
| POST | /api/v1/timeline/publish/calendarEvent | can:timeline.publish | Vctrs\Plugins\Timeline\Http\Controllers\TimelinePublishController@calendarEvent | web, auth, tenant, can:timeline.publish |
| POST | /api/v1/timeline/publish/entry | can:timeline.publish | Vctrs\Plugins\Timeline\Http\Controllers\TimelinePublishController@entry | web, auth, tenant, can:timeline.publish |
| GET | /api/v1/timeline/statuses | can:timeline.create.entry | Vctrs\Plugins\Timeline\Http\Controllers\TimelineApiController@statusesList | web, auth, tenant, can:timeline.create.entry |
| POST | /api/v1/timeline/statuses | can:timeline.manage.definitions | Vctrs\Plugins\Timeline\Http\Controllers\TimelineApiController@statusesCreate | web, auth, tenant, can:timeline.manage.definitions |
| POST | /api/v1/timeline/statuses/reorder | can:timeline.manage.definitions | Vctrs\Plugins\Timeline\Http\Controllers\TimelineApiController@statusesReorder | web, auth, tenant, can:timeline.manage.definitions |
| DELETE | /api/v1/timeline/statuses/{id} | can:timeline.manage.definitions | Vctrs\Plugins\Timeline\Http\Controllers\TimelineApiController@statusesDelete | web, auth, tenant, can:timeline.manage.definitions |
| PATCH | /api/v1/timeline/statuses/{id} | can:timeline.manage.definitions | Vctrs\Plugins\Timeline\Http\Controllers\TimelineApiController@statusesUpdate | web, auth, tenant, can:timeline.manage.definitions |
| POST | /api/v1/vault/documents/upload | can:vault.write.rooftop | Vctrs\Plugins\Vault\Http\Controllers\VaultApiController@upload | web, auth, tenant, can:vault.write.rooftop |
| DELETE | /api/v1/vault/documents/{id} | can:vault.write.rooftop | Vctrs\Plugins\Vault\Http\Controllers\VaultApiController@destroy | web, auth, tenant, can:vault.write.rooftop |
| POST | /api/v1/vault/documents/{id}/confirm-upload | can:vault.write.rooftop | Vctrs\Plugins\Vault\Http\Controllers\VaultApiController@confirmUpload | web, auth, tenant, can:vault.write.rooftop |
| GET | /api/v1/vault/documents/{id}/content | can:vault.read.rooftop | Vctrs\Plugins\Vault\Http\Controllers\VaultApiController@getContent | web, auth, tenant, can:vault.read.rooftop |
| GET | /api/v1/vault/documents/{id}/download | can:vault.read.rooftop | Vctrs\Plugins\Vault\Http\Controllers\VaultApiController@download | web, auth, tenant, can:vault.read.rooftop |
| POST | /api/v1/vault/documents/{id}/lock | can:vault.lock.rooftop | Vctrs\Plugins\Vault\Http\Controllers\VaultApiController@lock | web, auth, tenant, can:vault.lock.rooftop |
| PUT | /api/v1/vault/documents/{id}/metadata | can:vault.write.rooftop | Vctrs\Plugins\Vault\Http\Controllers\VaultApiController@updateMetadata | web, auth, tenant, can:vault.write.rooftop |
| POST | /api/v1/vault/documents/{id}/transition | can:vault.write.rooftop | Vctrs\Plugins\Vault\Http\Controllers\VaultApiController@transition | web, auth, tenant, can:vault.write.rooftop |
| GET | /api/v1/vault/documents/{id}/versions | can:vault.read.rooftop | Vctrs\Plugins\Vault\Http\Controllers\VaultApiController@listVersions | web, auth, tenant, can:vault.read.rooftop |
| GET | /api/v1/vault/search | can:vault.read.rooftop | Vctrs\Plugins\Vault\Http\Controllers\VaultApiController@search | web, auth, tenant, can:vault.read.rooftop |
| GET | /api/v1/vault/summary | can:vault.read.rooftop | Vctrs\Plugins\Vault\Http\Controllers\VaultApiController@summary | web, auth, tenant, can:vault.read.rooftop |
| GET | /api/v1/widgets/{key} | — | \Dashboard\WidgetController@show | web, session-api |
Last updated on