Skip to content

Endpoint Registry — All API Routes

Complete inventory of all HTTP endpoints exposed by Granit framework modules.

  • 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

MethodRouteOperationPermission
GET/ListApiKeysApiKeys.Keys.Read
GET/{id:guid}GetApiKeyByIdApiKeys.Keys.Read
POST/CreateApiKeyApiKeys.Keys.Create
POST/{id:guid}/revokeRevokeApiKeyApiKeys.Keys.Revoke
POST/{id:guid}/rotateRotateApiKeyApiKeys.Keys.Rotate
PUT/{id:guid}/scopesUpdateApiKeyScopesApiKeys.Keys.UpdateScopes

Module: Granit.Authorization.Endpoints Prefix: auth

MethodRouteOperationPermission
GET/meGetMyPermissionsAuthenticated
GET/definitionsGetPermissionDefinitionsAdmin
GET/roles/{roleName}GetRolePermissionsAdmin
PUT/roles/{roleName}/{permissionName}GrantPermissionAdmin
DELETE/roles/{roleName}/{permissionName}RevokePermissionAdmin

Module: Granit.BackgroundJobs.Endpoints Prefix: background-jobs

MethodRouteOperationPermission
GET/GetAllBackgroundJobsBackgroundJobs.Jobs.Manage
GET/{name}GetBackgroundJobByNameBackgroundJobs.Jobs.Manage
POST/{name}/pausePauseBackgroundJobBackgroundJobs.Jobs.Manage
POST/{name}/resumeResumeBackgroundJobBackgroundJobs.Jobs.Manage
POST/{name}/triggerTriggerBackgroundJobBackgroundJobs.Jobs.Manage

Module: Granit.BlobStorage.Endpoints Prefix: blobs

MethodRouteOperationPermission
GET/{id:guid}GetBlobDescriptorBlobStorage.Blobs.Manage
POST/uploadInitiateBlobUploadBlobStorage.Blobs.Manage
POST/{id:guid}/confirmConfirmBlobUploadBlobStorage.Blobs.Manage
POST/{id:guid}/download-urlGenerateBlobDownloadUrlBlobStorage.Blobs.Manage
DELETE/{id:guid}DeleteBlobBlobStorage.Blobs.Manage
POST/cleanup-orphansCleanupOrphanedBlobsBlobStorage.Blobs.Manage

Module: Granit.BlobStorage.Proxy Prefix: blobs/proxy

MethodRouteOperationAuth
PUT/upload/{token}BlobProxyUploadToken-based
GET/download/{token}BlobProxyDownloadToken-based

Module: Granit.Http.Cookies.Endpoints Prefix: (root — mounted directly on the app group)

MethodRouteOperationAuth
GET/cookies/configGetCookieConsentConfigAnonymous

Module: Granit.DataExchange.Endpoints Prefix: data-exchange

MethodRouteOperationPermission
GET/jobsListImportJobsDataExchange.Import.*
POST/CreateImportJobDataExchange.Import.*
POST/{jobId}/previewPreviewImportJobDataExchange.Import.*
PUT/{jobId}/mappingsConfirmImportMappingsDataExchange.Import.*
POST/{jobId}/executeExecuteImportJobDataExchange.Import.*
POST/{jobId}/dry-runDryRunImportJobDataExchange.Import.*
GET/{jobId}GetImportJobDataExchange.Import.*
DELETE/{jobId}DeleteImportJobDataExchange.Import.*
GET/{jobId}/reportGetImportReportDataExchange.Import.*
GET/{jobId}/correction-fileDownloadImportCorrectionFileDataExchange.Import.*
MethodRouteOperationPermission
GET/export/jobsListExportJobsDataExchange.Export.*
POST/export/jobsCreateExportJobDataExchange.Export.*
GET/export/jobs/{id}GetExportJobDataExchange.Export.*
GET/export/jobs/{id}/downloadDownloadExportFileDataExchange.Export.*
MethodRouteOperationPermission
GET/metadata/definitionsGetExportDefinitionsDataExchange.Export.*
GET/metadata/definitions/{name}/fieldsGetExportDefinitionFieldsDataExchange.Export.*
GET/metadata/presets/{definitionName}ListExportPresetsDataExchange.Export.*
POST/metadata/presetsSaveExportPresetDataExchange.Export.*
DELETE/metadata/presets/{definitionName}/{presetName}DeleteExportPresetDataExchange.Export.*

