Developer guide
The Invogi API lets your systems submit invoices, read decisions and findings, and receive webhooks. API access is included on the Scale and Enterprise plans.
- Base URL:
https://api.invogi.com/v1 - Format: JSON, UTF-8
- Full endpoint list: API reference
Authentication
Section titled “Authentication”An owner or admin creates keys in Integrations → API keys with Create. The key is shown once, so store it in your secret manager straight away. Send it as a bearer token on every request:
curl https://api.invogi.com/v1/invoices?limit=10 \ -H "Authorization: Bearer $INVOGI_API_KEY"Keys belong to a workspace, not a person. Each key’s last-used time is shown in the app. Downgrading below Scale revokes all keys.
Idempotency
Section titled “Idempotency”POST /v1/invoices accepts an Idempotency-Key header. Retrying with the same
key returns the original result instead of creating a second invoice, so it is
safe to retry after a timeout. Use an ID from your own system, such as the
bill’s ID in your ERP:
curl https://api.invogi.com/v1/invoices \ -H "Authorization: Bearer $INVOGI_API_KEY" \ -H "Idempotency-Key: erp-bill-48213" \ -H "Content-Type: application/json" \ -d @invoice.jsonReusing a key with a different request body returns 409 CONFLICT, so a
bug that sends two different invoices under one key can’t go unnoticed.
Money, currencies and dates
Section titled “Money, currencies and dates”- Amounts are decimal strings (
"1190.00"), never JSON numbers, so no precision is lost. - Currencies are ISO 4217 codes (
EUR,GBP,PLN). - Business dates are ISO dates (
2026-09-14); system timestamps are UTC.
Errors
Section titled “Errors”Errors share one shape:
{ "error": { "code": "INVALID_REQUEST", "message": "currency must be an ISO 4217 code", "request_id": "req_…" }}| Code | HTTP | Meaning |
|---|---|---|
INVALID_REQUEST |
400 | The request failed validation. message says why. |
UNAUTHORIZED |
401 | Missing or invalid API key. |
FORBIDDEN |
403 | The key or plan does not allow this action. |
NOT_FOUND |
404 | No such resource in this workspace. |
CONFLICT |
409 | The resource is in a state that prevents this, e.g. an upload already received. |
USAGE_LIMIT_EXCEEDED |
429 | The workspace’s invoice allowance is used up. |
RATE_LIMITED |
429 | Too many requests; retry with backoff. |
PROCESSING_FAILED |
500 | Analysis failed on our side; safe to retry. |
Quote request_id when contacting support.
Pagination
Section titled “Pagination”List endpoints take limit and offset and return
{items, total, limit, offset}, where total counts all matches.