Skip to content

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

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:

Terminal window
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.

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:

Terminal window
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.json

Reusing 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.

  • 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 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.

List endpoints take limit and offset and return {items, total, limit, offset}, where total counts all matches.