Skip to content

Integrations (Zapier / Make / scripts) ​

Inkvoice exposes its full REST API to external tools through API tokens and polling endpoints. This page covers the end-to-end workflow for connecting an automation platform such as Zapier or Make, or your own scripts.

1. Generate an API token ​

In the app, go to Settings → API → Generate token. Give it a name (e.g. Zapier) and either:

  • leave Full access checked — the token can do anything your account can; or
  • uncheck it and pick specific scopes (per resource: read and/or write).

The token is displayed once, in the form ink_…. Copy it immediately — it is stored only as a hash and cannot be retrieved again. If you lose it, revoke it and generate a new one.

2. Authenticate requests ​

Send the token in the Authorization header on every request:

bash
curl https://your-inkvoice.example.com/api/v1/invoices \
  -H "Authorization: Bearer ink_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

That's the only difference from a normal session — every endpoint documented in this API reference works the same way with a token.

3. Scopes ​

Scoped tokens are restricted to an allow-list of resource:action pairs. The available resources are invoices, customers, quotes, products, and expenses; the actions are read and write (write implies read on the same resource).

RequestRequired scope
GET /api/v1/invoicesinvoices:read
POST /api/v1/invoicesinvoices:write
GET /api/v1/customerscustomers:read

A scoped token that hits a resource it wasn't granted — or a non-integration area such as settings or users — receives 403 Forbidden. A full-access token (created with no scopes) has no scope limits. Every token, scoped or not, can still only do what its owner's role allows: a Viewer's token is read-only.

4. Polling for changes (updated_since) ​

For "new or updated record" triggers, poll the list endpoints with an updated_since query parameter. It returns only rows whose updated_at is at or after the given ISO-8601 timestamp:

GET /api/v1/invoices?updated_since=2026-06-08T00:00:00Z
GET /api/v1/customers?updated_since=2026-06-08T00:00:00Z
GET /api/v1/quotes?updated_since=2026-06-08T00:00:00Z

Typical polling loop:

  1. Store the timestamp of your last successful poll.
  2. Request ?updated_since=<last_poll>.
  3. Process the returned records (dedupe by id — a record may appear again if it changes within the same second).
  4. Save the new poll time and repeat.

updated_since combines with the other list filters (status, customer_id, page, limit, …) documented on each resource page.

5. Revoking a token ​

In Settings → API, use the trash icon next to a token to revoke it. Any integration using that token stops working immediately. Revocation is permanent.

Webhooks (push instead of poll) ​

If you'd rather be notified than poll, Inkvoice can also push events (invoice.paid, invoice.sent, …) to an outgoing webhook URL. Configure these under Settings → Email → Outgoing webhooks.

Released under the MIT License.