[
 {
  "method": "POST",
  "path": "/api/midtrans/notifications",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/account/addresses",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "RequireApp:auth.AppECommerce"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/account/addresses",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "RequireApp:auth.AppECommerce",
   "Handler"
  ]
 },
 {
  "method": "DELETE",
  "path": "/api/v1/account/addresses/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "RequireApp:auth.AppECommerce"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/account/addresses/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "RequireApp:auth.AppECommerce",
   "Handler"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/accounting/accounts",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:accounting.accounts.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/accounting/accounts",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:accounting.accounts.create"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/accounting/accounts/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:accounting.accounts.update"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/accounting/advances",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:accounting.advances.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/accounting/advances",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:accounting.advances.create"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/accounting/advances/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:accounting.advances.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/accounting/advances/{id}/allocate",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:accounting.advances.allocate"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/accounting/advances/{id}/refund",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:accounting.advances.refund"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/accounting/departments",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:accounting.departments.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/accounting/departments",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:accounting.departments.create"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/accounting/departments/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:accounting.departments.update"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/accounting/journals",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:accounting.journals.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/accounting/journals",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:accounting.journals.create"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/accounting/journals/by-source",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:accounting.journals.view"
  ]
 },
 {
  "method": "DELETE",
  "path": "/api/v1/accounting/journals/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:accounting.journals.delete"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/accounting/journals/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:accounting.journals.view"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/accounting/journals/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:accounting.journals.update"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/accounting/journals/{id}/post",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:accounting.journals.post"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/accounting/journals/{id}/reverse",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:accounting.journals.reverse"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/accounting/journals/{id}/void",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:accounting.journals.void"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/accounting/ledger",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:accounting.ledger.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/accounts",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "RequirePermission:finance.accounts.view"
  ]
 },
 {
  "method": "DELETE",
  "path": "/api/v1/activity-logs",
  "gates": [
   "RequirePermission:system.activity-logs.delete"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/activity-logs",
  "gates": [
   "RequirePermission:system.activity-logs.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/auth/forgot-password",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "Handler"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/auth/login",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "Handler"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/auth/logout",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/auth/me",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/auth/me",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/auth/register",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "Handler"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/auth/reset-password",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "Handler"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/barcodes/lookup",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/brands",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/brands",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "RequirePermission:masterdata.brands.create"
  ]
 },
 {
  "method": "DELETE",
  "path": "/api/v1/brands/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "RequirePermission:masterdata.brands.delete"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/brands/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/brands/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "RequirePermission:masterdata.brands.update"
  ]
 },
 {
  "method": "DELETE",
  "path": "/api/v1/cart",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "RequireApp:auth.AppECommerce"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/cart",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "RequireApp:auth.AppECommerce"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/cart/checkout",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "RequireApp:auth.AppECommerce",
   "Handler"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/cart/items",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "RequireApp:auth.AppECommerce"
  ]
 },
 {
  "method": "DELETE",
  "path": "/api/v1/cart/items/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "RequireApp:auth.AppECommerce"
  ]
 },
 {
  "method": "PATCH",
  "path": "/api/v1/cart/items/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "RequireApp:auth.AppECommerce"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/cash-accounts",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:finance.cash-accounts.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/cash-accounts",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:finance.cash-accounts.create"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/cashflow-balances",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "RequirePermission:finance.cashflows.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/cashflow-balances/accounts",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "RequirePermission:finance.cashflows.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/cashflows",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:finance.cashflows.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/cashflows",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:finance.cashflows.create"
  ]
 },
 {
  "method": "DELETE",
  "path": "/api/v1/cashflows/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:finance.cashflows.delete"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/cashflows/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:finance.cashflows.view"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/cashflows/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:finance.cashflows.update"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/cashflows/{id}/reverse",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:finance.cashflows.update"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/cashier/shifts",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:cashier.shifts.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/cashier/shifts",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:cashier.shifts.open"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/cashier/shifts/current",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:cashier.shifts.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/cashier/shifts/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:cashier.shifts.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/cashier/shifts/{id}/cash-in",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:cashier.shifts.drawer"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/cashier/shifts/{id}/cash-out",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:cashier.shifts.drawer"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/cashier/shifts/{id}/close",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:cashier.shifts.close"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/cashier/shifts/{id}/summary",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:cashier.shifts.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/categories",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/categories",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "RequirePermission:masterdata.categories.create"
  ]
 },
 {
  "method": "DELETE",
  "path": "/api/v1/categories/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "RequirePermission:masterdata.categories.delete"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/categories/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/categories/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "RequirePermission:masterdata.categories.update"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/customers",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "ecomOrPermGate:masterdata.customers.read"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/customers",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:masterdata.customers.create"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/customers/me",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequireApp:auth.AppECommerce"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/customers/me",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequireApp:auth.AppECommerce"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/customers/search",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "ecomOrPermGate:masterdata.customers.read"
  ]
 },
 {
  "method": "DELETE",
  "path": "/api/v1/customers/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:masterdata.customers.delete"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/customers/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "ecomOrPermGate:masterdata.customers.read"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/customers/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "ecomOrPermGate:masterdata.customers.update"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/dashboard/charts",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "ecomGate:dashboard.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/dashboard/kpis",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "ecomGate:dashboard.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/dashboard/outlet",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "RequirePermission:dashboard.pos.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/dashboard/pos",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "RequirePermission:dashboard.pos.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/delivery-orders",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:distribution.delivery-orders.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/delivery-orders",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:distribution.delivery-orders.create"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/delivery-orders/me",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequireApp:auth.AppECommerce"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/delivery-orders/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:distribution.delivery-orders.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/delivery-orders/{id}/deliver",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:distribution.shipments.deliver"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/delivery-orders/{id}/dispatch",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:distribution.dispatches.create"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/delivery-orders/{id}/shipments",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:distribution.shipments.create"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/distribution/drivers",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "RequirePermission:distribution.dispatches.create"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/distribution/drivers",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "Handler",
   "RequirePermission:distribution.dispatches.create"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/distribution/map",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "RequirePermission:distribution.delivery-orders.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/employees",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:hr.employees.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/employees",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:hr.employees.create"
  ]
 },
 {
  "method": "DELETE",
  "path": "/api/v1/employees/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:hr.employees.delete"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/employees/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:hr.employees.view"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/employees/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:hr.employees.update"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/fleet",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:distribution.fleet.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/fleet",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:distribution.fleet.create"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/fleet/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:distribution.fleet.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/galon",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:galon.transactions.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/galon",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:galon.transactions.create"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/galon/by-code/{code}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:galon.transactions.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/galon/by-code/{code}/info",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:galon.transactions.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/galon/services",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:galon.transactions.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/galon/status",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:galon.transactions.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/galon/units",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:galon.transactions.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/galon/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:galon.transactions.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/galon/{id}/cancel",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:galon.transactions.cancel"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/galon/{id}/complete",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:galon.transactions.complete"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/galon/{id}/return",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:galon.transactions.return"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/geo/geocode",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "RequirePermission:distribution.tracking.lookup"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/geo/route",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "RequirePermission:distribution.tracking.lookup"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/goods-receipts",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:purchasing.goods-receipts.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/goods-receipts",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:purchasing.goods-receipts.create"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/goods-receipts/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:purchasing.goods-receipts.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/hr/attendance",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:hr.attendance.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/hr/attendance",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:hr.attendance.create"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/hr/attendance/clock-in",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:hr.clockin"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/hr/attendance/clock-out",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:hr.clockout"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/hr/attendance/me",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/hr/attendance/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:hr.attendance.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/hr/leaves",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:hr.leaves.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/hr/leaves",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:hr.leaves.store"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/hr/leaves/me",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/hr/leaves/{id}/approve",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:hr.leaves.approve"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/hr/leaves/{id}/reject",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:hr.leaves.approve"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/hr/payrolls",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:hr.payrolls.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/hr/payrolls",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:hr.payrolls.generate"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/hr/payrolls/me",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/hr/payrolls/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:hr.payrolls.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/hr/payrolls/{id}/approve",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:hr.payrolls.approve"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/hr/payrolls/{id}/pay",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:hr.payrolls.pay"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/hr/performances",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:hr.performances.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/hr/performances",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:hr.performances.create"
  ]
 },
 {
  "method": "DELETE",
  "path": "/api/v1/hr/performances/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:hr.performances.delete"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/hr/performances/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:hr.performances.view"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/hr/performances/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:hr.performances.update"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/inventory/movements",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "RequirePermission:inventory.movements.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/inventory/opnames",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:inventory.opnames.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/inventory/opnames",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:inventory.opnames.create"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/inventory/opnames/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:inventory.opnames.view"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/inventory/opnames/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:inventory.opnames.update"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/inventory/opnames/{id}/finalize",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:inventory.opnames.finalize"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/inventory/stock",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "RequireAnyPermission:inventory.stock.view|sales.pos.create"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/inventory/stock-in",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:inventory.stock-in.create"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/inventory/stock-out",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:inventory.stock-out.create"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/inventory/transfers",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:inventory.transfers.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/inventory/transfers",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:inventory.transfers.create"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/inventory/transfers/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:inventory.transfers.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/inventory/transfers/{id}/approve",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:inventory.transfers.create"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/invoices",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:fakturisasi.invoices.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/invoices",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:fakturisasi.invoices.create"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/invoices/me",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequireApp:auth.AppECommerce"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/invoices/me/{id}/print",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequireApp:auth.AppECommerce"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/invoices/receivables",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:fakturisasi.invoices.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/invoices/receivables/me",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequireApp:auth.AppECommerce"
  ]
 },
 {
  "method": "DELETE",
  "path": "/api/v1/invoices/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:fakturisasi.invoices.delete"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/invoices/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:fakturisasi.invoices.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/invoices/{id}/pay",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:fakturisasi.invoices.pay"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/invoices/{id}/print",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:fakturisasi.invoices.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/lhpp",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales.lhpp.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/lhpp/groups/merge",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:sales.lhpp.merge"
  ]
 },
 {
  "method": "PATCH",
  "path": "/api/v1/lhpp/groups/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:sales.lhpp.merge"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/lhpp/groups/{id}/history",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales.lhpp.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/lhpp/groups/{id}/split",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:sales.lhpp.merge"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/lhpp/groups/{id}/void",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:sales.lhpp.merge"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/lhpp/sales",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales.lhpp.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/lhpp/sales/me",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales.lhpp.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/lhpp/sales/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales.lhpp.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/lhpp/sales/{id}/payments",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:sales.lhpp.pay"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/lhpp/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales.lhpp.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/lhpp/{id}/payments",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:sales.lhpp.pay"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/members",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:masterdata.memberships.lookup"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/members/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:masterdata.memberships.lookup"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/memberships",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:masterdata.memberships.lookup"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/memberships",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:masterdata.memberships.create"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/memberships/by-customer/{customerId}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:masterdata.memberships.lookup"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/memberships/by-number/{number}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:masterdata.memberships.lookup"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/memberships/me",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:masterdata.memberships.read"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/memberships/tiers",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:masterdata.memberships.read"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/memberships/tiers",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:masterdata.memberships.tiers.manage"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/memberships/tiers/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:masterdata.memberships.read"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/memberships/tiers/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:masterdata.memberships.tiers.manage"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/memberships/tiers/{id}/config-history",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:masterdata.memberships.read"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/memberships/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:masterdata.memberships.lookup"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/memberships/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:masterdata.memberships.manage"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/memberships/{id}/accrue",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:masterdata.memberships.manage"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/memberships/{id}/tier-history",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:masterdata.memberships.lookup"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/midtrans/notifications",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/midtrans/sweep",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "SnapSweepTokenGate",
   "Handler"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/notifications",
  "gates": [
   "RequireAnyApp:auth.AppERP|auth.AppPOS"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/payment-vouchers",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:finance.payment-vouchers.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/payment-vouchers",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:finance.payment-vouchers.create"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/payment-vouchers/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:finance.payment-vouchers.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/payment-vouchers/{id}/post",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:finance.payment-vouchers.post"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/payment-vouchers/{id}/void",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:finance.payment-vouchers.void"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/payments",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "ecomOrPermGate:fakturisasi.payments.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/payments/me",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequireApp:auth.AppECommerce"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/payments/{id}/partial",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:fakturisasi.invoices.pay"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/payments/{id}/proof",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/payments/{id}/verify",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "ecomOrPermGate:fakturisasi.payments.verify"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/permissions",
  "gates": [
   "RequirePermission:system.roles.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/pos",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequireAnyApp:auth.AppPOS|auth.AppERP",
   "Handler",
   "RequirePermission:sales.pos.create"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/pos/{id}/payment-status",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequireAnyApp:auth.AppPOS|auth.AppERP",
   "RequirePermission:sales.pos.create"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/products",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/products",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "RequirePermission:masterdata.products.create"
  ]
 },
 {
  "method": "DELETE",
  "path": "/api/v1/products/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "RequirePermission:masterdata.products.delete"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/products/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/products/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "RequirePermission:masterdata.products.update"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/products/{id}/barcodes",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/products/{id}/barcodes",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "RequirePermission:masterdata.products.barcodes.create"
  ]
 },
 {
  "method": "DELETE",
  "path": "/api/v1/products/{id}/barcodes/{barcodeID}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "RequirePermission:masterdata.products.barcodes.delete"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/products/{id}/units",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/products/{id}/units",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "RequirePermission:masterdata.products.units.create"
  ]
 },
 {
  "method": "DELETE",
  "path": "/api/v1/products/{id}/units/{unitConfigID}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "RequirePermission:masterdata.products.units.delete"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/products/{id}/units/{unitConfigID}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "RequirePermission:masterdata.products.units.update"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/purchase-orders",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:purchasing.purchase-orders.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/purchase-orders",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:purchasing.purchase-orders.create"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/purchase-orders/debts",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "RequirePermission:purchasing.purchase-orders.view"
  ]
 },
 {
  "method": "DELETE",
  "path": "/api/v1/purchase-orders/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:purchasing.purchase-orders.delete"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/purchase-orders/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:purchasing.purchase-orders.view"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/purchase-orders/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:purchasing.purchase-orders.update"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/purchase-orders/{id}/approve",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:purchasing.purchase-orders.approve"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/purchase-orders/{id}/cancel",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:purchasing.purchase-orders.cancel"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/purchase-orders/{id}/pay",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:purchasing.purchase-orders.pay"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/purchase-orders/{id}/print",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:purchasing.purchase-orders.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/reports/analytics",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "ecomGate:finance.reports.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/reports/balance-sheet",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:finance.reports.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/reports/cashflow",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:finance.cashflows.export"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/reports/cashflow-statement",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:finance.reports.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/reports/debts",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:purchasing.debts.export"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/reports/definitions",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:system.reports.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/reports/definitions/{code}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:system.reports.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/reports/fakturisasi",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:fakturisasi.invoices.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/reports/health",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/reports/payables-aging",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:finance.reports.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/reports/profit-loss",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:finance.reports.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/reports/purchases-by-product",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:finance.reports.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/reports/purchases-by-supplier",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:finance.reports.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/reports/receivables",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:fakturisasi.receivables.export"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/reports/receivables-aging",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:finance.reports.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/reports/sales",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales.reports.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/reports/sales-by-customer",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales.reports.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/reports/sales-by-product",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales.reports.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/reports/stock",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:inventory.stock.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/reports/stock-card",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:inventory.stock.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/reports/stock-movements",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:inventory.stock.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/reports/stock-valuation",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:inventory.stock.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/reports/summary",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:finance.reports.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/reports/templates",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:system.reports.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/reports/templates",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:system.reports.manage"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/reports/templates/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:system.reports.view"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/reports/templates/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:system.reports.manage"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/reports/templates/{id}/activate",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:system.reports.manage"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/reports/templates/{id}/duplicate",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:system.reports.manage"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/reports/trial-balance",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:finance.reports.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/returns",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales.returns.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/returns",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:sales.returns.create"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/returns/me",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequireApp:auth.AppECommerce"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/returns/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales.returns.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/role-permissions",
  "gates": [
   "RequireAdmin"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/role-permissions",
  "gates": [
   "RequireAdmin"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/roles",
  "gates": [
   "RequirePermission:system.roles.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/roles",
  "gates": [
   "RequireAdmin"
  ]
 },
 {
  "method": "DELETE",
  "path": "/api/v1/roles/{id}",
  "gates": [
   "RequireAdmin"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/roles/{id}",
  "gates": [
   "RequireAdmin"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/sales-orders",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "ecomOrPermGate:sales.sales-orders.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/sales-orders",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:sales.sales-orders.create"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/sales-orders/for-return",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales.returns.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/sales-orders/me",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequireApp:auth.AppECommerce"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/sales-orders/me/summary",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequireApp:auth.AppECommerce"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/sales-orders/me/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequireApp:auth.AppECommerce"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/sales-orders/payment-reconciliation",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:fakturisasi.invoices.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/sales-orders/supervisors",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales.sales-orders.create"
  ]
 },
 {
  "method": "DELETE",
  "path": "/api/v1/sales-orders/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales.sales-orders.delete"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/sales-orders/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "ecomOrPermGate:sales.sales-orders.view"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/sales-orders/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales.sales-orders.update"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/sales-orders/{id}/cancel",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/sales-orders/{id}/confirm",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "ecomOrPermGate:sales.sales-orders.confirm"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/sales-orders/{id}/notes",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "ecomOrPermGate:sales.sales-orders.update"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/sales-orders/{id}/pay",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequireApp:auth.AppECommerce"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/sales-orders/{id}/payment-status",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequireApp:auth.AppECommerce"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/sales-orders/{id}/snap-token",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequireApp:auth.AppECommerce"
  ]
 },
 {
  "method": "PATCH",
  "path": "/api/v1/sales-orders/{id}/status",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/sales-targets",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales.targets.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/sales-targets",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales.targets.manage"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/sales-targets/summary",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales.targets.view"
  ]
 },
 {
  "method": "DELETE",
  "path": "/api/v1/sales-targets/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales.targets.manage"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/sales-targets/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales.targets.manage"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/sales-tracking/activities",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales_tracking.activities.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/sales-tracking/activities",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales_tracking.activities.create"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/sales-tracking/livemap",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "RequirePermission:sales_tracking.locations.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/sales-tracking/locations",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales_tracking.locations.view"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/sales-tracking/locations/current",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales_tracking.locations.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/sales-tracking/locations/ping",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:sales_tracking.locations.ping"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/sales-tracking/routes",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales_tracking.routes.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/sales-tracking/routes",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales_tracking.routes.create"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/sales-tracking/routes/me",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/sales-tracking/visits",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales_tracking.visits.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/sales-tracking/visits",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales_tracking.visits.create"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/sales-tracking/visits/me",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales_tracking.visits.view_own"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/sales-tracking/visits/sales-employees",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales_tracking.visits.create"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/sales-tracking/visits/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales_tracking.visits.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/sales-tracking/visits/{id}/checkin",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales_tracking.visits.checkin"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/sales-tracking/visits/{id}/checkout",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales_tracking.visits.checkout"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/sales-vouchers",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "ecomOrPermGate:sales.sales-vouchers.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/sales-vouchers",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "ecomOrPermGate:sales.sales-vouchers.create"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/sales-vouchers/by-number/{voucher_number}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales.sales-vouchers.validate"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/sales-vouchers/validate",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:sales.sales-vouchers.validate"
  ]
 },
 {
  "method": "DELETE",
  "path": "/api/v1/sales-vouchers/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "ecomOrPermGate:sales.sales-vouchers.delete"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/sales-vouchers/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "ecomOrPermGate:sales.sales-vouchers.view"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/sales-vouchers/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "ecomOrPermGate:sales.sales-vouchers.update"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/sales-vouchers/{id}/status",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "ecomOrPermGate:sales.sales-vouchers.update"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/settings",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:system.settings.view"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/settings",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:system.settings.manage"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/shipments/{id}/deliver",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:distribution.shipments.deliver"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/shipments/{id}/tracking",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:distribution.shipments.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/shipments/{id}/tracking/events",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:distribution.tracking.record"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/shipments/{id}/tracking/latest",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:distribution.tracking.lookup"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/stores",
  "gates": [
   "RequirePermission:system.stores.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/stores",
  "gates": [
   "RequirePermission:system.stores.create"
  ]
 },
 {
  "method": "DELETE",
  "path": "/api/v1/stores/{id}",
  "gates": [
   "RequirePermission:system.stores.delete"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/stores/{id}",
  "gates": [
   "RequirePermission:system.stores.view"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/stores/{id}",
  "gates": [
   "RequirePermission:system.stores.update"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/stores/{id}/users",
  "gates": [
   "RequirePermission:system.users.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/stores/{id}/users",
  "gates": [
   "RequirePermission:system.stores.update"
  ]
 },
 {
  "method": "DELETE",
  "path": "/api/v1/stores/{id}/users/{userID}",
  "gates": [
   "RequirePermission:system.stores.update"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/suppliers",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:masterdata.suppliers.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/suppliers",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:masterdata.suppliers.create"
  ]
 },
 {
  "method": "DELETE",
  "path": "/api/v1/suppliers/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:masterdata.suppliers.delete"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/suppliers/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:masterdata.suppliers.view"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/suppliers/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:masterdata.suppliers.update"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/tickets",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequireAnyPermission:support.tickets.view|support.tickets.create|support.tickets.manage"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/tickets",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:support.tickets.create"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/tickets/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequireAnyPermission:support.tickets.view|support.tickets.create|support.tickets.manage"
  ]
 },
 {
  "method": "PATCH",
  "path": "/api/v1/tickets/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:support.tickets.manage"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/tickets/{id}/comments",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequireAnyPermission:support.tickets.create|support.tickets.manage"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/tracking/lookup",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:distribution.tracking.lookup"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/units",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/units",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:masterdata.units.create"
  ]
 },
 {
  "method": "DELETE",
  "path": "/api/v1/units/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:masterdata.units.delete"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/units/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:masterdata.units.update"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/uploads",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/users",
  "gates": [
   "RequirePermission:system.users.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/users",
  "gates": [
   "RequirePermission:system.users.create"
  ]
 },
 {
  "method": "DELETE",
  "path": "/api/v1/users/{id}",
  "gates": [
   "RequirePermission:system.users.delete"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/users/{id}",
  "gates": [
   "RequirePermission:system.users.view"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/users/{id}",
  "gates": [
   "RequirePermission:system.users.update"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/users/{id}/toggle",
  "gates": [
   "RequirePermission:system.users.update"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/vouchers",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:purchasing.vouchers.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/vouchers",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:purchasing.vouchers.create"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/vouchers/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:purchasing.vouchers.view"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/vouchers/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:purchasing.vouchers.update"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/vouchers/{id}/print",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:purchasing.vouchers.create"
  ]
 },
 {
  "method": "PATCH",
  "path": "/api/v1/vouchers/{id}/status",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:purchasing.vouchers.update"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/vouchers/{id}/status",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:purchasing.vouchers.update"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/warehouse-deposits",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:distribution.warehouse.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/warehouse-deposits",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:distribution.warehouse.create"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/warehouse-deposits/undeposited-payments",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:distribution.warehouse.create"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/warehouse-deposits/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:distribution.warehouse.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/warehouse-deposits/{id}/receive",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "Handler",
   "RequirePermission:distribution.warehouse.receive"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/warehouses",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:inventory.warehouses.view"
  ]
 },
 {
  "method": "POST",
  "path": "/api/v1/warehouses",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:inventory.warehouses.create"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/warehouses/options",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog"
  ]
 },
 {
  "method": "DELETE",
  "path": "/api/v1/warehouses/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:inventory.warehouses.delete"
  ]
 },
 {
  "method": "GET",
  "path": "/api/v1/warehouses/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:inventory.warehouses.view"
  ]
 },
 {
  "method": "PUT",
  "path": "/api/v1/warehouses/{id}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins",
   "Handler",
   "scopedAuth",
   "actLog",
   "RequirePermission:inventory.warehouses.update"
  ]
 },
 {
  "method": "GET",
  "path": "/health",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins"
  ]
 },
 {
  "method": "POST",
  "path": "/midtrans/notifications",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins"
  ]
 },
 {
  "method": "GET",
  "path": "/ready",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins"
  ]
 },
 {
  "method": "GET",
  "path": "/uploads/{key}",
  "gates": [
   "RequestID",
   "Logging",
   "Recovery",
   "SecurityHeaders",
   "BodyLimit:cfg.BodySizeLimitBytes",
   "CORS:cfg.CORSOrigins"
  ]
 }
]