Module: Granit.Features.Endpoints Prefix: features

MethodRouteOperationPermission
GET/definitionsGetFeatureDefinitionsFeatures.Flags.Read
GET/valuesGetAllFeatureValuesAuthenticated
GET/values/{name}GetFeatureValueAuthenticated
PUT/overrides/{name}SetFeatureOverrideFeatures.Flags.Manage
DELETE/overrides/{name}DeleteFeatureOverrideFeatures.Flags.Manage

Identity uses two separate endpoint groups with distinct prefixes.

Module: Granit.Identity.EndpointsMapGranitIdentityEndpoints() Prefix: identity/users

MethodRouteOperationPermission
GET/SearchIdentityUsersIdentity.UserCache.Read
GET/{userId}GetIdentityUserIdentity.UserCache.Read
POST/batchBatchResolveIdentityUsersIdentity.UserCache.Read
GET/statsGetIdentityUserCacheStatsIdentity.UserCache.Read
GET/capabilitiesGetCapabilitiesIdentity.UserCache.Read
POST/syncSyncIdentityUsersIdentity.UserCache.Sync
POST/sync-allSyncAllIdentityUsersIdentity.UserCache.Sync
POST/sync-staleSyncStaleIdentityUsersIdentity.UserCache.Sync
DELETE/{userId}EraseIdentityUserDataIdentity.UserCache.Delete

Module: Granit.Identity.EndpointsMapGranitIdentityProviderEndpoints() Prefix: identity/provider

MethodRouteOperationPermission
GET/usersListProviderUsersIdentity.Users.Read
GET/users/{userId}GetProviderUserIdentity.Users.Read
POST/usersCreateProviderUserIdentity.Users.Manage
PUT/users/{userId}UpdateProviderUserIdentity.Users.Manage
MethodRouteOperationPermission
GET/rolesListProviderRolesIdentity.Roles.Read
GET/roles/{roleName}/membersGetRoleMembersIdentity.Roles.Read
GET/users/{userId}/rolesGetUserRolesIdentity.Roles.Read
PUT/users/{userId}/roles/{roleName}AssignUserRoleIdentity.Roles.Manage
DELETE/users/{userId}/roles/{roleName}RemoveUserRoleIdentity.Roles.Manage
MethodRouteOperationPermission
GET/groupsListProviderGroupsIdentity.Groups.Read
GET/users/{userId}/groupsGetUserGroupsIdentity.Groups.Read
PUT/users/{userId}/groups/{groupId}AddUserToGroupIdentity.Groups.Manage
DELETE/users/{userId}/groups/{groupId}RemoveUserFromGroupIdentity.Groups.Manage
MethodRouteOperationPermission
GET/users/{userId}/sessionsListUserSessionsIdentity.Sessions.Read
DELETE/users/{userId}/sessions/{sessionId}TerminateSessionIdentity.Sessions.Manage
DELETE/users/{userId}/sessionsTerminateAllSessionsIdentity.Sessions.Manage
GET/users/{userId}/devicesGetUserDeviceActivityIdentity.Sessions.Read
MethodRouteOperationPermission
GET/users/{userId}/password/changed-atGetPasswordChangedAtIdentity.Passwords.Read
POST/users/{userId}/password/reset-emailSendPasswordResetEmailIdentity.Passwords.Manage
POST/users/{userId}/password/temporarySetTemporaryPasswordIdentity.Passwords.Manage
MethodRouteOperationAuth
POST/webhookIdentityWebhookSignature-validated

