API reference
Spec: api/openapi.yaml — Ovahol API (Core Auth + Health), version 0.1.0
Operations: 543 across 375 paths, grouped into 12 tags
This page is generated from the OpenAPI document; the document, not this page, is the contract. Generate clients from api/openapi.yaml. A — in the summary column means the route exists but has only its placeholder description so far.
Authentication
Send Authorization: Bearer <token> on authenticated routes. The token is a JWT issued by POST /api/v1/core/auth/login; refresh it with POST /api/v1/core/auth/refresh. Facility-scoped routes accept X-Facility-ID from organization admins and super admins.
| Scheme | Type | Details |
|---|---|---|
bearerAuth | http | scheme bearer, format JWT |
health
| Method | Path | Summary |
|---|---|---|
| GET | /health | Health check |
auth
| Method | Path | Summary |
|---|---|---|
| POST | /api/v1/core/auth/avatar | — |
| POST | /api/v1/core/auth/change-password | Change current password |
| POST | /api/v1/core/auth/check-password-strength | Validate password quality rules |
| GET | /api/v1/core/auth/current-user | Get current authenticated user with feature entitlements |
| PATCH | /api/v1/core/auth/facility-members/{id}/deactivate | Deactivate a facility membership |
| PATCH | /api/v1/core/auth/facility-members/{id}/reactivate | Reactivate a facility membership |
| POST | /api/v1/core/auth/forgot-password | Request password reset |
| POST | /api/v1/core/auth/login | Authenticate user |
| POST | /api/v1/core/auth/logout | Logout current session |
| GET | /api/v1/core/auth/profile | Get authenticated user profile |
| PATCH | /api/v1/core/auth/profile | Update authenticated user profile |
| POST | /api/v1/core/auth/refresh | Refresh access token and rotate session |
| POST | /api/v1/core/auth/register | Register with invitation token |
| POST | /api/v1/core/auth/reset-password | Reset password with token |
| POST | /api/v1/core/auth/select-facility | Select active facility context |
| POST | /api/v1/core/auth/select-organization | Select active organization context |
| GET | /api/v1/core/auth/sessions | List active sessions |
| DELETE | /api/v1/core/auth/sessions/others | Revoke all other sessions except current one |
| DELETE | /api/v1/core/auth/sessions/{id} | Revoke a specific session |
| POST | /api/v1/core/auth/signup | Create account and bootstrap organization/facility |
| POST | /api/v1/core/auth/signup-lookup | Check whether email already exists during signup |
core
| Method | Path | Summary |
|---|---|---|
| POST | /api/v1/core/admin/facility-import/{facility_id} | — |
| POST | /api/v1/core/admin/facility-import/{facility_id}/normalize | — |
| POST | /api/v1/core/admin/facility-import/{facility_id}/normalize-file | — |
| POST | /api/v1/core/admin/facility-import/{facility_id}/resolve-references | — |
| GET | /api/v1/core/admin/interchange/facilities/{facility_id}/catalog/names | — |
| POST | /api/v1/core/admin/interchange/facilities/{facility_id}/convert | — |
| GET | /api/v1/core/admin/interchange/facilities/{facility_id}/export | — |
| POST | /api/v1/core/admin/interchange/facilities/{facility_id}/import | — |
| POST | /api/v1/core/admin/interchange/facilities/{facility_id}/validate | — |
| GET | /api/v1/core/admin/platform/metrics | Platform observability snapshot |
| POST | /api/v1/core/billing/admin/cleanup-plans | — |
| GET | /api/v1/core/billing/admin/invoices | — |
| PATCH | /api/v1/core/billing/admin/invoices/{id}/paid | — |
| POST | /api/v1/core/billing/admin/orgs/{org_id}/provision | — |
| POST | /api/v1/core/billing/admin/payments/replay | — |
| GET | /api/v1/core/billing/admin/plans | — |
| POST | /api/v1/core/billing/admin/plans | — |
| PATCH | /api/v1/core/billing/admin/plans/{code} | — |
| DELETE | /api/v1/core/billing/admin/plans/{code} | Archive a billing plan and disable its provider plan when applicable |
| POST | /api/v1/core/billing/admin/plans/{code}/status | — |
| GET | /api/v1/core/billing/admin/reconciliation | Reconcile billing subscriptions |
| GET | /api/v1/core/billing/admin/subscriptions | — |
| GET | /api/v1/core/billing/admin/webhook-events | Retrieve billing webhook events for admin diagnostics |
| POST | /api/v1/core/billing/initialize | — |
| GET | /api/v1/core/billing/invoices | — |
| GET | /api/v1/core/billing/overview | — |
| GET | /api/v1/core/billing/plans | — |
| GET | /api/v1/core/billing/quota | — |
| DELETE | /api/v1/core/billing/subscription | — |
| POST | /api/v1/core/billing/subscription/change | — |
| GET | /api/v1/core/billing/subscription/details | — |
| GET | /api/v1/core/billing/subscription/manage | — |
| POST | /api/v1/core/billing/subscription/reactivate | — |
| GET | /api/v1/core/billing/verify/{reference} | — |
| GET | /api/v1/core/brands | — |
| POST | /api/v1/core/brands | — |
| POST | /api/v1/core/brands/import | — |
| GET | /api/v1/core/brands/{id} | — |
| PATCH | /api/v1/core/brands/{id} | — |
| DELETE | /api/v1/core/brands/{id} | — |
| GET | /api/v1/core/devices | — |
| POST | /api/v1/core/devices | — |
| POST | /api/v1/core/devices/import | — |
| GET | /api/v1/core/devices/{id} | — |
| PATCH | /api/v1/core/devices/{id} | — |
| DELETE | /api/v1/core/devices/{id} | — |
| GET | /api/v1/core/dictionary-recommendations | — |
| POST | /api/v1/core/dictionary-recommendations | — |
| GET | /api/v1/core/dictionary-recommendations/mine | — |
| PATCH | /api/v1/core/dictionary-recommendations/{id}/payload | — |
| POST | /api/v1/core/dictionary-recommendations/{id}/review | — |
| GET | /api/v1/core/exchange-rates | — |
| GET | /api/v1/core/facilities | — |
| POST | /api/v1/core/facilities | — |
| GET | /api/v1/core/facilities/organization/{organization_id} | — |
| GET | /api/v1/core/facilities/{id} | — |
| PATCH | /api/v1/core/facilities/{id} | — |
| DELETE | /api/v1/core/facilities/{id} | — |
| POST | /api/v1/core/facilities/{id}/logo | — |
| GET | /api/v1/core/facilities/{id}/members | — |
| PATCH | /api/v1/core/facilities/{id}/members/{membershipId}/role | — |
| PATCH | /api/v1/core/facilities/{id}/primary | — |
| GET | /api/v1/core/invitations | — |
| POST | /api/v1/core/invitations | — |
| POST | /api/v1/core/invitations/accept | — |
| POST | /api/v1/core/invitations/revoke/{id} | — |
| GET | /api/v1/core/invitations/{token} | — |
| GET | /api/v1/core/manufacturers | — |
| POST | /api/v1/core/manufacturers | — |
| POST | /api/v1/core/manufacturers/import | — |
| GET | /api/v1/core/manufacturers/{id} | — |
| PATCH | /api/v1/core/manufacturers/{id} | — |
| DELETE | /api/v1/core/manufacturers/{id} | — |
| GET | /api/v1/core/models | — |
| POST | /api/v1/core/models | — |
| POST | /api/v1/core/models/ensure-unknown | — |
| POST | /api/v1/core/models/import | — |
| GET | /api/v1/core/models/{id} | — |
| PATCH | /api/v1/core/models/{id} | — |
| DELETE | /api/v1/core/models/{id} | — |
| POST | /api/v1/core/models/{id}/image | — |
| GET | /api/v1/core/notifications | — |
| POST | /api/v1/core/notifications/read-all | — |
| GET | /api/v1/core/notifications/unread-count | — |
| POST | /api/v1/core/notifications/{id}/read | — |
| GET | /api/v1/core/org/device-transfers | — |
| POST | /api/v1/core/org/device-transfers | — |
| GET | /api/v1/core/org/device-transfers/{id} | — |
| POST | /api/v1/core/org/device-transfers/{id}/cancel | — |
| POST | /api/v1/core/org/device-transfers/{id}/complete | — |
| POST | /api/v1/core/org/device-transfers/{id}/decide | — |
| POST | /api/v1/core/org/device-transfers/{id}/release | — |
| GET | /api/v1/core/org/retirement-disposal | Get organization retirement and disposal report |
| GET | /api/v1/core/org/retirement-disposal/export | Export organization retirement and disposal CSV |
| GET | /api/v1/core/org/utilization | Get organization utilization report |
| GET | /api/v1/core/org/utilization/export | Export organization utilization report CSV |
| GET | /api/v1/core/organizations | — |
| POST | /api/v1/core/organizations | — |
| GET | /api/v1/core/organizations/dashboard | — |
| GET | /api/v1/core/organizations/stats | — |
| GET | /api/v1/core/organizations/{id} | — |
| PATCH | /api/v1/core/organizations/{id} | — |
| DELETE | /api/v1/core/organizations/{id} | — |
| POST | /api/v1/core/organizations/{id}/logo | — |
| GET | /api/v1/core/plans | — |
| POST | /api/v1/core/units/calculate | — |
| POST | /api/v1/core/units/convert | — |
| GET | /api/v1/core/units/formulas | — |
| GET | /api/v1/core/units/quantities | — |
| POST | /api/v1/core/webhooks/paystack | — |
| POST | /api/v1/core/webhooks/{provider} | — |
counterparties
| Method | Path | Summary |
|---|---|---|
| GET | /api/v1/core/counterparties/organizations/{organization_id}/donor-organizations | List donor organizations for an organization |
| POST | /api/v1/core/counterparties/organizations/{organization_id}/donor-organizations | Create donor organization for an organization |
| GET | /api/v1/core/counterparties/organizations/{organization_id}/donor-organizations/{id} | Get donor organization for an organization |
| PATCH | /api/v1/core/counterparties/organizations/{organization_id}/donor-organizations/{id} | Update donor organization for an organization |
| DELETE | /api/v1/core/counterparties/organizations/{organization_id}/donor-organizations/{id} | Delete donor organization |
| GET | /api/v1/core/counterparties/organizations/{organization_id}/donor-projects | List donor projects for an organization |
| POST | /api/v1/core/counterparties/organizations/{organization_id}/donor-projects | Create donor project for an organization |
| GET | /api/v1/core/counterparties/organizations/{organization_id}/donor-projects/{id} | Get donor project for an organization |
| PATCH | /api/v1/core/counterparties/organizations/{organization_id}/donor-projects/{id} | Update donor project for an organization |
| DELETE | /api/v1/core/counterparties/organizations/{organization_id}/donor-projects/{id} | Delete donor project |
| GET | /api/v1/core/counterparties/organizations/{organization_id}/vendors | List vendors for an organization |
| POST | /api/v1/core/counterparties/organizations/{organization_id}/vendors | Create vendor for an organization |
| GET | /api/v1/core/counterparties/organizations/{organization_id}/vendors/{id} | Get vendor for an organization |
| PATCH | /api/v1/core/counterparties/organizations/{organization_id}/vendors/{id} | Update vendor for an organization |
| DELETE | /api/v1/core/counterparties/organizations/{organization_id}/vendors/{id} | Delete vendor |
device-records
| Method | Path | Summary |
|---|---|---|
| GET | /api/v1/core/org/device-records | List device records across the organization |
| GET | /api/v1/core/org/device-records/export | Export organization device records as CSV |
| GET | /api/v1/core/org/device-records/{facility_id}/{id} | Get an organization device record |
| GET | /api/v1/tenant/device-records | List facility device records |
| POST | /api/v1/tenant/device-records | Create a device record |
| GET | /api/v1/tenant/device-records/count | Device record count |
| GET | /api/v1/tenant/device-records/export | Export the device lifecycle |
| POST | /api/v1/tenant/device-records/import | Import device records from CSV |
| POST | /api/v1/tenant/device-records/import/provision-model | Provision a catalog model for an unmatched import name |
| POST | /api/v1/tenant/device-records/import/validate | Validate a device-record CSV import |
| POST | /api/v1/tenant/device-records/resolve-models | Resolve placeholder models in bulk |
| GET | /api/v1/tenant/device-records/stats/categories | Device record count by category |
| GET | /api/v1/tenant/device-records/stats/functions | Device record count by function |
| GET | /api/v1/tenant/device-records/stats/inventory-summary | Inventory summary |
| GET | /api/v1/tenant/device-records/stats/non-operational-count | Non-operational device count |
| GET | /api/v1/tenant/device-records/stats/operational-availability | Operational availability |
| GET | /api/v1/tenant/device-records/stats/status | Device record count by status |
| GET | /api/v1/tenant/device-records/stats/variety-index | Device variety index |
| GET | /api/v1/tenant/device-records/stats/variety-offenders | Devices with excess model variety |
| GET | /api/v1/tenant/device-records/{id} | Get a device record |
| PATCH | /api/v1/tenant/device-records/{id} | Update a device record |
| DELETE | /api/v1/tenant/device-records/{id} | Delete a device record |
| GET | /api/v1/tenant/device-records/{id}/images | List device images |
| POST | /api/v1/tenant/device-records/{id}/images | Upload a device image |
| GET | /api/v1/tenant/device-records/{id}/images/primary | Get the primary device image |
| DELETE | /api/v1/tenant/device-records/{id}/images/{imageID} | Delete a device image |
| PATCH | /api/v1/tenant/device-records/{id}/images/{imageID}/primary | Set the primary device image |
| GET | /api/v1/tenant/device-records/{id}/parts-donors | List parts donors |
| POST | /api/v1/tenant/device-records/{id}/reactivate | Reactivate a Standby/Spare device record |
| POST | /api/v1/tenant/device-records/{id}/resolve-model | Resolve a placeholder model |
| POST | /api/v1/tenant/device-records/{id}/standby | Move a device record to Standby/Spare |
| POST | /api/v1/tenant/device-records/{id}/usage-logs/batch | Record device usage in bulk |
| DELETE | /api/v1/tenant/device-records/{id}/usage-logs/{log_id} | Delete a device usage log |
fault-reports
| Method | Path | Summary |
|---|---|---|
| GET | /api/v1/tenant/fault-reports | List fault reports |
| POST | /api/v1/tenant/fault-reports | Report a device fault |
| GET | /api/v1/tenant/fault-reports/export | Export fault reports as CSV |
| GET | /api/v1/tenant/fault-reports/failure-trends | Recurring failure trends |
| GET | /api/v1/tenant/fault-reports/severity-rules | Fault severity to SLA/priority rules |
| GET | /api/v1/tenant/fault-reports/stats | Fault report statistics |
| GET | /api/v1/tenant/fault-reports/{id} | Get a fault report |
| GET | /api/v1/tenant/fault-reports/{id}/activities | List fault report activity |
| POST | /api/v1/tenant/fault-reports/{id}/confirm-resolution | Confirm a fault resolution |
| POST | /api/v1/tenant/fault-reports/{id}/convert-to-work-order | Convert a fault report to a work order |
| POST | /api/v1/tenant/fault-reports/{id}/reject | Reject a fault report |
| POST | /api/v1/tenant/fault-reports/{id}/reopen | Reopen a fault report |
| POST | /api/v1/tenant/fault-reports/{id}/resolve-no-wo | Resolve a fault report without a work order |
| POST | /api/v1/tenant/fault-reports/{id}/triage | Triage a fault report |
governance
| Method | Path | Summary |
|---|---|---|
| GET | /api/v1/core/governance/facilities/{id}/approval-policies | List facility approval policies |
| PATCH | /api/v1/core/governance/facilities/{id}/approval-policies/{event_type} | Update facility approval policy |
| GET | /api/v1/core/governance/facilities/{id}/capabilities | List facility governance capabilities |
| PATCH | /api/v1/core/governance/facilities/{id}/capabilities/{action_code}/{role_code} | Update facility governance capability |
| GET | /api/v1/core/governance/facilities/{id}/policies | List facility policies |
| POST | /api/v1/core/governance/facilities/{id}/policies | Create facility policy |
| GET | /api/v1/core/governance/facilities/{id}/policies/{policy_id} | Get facility policy |
| PATCH | /api/v1/core/governance/facilities/{id}/policies/{policy_id} | Update facility policy |
| GET | /api/v1/core/governance/facilities/{id}/policies/{policy_id}/versions | List facility policy versions |
| POST | /api/v1/core/governance/facilities/{id}/policies/{policy_id}/versions | Create facility policy version |
| GET | /api/v1/core/governance/facilities/{id}/profile | Get facility governance profile |
| PATCH | /api/v1/core/governance/facilities/{id}/profile | Update facility governance profile |
| GET | /api/v1/core/governance/organizations/{id}/approval-policies | List organization approval policies |
| PATCH | /api/v1/core/governance/organizations/{id}/approval-policies/{event_type} | Update organization approval policy |
| GET | /api/v1/core/governance/organizations/{id}/capabilities | List organization governance capabilities |
| PATCH | /api/v1/core/governance/organizations/{id}/capabilities/{action_code}/{role_code} | Update organization governance capability |
| GET | /api/v1/core/governance/organizations/{id}/policies | List organization policies |
| POST | /api/v1/core/governance/organizations/{id}/policies | Create organization policy |
| GET | /api/v1/core/governance/organizations/{id}/policies/{policy_id} | Get organization policy |
| PATCH | /api/v1/core/governance/organizations/{id}/policies/{policy_id} | Update organization policy |
| GET | /api/v1/core/governance/organizations/{id}/policies/{policy_id}/versions | List organization policy versions |
| POST | /api/v1/core/governance/organizations/{id}/policies/{policy_id}/versions | Create organization policy version |
| GET | /api/v1/core/governance/organizations/{id}/profile | Get organization governance profile |
| PATCH | /api/v1/core/governance/organizations/{id}/profile | Update organization governance profile |
interchange
| Method | Path | Summary |
|---|---|---|
| GET | /api/v1/tenant/interchange/catalog/names | List catalog names for match correction |
| POST | /api/v1/tenant/interchange/convert | Stage foreign rows as a candidate interchange bundle |
| GET | /api/v1/tenant/interchange/export | Export the current facility as one interchange bundle |
| POST | /api/v1/tenant/interchange/import | Import an interchange bundle into the facility |
| POST | /api/v1/tenant/interchange/validate | Validate a bundle without importing it |
lookup
| Method | Path | Summary |
|---|---|---|
| GET | /api/v1/lookup/applied-part-types | — |
| POST | /api/v1/lookup/applied-part-types | — |
| GET | /api/v1/lookup/applied-part-types/{id} | — |
| PUT | /api/v1/lookup/applied-part-types/{id} | — |
| DELETE | /api/v1/lookup/applied-part-types/{id} | — |
| GET | /api/v1/lookup/backup-power-sources | — |
| POST | /api/v1/lookup/backup-power-sources | — |
| GET | /api/v1/lookup/backup-power-sources/{id} | — |
| PUT | /api/v1/lookup/backup-power-sources/{id} | — |
| DELETE | /api/v1/lookup/backup-power-sources/{id} | — |
| GET | /api/v1/lookup/countries | — |
| GET | /api/v1/lookup/device-application-risks | — |
| POST | /api/v1/lookup/device-application-risks | — |
| GET | /api/v1/lookup/device-application-risks/{id} | — |
| PUT | /api/v1/lookup/device-application-risks/{id} | — |
| DELETE | /api/v1/lookup/device-application-risks/{id} | — |
| GET | /api/v1/lookup/device-categories | — |
| POST | /api/v1/lookup/device-categories | — |
| GET | /api/v1/lookup/device-categories/{id} | — |
| PUT | /api/v1/lookup/device-categories/{id} | — |
| DELETE | /api/v1/lookup/device-categories/{id} | — |
| GET | /api/v1/lookup/device-functions | — |
| POST | /api/v1/lookup/device-functions | — |
| GET | /api/v1/lookup/device-functions/{id} | — |
| PUT | /api/v1/lookup/device-functions/{id} | — |
| DELETE | /api/v1/lookup/device-functions/{id} | — |
| GET | /api/v1/lookup/device-types | — |
| POST | /api/v1/lookup/device-types | — |
| GET | /api/v1/lookup/device-types/{id} | — |
| PUT | /api/v1/lookup/device-types/{id} | — |
| DELETE | /api/v1/lookup/device-types/{id} | — |
| GET | /api/v1/lookup/electrical-safety-classes | — |
| POST | /api/v1/lookup/electrical-safety-classes | — |
| GET | /api/v1/lookup/electrical-safety-classes/{id} | — |
| PUT | /api/v1/lookup/electrical-safety-classes/{id} | — |
| DELETE | /api/v1/lookup/electrical-safety-classes/{id} | — |
| GET | /api/v1/lookup/failure-codes | — |
| POST | /api/v1/lookup/failure-codes | — |
| GET | /api/v1/lookup/failure-codes/{id} | — |
| GET | /api/v1/lookup/location-categories | — |
| POST | /api/v1/lookup/location-categories | — |
| GET | /api/v1/lookup/location-categories/{id} | — |
| PUT | /api/v1/lookup/location-categories/{id} | — |
| DELETE | /api/v1/lookup/location-categories/{id} | — |
| GET | /api/v1/lookup/organization-types | — |
| POST | /api/v1/lookup/organization-types | — |
| GET | /api/v1/lookup/organization-types/{id} | — |
| PUT | /api/v1/lookup/organization-types/{id} | — |
| DELETE | /api/v1/lookup/organization-types/{id} | — |
| GET | /api/v1/lookup/power-sources | — |
| POST | /api/v1/lookup/power-sources | — |
| GET | /api/v1/lookup/power-sources/{id} | — |
| PUT | /api/v1/lookup/power-sources/{id} | — |
| DELETE | /api/v1/lookup/power-sources/{id} | — |
| GET | /api/v1/lookup/regulatory-class-eu | — |
| POST | /api/v1/lookup/regulatory-class-eu | — |
| GET | /api/v1/lookup/regulatory-class-eu/{id} | — |
| PUT | /api/v1/lookup/regulatory-class-eu/{id} | — |
| DELETE | /api/v1/lookup/regulatory-class-eu/{id} | — |
| GET | /api/v1/lookup/regulatory-class-fda | — |
| POST | /api/v1/lookup/regulatory-class-fda | — |
| GET | /api/v1/lookup/regulatory-class-fda/{id} | — |
| PUT | /api/v1/lookup/regulatory-class-fda/{id} | — |
| DELETE | /api/v1/lookup/regulatory-class-fda/{id} | — |
| GET | /api/v1/lookup/statuses | — |
| POST | /api/v1/lookup/statuses | — |
| GET | /api/v1/lookup/statuses/{id} | — |
| PUT | /api/v1/lookup/statuses/{id} | — |
| DELETE | /api/v1/lookup/statuses/{id} | — |
| GET | /api/v1/lookup/user-roles | — |
| POST | /api/v1/lookup/user-roles | — |
| GET | /api/v1/lookup/user-roles/{id} | — |
| PUT | /api/v1/lookup/user-roles/{id} | — |
| DELETE | /api/v1/lookup/user-roles/{id} | — |
| GET | /api/v1/lookup/work-order-priorities | — |
| POST | /api/v1/lookup/work-order-priorities | — |
| GET | /api/v1/lookup/work-order-priorities/{id} | — |
| GET | /api/v1/lookup/work-order-statuses | — |
| POST | /api/v1/lookup/work-order-statuses | — |
| GET | /api/v1/lookup/work-order-statuses/{id} | — |
| GET | /api/v1/lookup/work-order-types | — |
| POST | /api/v1/lookup/work-order-types | — |
| GET | /api/v1/lookup/work-order-types/{id} | — |
system
| Method | Path | Summary |
|---|---|---|
| GET | /metrics | — |
tenant
| Method | Path | Summary |
|---|---|---|
| GET | /api/v1/tenant/acquisitions | List acquisition records |
| POST | /api/v1/tenant/acquisitions | Create acquisition record |
| GET | /api/v1/tenant/acquisitions/stats/pipeline | Get acquisition pipeline stats |
| GET | /api/v1/tenant/acquisitions/{id} | Get acquisition record |
| PATCH | /api/v1/tenant/acquisitions/{id} | Update acquisition record |
| DELETE | /api/v1/tenant/acquisitions/{id} | Delete acquisition record |
| POST | /api/v1/tenant/acquisitions/{id}/acceptance | Record acquisition acceptance |
| GET | /api/v1/tenant/acquisitions/{id}/award | Get acquisition award |
| PUT | /api/v1/tenant/acquisitions/{id}/award | Save acquisition award |
| GET | /api/v1/tenant/acquisitions/{id}/bids | List vendor bids for acquisition |
| POST | /api/v1/tenant/acquisitions/{id}/bids | Create vendor bid for acquisition |
| PATCH | /api/v1/tenant/acquisitions/{id}/bids/{bid_id} | Update vendor bid |
| DELETE | /api/v1/tenant/acquisitions/{id}/bids/{bid_id} | Delete vendor bid |
| POST | /api/v1/tenant/acquisitions/{id}/create-device | Create device record from accepted acquisition |
| POST | /api/v1/tenant/acquisitions/{id}/create-devices | Create multiple device records from accepted acquisition |
| GET | /api/v1/tenant/acquisitions/{id}/created-devices | List device records created from an acquisition |
| GET | /api/v1/tenant/acquisitions/{id}/donation-offer | Get donation offer |
| PUT | /api/v1/tenant/acquisitions/{id}/donation-offer | Save donation offer |
| POST | /api/v1/tenant/acquisitions/{id}/donation-offer/review | Review donation offer |
| GET | /api/v1/tenant/acquisitions/{id}/purchase-orders | List purchase orders for acquisition |
| POST | /api/v1/tenant/acquisitions/{id}/purchase-orders | Create purchase order for acquisition |
| PATCH | /api/v1/tenant/acquisitions/{id}/purchase-orders/{order_id} | Update purchase order |
| DELETE | /api/v1/tenant/acquisitions/{id}/purchase-orders/{order_id} | Delete purchase order |
| GET | /api/v1/tenant/acquisitions/{id}/purchase-orders/{order_id}/invoices | List supplier invoices for purchase order |
| POST | /api/v1/tenant/acquisitions/{id}/purchase-orders/{order_id}/invoices | Create supplier invoice for purchase order |
| PATCH | /api/v1/tenant/acquisitions/{id}/purchase-orders/{order_id}/invoices/{invoice_id} | Update supplier invoice |
| DELETE | /api/v1/tenant/acquisitions/{id}/purchase-orders/{order_id}/invoices/{invoice_id} | Delete supplier invoice |
| GET | /api/v1/tenant/acquisitions/{id}/purchase-orders/{order_id}/invoices/{invoice_id}/payments | List supplier invoice payments |
| POST | /api/v1/tenant/acquisitions/{id}/purchase-orders/{order_id}/invoices/{invoice_id}/payments | Create supplier invoice payment |
| PATCH | /api/v1/tenant/acquisitions/{id}/purchase-orders/{order_id}/invoices/{invoice_id}/payments/{payment_id} | Update supplier invoice payment |
| DELETE | /api/v1/tenant/acquisitions/{id}/purchase-orders/{order_id}/invoices/{invoice_id}/payments/{payment_id} | Delete supplier invoice payment |
| GET | /api/v1/tenant/acquisitions/{id}/purchase-orders/{order_id}/receipts | List purchase order receipts |
| POST | /api/v1/tenant/acquisitions/{id}/purchase-orders/{order_id}/receipts | Create purchase order receipt |
| PATCH | /api/v1/tenant/acquisitions/{id}/purchase-orders/{order_id}/receipts/{receipt_id} | Update purchase order receipt |
| DELETE | /api/v1/tenant/acquisitions/{id}/purchase-orders/{order_id}/receipts/{receipt_id} | Delete purchase order receipt |
| POST | /api/v1/tenant/acquisitions/{id}/purchase-orders/{order_id}/reconcile | Reconcile purchase order against supplier invoices |
| GET | /api/v1/tenant/acquisitions/{id}/purchase-orders/{order_id}/reconciliation-history | List purchase order reconciliation history |
| POST | /api/v1/tenant/acquisitions/{id}/receive | Receive acquisition record |
| POST | /api/v1/tenant/acquisitions/{id}/review | Review acquisition record |
| GET | /api/v1/tenant/audit-logs | — |
| GET | /api/v1/tenant/decommissioning-reviews | List decommissioning reviews |
| POST | /api/v1/tenant/decommissioning-reviews | Initiate decommissioning review |
| GET | /api/v1/tenant/decommissioning-reviews/{id} | Get decommissioning review |
| PATCH | /api/v1/tenant/decommissioning-reviews/{id} | Update decommissioning review |
| GET | /api/v1/tenant/decommissioning-reviews/{id}/activities | Get decommissioning review activity timeline |
| POST | /api/v1/tenant/decommissioning-reviews/{id}/decision | Decide decommissioning review |
| POST | /api/v1/tenant/decommissioning-reviews/{id}/start-assessment | Start decommissioning review assessment |
| POST | /api/v1/tenant/decommissioning-reviews/{id}/submit-recommendation | Submit decommissioning review recommendation |
| POST | /api/v1/tenant/decommissioning-reviews/{id}/withdraw | Withdraw decommissioning review |
| GET | /api/v1/tenant/decommissions | — |
| GET | /api/v1/tenant/decommissions/{id} | — |
| GET | /api/v1/tenant/departments | List facility departments |
| POST | /api/v1/tenant/departments | — |
| GET | /api/v1/tenant/departments/export | Export facility departments as CSV |
| POST | /api/v1/tenant/departments/import | Import facility departments from CSV or XLSX |
| GET | /api/v1/tenant/departments/import-template | Download the department XLSX import template |
| GET | /api/v1/tenant/departments/{id} | — |
| PATCH | /api/v1/tenant/departments/{id} | — |
| DELETE | /api/v1/tenant/departments/{id} | — |
| GET | /api/v1/tenant/device-records/offline-inventory | Get the minimal device inventory snapshot |
| GET | /api/v1/tenant/device-records/offline-pm-due | Get the minimal preventive-maintenance due snapshot |
| GET | /api/v1/tenant/device-records/offline-work-orders | Get the minimal work-order snapshot |
| GET | /api/v1/tenant/device-records/stats/inventory-counts | Count active device records by device name |
| GET | /api/v1/tenant/device-records/stats/offline-dashboard-summary | Get the minimal facility dashboard snapshot |
| GET | /api/v1/tenant/device-records/stats/readiness | Get device operational readiness summary |
| GET | /api/v1/tenant/device-records/stats/utilization | Get facility device utilization summary |
| GET | /api/v1/tenant/device-records/utilization | List device utilization summaries |
| POST | /api/v1/tenant/device-records/{id}/commission | Commission device record |
| GET | /api/v1/tenant/device-records/{id}/commissioning-events | List device commissioning events |
| POST | /api/v1/tenant/device-records/{id}/decommission | Decommission device record |
| GET | /api/v1/tenant/device-records/{id}/decommission-events | List device decommission events |
| GET | /api/v1/tenant/device-records/{id}/handover-records | List device handover records |
| POST | /api/v1/tenant/device-records/{id}/handover-records | Create device handover record |
| GET | /api/v1/tenant/device-records/{id}/lifecycle-events | List device asset lifecycle events |
| GET | /api/v1/tenant/device-records/{id}/offline-summary | Get a minimal device identity and status snapshot |
| GET | /api/v1/tenant/device-records/{id}/spare-parts | List spare parts compatible with a device model |
| GET | /api/v1/tenant/device-records/{id}/training-records | List device training records |
| GET | /api/v1/tenant/device-records/{id}/usage-logs | List device usage logs |
| POST | /api/v1/tenant/device-records/{id}/usage-logs | Create device usage log |
| GET | /api/v1/tenant/device-records/{id}/utilization-summary | Get device utilization summary |
| GET | /api/v1/tenant/disposals | List disposal records |
| POST | /api/v1/tenant/disposals | Create disposal record |
| GET | /api/v1/tenant/disposals/stats/summary | Get retirement and disposal summary |
| GET | /api/v1/tenant/disposals/{id} | Get disposal record |
| PATCH | /api/v1/tenant/disposals/{id} | Update disposal record |
| DELETE | /api/v1/tenant/disposals/{id} | Delete disposal record |
| POST | /api/v1/tenant/disposals/{id}/cancel | Cancel disposal record |
| POST | /api/v1/tenant/disposals/{id}/complete | Complete disposal record |
| GET | /api/v1/tenant/disposals/{id}/evidence | List disposal evidence |
| POST | /api/v1/tenant/disposals/{id}/evidence | Create disposal evidence |
| POST | /api/v1/tenant/disposals/{id}/start | Start disposal record |
| GET | /api/v1/tenant/disposition-decisions | List disposition decisions |
| POST | /api/v1/tenant/disposition-decisions | Create disposition decision |
| GET | /api/v1/tenant/disposition-decisions/{id} | Get disposition decision |
| POST | /api/v1/tenant/disposition-decisions/{id}/cancel | Cancel disposition decision |
| POST | /api/v1/tenant/disposition-decisions/{id}/mark-actioned-by-transfer | Mark disposition decision actioned by transfer |
| GET | /api/v1/tenant/donations | List donations |
| POST | /api/v1/tenant/donations | Create donation |
| GET | /api/v1/tenant/donations/{id} | Get donation |
| PATCH | /api/v1/tenant/donations/{id} | Update donation |
| DELETE | /api/v1/tenant/donations/{id} | Delete donation |
| POST | /api/v1/tenant/donations/{id}/accept | Accept donation |
| GET | /api/v1/tenant/funding-lines | List funding lines |
| POST | /api/v1/tenant/funding-lines | Create funding line |
| PATCH | /api/v1/tenant/funding-lines/{id} | Update funding line |
| DELETE | /api/v1/tenant/funding-lines/{id} | Delete funding line |
| GET | /api/v1/tenant/funding-sources | List funding sources |
| POST | /api/v1/tenant/funding-sources | Create funding source |
| PATCH | /api/v1/tenant/funding-sources/{id} | Update funding source |
| DELETE | /api/v1/tenant/funding-sources/{id} | Delete funding source |
| GET | /api/v1/tenant/incidents | List incident reports |
| POST | /api/v1/tenant/incidents | Create incident report |
| GET | /api/v1/tenant/incidents/{id} | Get incident report |
| PATCH | /api/v1/tenant/incidents/{id} | Update incident report |
| DELETE | /api/v1/tenant/incidents/{id} | Delete incident report |
| POST | /api/v1/tenant/incidents/{id}/notify-manufacturer | — |
| POST | /api/v1/tenant/incidents/{id}/review | Review incident report |
| POST | /api/v1/tenant/incidents/{id}/submit-to-regulator | — |
| GET | /api/v1/tenant/locations | List facility locations |
| POST | /api/v1/tenant/locations | — |
| GET | /api/v1/tenant/locations/export | Export facility locations as CSV |
| POST | /api/v1/tenant/locations/import | Import facility locations from CSV or XLSX |
| GET | /api/v1/tenant/locations/import-template | Download the location XLSX import template |
| GET | /api/v1/tenant/locations/{id} | — |
| PATCH | /api/v1/tenant/locations/{id} | — |
| DELETE | /api/v1/tenant/locations/{id} | — |
| GET | /api/v1/tenant/maintenance/summary | Get spare parts and service maintenance summary |
| GET | /api/v1/tenant/needs-requests | List need requests |
| POST | /api/v1/tenant/needs-requests | Create need request |
| GET | /api/v1/tenant/needs-requests/{id} | Get need request |
| PATCH | /api/v1/tenant/needs-requests/{id} | Update need request |
| DELETE | /api/v1/tenant/needs-requests/{id} | Delete need request |
| POST | /api/v1/tenant/needs-requests/{id}/review | Review need request |
| GET | /api/v1/tenant/option-appraisals | List option appraisals |
| POST | /api/v1/tenant/option-appraisals | Create option appraisal |
| GET | /api/v1/tenant/option-appraisals/{id} | Get option appraisal |
| PATCH | /api/v1/tenant/option-appraisals/{id} | Update option appraisal |
| DELETE | /api/v1/tenant/option-appraisals/{id} | Delete option appraisal |
| POST | /api/v1/tenant/option-appraisals/{id}/review | Review option appraisal |
| GET | /api/v1/tenant/performance-checks | — |
| POST | /api/v1/tenant/performance-checks | — |
| GET | /api/v1/tenant/performance-checks/export | — |
| GET | /api/v1/tenant/performance-checks/overdue | — |
| GET | /api/v1/tenant/performance-checks/{id} | — |
| PATCH | /api/v1/tenant/performance-checks/{id} | — |
| DELETE | /api/v1/tenant/performance-checks/{id} | — |
| POST | /api/v1/tenant/performance-checks/{id}/generate | — |
| GET | /api/v1/tenant/pm-schedules | — |
| POST | /api/v1/tenant/pm-schedules | — |
| GET | /api/v1/tenant/pm-schedules/export | — |
| GET | /api/v1/tenant/pm-schedules/overdue | — |
| GET | /api/v1/tenant/pm-schedules/stats/frequency | PM schedule counts by frequency |
| GET | /api/v1/tenant/pm-schedules/stats/summary | PM schedule counters |
| GET | /api/v1/tenant/pm-schedules/{id} | — |
| PATCH | /api/v1/tenant/pm-schedules/{id} | — |
| DELETE | /api/v1/tenant/pm-schedules/{id} | — |
| POST | /api/v1/tenant/pm-schedules/{id}/generate | — |
| GET | /api/v1/tenant/recalls | List recall notices |
| POST | /api/v1/tenant/recalls | Create recall notice |
| GET | /api/v1/tenant/recalls/{id} | Get recall notice |
| PATCH | /api/v1/tenant/recalls/{id} | Update recall notice |
| DELETE | /api/v1/tenant/recalls/{id} | Delete recall notice |
| POST | /api/v1/tenant/recalls/{id}/acknowledge | Acknowledge recall notice |
| GET | /api/v1/tenant/recalls/{id}/affected-devices | — |
| POST | /api/v1/tenant/recalls/{id}/close | Close recall notice |
| GET | /api/v1/tenant/refurbishments | List refurbishment records |
| POST | /api/v1/tenant/refurbishments | Create refurbishment record |
| GET | /api/v1/tenant/refurbishments/{id} | Get refurbishment record |
| PATCH | /api/v1/tenant/refurbishments/{id} | Update refurbishment record |
| DELETE | /api/v1/tenant/refurbishments/{id} | Delete refurbishment record |
| POST | /api/v1/tenant/refurbishments/{id}/cancel | Cancel refurbishment record |
| POST | /api/v1/tenant/refurbishments/{id}/complete | Complete refurbishment record |
| POST | /api/v1/tenant/refurbishments/{id}/start | Start refurbishment record |
| GET | /api/v1/tenant/retirement-eligible-devices | List devices eligible for retirement |
| GET | /api/v1/tenant/spare-parts | List spare parts inventory |
| POST | /api/v1/tenant/spare-parts | Create spare part inventory item |
| GET | /api/v1/tenant/spare-parts/linkable-models | List installed device models available for spare-part linking |
| GET | /api/v1/tenant/spare-parts/{id} | Get spare part |
| PATCH | /api/v1/tenant/spare-parts/{id} | Update spare part |
| DELETE | /api/v1/tenant/spare-parts/{id} | Delete spare part |
| GET | /api/v1/tenant/spare-parts/{id}/model-links | List model links for a spare part |
| POST | /api/v1/tenant/spare-parts/{id}/model-links | Link spare part to installed model |
| DELETE | /api/v1/tenant/spare-parts/{id}/model-links/{link_id} | Remove spare part model link |
| GET | /api/v1/tenant/spare-parts/{id}/movements | List spare part stock movements |
| POST | /api/v1/tenant/spare-parts/{id}/movements | Record spare part stock movement |
| GET | /api/v1/tenant/training-sessions | — |
| POST | /api/v1/tenant/training-sessions | — |
| GET | /api/v1/tenant/training-sessions/devices/{deviceRecordID}/roster | — |
| GET | /api/v1/tenant/training-sessions/metrics | — |
| GET | /api/v1/tenant/training-sessions/{id} | — |
| PATCH | /api/v1/tenant/training-sessions/{id} | — |
| DELETE | /api/v1/tenant/training-sessions/{id} | — |
| POST | /api/v1/tenant/training-sessions/{id}/devices | — |
| DELETE | /api/v1/tenant/training-sessions/{id}/devices/{linkID} | — |
| POST | /api/v1/tenant/training-sessions/{id}/objectives | — |
| DELETE | /api/v1/tenant/training-sessions/{id}/objectives/{objectiveID} | — |
| POST | /api/v1/tenant/training-sessions/{id}/trainees | — |
| DELETE | /api/v1/tenant/training-sessions/{id}/trainees/{traineeID} | — |
| POST | /api/v1/tenant/training-sessions/{id}/trainers | — |
| DELETE | /api/v1/tenant/training-sessions/{id}/trainers/{trainerID} | — |
| GET | /api/v1/tenant/transfers | List transfer records |
| POST | /api/v1/tenant/transfers | Create transfer record |
| GET | /api/v1/tenant/transfers/{id} | Get transfer record |
| PATCH | /api/v1/tenant/transfers/{id} | Update transfer record |
| DELETE | /api/v1/tenant/transfers/{id} | Delete transfer record |
| POST | /api/v1/tenant/transfers/{id}/approve | Approve transfer record |
| POST | /api/v1/tenant/transfers/{id}/cancel | Cancel transfer record |
| POST | /api/v1/tenant/transfers/{id}/complete | Complete transfer record |
| GET | /api/v1/tenant/vendor-contracts | List vendor contracts |
| POST | /api/v1/tenant/vendor-contracts | Create vendor contract |
| GET | /api/v1/tenant/vendor-contracts/health-summary | Get vendor contract health summary |
| GET | /api/v1/tenant/vendor-contracts/{id} | Get vendor contract |
| PATCH | /api/v1/tenant/vendor-contracts/{id} | Update vendor contract |
| DELETE | /api/v1/tenant/vendor-contracts/{id} | Delete vendor contract |
| POST | /api/v1/tenant/vendor-contracts/{id}/activate | Activate vendor contract |
| GET | /api/v1/tenant/work-orders/{id}/spare-parts | List spare parts issued to a work order |
| POST | /api/v1/tenant/work-orders/{id}/spare-parts | Issue spare part to work order |
| DELETE | /api/v1/tenant/work-orders/{id}/spare-parts/{usage_id} | Remove spare part usage from work order |
work-orders
| Method | Path | Summary |
|---|---|---|
| GET | /api/v1/tenant/work-orders | List work orders |
| POST | /api/v1/tenant/work-orders | Create a work order |
| GET | /api/v1/tenant/work-orders/export | Export work orders as CSV |
| GET | /api/v1/tenant/work-orders/stats | Work order statistics |
| GET | /api/v1/tenant/work-orders/stats/mttr-trend | Mean time to repair trend |
| GET | /api/v1/tenant/work-orders/{id} | Get a work order |
| PATCH | /api/v1/tenant/work-orders/{id} | Update a work order |
| DELETE | /api/v1/tenant/work-orders/{id} | Delete a work order |
| GET | /api/v1/tenant/work-orders/{id}/activities | List work order activity |
| POST | /api/v1/tenant/work-orders/{id}/assign | Assign a work order |
| POST | /api/v1/tenant/work-orders/{id}/complete | Complete a work order |
| POST | /api/v1/tenant/work-orders/{id}/confirm-resolution | Confirm a work order resolution |
| POST | /api/v1/tenant/work-orders/{id}/hold | Put a work order on hold |
| POST | /api/v1/tenant/work-orders/{id}/notes | Add a note to a work order |
| POST | /api/v1/tenant/work-orders/{id}/reopen | Reopen a work order |
| POST | /api/v1/tenant/work-orders/{id}/status | Update work order status |
| POST | /api/v1/tenant/work-orders/{id}/verify | Verify completed work |
Schemas
423 component schemas are defined in api/openapi.yaml. Most request and response bodies are still placeholders; the schemas that are documented describe the interchange bundles and the auth surface.