Skip to content

REST API

Vorrio exposes a versioned JSON API under /api/v1. The PWA uses the same contract as external integrations. Browser authentication uses a signed HttpOnly cookie with a random token backed by a revocable server session.

  • Swagger UI: /docs
  • ReDoc: /redoc
  • OpenAPI 3.1 contract: /openapi.json
  • Health check: /api/health
  • Deployment readiness: /api/readiness

The generated contract is stored in docs/api/openapi.json. Run make api-docs after every API change and make api-docs-check before submitting a change.

Endpoints

MethodPathGroupSummaryDeprecated
GET/api/healthSystemCheck instance healthno
GET/api/readinessSystemCheck deployment readinessno
GET/api/v1/auth/api-token-scopesAuthenticationList available automation-token scopesno
GET/api/v1/auth/api-tokensAuthenticationList the current account's automation tokensno
POST/api/v1/auth/api-tokensAuthenticationCreate a scoped automation tokenno
DELETE/api/v1/auth/api-tokens/{token_id}AuthenticationRevoke one automation tokenno
GET/api/v1/auth/invitationsAuthenticationList active household invitationsno
POST/api/v1/auth/invitationsAuthenticationCreate a single-use household invitationno
DELETE/api/v1/auth/invitations/{invitation_id}AuthenticationRevoke an unused household invitationno
GET/api/v1/auth/invitations/{token}AuthenticationRead a single-use invitationno
POST/api/v1/auth/invitations/{token}/acceptAuthenticationAccept an invitation and create the member accountno
POST/api/v1/auth/loginAuthenticationCreate a household sessionno
POST/api/v1/auth/logoutAuthenticationEnd the current sessionno
GET/api/v1/auth/meAuthenticationValidate the current sessionno
GET/api/v1/auth/membersAuthenticationList household membersno
PATCH/api/v1/auth/members/{user_id}AuthenticationChange a member role or access stateno
POST/api/v1/auth/mfa/verifyAuthenticationFinish a password login with a second factorno
POST/api/v1/auth/passkeys/authentication/beginAuthenticationStart passwordless passkey authenticationno
POST/api/v1/auth/passkeys/authentication/completeAuthenticationComplete passwordless passkey authenticationno
POST/api/v1/auth/passkeys/registration/beginAuthenticationStart passkey registrationno
POST/api/v1/auth/passkeys/registration/completeAuthenticationVerify and save a passkeyno
DELETE/api/v1/auth/passkeys/{credential_id}AuthenticationDelete one passkeyno
PUT/api/v1/auth/passwordAuthenticationChange the current account passwordno
PATCH/api/v1/auth/preferencesAuthenticationUpdate personal interface preferencesno
PATCH/api/v1/auth/profileAuthenticationComplete or update the owner profileno
POST/api/v1/auth/reauthenticateAuthenticationConfirm identity before a sensitive changeno
POST/api/v1/auth/recoveryAuthenticationRecover an account with a single-use recovery codeno
POST/api/v1/auth/recovery-codesAuthenticationReplace all single-use recovery codesno
GET/api/v1/auth/securityAuthenticationRead passkey, TOTP and recovery statusno
GET/api/v1/auth/sessionsAuthenticationList active browser sessionsno
POST/api/v1/auth/sessions/revoke-othersAuthenticationRevoke every other browser sessionno
DELETE/api/v1/auth/sessions/{session_id}AuthenticationRevoke one browser sessionno
POST/api/v1/auth/setupAuthenticationComplete first-run setupno
GET/api/v1/auth/stateAuthenticationRead setup and session stateno
DELETE/api/v1/auth/totpAuthenticationDisable authenticator-app verificationno
POST/api/v1/auth/totp/enableAuthenticationVerify and enable an authenticator appno
POST/api/v1/auth/totp/setupAuthenticationCreate a pending authenticator-app secretno
GET/api/v1/catalog/barcodes/{barcode}/lookupCatalogResolve a barcode locally or through Open Factsno
GET/api/v1/catalog/master-dataCatalogList locations, units and product groupsno
POST/api/v1/catalog/master-data/{kind}CatalogCreate a catalog master-data entryno
PATCH/api/v1/catalog/master-data/{kind}/{item_id}CatalogRename or edit a catalog master-data entryno
DELETE/api/v1/catalog/master-data/{kind}/{item_id}CatalogArchive an unused catalog master-data entryno
GET/api/v1/catalog/productsCatalogSearch catalog productsno
POST/api/v1/catalog/productsCatalogCreate a local catalog productno
GET/api/v1/catalog/products/{product_id}CatalogRead a product with variants and barcodesno
PATCH/api/v1/catalog/products/{product_id}CatalogEdit a local catalog productno
GET/api/v1/catalog/products/{product_id}/imageCatalogRead a locally managed product imageno
POST/api/v1/catalog/products/{product_id}/imageCatalogUpload a private product imageno
DELETE/api/v1/catalog/products/{product_id}/imageCatalogRemove the current product imageno
GET/api/v1/catalog/products/{product_id}/price-historyCatalogList receipt prices for a catalog productno
POST/api/v1/catalog/products/{product_id}/variantsCatalogAdd a sellable product variantno
POST/api/v1/catalog/reconcileCatalogRe-evaluate unresolved receipt linesno
PATCH/api/v1/catalog/variants/{variant_id}CatalogEdit a product variantno
DELETE/api/v1/catalog/variants/{variant_id}CatalogDelete an unused product variantno
POST/api/v1/catalog/variants/{variant_id}/barcodesCatalogAttach a barcode to a product variantno
DELETE/api/v1/catalog/variants/{variant_id}/barcodes/{barcode}CatalogDetach a barcode from a product variantno
GET/api/v1/experienceExperienceRead personal onboarding and release-note stateno
PUT/api/v1/experienceExperienceComplete onboarding or acknowledge the current releaseno
GET/api/v1/grocy/master-dataLegacy GrocyRead Grocy master datayes
GET/api/v1/grocy/productsLegacy GrocySearch Grocy productsyes
GET/api/v1/insights/budgetInsightsSummarize the household budget from confirmed receiptsno
PUT/api/v1/insights/budget/settingsInsightsSet or clear the shared monthly household budgetno
GET/api/v1/insights/pricesInsightsSummarize confirmed receipt prices by product and storeno
POST/api/v1/integrations/grocy/import-catalogIntegrationsImport or update the local catalog from Grocyno
GET/api/v1/integrations/grocy/stock-previewIntegrationsPreview mapped Grocy balances without changing Vorriono
PUT/api/v1/notifications/preferencesNotificationsUpdate personal stock notification preferencesno
GET/api/v1/notifications/stateNotificationsRead personal Web Push settings and devicesno
POST/api/v1/notifications/subscriptionsNotificationsRegister or refresh one browser push deviceno
DELETE/api/v1/notifications/subscriptions/{subscription_id}NotificationsRevoke one personal push deviceno
POST/api/v1/notifications/testNotificationsSend a visible test notification to one personal deviceno
GET/api/v1/operations/overviewPrivacy & OperationsRead the privacy-safe owner operations overviewno
GET/api/v1/privacy/exportPrivacy & OperationsDownload a secret-free portable household exportno
GET/api/v1/privacy/export/previewPrivacy & OperationsPreview the portable household exportno
DELETE/api/v1/privacy/householdPrivacy & OperationsPermanently erase this single-household installationno
GET/api/v1/privacy/retentionPrivacy & OperationsPreview receipt-file retentionno
POST/api/v1/privacy/retention/runPrivacy & OperationsApply receipt-file retention nowno
GET/api/v1/receiptsReceiptsList recent receiptsno
POST/api/v1/receipts/analyzeReceiptsAnalyze an image or PDF receiptno
GET/api/v1/receipts/{receipt_id}ReceiptsGet a receipt with all linesno
POST/api/v1/receipts/{receipt_id}/importReceiptsCommit reviewed lines to local stockno
PATCH/api/v1/receipts/{receipt_id}/items/{item_id}ReceiptsMap a receipt line to a catalog productno
POST/api/v1/receipts/{receipt_id}/items/{item_id}/candidateReceiptsConfirm and learn a real product candidateno
GET/api/v1/receipts/{receipt_id}/items/{item_id}/candidatesReceiptsFind real product candidates for a receipt lineno
POST/api/v1/receipts/{receipt_id}/items/{item_id}/catalog-productReceiptsCreate and map a local catalog productno
POST/api/v1/receipts/{receipt_id}/items/{item_id}/create-productLegacy GrocyCreate and map a Grocy productyes
POST/api/v1/scans/resolveScanningResolve a package code without changing stockno
GET/api/v1/scans/unresolvedScanningList unresolved package scansno
GET/api/v1/scans/{scan_id}ScanningRead one scan draftno
PATCH/api/v1/scans/{scan_id}ScanningEdit or map an unresolved scanno
DELETE/api/v1/scans/{scan_id}ScanningDiscard an unresolved scanno
POST/api/v1/scans/{scan_id}/confirmScanningConfirm the selected package actionno
GET/api/v1/settingsSettingsRead public settingsno
PUT/api/v1/settingsSettingsReplace instance settingsno
POST/api/v1/settings/test-grocySettingsTest the Grocy connectorno
POST/api/v1/settings/test-providerSettingsTest the selected analysis providerno
GET/api/v1/shopping-listShoppingList open household shopping itemsno
POST/api/v1/shopping-list/generateShoppingGenerate reviewed shopping-list items from low stockno
GET/api/v1/shopping-list/low-stockShoppingPreview products below their configured minimum stockno
PATCH/api/v1/shopping-list/{item_id}ShoppingEdit or complete a shopping-list itemno
GET/api/v1/statusSystemRead instance and connector statusno
GET/api/v1/stock/count/productsStockList products for a reviewed stock countno
GET/api/v1/stock/countsStockList completed stock countsno
POST/api/v1/stock/countsStockApply a reviewed opening or correction countno

Compatibility

Pre-0.6 paths below /api are accepted temporarily by the server, but they are not part of the canonical contract. New clients must use /api/v1.

Released under the AGPL-3.0-or-later license.