Module: Granit.Localization.Endpoints Prefix: (root — mounted directly on the app group)

MethodRouteOperationPermission
GET/localizationGetGranitLocalizationAnonymous
GET/localization/overridesGetLocalizationOverridesLocalization.Overrides.Manage
PUT/localization/overrides/{resourceName}/{cultureName}/{key}PutLocalizationOverrideLocalization.Overrides.Manage
DELETE/localization/overrides/{resourceName}/{cultureName}/{key}DeleteLocalizationOverrideLocalization.Overrides.Manage

Module: Granit.Notifications.Endpoints Prefix: notifications

MethodRouteOperationAuth
GET/GetNotificationsAuthenticated
GET/unread/countGetUnreadCountAuthenticated
POST/{id:guid}/readMarkAsReadAuthenticated
POST/read-allMarkAllAsReadAuthenticated
MethodRouteOperationAuth
GET/entity/{entityType}/{entityId}GetEntityActivityFeedAuthenticated
MethodRouteOperationAuth
GET/preferencesGetPreferencesAuthenticated
PUT/preferencesUpdatePreferenceAuthenticated
GET/typesGetNotificationTypesAuthenticated
GET/subscriptionsGetSubscriptionsAuthenticated
POST/subscriptions/{typeName}SubscribeAuthenticated
DELETE/subscriptions/{typeName}UnsubscribeAuthenticated
MethodRouteOperationAuth
POST/entity/{entityType}/{entityId}/followFollowEntityAuthenticated
DELETE/entity/{entityType}/{entityId}/followUnfollowEntityAuthenticated
GET/entity/{entityType}/{entityId}/followersGetEntityFollowersAuthenticated

OpenIddict uses two endpoint groups: account self-service (anonymous + authenticated) and admin management (permission-protected).

Module: Granit.OpenIddict.EndpointsMapOpenIddictEndpoints() Prefix: account

MethodRouteOperationAuth
POST/registerRegisterAccountAnonymous
GET/confirm-emailConfirmEmailAnonymous
POST/resend-confirmation-emailResendConfirmationEmailAuthenticated
MethodRouteOperationAuth
GET/profileGetAccountProfileAuthenticated
PUT/profileUpdateAccountProfileAuthenticated
MethodRouteOperationAuth
POST/change-passwordChangePasswordAuthenticated
POST/forgot-passwordForgotPasswordAnonymous
POST/reset-passwordResetPasswordAnonymous
MethodRouteOperationAuth
GET/two-factorGetTwoFactorStatusAuthenticated
GET/two-factor/authenticator-keyGetAuthenticatorKeyAuthenticated
POST/two-factor/enableEnableTwoFactorAuthenticated
POST/two-factor/disableDisableTwoFactorAuthenticated
POST/two-factor/recovery-codesGenerateRecoveryCodesAuthenticated
MethodRouteOperationAuth
GET/external-loginsListExternalLoginsAuthenticated
POST/external-logins/challenge/{provider}ChallengeExternalLoginAnonymous
GET/external-logins/callbackExternalLoginCallbackAnonymous
DELETE/external-logins/{provider}UnlinkExternalLoginAuthenticated
MethodRouteOperationAuth
GET/passkeysListPasskeysAuthenticated
POST/passkeys/register/beginBeginPasskeyRegistrationAuthenticated
POST/passkeys/register/completeCompletePasskeyRegistrationAuthenticated
POST/passkeys/assertion/beginBeginPasskeyAssertionAnonymous
PATCH/passkeys/{id}RenamePasskeyAuthenticated
DELETE/passkeys/{id}DeletePasskeyAuthenticated
MethodRouteOperationAuth
POST/deleteDeleteAccountAuthenticated
POST/session/heartbeatSessionHeartbeatAuthenticated
POST/session/back-to-impersonatorBackToImpersonatorAuthenticated

