Complete inventory of all HTTP endpoints exposed by Granit framework modules.
Tip
Use this page to verify that your frontend API client matches the backend routes.
The OpenAPI schema (available at /openapi/v1.json) is the authoritative source
for request/response types — this page focuses on routes, methods, and permissions .
Route prefixes are relative — each module defines a short prefix (e.g., "templates",
"blobs", "identity/users") via its *EndpointsOptions class. The application
composes the full path by mounting modules under a versioned group:
// Application startup (e.g., Program.cs)
RouteGroupBuilder api = app . MapGroup ( " api/v{version:apiVersion} " );
api . MapGranitBlobStorageEndpoints (); // → /api/v1/blobs/...
api . MapGranitTemplatingEndpoints (); // → /api/v1/templates/...
api . MapGranitIdentityEndpoints (); // → /api/v1/identity/users/...
Permissions: follow [Group].[Resource].[Action] (three segments)
Error responses: all endpoints return RFC 7807 Problem Details on errors
Query endpoints (MapQueryEndpoints<T>) are registered by the application ,
not the framework — the route pattern is app-defined
Routes below show only the module-relative path (without the app prefix)
Module: Granit.Authentication.ApiKeys.Endpoints
Prefix: api-keys
Method Route Operation Permission GET /ListApiKeys ApiKeys.Keys.ReadGET /{id:guid}GetApiKeyById ApiKeys.Keys.ReadPOST /CreateApiKey ApiKeys.Keys.CreatePOST /{id:guid}/revokeRevokeApiKey ApiKeys.Keys.RevokePOST /{id:guid}/rotateRotateApiKey ApiKeys.Keys.RotatePUT /{id:guid}/scopesUpdateApiKeyScopes ApiKeys.Keys.UpdateScopes
Module: Granit.Authorization.Endpoints
Prefix: auth
Method Route Operation Permission GET /meGetMyPermissions Authenticated GET /definitionsGetPermissionDefinitions Admin GET /roles/{roleName}GetRolePermissions Admin PUT /roles/{roleName}/{permissionName}GrantPermission Admin DELETE /roles/{roleName}/{permissionName}RevokePermission Admin
Module: Granit.BackgroundJobs.Endpoints
Prefix: background-jobs
Method Route Operation Permission GET /GetAllBackgroundJobs BackgroundJobs.Jobs.ManageGET /{name}GetBackgroundJobByName BackgroundJobs.Jobs.ManagePOST /{name}/pausePauseBackgroundJob BackgroundJobs.Jobs.ManagePOST /{name}/resumeResumeBackgroundJob BackgroundJobs.Jobs.ManagePOST /{name}/triggerTriggerBackgroundJob BackgroundJobs.Jobs.Manage
Module: Granit.BlobStorage.Endpoints
Prefix: blobs
Method Route Operation Permission GET /{id:guid}GetBlobDescriptor BlobStorage.Blobs.ManagePOST /uploadInitiateBlobUpload BlobStorage.Blobs.ManagePOST /{id:guid}/confirmConfirmBlobUpload BlobStorage.Blobs.ManagePOST /{id:guid}/download-urlGenerateBlobDownloadUrl BlobStorage.Blobs.ManageDELETE /{id:guid}DeleteBlob BlobStorage.Blobs.ManagePOST /cleanup-orphansCleanupOrphanedBlobs BlobStorage.Blobs.Manage
Module: Granit.BlobStorage.Proxy
Prefix: blobs/proxy
Method Route Operation Auth PUT /upload/{token}BlobProxyUpload Token-based GET /download/{token}BlobProxyDownload Token-based
Module: Granit.Http.Cookies.Endpoints
Prefix: (root — mounted directly on the app group)
Method Route Operation Auth GET /cookies/configGetCookieConsentConfig Anonymous
Module: Granit.DataExchange.Endpoints
Prefix: data-exchange
Method Route Operation Permission GET /jobsListImportJobs DataExchange.Import.*POST /CreateImportJob DataExchange.Import.*POST /{jobId}/previewPreviewImportJob DataExchange.Import.*PUT /{jobId}/mappingsConfirmImportMappings DataExchange.Import.*POST /{jobId}/executeExecuteImportJob DataExchange.Import.*POST /{jobId}/dry-runDryRunImportJob DataExchange.Import.*GET /{jobId}GetImportJob DataExchange.Import.*DELETE /{jobId}DeleteImportJob DataExchange.Import.*GET /{jobId}/reportGetImportReport DataExchange.Import.*GET /{jobId}/correction-fileDownloadImportCorrectionFile DataExchange.Import.*
Method Route Operation Permission GET /export/jobsListExportJobs DataExchange.Export.*POST /export/jobsCreateExportJob DataExchange.Export.*GET /export/jobs/{id}GetExportJob DataExchange.Export.*GET /export/jobs/{id}/downloadDownloadExportFile DataExchange.Export.*
Method Route Operation Permission GET /metadata/definitionsGetExportDefinitions DataExchange.Export.*GET /metadata/definitions/{name}/fieldsGetExportDefinitionFields DataExchange.Export.*GET /metadata/presets/{definitionName}ListExportPresets DataExchange.Export.*POST /metadata/presetsSaveExportPreset DataExchange.Export.*DELETE /metadata/presets/{definitionName}/{presetName}DeleteExportPreset DataExchange.Export.*
Module: Granit.Features.Endpoints
Prefix: features
Method Route Operation Permission GET /definitionsGetFeatureDefinitions Features.Flags.ReadGET /valuesGetAllFeatureValues Authenticated GET /values/{name}GetFeatureValue Authenticated PUT /overrides/{name}SetFeatureOverride Features.Flags.ManageDELETE /overrides/{name}DeleteFeatureOverride Features.Flags.Manage
Identity uses two separate endpoint groups with distinct prefixes.
Module: Granit.Identity.Endpoints — MapGranitIdentityEndpoints()
Prefix: identity/users
Method Route Operation Permission GET /SearchIdentityUsers Identity.UserCache.ReadGET /{userId}GetIdentityUser Identity.UserCache.ReadPOST /batchBatchResolveIdentityUsers Identity.UserCache.ReadGET /statsGetIdentityUserCacheStats Identity.UserCache.ReadGET /capabilitiesGetCapabilities Identity.UserCache.ReadPOST /syncSyncIdentityUsers Identity.UserCache.SyncPOST /sync-allSyncAllIdentityUsers Identity.UserCache.SyncPOST /sync-staleSyncStaleIdentityUsers Identity.UserCache.SyncDELETE /{userId}EraseIdentityUserData Identity.UserCache.Delete
Module: Granit.Identity.Endpoints — MapGranitIdentityProviderEndpoints()
Prefix: identity/provider
Method Route Operation Permission GET /usersListProviderUsers Identity.Users.ReadGET /users/{userId}GetProviderUser Identity.Users.ReadPOST /usersCreateProviderUser Identity.Users.ManagePUT /users/{userId}UpdateProviderUser Identity.Users.Manage
Method Route Operation Permission GET /rolesListProviderRoles Identity.Roles.ReadGET /roles/{roleName}/membersGetRoleMembers Identity.Roles.ReadGET /users/{userId}/rolesGetUserRoles Identity.Roles.ReadPUT /users/{userId}/roles/{roleName}AssignUserRole Identity.Roles.ManageDELETE /users/{userId}/roles/{roleName}RemoveUserRole Identity.Roles.Manage
Method Route Operation Permission GET /groupsListProviderGroups Identity.Groups.ReadGET /users/{userId}/groupsGetUserGroups Identity.Groups.ReadPUT /users/{userId}/groups/{groupId}AddUserToGroup Identity.Groups.ManageDELETE /users/{userId}/groups/{groupId}RemoveUserFromGroup Identity.Groups.Manage
Method Route Operation Permission GET /users/{userId}/sessionsListUserSessions Identity.Sessions.ReadDELETE /users/{userId}/sessions/{sessionId}TerminateSession Identity.Sessions.ManageDELETE /users/{userId}/sessionsTerminateAllSessions Identity.Sessions.ManageGET /users/{userId}/devicesGetUserDeviceActivity Identity.Sessions.Read
Method Route Operation Permission GET /users/{userId}/password/changed-atGetPasswordChangedAt Identity.Passwords.ReadPOST /users/{userId}/password/reset-emailSendPasswordResetEmail Identity.Passwords.ManagePOST /users/{userId}/password/temporarySetTemporaryPassword Identity.Passwords.Manage
Method Route Operation Auth POST /webhookIdentityWebhook Signature-validated
Module: Granit.Localization.Endpoints
Prefix: (root — mounted directly on the app group)
Method Route Operation Permission GET /localizationGetGranitLocalization Anonymous GET /localization/overridesGetLocalizationOverrides Localization.Overrides.ManagePUT /localization/overrides/{resourceName}/{cultureName}/{key}PutLocalizationOverride Localization.Overrides.ManageDELETE /localization/overrides/{resourceName}/{cultureName}/{key}DeleteLocalizationOverride Localization.Overrides.Manage
Module: Granit.Notifications.Endpoints
Prefix: notifications
Method Route Operation Auth GET /GetNotifications Authenticated GET /unread/countGetUnreadCount Authenticated POST /{id:guid}/readMarkAsRead Authenticated POST /read-allMarkAllAsRead Authenticated
Method Route Operation Auth GET /entity/{entityType}/{entityId}GetEntityActivityFeed Authenticated
Method Route Operation Auth GET /preferencesGetPreferences Authenticated PUT /preferencesUpdatePreference Authenticated GET /typesGetNotificationTypes Authenticated GET /subscriptionsGetSubscriptions Authenticated POST /subscriptions/{typeName}Subscribe Authenticated DELETE /subscriptions/{typeName}Unsubscribe Authenticated
Method Route Operation Auth POST /entity/{entityType}/{entityId}/followFollowEntity Authenticated DELETE /entity/{entityType}/{entityId}/followUnfollowEntity Authenticated GET /entity/{entityType}/{entityId}/followersGetEntityFollowers Authenticated
OpenIddict uses two endpoint groups : account self-service (anonymous + authenticated)
and admin management (permission-protected).
Module: Granit.OpenIddict.Endpoints — MapOpenIddictEndpoints()
Prefix: account
Method Route Operation Auth POST /registerRegisterAccount Anonymous GET /confirm-emailConfirmEmail Anonymous POST /resend-confirmation-emailResendConfirmationEmail Authenticated
Method Route Operation Auth GET /profileGetAccountProfile Authenticated PUT /profileUpdateAccountProfile Authenticated
Method Route Operation Auth POST /change-passwordChangePassword Authenticated POST /forgot-passwordForgotPassword Anonymous POST /reset-passwordResetPassword Anonymous
Method Route Operation Auth GET /two-factorGetTwoFactorStatus Authenticated GET /two-factor/authenticator-keyGetAuthenticatorKey Authenticated POST /two-factor/enableEnableTwoFactor Authenticated POST /two-factor/disableDisableTwoFactor Authenticated POST /two-factor/recovery-codesGenerateRecoveryCodes Authenticated
Method Route Operation Auth GET /external-loginsListExternalLogins Authenticated POST /external-logins/challenge/{provider}ChallengeExternalLogin Anonymous GET /external-logins/callbackExternalLoginCallback Anonymous DELETE /external-logins/{provider}UnlinkExternalLogin Authenticated
Method Route Operation Auth GET /passkeysListPasskeys Authenticated POST /passkeys/register/beginBeginPasskeyRegistration Authenticated POST /passkeys/register/completeCompletePasskeyRegistration Authenticated POST /passkeys/assertion/beginBeginPasskeyAssertion Anonymous PATCH /passkeys/{id}RenamePasskey Authenticated DELETE /passkeys/{id}DeletePasskey Authenticated
Method Route Operation Auth POST /deleteDeleteAccount Authenticated POST /session/heartbeatSessionHeartbeat Authenticated POST /session/back-to-impersonatorBackToImpersonator Authenticated
Module: Granit.OpenIddict.Endpoints — MapOpenIddictEndpoints()
Prefix: admin
Method Route Operation Permission GET /usersListUsers OpenIddict.Users.ReadGET /users/{userId}GetUser OpenIddict.Users.ReadPOST /usersCreateUser OpenIddict.Users.CreateDELETE /users/{userId}DeleteUser OpenIddict.Users.DeletePOST /users/{userId}/impersonateImpersonateUser OpenIddict.Users.Impersonate
Method Route Operation Permission GET /rolesListRoles OpenIddict.Roles.ReadPOST /rolesCreateRole OpenIddict.Roles.CreateDELETE /roles/{roleName}DeleteRole OpenIddict.Roles.DeleteGET /roles/{roleName}/membersGetRoleMembers OpenIddict.Roles.Read
Method Route Operation Permission GET /groupsListGroups OpenIddict.Groups.ReadPOST /groupsCreateGroup OpenIddict.Groups.CreateDELETE /groups/{groupId}DeleteGroup OpenIddict.Groups.DeletePOST /groups/{groupId}/membersAddGroupMember OpenIddict.Groups.ManageDELETE /groups/{groupId}/members/{userId}RemoveGroupMember OpenIddict.Groups.Manage
Method Route Operation Permission Response GET /oidc/applicationsListOidcApplications OpenIddict.Applications.ReadOidcApplicationResponse[]POST /oidc/applicationsCreateOidcApplication OpenIddict.Applications.Create201 / 409 DELETE /oidc/applications/{clientId}DeleteOidcApplication OpenIddict.Applications.Delete204 / 404 POST /oidc/applications/{clientId}/rotate-secretRotateOidcApplicationSecret OpenIddict.Applications.RotateOidcSecretRotationResponse / 404
Response types:
interface OidcApplicationResponse {
type : string ; // "public" | "confidential"
interface OidcSecretRotationResponse {
newSecret : string ; // ⚠ Shown ONCE — display in a copyable modal
Method Route Operation Permission Response GET /oidc/scopesListOidcScopes OpenIddict.Scopes.ReadOidcScopeResponse[]POST /oidc/scopesCreateOidcScope OpenIddict.Scopes.Create201 / 409 DELETE /oidc/scopes/{scopeName}DeleteOidcScope OpenIddict.Scopes.Delete204 / 404
interface OidcScopeResponse {
Method Route Operation Permission Response GET /oidc/authorizationsListOidcAuthorizations OpenIddict.Authorizations.ReadOidcAuthorizationResponse[]DELETE /oidc/authorizations/{id}RevokeOidcAuthorization OpenIddict.Authorizations.Revoke204 / 404 DELETE /oidc/authorizations/user/{userId}RevokeUserOidcAuthorizations OpenIddict.Authorizations.Revoke204
interface OidcAuthorizationResponse {
subject : string ; // userId
status : string ; // "valid" | "revoked"
type : string ; // "permanent" | "ad-hoc"
Module: Granit.Privacy.Endpoints
Prefix: privacy
Method Route Operation Permission POST /exportRequestPrivacyExport Privacy.Export.ExecuteGET /export/{requestId}GetPrivacyExportStatus Privacy.Export.ReadGET /exportListPrivacyExports Privacy.Export.Read
Method Route Operation Permission POST /deletionRequestPrivacyDeletion Privacy.Deletion.ExecutePOST /deletion/{requestId}/cancelCancelPrivacyDeletion Privacy.Deletion.ExecuteGET /deletion/{requestId}GetPrivacyDeletionStatus Privacy.Deletion.ExecuteGET /deletionListPrivacyDeletions Privacy.Deletion.Execute
Method Route Operation Permission GET /agreements/documentsListPrivacyLegalDocuments Privacy.Agreements.ReadGET /agreements/statusGetPrivacyConsentStatus Privacy.Agreements.ReadGET /agreements/historyListPrivacyAgreementHistory Privacy.Agreements.ReadPOST /agreements/acceptAcceptPrivacyAgreement Privacy.Agreements.Create
Module: Granit.QueryEngine.Endpoints
Prefix: app-defined via MapQueryEndpoints<T>(pattern)
Caution
QueryEngine endpoints are registered by the application , not the framework.
The route pattern is passed to MapQueryEndpoints<T>(). For consistency,
use the same prefix as the module’s CRUD endpoints (e.g., /localization/overrides).
Method Route Operation GET /{pattern}Query{EntityName} GET /{pattern}/metaGet{EntityName}Meta GET /{pattern}/saved-viewsGetSavedViews POST /{pattern}/saved-viewsCreateSavedView PUT /{pattern}/saved-views/{id}UpdateSavedView DELETE /{pattern}/saved-views/{id}DeleteSavedView POST /{pattern}/saved-views/{id}/set-defaultSetDefaultSavedView
Module: Granit.Settings.Endpoints
Prefix: settings
Method Route Operation Permission GET /userGetAllUserSettings Authenticated GET /user/{name}GetUserSetting Authenticated PUT /user/{name}UpdateUserSetting Authenticated DELETE /user/{name}DeleteUserSetting Authenticated GET /tenantGetAllTenantSettings Settings.Tenant.ReadPUT /tenant/{name}UpdateTenantSetting Settings.Tenant.ManageGET /globalGetAllGlobalSettings Settings.Global.ReadPUT /global/{name}UpdateGlobalSetting Settings.Global.Manage
Module: Granit.Templating.Endpoints
Prefix: templates
Method Route Operation Permission GET /ListTemplates Templates.Templates.ManageGET /{name}GetTemplateDetail Templates.Templates.ManagePOST /CreateTemplateDraft Templates.Templates.ManagePUT /{name}UpdateTemplateDraft Templates.Templates.ManageDELETE /{name}/draftDeleteTemplateDraft Templates.Templates.ManagePOST /{name}/publishPublishTemplate Templates.Templates.ManagePOST /{name}/unpublishUnpublishTemplate Templates.Templates.ManageGET /{name}/lifecycleGetTemplateLifecycle Templates.Templates.ManagePOST /{name}/previewPreviewTemplate Templates.Templates.ManageGET /{name}/variablesGetTemplateVariables Templates.Templates.ManageGET /{name}/historyGetTemplateHistory Templates.Templates.ManageGET /{name}/history/{revisionId:guid}GetTemplateRevisionDetail Templates.Templates.Manage
Method Route Operation Permission GET /categoriesListTemplateCategories Templates.Templates.ManagePOST /categoriesCreateTemplateCategory Templates.Templates.ManagePUT /categories/{id}UpdateTemplateCategory Templates.Templates.ManageDELETE /categories/{id}DeleteTemplateCategory Templates.Templates.Manage
Module: Granit.Timeline.Endpoints
Prefix: timeline
Method Route Operation Permission GET /{entityType}/{entityId}/historyGetEntityStream Timeline.Entries.ReadPOST /{entityType}/{entityId}/entriesPostTimelineEntry Timeline.Entries.ReadDELETE /{entityType}/{entityId}/entries/{id}DeleteTimelineEntry Timeline.Entries.Read
Module: Granit.Validation.Endpoints
Prefix: validation
Method Route Operation Auth POST /validateValidateField Anonymous POST /validate-batchValidateFieldBatch Anonymous GET /validatorsGetRegisteredValidators Anonymous
Module: Granit.Webhooks.Endpoints
Prefix: webhooks
Method Route Operation Permission GET /configGetWebhooksConfig Webhooks.Subscriptions.Manage
Method Route Operation Permission GET /event-typesGetWebhookEventTypes Webhooks.Subscriptions.Manage
Method Route Operation Permission GET /subscriptions/{id}GetWebhookSubscription Webhooks.Subscriptions.ManagePOST /subscriptionsCreateWebhookSubscription Webhooks.Subscriptions.ManagePUT /subscriptions/{id}UpdateWebhookSubscription Webhooks.Subscriptions.ManageDELETE /subscriptions/{id}DeleteWebhookSubscription Webhooks.Subscriptions.Manage
Method Route Operation Permission POST /subscriptions/{id}/activateActivateWebhookSubscription Webhooks.Subscriptions.ManagePOST /subscriptions/{id}/suspendSuspendWebhookSubscription Webhooks.Subscriptions.ManagePOST /subscriptions/{id}/deactivateDeactivateWebhookSubscription Webhooks.Subscriptions.Manage
Method Route Operation Permission POST /subscriptions/{id}/rotate-secretRotateWebhookSecret Webhooks.Subscriptions.ManagePOST /subscriptions/{id}/test-pingTestWebhookPing Webhooks.Subscriptions.Manage
Method Route Operation Permission GET /statsGetWebhookStats Webhooks.Subscriptions.ManageGET /deliveries/queryQueryWebhookDeliveries Webhooks.Subscriptions.ManagePOST /deliveries/{deliveryId}/retryRetryWebhookDelivery Webhooks.Subscriptions.Manage
Module: Granit.Workflow.Endpoints
Prefix: workflow
Method Route Operation Permission GET /{entityType}/{entityId}/historyGetTransitionHistory Workflow.HistoryGET /transitionsGetAvailableTransitions Workflow.HistoryPOST /transitionsExecuteTransition Workflow.History
Module: Granit.AI.Endpoints
Prefix: ai
Method Route Operation Permission GET /workspacesListAIWorkspaces AI.Workspaces.*GET /workspaces/{name}GetAIWorkspace AI.Workspaces.*POST /workspacesCreateAIWorkspace AI.Workspaces.*PUT /workspaces/{name}UpdateAIWorkspace AI.Workspaces.*DELETE /workspaces/{name}DeleteAIWorkspace AI.Workspaces.*
Method Route Operation Permission POST /chat/{workspaceName}CreateChatCompletion AI.Chat.ExecutePOST /chat/{workspaceName}/streamStreamChatCompletion AI.Chat.ExecutePOST /embeddings/{workspaceName}GenerateEmbedding AI.Embedding.Generate
Module: Granit.Auditing.Endpoints
Prefix: audit-log
Method Route Operation Permission GET /GetAuditEntries Auditing.AuditEntries.ReadGET /{id:guid}GetAuditEntryById Auditing.AuditEntries.ReadGET /entity/{entityType}/{entityId}GetAuditEntriesByEntity Auditing.AuditEntries.Read
Module: Granit.Diagnostics.Endpoints
Prefix: diagnostics
Method Route Operation Auth GET /healthGetSystemHealth Authenticated
Module: Granit.ReferenceData.Endpoints
Prefix: reference-data
Method Route Operation Permission GET /GetReferenceDataList Read GET /{code}GetReferenceDataByCode Read POST /CreateReferenceData Admin PUT /{code}UpdateReferenceData Admin DELETE /{code}DeactivateReferenceData Admin
Module Endpoints Auth model API Keys 6 Permission-based Audit Log 3 Permission-based Authorization 5 Admin + Authenticated Background Jobs 5 Permission-based Blob Storage 6 + 2 proxy Permission + Token Cookie Consent 1 Anonymous Data Exchange 19 Permission-based Diagnostics 1 Authenticated Features 5 Permission + Authenticated Identity — Cache 9 Permission-based Identity — Provider 18 + webhook Permission-based Localization 4 Anonymous + Permission Notifications 14 Authenticated Privacy (GDPR) 8 Permission-based QueryEngine 7 per entity App-defined Reference Data 5 per entity App-defined Settings 8 Authenticated + Permission Templating 16 Permission-based Timeline 3 Permission-based Validation 3 Anonymous Webhooks 15 Permission-based Workflow 3 Permission-based AI 8 Permission-based Total ~168+