Every endpoint below is hosted inside Shumoul.Api (BackEnd) via AddApplicationPart, under the
v1/MultiTenancy Swagger group — see
SaaS Admin Authorization. Every admin action requires
a permission ([MustHavePermission]); Preview/Apply requests additionally run through
TenantAccessGuardBehavior (ITenantScopedRequest). Internal apply-bridge endpoints
(api/internal/...) are [AllowAnonymous] + a manual X-Shumoul-Internal-Key header check instead —
never reachable without the matching internal key, never listed in Swagger.
Business Activities — api/Saas/BusinessActivities
| Route | Verb | Permission | Notes |
|---|
Get | GET | .ViewAll | |
GetActive | GET | [AllowAnonymous] | Only public endpoint in this whole guide (onboarding survey UI) |
GetDetails/{id} | GET | .View | |
GetByCode/{code} | GET | .View | |
Create | POST | .Create | |
Update/{id} | PUT | .Edit | |
Delete/{id} | DELETE | .Delete | |
Active/{id} | POST | .Activate | |
Inactive/{id} | POST | .Deactivate | |
Accounting Chart Templates — api/Saas/AccountingChartTemplates
| Route | Verb | Permission | Tenant DB touched on Apply |
|---|
Get / GetActive / GetByBusinessActivity/{code} | GET | .ViewAll | — |
{id}/Detail | GET | .View | — |
Create / Copy | POST | .Create | — |
Update/{id} | PUT | .Edit | — |
Delete/{id} | DELETE | .Delete | — |
Active/{id} / Inactive/{id} | POST | .Activate / .Deactivate | — |
Accounts/*, Mappings/* | POST/PUT/DELETE | .Edit | — |
Import/Preview, Import | POST | .Import | — (SaaS catalog only) |
Import/Excel/Preview, Import/Excel, Import/Excel/Template | POST/GET | .Import | — |
{id}/ApplyToTenantAccounts/Preview | POST | .Apply | none (Preview) |
{id}/ApplyToTenantAccounts | POST | .Apply | dbo.Accounts |
{id}/ApplyMappingsToTenant/Preview | POST | .ApplyMappings | none (Preview) |
{id}/ApplyMappingsToTenant | POST | .ApplyMappings | dbo.InventoryAccountCategory (fill only) |
Internal: api/internal/accounting-chart-templates/apply-accounts,
api/internal/accounting-chart-templates/apply-mappings.
Inventory Account Category Templates — api/Saas/InventoryAccountCategoryTemplates
| Route | Verb | Permission | Tenant DB touched on Apply |
|---|
Get / GetActive / GetByBusinessActivity/{code} | GET | .ViewAll | — |
{id}/Detail | GET | .View | — |
Create / Copy | POST | .Create | — |
Update/{id} | PUT | .Edit | — |
Delete/{id} | DELETE | .Delete | — |
Active/{id} / Inactive/{id} | POST | .Activate / .Deactivate | — |
Accounts/* | POST/PUT/DELETE | .Edit | — |
{id}/ApplyToTenant/Preview | POST | .Apply | none (Preview) |
{id}/ApplyToTenant | POST | .Apply | dbo.InventoryAccountCategory (create-or-update, one row) |
Internal: api/internal/inventory-account-category-templates/apply.
Cost Center Templates — api/Saas/CostCenterTemplates
| Route | Verb | Permission | Tenant DB touched on Apply |
|---|
Get / GetActive / GetByBusinessActivity/{code} | GET | .ViewAll | — |
{id}/Detail | GET | .View | — |
Create / Copy | POST | .Create | — |
Update/{id} | PUT | .Edit | — |
Delete/{id} | DELETE | .Delete | — |
Active/{id} / Inactive/{id} | POST | .Activate / .Deactivate | — |
Items/* | POST/PUT/DELETE | .Edit | — |
{id}/ApplyToTenant/Preview | POST | .Apply | none (Preview) |
{id}/ApplyToTenant | POST | .Apply | dbo.CostCenters (insert-missing) |
Internal: api/internal/cost-center-templates/apply.
Tenant Starter Kit — api/Saas/TenantStarterKits
| Route | Verb | Permission | Tenant DB touched |
|---|
Preview | POST | TenancyPermissions.TenantStarterKits.Preview | none (delegates to each included step's own Preview) |
Apply | POST | TenancyPermissions.TenantStarterKits.Apply | whatever each included step's own Apply touches |
Tenants/{tenantId}/DefaultPlan | GET | TenancyPermissions.TenantStarterKits.View | none (Preview wrapper) |
Product Catalog Prerequisite Templates — api/Saas/ProductCatalogPrerequisiteTemplates
| Route | Verb | Permission | Tenant DB touched on Apply |
|---|
Get / GetActive / GetByBusinessActivity/{code} / GetDefaultByBusinessActivity/{code} | GET | .ViewAll | — |
{id}/Detail | GET | .View | — |
Create / Copy | POST | .Create | — |
Update/{id} | PUT | .Edit | — |
Delete/{id} | DELETE | .Delete | — |
Active/{id} / Inactive/{id} | POST | .Activate / .Deactivate | — |
BusinessTypes/*, Departments/*, Units/* | POST/PUT/DELETE | .Edit | — |
{id}/ApplyToTenant/Preview | POST | .Apply | none (Preview) |
{id}/ApplyToTenant | POST | .Apply | dbo.BusinessTypes, dbo.ProductDepartments, dbo.UnitOfMeasures |
Internal: api/internal/product-catalog-prerequisite-templates/apply.
Product Catalog Templates — api/Saas/ProductCatalogTemplates
| Route | Verb | Permission | Tenant DB touched on Apply |
|---|
Get / GetActive / GetByBusinessActivity/{code} / GetDefaultByBusinessActivity/{code} | GET | .ViewAll | — |
{id}/Detail | GET | .View | — |
Create / Copy | POST | .Create | — |
Update/{id} | PUT | .Edit | — |
Delete/{id} | DELETE | .Delete | — |
Active/{id} / Inactive/{id} | POST | .Activate / .Deactivate | — |
Categories/* | POST/PUT/DELETE | .Edit | — |
Items/*, ItemUnits/* | POST/PUT/DELETE | .Edit | — |
{id}/ApplyToTenant/Preview / {id}/ApplyToTenant | POST | .Apply | dbo.ProductCategories |
{id}/ApplyItemsToTenant/Preview / {id}/ApplyItemsToTenant | POST | .Apply | dbo.Products, dbo.ProductUnits |
Internal: api/internal/product-catalog-templates/apply, api/internal/product-catalog-item-templates/apply.
Internal-only endpoints (no Swagger listing, internal key required)
| Route | Purpose |
|---|
api/internal/accounting-chart-templates/apply-accounts | Accounting accounts apply |
api/internal/accounting-chart-templates/apply-mappings | Accounting mappings apply |
api/internal/inventory-account-category-templates/apply | Inventory account category apply |
api/internal/cost-center-templates/apply | Cost center apply |
api/internal/product-catalog-prerequisite-templates/apply | Product catalog prerequisites apply |
api/internal/product-catalog-templates/apply | Product catalog categories apply |
api/internal/product-catalog-item-templates/apply | Product catalog items/units apply |
api/internal/tenants/{tenantId}/provision-entitlements | Manual tenant entitlement re-provisioning (separate internal key, see Settings Groups and Entitlements) |