Module: Granit.OpenIddict.EndpointsMapOpenIddictEndpoints() Prefix: admin

MethodRouteOperationPermission
GET/usersListUsersOpenIddict.Users.Read
GET/users/{userId}GetUserOpenIddict.Users.Read
POST/usersCreateUserOpenIddict.Users.Create
DELETE/users/{userId}DeleteUserOpenIddict.Users.Delete
POST/users/{userId}/impersonateImpersonateUserOpenIddict.Users.Impersonate
MethodRouteOperationPermission
GET/rolesListRolesOpenIddict.Roles.Read
POST/rolesCreateRoleOpenIddict.Roles.Create
DELETE/roles/{roleName}DeleteRoleOpenIddict.Roles.Delete
GET/roles/{roleName}/membersGetRoleMembersOpenIddict.Roles.Read
MethodRouteOperationPermission
GET/groupsListGroupsOpenIddict.Groups.Read
POST/groupsCreateGroupOpenIddict.Groups.Create
DELETE/groups/{groupId}DeleteGroupOpenIddict.Groups.Delete
POST/groups/{groupId}/membersAddGroupMemberOpenIddict.Groups.Manage
DELETE/groups/{groupId}/members/{userId}RemoveGroupMemberOpenIddict.Groups.Manage
MethodRouteOperationPermissionResponse
GET/oidc/applicationsListOidcApplicationsOpenIddict.Applications.ReadOidcApplicationResponse[]
POST/oidc/applicationsCreateOidcApplicationOpenIddict.Applications.Create201 / 409
DELETE/oidc/applications/{clientId}DeleteOidcApplicationOpenIddict.Applications.Delete204 / 404
POST/oidc/applications/{clientId}/rotate-secretRotateOidcApplicationSecretOpenIddict.Applications.RotateOidcSecretRotationResponse / 404

Response types:

interface OidcApplicationResponse {
id: string;
clientId: string;
displayName: string;
type: string; // "public" | "confidential"
}
interface OidcSecretRotationResponse {
clientId: string;
newSecret: string; // ⚠ Shown ONCE — display in a copyable modal
}
MethodRouteOperationPermissionResponse
GET/oidc/scopesListOidcScopesOpenIddict.Scopes.ReadOidcScopeResponse[]
POST/oidc/scopesCreateOidcScopeOpenIddict.Scopes.Create201 / 409
DELETE/oidc/scopes/{scopeName}DeleteOidcScopeOpenIddict.Scopes.Delete204 / 404
interface OidcScopeResponse {
id: string;
name: string;
displayName: string;
}
MethodRouteOperationPermissionResponse
GET/oidc/authorizationsListOidcAuthorizationsOpenIddict.Authorizations.ReadOidcAuthorizationResponse[]
DELETE/oidc/authorizations/{id}RevokeOidcAuthorizationOpenIddict.Authorizations.Revoke204 / 404
DELETE/oidc/authorizations/user/{userId}RevokeUserOidcAuthorizationsOpenIddict.Authorizations.Revoke204
interface OidcAuthorizationResponse {
id: string;
subject: string; // userId
status: string; // "valid" | "revoked"
type: string; // "permanent" | "ad-hoc"
}

Module: Granit.Privacy.Endpoints Prefix: privacy

MethodRouteOperationPermission
POST/exportRequestPrivacyExportPrivacy.Export.Execute
GET/export/{requestId}GetPrivacyExportStatusPrivacy.Export.Read
GET/exportListPrivacyExportsPrivacy.Export.Read
MethodRouteOperationPermission
POST/deletionRequestPrivacyDeletionPrivacy.Deletion.Execute
POST/deletion/{requestId}/cancelCancelPrivacyDeletionPrivacy.Deletion.Execute
GET/deletion/{requestId}GetPrivacyDeletionStatusPrivacy.Deletion.Execute
GET/deletionListPrivacyDeletionsPrivacy.Deletion.Execute
MethodRouteOperationPermission
GET/agreements/documentsListPrivacyLegalDocumentsPrivacy.Agreements.Read
GET/agreements/statusGetPrivacyConsentStatusPrivacy.Agreements.Read
GET/agreements/historyListPrivacyAgreementHistoryPrivacy.Agreements.Read
POST/agreements/acceptAcceptPrivacyAgreementPrivacy.Agreements.Create

