Invoices, contacts, expenses and stock over a simple REST API. Signed webhooks for events, an MCP server for AI agents. Create a key in Settings → Integrations.
curl https://app.invico.org/v1/documents?limit=5 \
-H "Authorization: Bearer invk_…" A read key may only GET; a write key also POST/PUT/DELETE. Everything is bound to the key's company — no tenant parameter. Error answers: {"error":"code"} — 401 bad key, 403 scope/plan, 429 rate/quota, 409 document-number collision.
| Method + path | Description |
|---|---|
| GET /v1/ping | key check → {ok, company} |
| GET /v1/documents | document list — ?status=, ?kind=, ?contactId=, ?limit=, ?offset= |
| POST /v1/documents | create/upsert (with id = update); line items in items[] |
| GET /v1/documents/:id | document + items + payments + events |
| PUT /v1/documents/:id | edit a document |
| POST /v1/documents/:id/status | {status:"issued"|"paid"|"sent"|"cancelled"} |
| POST /v1/documents/:id/finalize | proforma → issued (+ send) — drafts return not_a_proforma |
| POST /v1/documents/:id/send | e-mail with PDF and a public link |
| POST /v1/documents/:id/payments | {amount, currency, method, note} |
| GET|POST /v1/contacts | contacts — upsert {name, ico, dic, address, email, kind} |
| GET|POST /v1/expenses | expenses — incl. recurEvery for recurring |
| GET /v1/collections/:kind | price list, categories, projects… |
| GET /v1/ares?ico= | ARES lookup (Czech business register) |
| POST /v1/mcp | JSON-RPC interface for agents (same tools as the stdio MCP) |
OpenAPI spec: /openapi.yaml. LLM summary: /llms.txt.
Subscriptions are set in the app (Settings → Integrations → Webhooks). Each delivery is a JSON POST with X-Invico-Event, X-Invico-Delivery and a X-Invico-Signature: sha256=<hmac-sha256 of body> signature against your endpoint secret. Event filter: *, document.*, or an exact name (payment.matched, quote.negotiation…). On the Max plan a custom JSON template can remap the payload — ready-made Slack/Discord/Teams presets are in the UI.
POST https://your-server.com/hook
X-Invico-Event: payment.matched
X-Invico-Signature: sha256=…
{"id":"…","event":"payment.matched","companyIco":"25549260",
"createdAt":"2026-10-19T10:00:00Z","data":{"documentId":"…","amount":12100}} apps/mcp in the repo is a stdio MCP server exposing invico_* tools — issue invoices, read documents, contacts, overviews. The same interface runs over POST /v1/mcp (JSON-RPC). Client config:
{ "mcpServers": { "invico": {
"command": "invico-mcp",
"env": { "INVICO_TOKEN": "invk_…", "INVICO_URL": "https://app.invico.org" }
} } }