Developers
Invoice Journey API
Create invoices, email them to clients, and poll payment status from any backend with a single API key.
Overview
Base URL: https://server.invoicejourney.com
All requests and responses use JSON. Creating an invoice with send: true (default) emails the recipient immediately.
GET /v1/ping— test that your API key worksGET /v1/invoices— list invoices (paginated)POST /v1/invoices— create and sendGET /v1/invoices/:id— status JSONPOST /v1/invoices/:id/send— send an existing draft
Authentication
Create keys in Settings → API Keys. Pass the key on every request:
Authorization: Bearer ij_live_... # or X-Api-Key: ij_live_... Idempotency-Key: unique-string-per-create # required on POST
Keys are shown only once at creation. Revoke compromised keys immediately from Settings.
Test connection
Call GET /v1/ping to verify your API key and connectivity. A successful response means auth is working.
curl https://server.invoicejourney.com/v1/ping \ -H "Authorization: Bearer ij_live_YOUR_KEY"
{
"ok": true,
"service": "InvoiceJourney API",
"version": "1.0.1",
"plan": "pro",
"business_id": "…"
}Plan limits
The external developer API requires an active Pro subscription for the Business workspace. App and Web invoicing, customer invoice access, and payment feedback remain available on Free. Pro includes unlimited issued invoices; API request rates and key counts still have technical limits:
| Plan | API keys | Rate limit |
|---|---|---|
| Pro | 5 | 200 requests / 15 min |
List invoices
Retrieve invoices for your business with pagination. Defaults: page=1, limit=20 (max 100).
Optional filters: status, customer_id.
curl "https://server.invoicejourney.com/v1/invoices?page=1&limit=20" \ -H "Authorization: Bearer ij_live_YOUR_KEY"
{
"invoices": [ /* status objects */ ],
"pagination": {
"page": 1,
"limit": 20,
"total": 42,
"total_pages": 3,
"has_more": true
}
}Create & send an invoice
Required: items and either a client object or customer_id. Optional: notes, terms, payment_link, tax_rate, tax_name, taxes, currency, dates, discount.
Each item can set tax_behavior to inherit, rate, or exempt. For compatibility, omitted values with a zero item tax rate inherit invoice taxes; positive item rates remain overrides.
The current API records full-balance invoices only. Deposit and payment-schedule fields are reserved for a future plan and are rejected when they contain non-zero terms.
{
"client": {
"name": "Acme Corp",
"email": "billing@acme.com",
"company": "Acme Corp",
"address": "123 Main St, Austin, TX"
},
"items": [
{
"description": "Monthly bookkeeping",
"quantity": 1,
"rate": 450,
"tax_behavior": "inherit",
"tax_rate": 0
}
],
"notes": "Thank you for your business.",
"terms": "Net 14",
"payment_link": "https://pay.example.com/acme",
"tax_rate": 8.25,
"tax_name": "Sales Tax",
"due_date": "2026-08-23",
"send": true
}curl -X POST https://server.invoicejourney.com/v1/invoices \ -H "Authorization: Bearer ij_live_YOUR_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: create-acme-2026-08-09" \ -d @invoice.json # invoice.json contains the request body shown above
Set send: false to create a draft only, then call POST /v1/invoices/:id/send later.
Check invoice status
Poll status after create/send. Useful statuses include draft, sent, viewed, payment_received, and overdue. partially_paid can appear on historical records; new payments must settle the complete remaining balance.
curl https://server.invoicejourney.com/v1/invoices/INVOICE_ID \ -H "Authorization: Bearer ij_live_YOUR_KEY"
{
"invoice": {
"id": "a1b2c3d4-...",
"number": "INV-0042",
"status": "sent",
"currency": "USD",
"total": 487.13,
"amount_due": 487.13,
"amount_paid": 0,
"recipient": {
"name": "Acme Corp",
"email": "billing@acme.com"
},
"sent_at": "2026-08-09T10:15:00.000Z",
"viewed_at": null,
"paid_at": null,
"public_url": "https://www.invoicejourney.com/invoice/x7k9m2"
}
}Errors
Errors return JSON with error and often a code:
API_KEY_REQUIRED/API_KEY_INVALID— authAPI_PLAN_REQUIRED— the workspace no longer has developer API accessPLAN_LIMIT— an applicable invoice publication limit was reachedAPI_RATE_LIMITED— slow down and retry after the rate-limit windowIDEMPOTENCY_KEY_REQUIRED— include Idempotency-Key on POSTRECIPIENT_EMAIL_REQUIRED— client email needed to send