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., "templating",
"blob-storage", "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 . MapGranitBlobStorage (); // → /api/v1/blob-storage/blobs/...
api . MapGranitTemplating (); // → /api/v1/templating/templates/...
api . MapGranitIdentityUserCache (); // → /api/v1/identity/users/...
Permissions: follow [Group].[Resource].[Action] (three segments)
Error responses: all endpoints return RFC 7807 Problem Details on errors
Query endpoints (MapGranitQuery<T>) mount directly on their parent route
group — no extra /query suffix
Routes below show only the module-relative path (without the app prefix)
Module: Granit.Authentication.ApiKeys.Endpoints
Prefix: authentication
Method Route Operation Permission GET /api-keysListApiKeys ApiKeys.Keys.ReadGET /api-keys/{id:guid}GetApiKeyById ApiKeys.Keys.ReadPOST /api-keysCreateApiKey ApiKeys.Keys.CreatePOST /api-keys/{id:guid}/revokeRevokeApiKey ApiKeys.Keys.RevokePOST /api-keys/{id:guid}/rotateRotateApiKey ApiKeys.Keys.RotatePUT /api-keys/{id:guid}/scopesUpdateApiKeyScopes ApiKeys.Keys.UpdateScopes
Module: Granit.Authorization.Endpoints
Prefix: authorization
Method Route Operation Permission GET /permissionsGetMyPermissions Authenticated GET /permissions/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 /jobs/GetAllBackgroundJobs BackgroundJobs.Jobs.ManageGET /jobs/{name}GetBackgroundJobByName BackgroundJobs.Jobs.ManagePOST /jobs/{name}/pausePauseBackgroundJob BackgroundJobs.Jobs.ManagePOST /jobs/{name}/resumeResumeBackgroundJob BackgroundJobs.Jobs.ManagePOST /jobs/{name}/triggerTriggerBackgroundJob BackgroundJobs.Jobs.Manage
Idempotency
PauseBackgroundJob fires a BackgroundJobPausedEvent unconditionally — no
if (IsEnabled) guard. Calling pause twice emits the event twice.
ResumeBackgroundJob schedules a duplicate cron message on every call,
even if the job is already running.
Module: Granit.BlobStorage.Endpoints
Prefix: blob-storage
Method Route Operation Permission GET /blobsQueryBlobDescriptor BlobStorage.Blobs.ManageGET /blobs/metaGetBlobDescriptorMeta BlobStorage.Blobs.ManageGET /blobs/{id:guid}GetBlobDescriptor BlobStorage.Blobs.ManagePOST /blobs/uploadInitiateBlobUpload BlobStorage.Blobs.ManagePOST /blobs/{id:guid}/confirmConfirmBlobUpload BlobStorage.Blobs.ManagePOST /blobs/{id:guid}/download-urlGenerateBlobDownloadUrl BlobStorage.Blobs.ManageDELETE /blobs/{id:guid}DeleteBlob BlobStorage.Blobs.ManagePOST /blobs/cleanup-orphansCleanupOrphanedBlobs BlobStorage.Blobs.Manage
Module: Granit.BlobStorage.Proxy
Prefix: /api/blobs (standalone, not under the blob-storage group)
Method Route Operation Auth PUT /upload/{token}BlobProxyUpload Token-based GET /download/{token}BlobProxyDownload Token-based
Module: Granit.Bff.Endpoints
Prefix: {pathPrefix}/bff (per-frontend, dynamic)
Method Route Operation Auth GET /loginBffLogin_{Name} Anonymous GET /callbackBffCallback_{Name} Anonymous GET /logoutBffLogout_{Name} Anonymous POST /backchannel-logoutBffBackChannelLogout_{Name} Anonymous
Method Route Operation Auth GET /userBffGetUser_{Name} Anonymous POST /csrf-tokenBffGenerateCsrfToken_{Name} Anonymous GET /sessionsBffListSessions_{Name} Anonymous DELETE /sessions/{targetSessionId}BffRevokeSession_{Name} Anonymous DELETE /sessionsBffRevokeAllSessions_{Name} Anonymous
Method Route Operation Auth GET /{**path}BffStaticFiles_{Name} Anonymous
Module: Granit.Http.Cookies.Endpoints
Prefix: cookies
Method Route Operation Auth GET /configGetCookieConsentConfig Anonymous
Module: Granit.CustomerBalance.Endpoints
Prefix: customer-balance
Method Route Operation Permission GET /balanceGetCustomerBalance CustomerBalance.Accounts.ReadGET /transactionsListBalanceTransactions CustomerBalance.Transactions.ReadPOST /balance/creditAddAdminCredit CustomerBalance.Credits.Manage
Module: Granit.DataExchange.Endpoints
Prefix: data-exchange
Method Route Operation Permission GET /import/jobsListImportJobs DataExchange.Import.*POST /import/jobsUploadImportFile DataExchange.Import.*POST /import/{jobId:guid}/previewPreviewImportJob DataExchange.Import.*PUT /import/{jobId:guid}/mappingsConfirmImportMappings DataExchange.Import.*POST /import/{jobId:guid}/executeExecuteImportJob DataExchange.Import.*POST /import/{jobId:guid}/dry-runDryRunImportJob DataExchange.Import.*GET /import/{jobId:guid}GetImportJobStatus DataExchange.Import.*DELETE /import/{jobId:guid}CancelImportJob DataExchange.Import.*GET /import/{jobId:guid}/reportGetImportReport DataExchange.Import.*GET /import/{jobId:guid}/correction-fileGetImportCorrectionFile DataExchange.Import.*
Method Route Operation Permission GET /export/jobsListExportJobs DataExchange.Export.*POST /export/jobsCreateExportJob DataExchange.Export.*GET /export/jobs/{jobId:guid}GetExportJobStatus DataExchange.Export.*GET /export/jobs/{jobId:guid}/downloadDownloadExportFile DataExchange.Export.*
Method Route Operation Permission GET /metadata/definitionsListExportDefinitions 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 three separate endpoint groups with distinct prefixes and separate
registration methods.
Module: Granit.Identity.Endpoints — MapGranitIdentityUserCache()
Prefix: identity/users
Method Route Operation Permission GET /SearchIdentityUserCache Identity.UserCache.ReadGET /{userId}GetIdentityUserById Identity.UserCache.ReadPOST /batchBatchResolveIdentityUsers Identity.UserCache.ReadGET /statsGetIdentityUserCacheStats Identity.UserCache.ReadGET /capabilitiesGetIdentityProviderCapabilities Identity.UserCache.ReadPOST /syncSyncIdentityUsers Identity.UserCache.SyncPOST /sync-allSyncAllIdentityUsers Identity.UserCache.SyncPOST /sync-staleSyncStaleIdentityUsers Identity.UserCache.SyncPATCH /{userId}/pseudonymizePseudonymizeIdentityUserCache Identity.UserCache.DeleteDELETE /{userId}EraseIdentityUserCache Identity.UserCache.Delete
Module: Granit.Identity.Endpoints — MapGranitIdentityProvider()
Prefix: identity/provider
Method Route Operation Permission GET /usersGetIdentityProviderUsers Identity.Users.ReadGET /users/{userId}GetIdentityProviderUser Identity.Users.ReadPOST /usersCreateIdentityProviderUser Identity.Users.ManagePUT /users/{userId}UpdateIdentityProviderUser Identity.Users.ManagePATCH /users/{userId}/enabledSetIdentityProviderUserEnabled Identity.Users.Manage
Method Route Operation Permission GET /rolesGetIdentityProviderRoles Identity.Roles.ReadGET /roles/{roleName}/membersGetIdentityProviderRoleMembers Identity.Roles.ReadGET /users/{userId}/rolesGetIdentityProviderUserRoles Identity.Roles.ReadPUT /users/{userId}/roles/{roleName}AssignIdentityProviderRole Identity.Roles.ManageDELETE /users/{userId}/roles/{roleName}RemoveIdentityProviderRole Identity.Roles.Manage
Method Route Operation Permission GET /groupsGetIdentityProviderGroups Identity.Groups.ReadGET /users/{userId}/groupsGetIdentityProviderUserGroups Identity.Groups.ReadPUT /users/{userId}/groups/{groupId}AddIdentityProviderUserToGroup Identity.Groups.ManageDELETE /users/{userId}/groups/{groupId}RemoveIdentityProviderUserFromGroup Identity.Groups.Manage
Method Route Operation Permission GET /users/{userId}/sessionsGetIdentityProviderUserSessions Identity.Sessions.ReadDELETE /users/{userId}/sessions/{sessionId}TerminateIdentityProviderSession Identity.Sessions.ManageDELETE /users/{userId}/sessionsTerminateAllIdentityProviderSessions Identity.Sessions.ManageGET /users/{userId}/devicesGetIdentityProviderUserDevices Identity.Sessions.Read
Method Route Operation Permission GET /users/{userId}/password/changed-atGetIdentityProviderPasswordChangedAt Identity.Passwords.ReadPOST /users/{userId}/password/reset-emailSendIdentityProviderPasswordResetEmail Identity.Passwords.ManagePOST /users/{userId}/password/temporarySetIdentityProviderTemporaryPassword Identity.Passwords.Manage
Module: Granit.Identity.Endpoints — registered at identity/webhook
(outside the identity/provider group, via MapGranitIdentityUserCache())
Method Route Operation Auth POST /identity/webhookIdentityWebhook Signature-validated
Module: Granit.Invoicing.Endpoints
Prefix: invoicing
Method Route Operation Permission GET /invoicesQueryInvoice Invoicing.Invoices.ReadGET /invoices/metaGetInvoiceMeta Invoicing.Invoices.ReadGET /invoices/{id:guid}GetInvoiceById Invoicing.Invoices.ReadGET /invoices/{id:guid}/pdfDownloadInvoicePdf Invoicing.Invoices.DownloadPOST /invoicesCreateInvoice Invoicing.Invoices.Manage
Module: Granit.Localization.Endpoints
Prefix: localization
Method Route Operation Permission GET /GetGranitLocalization Anonymous GET /overridesGetLocalizationOverrides Localization.Overrides.ManagePUT /overrides/{resourceName}/{cultureName}/{key}PutLocalizationOverride Localization.Overrides.ManageDELETE /overrides/{resourceName}/{cultureName}/{key}DeleteLocalizationOverride Localization.Overrides.Manage
Module: Granit.Metering.Endpoints
Prefix: metering
Method Route Operation Permission GET /metersListActiveMeters Metering.Meters.ReadGET /meters/{id:guid}GetMeterDefinition Metering.Meters.ReadPOST /metersCreateMeterDefinition Metering.Meters.ManagePUT /meters/{id:guid}UpdateMeterDefinition Metering.Meters.ManagePOST /meters/{id:guid}/deactivateDeactivateMeterDefinition Metering.Meters.Manage
Method Route Operation Permission GET /usageGetUsageForPeriod Metering.Usage.ReadGET /quota/{meterId:guid}CheckMeteringQuota Metering.Usage.ReadPOST /eventsRecordUsageEvents Metering.Usage.Record
Module: Granit.MultiTenancy.Endpoints
Prefix: multi-tenancy
Method Route Operation Permission GET /tenants/ListTenants MultiTenancy.Tenants.ReadGET /tenants/{id:guid}GetTenant MultiTenancy.Tenants.ReadPOST /tenants/CreateTenant MultiTenancy.Tenants.CreatePUT /tenants/{id:guid}UpdateTenant MultiTenancy.Tenants.UpdatePOST /tenants/{id:guid}/activateActivateTenant MultiTenancy.Tenants.UpdatePOST /tenants/{id:guid}/deactivateDeactivateTenant MultiTenancy.Tenants.Update
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
Module: Granit.Identity.Local.Endpoints — MapGranitAccount()
Prefix: account
Method Route Operation Auth POST /loginAccountLogin Anonymous POST /login/two-factorAccountTwoFactorLogin Anonymous
Method Route Operation Auth GET /configGetAccountConfig Anonymous
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
Idempotency
EnableTwoFactor regenerates recovery codes on every call — a client retry
silently invalidates the codes from the first call.
DisableTwoFactor rotates the security stamp on every call — a client retry
kills all active sessions a second time.
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 POST /passkeys/assertion/completeCompletePasskeyAssertion 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
OpenIddict admin endpoints manage OIDC applications, scopes, and authorizations.
User/role/group admin is handled by Identity Provider .
Module: Granit.OpenIddict.Endpoints — MapGranitOpenIddict()
Prefix: admin
Method Route Operation Permission GET /usersListUsers OpenIddict.Users.ReadGET /users/{userId}GetUser OpenIddict.Users.ReadPOST /usersCreateUser OpenIddict.Users.CreatePOST /users/{userId}/impersonateImpersonateUser OpenIddict.Users.Impersonate
Method Route Operation Permission Response GET /oidc/applicationsListOidcApplications OpenIddict.Applications.ReadOidcApplicationResponse[]POST /oidc/applicationsCreateOidcApplication OpenIddict.Applications.Manage201 / 409 DELETE /oidc/applications/{clientId}DeleteOidcApplication OpenIddict.Applications.Manage204 / 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.Manage201 / 409 DELETE /oidc/scopes/{scopeName}DeleteOidcScope OpenIddict.Scopes.Manage204 / 404
interface OidcScopeResponse {
Method Route Operation Permission Response GET /oidc/authorizationsListOidcAuthorizations OpenIddict.Authorizations.ReadOidcAuthorizationResponse[]DELETE /oidc/authorizations/{authorizationId:guid}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.Payments.Endpoints
Prefix: payments
Method Route Operation Permission GET /methodsListPaymentMethods Payments.Methods.ReadGET /methods/availableGetAvailablePaymentMethods Payments.Methods.ReadPOST /methodsAttachPaymentMethod Payments.Methods.ManageDELETE /methods/{id:guid}DetachPaymentMethod Payments.Methods.Manage
Method Route Operation Permission GET /transactionsListPaymentTransactions Payments.Transactions.ReadGET /transactions/{id:guid}GetPaymentTransaction Payments.Transactions.ReadPOST /chargeInitiatePaymentCharge Payments.Charges.ExecutePOST /refundRequestPaymentRefund Payments.Refunds.Execute
Method Route Operation Auth POST /checkoutCreateCheckoutSession Payments.Charges.ExecutePOST /webhooks/{provider}HandlePaymentWebhook Anonymous
Module: Granit.Privacy.Endpoints
Prefix: privacy
Method Route Operation Permission GET /regulationGetApplicableRegulation Authenticated GET /purposesListProcessingPurposes Privacy.Purposes.Read
Method Route Operation Auth POST /opt-outRequestOptOut Anonymous GET /opt-out/statusGetOptOutStatus Anonymous
Method Route Operation Permission POST /exportsRequestPrivacyExport Privacy.Export.ExecuteGET /exports/{requestId:guid}GetPrivacyExportStatus Privacy.Export.ExecuteGET /exportsListPrivacyExports Privacy.Export.Execute
Method Route Operation Permission POST /deletionsRequestPrivacyDeletion Privacy.Deletion.ExecutePOST /deletions/{requestId:guid}/cancelCancelPrivacyDeletion Privacy.Deletion.ExecuteGET /deletions/{requestId:guid}GetPrivacyDeletionStatus Privacy.Deletion.ExecuteGET /deletionsListPrivacyDeletions 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
Method Route Operation Permission GET /legal-documents/ListLegalDocumentVersions Privacy.LegalDocuments.ReadGET /legal-documents/{id:guid}GetLegalDocument Privacy.LegalDocuments.ReadPOST /legal-documents/CreateLegalDocument Privacy.LegalDocuments.CreatePUT /legal-documents/{id:guid}UpdateLegalDocument Privacy.LegalDocuments.ManagePOST /legal-documents/{id:guid}/publishPublishLegalDocument Privacy.LegalDocuments.Manage
Module: Granit.QueryEngine.AspNetCore
Prefix: mounts on the calling group — no extra prefix by default
Tip
MapGranitQuery<T>() registers query, metadata, and saved-view endpoints
directly on the current route group. The module’s existing group structure
defines the route — there is no separate pattern parameter.
// Single-entity module — mounts directly on the module group
group . MapGranitQuery <BlobDescriptor>(
sp => sp . GetRequiredService <IBlobQueryableProvider>() . GetDescriptors ());
// → GET /blobs, GET /blobs/meta, GET /blobs/saved-views, …
// Multi-entity module — create a sub-group first
group . MapGroup ( " deliveries " ) . MapGranitQuery <WebhookDeliveryAttempt>(
sp => sp . GetRequiredService <IWebhookQueryableProvider>() . GetDeliveryAttempts ());
// → GET /webhooks/deliveries, GET /webhooks/deliveries/meta, …
Note
Operation IDs are suffixed with the entity type name. For example,
MapGranitQuery<BlobDescriptor>() produces QueryBlobDescriptor,
GetBlobDescriptorMeta, GetBlobDescriptorSavedViews, etc.
Method Route Operation GET /Query{EntityName} GET /metaGet{EntityName}Meta GET /saved-viewsGet{EntityName}SavedViews POST /saved-viewsCreate{EntityName}SavedView PUT /saved-views/{id}Update{EntityName}SavedView DELETE /saved-views/{id}Delete{EntityName}SavedView POST /saved-views/{id}/set-defaultSetDefault{EntityName}SavedView
Module: Granit.Scheduling.Endpoints
Prefix: scheduling
Method Route Operation Permission GET /scheduled-actions/{id:guid}GetScheduledActionById Scheduling.Actions.ReadDELETE /scheduled-actions/{id:guid}CancelScheduledAction Scheduling.Actions.ManagePUT /scheduled-actions/{id:guid}/rescheduleRescheduleScheduledAction Scheduling.Actions.Manage
Module: Granit.Settings.Endpoints
Prefix: settings (three independent sub-groups: settings/user, settings/tenant, settings/global)
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: templating
Method Route Operation Permission GET /templates/ListTemplates Templates.Templates.ManageGET /templates/{name}GetTemplateDetail Templates.Templates.ManagePOST /templates/CreateTemplateDraft Templates.Templates.ManagePUT /templates/{name}UpdateTemplateDraft Templates.Templates.ManageDELETE /templates/{name}/draftDeleteTemplateDraft Templates.Templates.ManagePOST /templates/{name}/publishPublishTemplate Templates.Templates.ManagePOST /templates/{name}/unpublishUnpublishTemplate Templates.Templates.ManageGET /templates/{name}/lifecycleGetTemplateLifecycle Templates.Templates.ManagePOST /templates/{name}/previewPreviewTemplate Templates.Templates.ManageGET /templates/{name}/variablesGetTemplateVariables Templates.Templates.ManageGET /templates/{name}/historyGetTemplateHistory Templates.Templates.ManageGET /templates/{name}/history/{revisionId:guid}GetTemplateRevisionDetail Templates.Templates.Manage
Method Route Operation Permission GET /layoutsListAvailableLayouts Templates.Templates.Manage
Method Route Operation Permission GET /categoriesListTemplateCategories Templates.Templates.ManagePOST /categoriesCreateTemplateCategory Templates.Templates.ManagePUT /categories/{id:guid}UpdateTemplateCategory Templates.Templates.ManageDELETE /categories/{id:guid}DeleteTemplateCategory Templates.Templates.Manage
Module: Granit.Subscriptions.Endpoints
Prefix: subscriptions
Method Route Operation Permission GET /plansListPlans Subscriptions.Plans.ReadGET /plans/{id:guid}GetPlanById Subscriptions.Plans.ReadPOST /plansCreatePlan Subscriptions.Plans.ManagePUT /plans/{id:guid}UpdatePlan Subscriptions.Plans.ManagePOST /plans/{id:guid}/publishPublishPlan Subscriptions.Plans.ManagePOST /plans/{id:guid}/archiveArchivePlan Subscriptions.Plans.Manage
Method Route Operation Permission GET /plans/{planId:guid}/prices/historyGetPlanPriceHistory Subscriptions.Prices.ReadPOST /plans/{planId:guid}/pricesCreatePriceVersion Subscriptions.Prices.ManagePOST /subscriptions/{id:guid}/migrate-priceMigrateSubscriptionPrice Subscriptions.Prices.ManagePOST /subscriptions/bulk-migrate-priceBulkMigrateSubscriptionPrice Subscriptions.Prices.Manage
Method Route Operation Permission GET /subscriptions/activeGetActiveSubscription Subscriptions.Subscriptions.ReadGET /subscriptions/{id:guid}GetSubscriptionById Subscriptions.Subscriptions.ReadPOST /subscriptionsCreateSubscription Subscriptions.Subscriptions.ManagePOST /subscriptions/{id:guid}/cancelCancelSubscription Subscriptions.Subscriptions.ManagePOST /subscriptions/{id:guid}/change-planChangeSubscriptionPlan Subscriptions.Subscriptions.Manage
Method Route Operation Permission GET /subscriptions/{id:guid}/seatsListSeats Subscriptions.Seats.ReadPOST /subscriptions/{id:guid}/seatsAssignSeat Subscriptions.Seats.ManageDELETE /subscriptions/{id:guid}/seats/{userId:guid}RevokeSeat Subscriptions.Seats.Manage
Module: Granit.Tax.Endpoints
Prefix: tax
Method Route Operation Permission GET /rates/GetAllTaxRates Tax.Rates.ReadGET /rates/{countryCode}GetTaxRateByCountry Tax.Rates.ReadPOST /ids/validateValidateTaxId Tax.Validations.Execute
Module: Granit.Timeline.Endpoints
Prefix: timeline
Method Route Operation Permission GET /{entityType}/{entityId}GetTimelineStream Timeline.Entries.ReadPOST /{entityType}/{entityId}/entriesPostTimelineEntry Timeline.Entries.ReadDELETE /{entityType}/{entityId}/entries/{entryId:guid}DeleteTimelineEntry Timeline.Entries.Read
Method Route Operation Permission POST /{entityType}/{entityId}/followFollowTimelineEntity Timeline.Entries.ReadDELETE /{entityType}/{entityId}/followUnfollowTimelineEntity Timeline.Entries.ReadGET /{entityType}/{entityId}/followersGetTimelineFollowers 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 /subscriptionsQueryWebhookSubscription Webhooks.Subscriptions.ManageGET /subscriptions/metaGetWebhookSubscriptionMeta Webhooks.Subscriptions.Manage
Method Route Operation Permission GET /subscriptions/{id:guid}GetWebhookSubscription Webhooks.Subscriptions.ManagePOST /subscriptionsCreateWebhookSubscription Webhooks.Subscriptions.ManagePUT /subscriptions/{id:guid}UpdateWebhookSubscription Webhooks.Subscriptions.ManageDELETE /subscriptions/{id:guid}DeleteWebhookSubscription Webhooks.Subscriptions.Manage
Method Route Operation Permission POST /subscriptions/{id:guid}/activateActivateWebhookSubscription Webhooks.Subscriptions.ManagePOST /subscriptions/{id:guid}/suspendSuspendWebhookSubscription Webhooks.Subscriptions.ManagePOST /subscriptions/{id:guid}/deactivateDeactivateWebhookSubscription Webhooks.Subscriptions.Manage
Idempotency
All three lifecycle endpoints throw InvalidOperationException if the subscription
is already in the target state (e.g., activating an Active subscription),
despite having IdempotentAttribute. The domain FSM should short-circuit
when already in the target state.
Method Route Operation Permission POST /subscriptions/{id:guid}/rotate-secretRotateWebhookSecret Webhooks.Subscriptions.ManagePOST /subscriptions/{id:guid}/test-pingTestWebhookPing Webhooks.Subscriptions.Manage
Method Route Operation Permission GET /statsGetWebhookStats Webhooks.Subscriptions.ManageGET /deliveriesQueryWebhookDeliveryAttempt Webhooks.Subscriptions.ManageGET /deliveries/metaGetWebhookDeliveryAttemptMeta Webhooks.Subscriptions.ManagePOST /deliveries/{deliveryId:guid}/retryRetryWebhookDelivery Webhooks.Subscriptions.Manage
Module: Granit.Workflow.Endpoints
Prefix: workflow
Method Route Operation Permission GET /{entityType}/{entityId}/historyGetWorkflowTransitionHistory Workflow.HistoryGET /transitionsGetAvailable{TState}Transitions Workflow.HistoryPOST /transitionsExecute{TState}Transition 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}AIChatComplete AI.Chat.ExecutePOST /chat/{workspaceName}/streamAIChatStream AI.Chat.ExecutePOST /embeddings/{workspaceName}AIGenerateEmbeddings AI.Embedding.Generate
Module: Granit.Auditing.Endpoints
Prefix: auditing
Method Route Operation Permission GET /audit-entries/GetAuditEntries Auditing.AuditEntries.ReadGET /audit-entries/{id:guid}GetAuditEntryById Auditing.AuditEntries.ReadGET /audit-entries/entity/{entityType}/{entityId}GetAuditEntriesByEntity Auditing.AuditEntries.ReadGET /audit-entries/correlation/{correlationId}GetAuditEntriesByCorrelationId Auditing.AuditEntries.ReadPOST /audit-entries/pseudonymize/{userId}PseudonymizeAuditEntries Auditing.AuditEntries.Manage
Module: Granit.Diagnostics.Endpoints
Prefix: diagnostics
Method Route Operation Auth GET /healthGetMonitoringHealth Authenticated
Module: Granit.ReferenceData.Endpoints
Prefix: reference-data
Caution
Reference Data endpoints are registered per entity type by the application
via MapGranitReferenceData<T>(). Each entity gets its own sub-group
under the prefix. Operation IDs are suffixed with the entity type name
(e.g., GetAllCountry, GetCountryByCode).
Method Route Operation Permission GET /GetAll{EntityType} Read GET /{code}Get{EntityType}ByCode Read GET /{code}/childrenGet{EntityType}Children Read POST /Create{EntityType} Admin PUT /{code}Update{EntityType} Admin DELETE /{code}Deactivate{EntityType} Admin
Module Endpoints Auth model AI 8 Permission-based API Keys 6 Permission-based Audit Log 5 Permission-based Authorization 5 Admin + Authenticated Background Jobs 5 Permission-based BFF 10 per frontend Anonymous (session-based) Blob Storage 8 + 2 proxy Permission + Token Cookie Consent 1 Anonymous Customer Balance 3 Permission-based Data Exchange 19 Permission-based Diagnostics 1 Authenticated Features 5 Permission + Authenticated Identity — Cache 10 Permission-based Identity — Provider 19 + webhook Permission-based Invoicing 5 Permission-based Localization 4 Anonymous + Permission Metering 8 Permission-based Multi-Tenancy 6 Permission-based Notifications 14 Authenticated Account Self-Service 28 Anonymous + Authenticated OpenIddict — Admin 14 Permission-based Payments 10 Permission + Anonymous Privacy (GDPR) 20 Permission + Anonymous QueryEngine 7 per entity App-defined Reference Data 6 per entity App-defined Scheduling 3 Permission-based Settings 8 Authenticated + Permission Subscriptions 18 Permission-based Tax 3 Permission-based Templating 17 Permission-based Timeline 6 Permission-based Validation 3 Anonymous Webhooks 17 Permission-based Workflow 3 Permission-based Total ~290+