Module: Granit.QueryEngine.Endpoints Prefix: app-defined via MapQueryEndpoints<T>(pattern)

MethodRouteOperation
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

MethodRouteOperationPermission
GET/userGetAllUserSettingsAuthenticated
GET/user/{name}GetUserSettingAuthenticated
PUT/user/{name}UpdateUserSettingAuthenticated
DELETE/user/{name}DeleteUserSettingAuthenticated
GET/tenantGetAllTenantSettingsSettings.Tenant.Read
PUT/tenant/{name}UpdateTenantSettingSettings.Tenant.Manage
GET/globalGetAllGlobalSettingsSettings.Global.Read
PUT/global/{name}UpdateGlobalSettingSettings.Global.Manage

Module: Granit.Templating.Endpoints Prefix: templates

MethodRouteOperationPermission
GET/ListTemplatesTemplates.Templates.Manage
GET/{name}GetTemplateDetailTemplates.Templates.Manage
POST/CreateTemplateDraftTemplates.Templates.Manage
PUT/{name}UpdateTemplateDraftTemplates.Templates.Manage
DELETE/{name}/draftDeleteTemplateDraftTemplates.Templates.Manage
POST/{name}/publishPublishTemplateTemplates.Templates.Manage
POST/{name}/unpublishUnpublishTemplateTemplates.Templates.Manage
GET/{name}/lifecycleGetTemplateLifecycleTemplates.Templates.Manage
POST/{name}/previewPreviewTemplateTemplates.Templates.Manage
GET/{name}/variablesGetTemplateVariablesTemplates.Templates.Manage
GET/{name}/historyGetTemplateHistoryTemplates.Templates.Manage
GET/{name}/history/{revisionId:guid}GetTemplateRevisionDetailTemplates.Templates.Manage
MethodRouteOperationPermission
GET/categoriesListTemplateCategoriesTemplates.Templates.Manage
POST/categoriesCreateTemplateCategoryTemplates.Templates.Manage
PUT/categories/{id}UpdateTemplateCategoryTemplates.Templates.Manage
DELETE/categories/{id}DeleteTemplateCategoryTemplates.Templates.Manage

Module: Granit.Timeline.Endpoints Prefix: timeline

MethodRouteOperationPermission
GET/{entityType}/{entityId}/historyGetEntityStreamTimeline.Entries.Read
POST/{entityType}/{entityId}/entriesPostTimelineEntryTimeline.Entries.Read
DELETE/{entityType}/{entityId}/entries/{id}DeleteTimelineEntryTimeline.Entries.Read

Module: Granit.Validation.Endpoints Prefix: validation

MethodRouteOperationAuth
POST/validateValidateFieldAnonymous
POST/validate-batchValidateFieldBatchAnonymous
GET/validatorsGetRegisteredValidatorsAnonymous

Module: Granit.Webhooks.Endpoints Prefix: webhooks

