Developers
Deterministic, versioned control decisions over a stable REST API.
Reference
OpenAPI spec
Base /v1, bearer auth, cursor pagination, stable error codes.
Idempotency
Writes accept an Idempotency-Key header. Queue consumers and webhook delivery are idempotent by design.
Webhooks
HMAC-signed with event ID and timestamp. At-least-once delivery — your handler must tolerate duplicates.
Error format
Stable machine codes: NOT_FOUND, UNAUTHORIZED, FORBIDDEN, INVALID_REQUEST, CONFLICT, RATE_LIMITED, PROCESSING_FAILED.
Core endpoints
POST /v1/uploads
POST /v1/invoices
POST /v1/invoices/from-upload
GET /v1/invoices
GET /v1/invoices/{id}
GET /v1/invoices/{id}/analysis/latest
GET /v1/findings
POST /v1/findings/{id}/review
GET /v1/findings/{id}/comparison
POST /v1/scans
GET /v1/scans/{id}
GET /v1/scans/{id}/findings
GET /v1/suppliers
POST /v1/suppliers/merge
POST /v1/purchase-orders
POST /v1/payments
POST /v1/erp-connections
POST /v1/erp-connections/{id}/sync
POST /v1/webhooks
GET /v1/api-keys
GET /v1/audit-events
GET /v1/organizations/current/overview
GET /v1/billing/subscription
What this API will never do
- Let an LLM set the PASS/REVIEW/BLOCK decision — decisions are deterministic and reproducible against an engine/policy version
- Expose upstream provider schemas directly — only Invogi's own versioned contracts
- Execute payments or replace your ERP
Building an ERP or vertical SaaS integration? Talk to us about the embed path.