VUZDevelopers
Auth

Scopes

The canonical scope model — 50 scopes across every public resource, enforced identically for API keys and OAuth tokens.

Every public-API-accessible route declares the scope(s) it needs. Whichever credential you use — API key or OAuth token — VUZ checks for an exact string match against the scopes granted to that credential. No wildcard expansion, no implied hierarchy (documents:write does not imply documents:read).

Scopes follow a resource:action pattern. Most resources have a :read and a :write scope; a few high-stakes actions get their own dedicated scope (finalizing, cancelling, charging, sharing, and requesting a Tax Authority allocation for a document are each separate grants — a key that can create drafts cannot silently issue or charge them).

The 50 canonical scopes

Each endpoint page in the API Reference shows the exact scope(s) it requires. The full model:

Documents

ScopeGrants
documents:readList/fetch documents, PDF status, previews, creditable clients
documents:writeCreate/update/delete a draft document (including credit notes via docType)
documents:finalizeFinalize a draft (POST /documents/{id}/finalize) — assigns the number, generates the signed PDF; retry PDF generation
documents:cancelCancel an issued document (POST /documents/{id}/cancel — creates the counter-document)
documents:chargeCharge a card and finalize (/charge-and-finalize, /charge-split-and-finalize, charge handshake)
documents:shareSend a document by email/SMS/WhatsApp or create a share link
documents:allocateRequest/decide a Tax Authority allocation number (מספר הקצאה) for a document

Clients & CRM

ScopeGrants
clients:readList/fetch clients, find by name
clients:writeCreate/update/delete clients, branches, contacts
crm:readRead CRM data — pipelines, deals, tasks, meetings, notes, call logs, timeline
crm:writeCreate/update CRM records
tags:read / tags:writeRead / manage tags and tag assignments
addresses:read / addresses:writeIsraeli address search and saved addresses

Catalog & inventory

ScopeGrants
products:readList/search/fetch your product catalog
products:writeCreate/update/delete products, product import
inventory:read / inventory:writeWarehouses, stock levels, stock movements, counts
suppliers:read / suppliers:writeSuppliers and their expense history
templates:read / templates:writeDocument template CRUD and versioning

Money & payments

ScopeGrants
payments:read / payments:writePayment links, payment terminals, transaction fees
mandates:read / mandates:writeStanding orders (הוראות קבע) — create, pause, cancel, charge history
payment-terms:read / payment-terms:writePayment terms configuration
banking:read / banking:writeBusiness bank accounts
ledger:read / ledger:writeCustomer ledger — read balances/open items; post manual adjustments and opening balances

Expenses

ScopeGrants
expenses:read / expenses:writeList/create/update/delete expenses
expenses:approveApprove/reject an expense
expenses:ocrRun OCR on receipt images
expenses:exportGenerate and send expense export packages

Business, reporting & platform

ScopeGrants
business:readBusiness profile, document config/defaults, billing invoices, next document number
business:writeUpdate the business profile, logo, document config/defaults
analytics:readDashboards, business analytics, client statistics, SMS usage
reports:readFinancial reports — trial balance, P&L, balance sheet, cash flow
tax:readVAT reports (monthly/bi-monthly), Tax Authority status
exports:readUniform export (מבנה אחיד / BKMVDATA) generation and download
certificates:readDigital signing certificate status/history
projects:read / projects:writeProjects and scheduling
notifications:read / notifications:manageRead / mark / delete in-app notifications, preferences
webhooks:manageCreate, list, update, delete, and test webhook endpoints

Request the minimal set your integration actually needs — an OAuth consent screen shows the merchant exactly what you're asking for, and a narrower API key limits the blast radius if it ever leaks.

Missing a scope

A request with an insufficient scope gets 403:

{
  "error": "insufficient_scope",
  "message": "Missing required scopes: documents:write",
  "requiredScopes": ["documents:write"],
  "grantedScopes": ["documents:read", "clients:read"]
}

Older API keys created before this scope model existed may still carry legacy short scope names (read, write, documents, clients, webhooks, expenses, reports). Those are checked literally and do not satisfy the canonical documents:write-style checks above — re-issue the key with canonical scopes if it needs to call a public-API-accessible route.

On this page