{"title":"WGO Management API","summary":{"totalEndpoints":145,"anonymousEndpoints":11,"readEndpoints":52,"writeEndpoints":73,"adminEndpoints":9},"policies":["management.read","management.write","management.admin"],"endpoints":[{"method":"GET","pattern":"/api/admin/users","requiredPolicy":"management.admin","description":"Lists local application users.","group":"admin"},{"method":"POST","pattern":"/api/admin/users","requiredPolicy":"management.admin","description":"Registers one local application user and optionally sends a password setup email.","group":"admin"},{"method":"GET","pattern":"/api/admin/users/{id}","requiredPolicy":"management.admin","description":"Reads one local application user.","group":"admin"},{"method":"PATCH","pattern":"/api/admin/users/{id}","requiredPolicy":"management.admin","description":"Updates one local application user status, display name or roles.","group":"admin"},{"method":"POST","pattern":"/api/admin/users/{id}/reset-password","requiredPolicy":"management.admin","description":"Resets one local application user password directly.","group":"admin"},{"method":"POST","pattern":"/api/admin/users/{id}/send-password-reset-email","requiredPolicy":"management.admin","description":"Sends one local application user a password reset email with validation token link.","group":"admin"},{"method":"GET","pattern":"/api/auth/entra-id","requiredPolicy":"management.read","description":"Returns expected Entra ID policy names.","group":"auth"},{"method":"POST","pattern":"/api/auth/login","requiredPolicy":"anonymous","description":"Authenticates one local user and returns access and refresh tokens.","group":"auth"},{"method":"POST","pattern":"/api/auth/logout","requiredPolicy":"anonymous","description":"Revokes one local refresh token.","group":"auth"},{"method":"GET","pattern":"/api/auth/me","requiredPolicy":"management.read","description":"Returns the current authenticated local user.","group":"auth"},{"method":"POST","pattern":"/api/auth/refresh","requiredPolicy":"anonymous","description":"Rotates one local refresh token and returns a new session.","group":"auth"},{"method":"POST","pattern":"/api/auth/register","requiredPolicy":"anonymous","description":"Registers one local self-service user with the minimum local role and sends a password setup email.","group":"auth"},{"method":"POST","pattern":"/api/auth/reset-password/complete","requiredPolicy":"anonymous","description":"Completes a local password reset using the emailed validation token.","group":"auth"},{"method":"GET","pattern":"/api/billing/accounts","requiredPolicy":"management.read","description":"Lists local billing accounts.","group":"billing"},{"method":"POST","pattern":"/api/billing/accounts","requiredPolicy":"management.write","description":"Creates one local billing account.","group":"billing"},{"method":"GET","pattern":"/api/billing/accounts/{id}","requiredPolicy":"management.read","description":"Reads one local billing account.","group":"billing"},{"method":"PATCH","pattern":"/api/billing/accounts/{id}","requiredPolicy":"management.write","description":"Updates one local billing account.","group":"billing"},{"method":"GET","pattern":"/api/billing/companies","requiredPolicy":"management.read","description":"Lists local billing company profiles.","group":"billing"},{"method":"POST","pattern":"/api/billing/companies","requiredPolicy":"management.write","description":"Creates one local billing company profile.","group":"billing"},{"method":"GET","pattern":"/api/billing/companies/default","requiredPolicy":"management.read","description":"Reads the default local billing company profile.","group":"billing"},{"method":"GET","pattern":"/api/billing/companies/{id}","requiredPolicy":"management.read","description":"Reads one local billing company profile.","group":"billing"},{"method":"PATCH","pattern":"/api/billing/companies/{id}","requiredPolicy":"management.write","description":"Updates one local billing company profile.","group":"billing"},{"method":"POST","pattern":"/api/billing/companies/{id}/make-default","requiredPolicy":"management.write","description":"Marks one local billing company profile as default.","group":"billing"},{"method":"GET","pattern":"/api/billing/documents","requiredPolicy":"management.read","description":"Lists local billing documents.","group":"billing"},{"method":"POST","pattern":"/api/billing/documents","requiredPolicy":"management.write","description":"Creates one local draft billing document.","group":"billing"},{"method":"POST","pattern":"/api/billing/documents/{documentId}/lines","requiredPolicy":"management.write","description":"Creates one local billing document line.","group":"billing"},{"method":"POST","pattern":"/api/billing/documents/{documentId}/lines/reorder","requiredPolicy":"management.write","description":"Reorders local billing document lines.","group":"billing"},{"method":"PATCH","pattern":"/api/billing/documents/{documentId}/lines/{lineId}","requiredPolicy":"management.write","description":"Updates one local billing document line.","group":"billing"},{"method":"DELETE","pattern":"/api/billing/documents/{documentId}/lines/{lineId}","requiredPolicy":"management.write","description":"Deletes one local billing document line.","group":"billing"},{"method":"GET","pattern":"/api/billing/documents/{id}","requiredPolicy":"management.read","description":"Reads one local billing document.","group":"billing"},{"method":"PATCH","pattern":"/api/billing/documents/{id}","requiredPolicy":"management.write","description":"Updates one local draft billing document.","group":"billing"},{"method":"DELETE","pattern":"/api/billing/documents/{id}","requiredPolicy":"management.write","description":"Deletes one local draft billing document.","group":"billing"},{"method":"POST","pattern":"/api/billing/documents/{id}/cancel","requiredPolicy":"management.write","description":"Cancels one local billing document.","group":"billing"},{"method":"POST","pattern":"/api/billing/documents/{id}/deliver","requiredPolicy":"management.write","description":"Prepares, drafts or sends one local billing document using dynamic company and customer data.","group":"billing"},{"method":"GET","pattern":"/api/billing/documents/{id}/notifications","requiredPolicy":"management.read","description":"Lists local billing notifications for one document.","group":"billing"},{"method":"POST","pattern":"/api/billing/documents/{id}/notifications","requiredPolicy":"management.write","description":"Creates a local billing notification for one document.","group":"billing"},{"method":"POST","pattern":"/api/billing/documents/{id}/package","requiredPolicy":"management.write","description":"Generates a local billing document invoice and Swiss QR-bill package PDF.","group":"billing"},{"method":"POST","pattern":"/api/billing/documents/{id}/pdf","requiredPolicy":"management.write","description":"Generates a local billing document invoice PDF.","group":"billing"},{"method":"POST","pattern":"/api/billing/documents/{id}/post","requiredPolicy":"management.write","description":"Posts one local billing document.","group":"billing"},{"method":"POST","pattern":"/api/billing/documents/{id}/print","requiredPolicy":"management.write","description":"Prepares and tracks a local billing document print workflow.","group":"billing"},{"method":"POST","pattern":"/api/billing/documents/{id}/print-package","requiredPolicy":"management.write","description":"Prepares a local billing document print package.","group":"billing"},{"method":"POST","pattern":"/api/billing/documents/{id}/register-payment","requiredPolicy":"management.write","description":"Registers and allocates a payment directly on one posted billing document.","group":"billing"},{"method":"POST","pattern":"/api/billing/documents/{id}/reset-to-draft","requiredPolicy":"management.write","description":"Resets one cancelled local billing document to draft.","group":"billing"},{"method":"GET","pattern":"/api/billing/fiscal-positions","requiredPolicy":"management.read","description":"Lists local billing fiscal positions.","group":"billing"},{"method":"POST","pattern":"/api/billing/fiscal-positions","requiredPolicy":"management.write","description":"Creates one local billing fiscal position.","group":"billing"},{"method":"GET","pattern":"/api/billing/fiscal-positions/{id}","requiredPolicy":"management.read","description":"Reads one local billing fiscal position.","group":"billing"},{"method":"PATCH","pattern":"/api/billing/fiscal-positions/{id}","requiredPolicy":"management.write","description":"Updates one local billing fiscal position.","group":"billing"},{"method":"POST","pattern":"/api/billing/import/odoo/configuration","requiredPolicy":"management.write","description":"Imports Odoo accounting configuration into local billing configuration tables.","group":"billing"},{"method":"POST","pattern":"/api/billing/import/odoo/documents","requiredPolicy":"management.write","description":"Imports Odoo accounting moves and invoice lines into local billing documents.","group":"billing"},{"method":"POST","pattern":"/api/billing/import/odoo/payments","requiredPolicy":"management.write","description":"Imports Odoo payments and matched document relationships into local billing payments.","group":"billing"},{"method":"POST","pattern":"/api/billing/import/odoo/reconcile-relationships","requiredPolicy":"management.write","description":"Reconciles Odoo billing import relationships to local entity references when possible.","group":"billing"},{"method":"POST","pattern":"/api/billing/invoices/register","requiredPolicy":"management.write","description":"Registers one local invoice from catalog products and optionally posts/delivers it.","group":"billing"},{"method":"GET","pattern":"/api/billing/journals","requiredPolicy":"management.read","description":"Lists local billing journals.","group":"billing"},{"method":"POST","pattern":"/api/billing/journals","requiredPolicy":"management.write","description":"Creates one local billing journal.","group":"billing"},{"method":"GET","pattern":"/api/billing/journals/{id}","requiredPolicy":"management.read","description":"Reads one local billing journal.","group":"billing"},{"method":"PATCH","pattern":"/api/billing/journals/{id}","requiredPolicy":"management.write","description":"Updates one local billing journal.","group":"billing"},{"method":"POST","pattern":"/api/billing/notifications/{id}/confirm-sent","requiredPolicy":"management.write","description":"Confirms one local billing notification as sent.","group":"billing"},{"method":"POST","pattern":"/api/billing/notifications/{id}/create-email-draft","requiredPolicy":"management.write","description":"Creates a mail draft for one local billing notification through the configured mail provider.","group":"billing"},{"method":"POST","pattern":"/api/billing/notifications/{id}/prepare-email","requiredPolicy":"management.write","description":"Prepares local billing notification email HTML and attachment package.","group":"billing"},{"method":"POST","pattern":"/api/billing/notifications/{id}/retry","requiredPolicy":"management.write","description":"Retries one failed local billing notification.","group":"billing"},{"method":"POST","pattern":"/api/billing/notifications/{id}/send-email","requiredPolicy":"management.write","description":"Sends one local billing notification email through the configured mail provider.","group":"billing"},{"method":"GET","pattern":"/api/billing/payment-terms","requiredPolicy":"management.read","description":"Lists local billing payment terms.","group":"billing"},{"method":"POST","pattern":"/api/billing/payment-terms","requiredPolicy":"management.write","description":"Creates one local billing payment term.","group":"billing"},{"method":"GET","pattern":"/api/billing/payment-terms/{id}","requiredPolicy":"management.read","description":"Reads one local billing payment term.","group":"billing"},{"method":"PATCH","pattern":"/api/billing/payment-terms/{id}","requiredPolicy":"management.write","description":"Updates one local billing payment term.","group":"billing"},{"method":"GET","pattern":"/api/billing/payments","requiredPolicy":"management.read","description":"Lists local billing payments.","group":"billing"},{"method":"POST","pattern":"/api/billing/payments","requiredPolicy":"management.write","description":"Creates one local billing payment.","group":"billing"},{"method":"GET","pattern":"/api/billing/payments/{id}","requiredPolicy":"management.read","description":"Reads one local billing payment.","group":"billing"},{"method":"PATCH","pattern":"/api/billing/payments/{id}","requiredPolicy":"management.write","description":"Updates one local draft billing payment.","group":"billing"},{"method":"POST","pattern":"/api/billing/payments/{id}/allocate","requiredPolicy":"management.write","description":"Allocates one local billing payment to a document.","group":"billing"},{"method":"DELETE","pattern":"/api/billing/payments/{id}/allocations/{allocationId}","requiredPolicy":"management.write","description":"Removes one local billing payment allocation.","group":"billing"},{"method":"POST","pattern":"/api/billing/print/batch","requiredPolicy":"management.write","description":"Prepares and tracks print packages for a filtered batch of billing documents.","group":"billing"},{"method":"GET","pattern":"/api/billing/reports/aged-payable","requiredPolicy":"management.read","description":"Reports open vendor bills by aging bucket.","group":"billing"},{"method":"GET","pattern":"/api/billing/reports/aged-receivable","requiredPolicy":"management.read","description":"Reports open customer invoices by aging bucket.","group":"billing"},{"method":"GET","pattern":"/api/billing/reports/open-documents","requiredPolicy":"management.read","description":"Reports open local billing documents.","group":"billing"},{"method":"GET","pattern":"/api/billing/reports/revenue-by-customer","requiredPolicy":"management.read","description":"Reports posted customer invoice revenue by customer.","group":"billing"},{"method":"GET","pattern":"/api/billing/reports/revenue-by-product","requiredPolicy":"management.read","description":"Reports posted customer invoice revenue by product.","group":"billing"},{"method":"GET","pattern":"/api/billing/taxes","requiredPolicy":"management.read","description":"Lists local billing taxes.","group":"billing"},{"method":"POST","pattern":"/api/billing/taxes","requiredPolicy":"management.write","description":"Creates one local billing tax.","group":"billing"},{"method":"GET","pattern":"/api/billing/taxes/{id}","requiredPolicy":"management.read","description":"Reads one local billing tax.","group":"billing"},{"method":"PATCH","pattern":"/api/billing/taxes/{id}","requiredPolicy":"management.write","description":"Updates one local billing tax.","group":"billing"},{"method":"GET","pattern":"/api/billing-items","requiredPolicy":"management.read","description":"Lists local billing items.","group":"billing-items"},{"method":"POST","pattern":"/api/billing-items","requiredPolicy":"management.write","description":"Creates one local billing item.","group":"billing-items"},{"method":"PATCH","pattern":"/api/billing-items/{id}","requiredPolicy":"management.write","description":"Updates one local billing item.","group":"billing-items"},{"method":"DELETE","pattern":"/api/billing-items/{id}","requiredPolicy":"management.admin","description":"Deletes one local billing item when it is not billed.","group":"billing-items"},{"method":"POST","pattern":"/api/billing-items/{id}/mark-billed","requiredPolicy":"management.write","description":"Marks one local billing item as billed.","group":"billing-items"},{"method":"GET","pattern":"/api/docs","requiredPolicy":"anonymous","description":"Returns an HTML API documentation page.","group":"docs"},{"method":"GET","pattern":"/api/docs/endpoints","requiredPolicy":"anonymous","description":"Returns the API endpoint documentation model as JSON.","group":"docs"},{"method":"POST","pattern":"/api/documents/invoices/package","requiredPolicy":"management.write","description":"Generates an invoice and Swiss QR-bill package PDF.","group":"documents"},{"method":"POST","pattern":"/api/documents/invoices/pdf","requiredPolicy":"management.write","description":"Generates an invoice PDF.","group":"documents"},{"method":"POST","pattern":"/api/documents/invoices/qr-bill","requiredPolicy":"management.write","description":"Generates a Swiss QR-bill PDF.","group":"documents"},{"method":"POST","pattern":"/api/documents/invoices/template-preview","requiredPolicy":"management.write","description":"Generates an invoice template preview PDF.","group":"documents"},{"method":"POST","pattern":"/api/documents/pdf/merge","requiredPolicy":"management.write","description":"Merges PDF files.","group":"documents"},{"method":"POST","pattern":"/api/documents/pdf/ocr","requiredPolicy":"management.read","description":"Extracts embedded text from PDF files.","group":"documents"},{"method":"POST","pattern":"/api/documents/scans/apply-classification","requiredPolicy":"management.write","description":"Applies planned scan classification moves.","group":"documents"},{"method":"POST","pattern":"/api/documents/scans/classify","requiredPolicy":"management.read","description":"Classifies scanned PDF files without moving them.","group":"documents"},{"method":"POST","pattern":"/api/graph/invoices/sync-drafts","requiredPolicy":"management.write","description":"Synchronizes Graph invoice drafts to registry/Odoo state.","group":"graph"},{"method":"POST","pattern":"/api/graph/invoices/sync-sent","requiredPolicy":"management.write","description":"Synchronizes Graph sent invoice messages to registry/Odoo state.","group":"graph"},{"method":"GET","pattern":"/api/graph/licenses/skus","requiredPolicy":"management.read","description":"Lists Microsoft 365 subscribed SKUs.","group":"graph"},{"method":"GET","pattern":"/api/graph/licenses/users","requiredPolicy":"management.read","description":"Lists Microsoft 365 users with assigned license details.","group":"graph"},{"method":"PUT","pattern":"/api/graph/onedrive/files","requiredPolicy":"management.write","description":"Uploads or replaces one Microsoft OneDrive file.","group":"graph"},{"method":"POST","pattern":"/api/graph/onedrive/folders","requiredPolicy":"management.write","description":"Creates one Microsoft OneDrive folder.","group":"graph"},{"method":"GET","pattern":"/api/graph/onedrive/items","requiredPolicy":"management.read","description":"Lists Microsoft OneDrive files and folders.","group":"graph"},{"method":"GET","pattern":"/api/graph/onedrive/items/{itemId}","requiredPolicy":"management.read","description":"Reads one Microsoft OneDrive driveItem.","group":"graph"},{"method":"PATCH","pattern":"/api/graph/onedrive/items/{itemId}","requiredPolicy":"management.write","description":"Renames or moves one Microsoft OneDrive driveItem.","group":"graph"},{"method":"DELETE","pattern":"/api/graph/onedrive/items/{itemId}","requiredPolicy":"management.admin","description":"Moves one Microsoft OneDrive driveItem to the recycle bin.","group":"graph"},{"method":"GET","pattern":"/api/graph/onedrive/items/{itemId}/content","requiredPolicy":"management.read","description":"Downloads one Microsoft OneDrive file as base64 or to a local output path.","group":"graph"},{"method":"GET","pattern":"/api/graph/onedrive/search","requiredPolicy":"management.read","description":"Searches Microsoft OneDrive files and folders.","group":"graph"},{"method":"GET","pattern":"/health","requiredPolicy":"anonymous","description":"Returns API health.","group":"health"},{"method":"POST","pattern":"/api/imports/odoo/reconcile-relationships","requiredPolicy":"management.write","description":"Reconciles saved Odoo relationships to local entity references when possible.","group":"imports"},{"method":"GET","pattern":"/api/imports/odoo/relationships","requiredPolicy":"management.read","description":"Lists Odoo external relationships saved during local imports.","group":"imports"},{"method":"GET","pattern":"/api/infomaniak/calendar-events","requiredPolicy":"management.read","description":"Lists Infomaniak calendar events with flexible date filters.","group":"infomaniak"},{"method":"GET","pattern":"/api/infomaniak/events","requiredPolicy":"management.read","description":"Lists Infomaniak events.","group":"infomaniak"},{"method":"GET","pattern":"/api/infomaniak/events/{eventId}","requiredPolicy":"management.read","description":"Reads one Infomaniak event.","group":"infomaniak"},{"method":"GET","pattern":"/api/infomaniak/mailboxes","requiredPolicy":"management.read","description":"Lists Infomaniak mailboxes.","group":"infomaniak"},{"method":"GET","pattern":"/api/infomaniak/mailing-lists","requiredPolicy":"management.read","description":"Lists Infomaniak mailing lists.","group":"infomaniak"},{"method":"POST","pattern":"/api/invoices/archive/status-sync","requiredPolicy":"management.write","description":"Synchronizes local invoice archive status from registry CSV.","group":"invoices"},{"method":"POST","pattern":"/api/invoices/draft-package","requiredPolicy":"management.write","description":"Prepares a local Odoo invoice draft package.","group":"invoices"},{"method":"POST","pattern":"/api/invoices/email/confirm","requiredPolicy":"management.write","description":"Confirms one invoice email in the registry.","group":"invoices"},{"method":"POST","pattern":"/api/invoices/email/prepare","requiredPolicy":"management.write","description":"Prepares one invoice email package.","group":"invoices"},{"method":"POST","pattern":"/api/invoices/email/send-pending","requiredPolicy":"management.write","description":"Sends pending invoice email packages.","group":"invoices"},{"method":"POST","pattern":"/api/invoices/mark-paid","requiredPolicy":"management.write","description":"Marks one invoice as paid in the registry.","group":"invoices"},{"method":"POST","pattern":"/api/invoices/migrate","requiredPolicy":"management.admin","description":"Migrates legacy Markdown invoices to invoice JSON.","group":"invoices"},{"method":"GET","pattern":"/api/invoices/{number}/sent-verification","requiredPolicy":"management.read","description":"Verifies whether an invoice appears in sent mail.","group":"invoices"},{"method":"POST","pattern":"/api/mail/send","requiredPolicy":"management.write","description":"Creates or sends an email through the configured mail sender.","group":"mail"},{"method":"GET","pattern":"/api/mcp/publication","requiredPolicy":"management.read","description":"Returns MCP public publication readiness details.","group":"mcp"},{"method":"POST","pattern":"/mcp","requiredPolicy":"management.read","description":"Serves the remote MCP JSON-RPC endpoint for ChatGPT and Codex.","group":"mcp"},{"method":"POST","pattern":"/api/quotes/confirm","requiredPolicy":"management.write","description":"Confirms one quote in the registry.","group":"quotes"},{"method":"POST","pattern":"/api/quotes/convert-to-invoice","requiredPolicy":"management.write","description":"Converts a quote payload into an invoice draft JSON.","group":"quotes"},{"method":"POST","pattern":"/api/quotes/prepare","requiredPolicy":"management.write","description":"Prepares one quote email package.","group":"quotes"},{"method":"POST","pattern":"/api/quotes/registry/init","requiredPolicy":"management.write","description":"Initializes the local quote registry.","group":"quotes"},{"method":"POST","pattern":"/api/quotes/send-pending","requiredPolicy":"management.write","description":"Sends pending quote email packages.","group":"quotes"},{"method":"GET","pattern":"/","requiredPolicy":"anonymous","description":"Redirects to the interactive API documentation page.","group":"root"},{"method":"GET","pattern":"/api/services","requiredPolicy":"management.read","description":"Lists available management services.","group":"services"},{"method":"GET","pattern":"/api/services/{name}","requiredPolicy":"management.read","description":"Returns one management service descriptor.","group":"services"},{"method":"GET","pattern":"/api/services/{name}/plan","requiredPolicy":"management.read","description":"Returns the implementation plan for one service.","group":"services"},{"method":"GET","pattern":"/api/settings","requiredPolicy":"management.read","description":"Returns redacted management settings loaded from Core user-secrets, environment and local config files.","group":"settings"},{"method":"POST","pattern":"/api/sync/entra-odoo/email-report","requiredPolicy":"management.write","description":"Creates and emails an Entra/Odoo synchronization report.","group":"sync"},{"method":"POST","pattern":"/api/sync/entra-odoo/plan","requiredPolicy":"management.read","description":"Builds a read-only Entra/Odoo synchronization plan.","group":"sync"},{"method":"POST","pattern":"/api/sync/entra-odoo/report","requiredPolicy":"management.read","description":"Creates a read-only Entra/Odoo synchronization report.","group":"sync"},{"method":"POST","pattern":"/api/validation/archive","requiredPolicy":"management.read","description":"Validates the local management archive.","group":"validation"},{"method":"POST","pattern":"/api/validation/customers","requiredPolicy":"management.read","description":"Validates local customer snapshots.","group":"validation"},{"method":"POST","pattern":"/api/validation/work-items","requiredPolicy":"management.read","description":"Validates local work item snapshots.","group":"validation"},{"method":"GET","pattern":"/.well-known/oauth-protected-resource","requiredPolicy":"anonymous","description":"Returns OAuth protected-resource metadata for ChatGPT MCP linking.","group":"well-known"},{"method":"GET","pattern":"/.well-known/openai-apps-challenge","requiredPolicy":"anonymous","description":"Returns the OpenAI Apps domain verification challenge token when configured.","group":"well-known"}]}