MethodRouteOperationPermission
GET/configGetWebhooksConfigWebhooks.Subscriptions.Manage
MethodRouteOperationPermission
GET/event-typesGetWebhookEventTypesWebhooks.Subscriptions.Manage
MethodRouteOperationPermission
GET/subscriptions/{id}GetWebhookSubscriptionWebhooks.Subscriptions.Manage
POST/subscriptionsCreateWebhookSubscriptionWebhooks.Subscriptions.Manage
PUT/subscriptions/{id}UpdateWebhookSubscriptionWebhooks.Subscriptions.Manage
DELETE/subscriptions/{id}DeleteWebhookSubscriptionWebhooks.Subscriptions.Manage
MethodRouteOperationPermission
POST/subscriptions/{id}/activateActivateWebhookSubscriptionWebhooks.Subscriptions.Manage
POST/subscriptions/{id}/suspendSuspendWebhookSubscriptionWebhooks.Subscriptions.Manage
POST/subscriptions/{id}/deactivateDeactivateWebhookSubscriptionWebhooks.Subscriptions.Manage
MethodRouteOperationPermission
POST/subscriptions/{id}/rotate-secretRotateWebhookSecretWebhooks.Subscriptions.Manage
POST/subscriptions/{id}/test-pingTestWebhookPingWebhooks.Subscriptions.Manage
MethodRouteOperationPermission
GET/statsGetWebhookStatsWebhooks.Subscriptions.Manage
GET/deliveries/queryQueryWebhookDeliveriesWebhooks.Subscriptions.Manage
POST/deliveries/{deliveryId}/retryRetryWebhookDeliveryWebhooks.Subscriptions.Manage

Module: Granit.Workflow.Endpoints Prefix: workflow

MethodRouteOperationPermission
GET/{entityType}/{entityId}/historyGetTransitionHistoryWorkflow.History
GET/transitionsGetAvailableTransitionsWorkflow.History
POST/transitionsExecuteTransitionWorkflow.History

Module: Granit.AI.Endpoints Prefix: ai

MethodRouteOperationPermission
GET/workspacesListAIWorkspacesAI.Workspaces.*
GET/workspaces/{name}GetAIWorkspaceAI.Workspaces.*
POST/workspacesCreateAIWorkspaceAI.Workspaces.*
PUT/workspaces/{name}UpdateAIWorkspaceAI.Workspaces.*
DELETE/workspaces/{name}DeleteAIWorkspaceAI.Workspaces.*
MethodRouteOperationPermission
POST/chat/{workspaceName}CreateChatCompletionAI.Chat.Execute
POST/chat/{workspaceName}/streamStreamChatCompletionAI.Chat.Execute
POST/embeddings/{workspaceName}GenerateEmbeddingAI.Embedding.Generate

Module: Granit.Auditing.Endpoints Prefix: audit-log

MethodRouteOperationPermission
GET/GetAuditEntriesAuditing.AuditEntries.Read
GET/{id:guid}GetAuditEntryByIdAuditing.AuditEntries.Read
GET/entity/{entityType}/{entityId}GetAuditEntriesByEntityAuditing.AuditEntries.Read

Module: Granit.Diagnostics.Endpoints Prefix: diagnostics

MethodRouteOperationAuth
GET/healthGetSystemHealthAuthenticated

Module: Granit.ReferenceData.Endpoints Prefix: reference-data

MethodRouteOperationPermission
GET/GetReferenceDataListRead
GET/{code}GetReferenceDataByCodeRead
POST/CreateReferenceDataAdmin
PUT/{code}UpdateReferenceDataAdmin
DELETE/{code}DeactivateReferenceDataAdmin

ModuleEndpointsAuth model
API Keys6Permission-based
Audit Log3Permission-based
Authorization5Admin + Authenticated
Background Jobs5Permission-based
Blob Storage6 + 2 proxyPermission + Token
Cookie Consent1Anonymous
Data Exchange19Permission-based
Diagnostics1Authenticated
Features5Permission + Authenticated
Identity — Cache9Permission-based
Identity — Provider18 + webhookPermission-based
Localization4Anonymous + Permission
Notifications14Authenticated
Privacy (GDPR)8Permission-based
QueryEngine7 per entityApp-defined
Reference Data5 per entityApp-defined
Settings8Authenticated + Permission
Templating16Permission-based
Timeline3Permission-based
Validation3Anonymous
Webhooks15Permission-based
Workflow3Permission-based
AI8Permission-based
Total~168+