QuickInvoice
IntegrationsStart for free
API v1

API Documentation

REST API for integrating QuickInvoice with external apps: issue invoices, read customers and products, receive signed webhooks. Base URL: https://quickinvoice.ro/api/v1

Introduction

All requests use JSON and are isolated to the company the API key belongs to. Rate limit: 120 requests/minute per key. Keys are generated from Dashboard → Settings → API & Integrations.

Authentication

Send the key (format qi_live_…) in any of these headers:

Authorization: Bearer qi_live_...
X-Api-Key: qi_live_...
# Test connection
curl https://quickinvoice.ro/api/v1/ping -H "X-Api-Key: qi_live_..."
# → { "ok": true, "company": "SC Exemplu SRL", "taxCode": "RO12345678", "apiVersion": "v1" }

Invoices

GET /invoices · GET /invoices/:id · POST /invoices · GET /invoices/:id/pdf

When listing you can pass: status (DRAFT, SENT, VIEWED, PAID, PARTIAL, OVERDUE, CANCELED), type (INVOICE, PROFORMA, DELIVERY_NOTE), customerId, search, dateFrom/dateTo, page, limit (max 100).

# Issue an invoice (unitPrice = NET price; VAT is computed from taxRate)
curl -X POST https://quickinvoice.ro/api/v1/invoices \
  -H "X-Api-Key: qi_live_..." -H "Content-Type: application/json" \
  -d '{
    "customerName": "SC Exemplu SRL",
    "customerCIF": "RO12345678",
    "customerEmail": "client@exemplu.ro",
    "items": [
      { "description": "Web services", "quantity": 1, "unitPrice": 500, "taxRate": 21 }
    ]
  }'

If you don't send a series, the company's default series is used. The customer is created/updated automatically by phone number. Download the PDF with GET /invoices/:id/pdf.

Customers

GET /customers?search=&limit=&offset= · GET /customers/:id · POST /customers (phone required).

Products

GET /products?search=&categoryId=&type= (PRODUCT or SERVICE) · GET /products/:id. Read-only in v1.

Webhooks

You receive a JSON POST every time an event occurs. You add the endpoints in Dashboard → Settings → API & Integrations → Webhooks. Available events:

invoice.created, invoice.paid, invoice.overdue, customer.created, payment.received.

POST <your url>
X-QuickInvoice-Event: invoice.created
X-QuickInvoice-Signature: sha256=<hmac>

{
  "event": "invoice.created",
  "createdAt": "2026-07-05T10:00:00.000Z",
  "data": {
    "invoiceId": "…", "invoiceNumber": "FACT-2026-0001",
    "total": 266.20, "currency": "RON", "status": "SENT"
  }
}

Verify the signature: compute HMAC-SHA256 over the raw request body with the webhook secret (whsec_…) and compare with the X-QuickInvoice-Signature header. An endpoint that repeatedly fails is disabled automatically.

// Node.js — verify signature
const crypto = require('crypto');
const expected = 'sha256=' + crypto.createHmac('sha256', WHSEC)
  .update(rawBody).digest('hex');
const valid = expected === req.headers['x-quickinvoice-signature'];

Zapier

The simplest option, with no app to install: create a Zap with the “Webhooks by Zapier → Catch Hook” trigger, copy the generated URL and add it as a webhook in QuickInvoice (you pick the event). From now on every invoice/payment starts the Zap. You can map the fields from data into any action (Google Sheets, email, CRM, etc.).

As a polling alternative, Zapier can periodically query GET https://quickinvoice.ro/api/v1/invoices?limit=… and deduplicate by id.

Make (Integromat)

In Make, add the “Webhooks → Custom webhook” module, copy the address and set it as a webhook in QuickInvoice. The scenario starts instantly on every event, with the full payload available for the next steps.

WooCommerce

Install the official QuickInvoice for WooCommerce plugin, put the API key in WooCommerce → QuickInvoice and invoices are issued automatically on every paid order, with PDF download from the order page and the tax ID captured for B2B.

Shopify

No app to install: in Shopify Admin → Settings → Notifications → Webhooks add an Order payment (JSON) webhook to:

https://quickinvoice.ro/api/v1/webhooks/shopify?key=qi_live_...

The invoice is issued automatically on every paid order, race-safe, no duplicates.

Errors

Standard format, common codes:

400 invalid request · 401 missing/invalid/revoked key · 404 resource not found · 429 rate limit exceeded.

Need help with your integration? Write to us at contact@quickinvoice.ro.