Search all guides

Reference · Tools

Invoice Ninja integration

Manage invoicing, billing, and financial data via the Invoice Ninja API. Create and manage clients, invoices, payments, expenses, quotes, tasks, and bank transactions.

Action Finance v1

The Invoice Ninja node manages the billing stack — clients, invoices, payments, expenses, quotes, tasks and bank transactions — through the Invoice Ninja API. A typical build is creating an invoice from completed project tasks each month and recording the payment when it clears.

Works as
Action
Tool name
invoice_ninja
Parameters
58
Outputs
Output, Error
Credentials
Invoice Ninja API
Official docs
Invoice Ninja docs invoiceninja.github.io

What you can build with Invoice Ninja

  • Create a new client in Invoice Ninja.
  • List all unpaid invoices.
  • Create a payment for an invoice.
  • Email an invoice to a client.
  • Create a new expense record.
  • Get all quotes with status active.
  • Create a task with time logs.
  • Match a payment to a bank transaction.

Overview

Invoice Ninja is an open-source invoicing and billing platform. This tool provides access to the Invoice Ninja v5 API for managing clients (create, get, list, delete), invoices (create, get, list, delete, email), payments (create, get, list, delete), expenses (create, get, list, delete), quotes (create, get, list, delete, email), tasks (create, get, list, delete), and bank transactions (create, get, list, delete, match payment). Supports both hosted (invoicing.co) and self-hosted instances. Uses link-based pagination with per_page parameter.

Node Type

Action — processes input items and produces output

Input / Output

DirectionPort(s)
InputInput
OutputOutput, Error

Credentials

This tool requires Invoice Ninja API credentials. See the Credentials Guide for setup instructions.

Resources

ResourceValue
Bank TransactionbankTransaction
Clientclient
Expenseexpense
Invoiceinvoice
Paymentpayment
Quotequote
Tasktask

Operations

Each resource has its own Operation list, and all of them reuse the same core values (create, delete, get, getAll). Pick the resource first, then the operation.

ResourceOperationValueDescription
Bank TransactionCreatecreateRecord a bank transaction
Bank TransactionDeletedeleteDelete a bank transaction
Bank TransactionGetgetGet a bank transaction
Bank TransactionGet ManygetAllList bank transactions
Bank TransactionMatch PaymentmatchPaymentMatch a payment to a bank transaction
ClientCreatecreateCreate a client
ClientDeletedeleteDelete a client
ClientGetgetGet a client
ClientGet ManygetAllList clients
ExpenseCreatecreateCreate an expense
ExpenseDeletedeleteDelete an expense
ExpenseGetgetGet an expense
ExpenseGet ManygetAllList expenses
InvoiceCreatecreateCreate an invoice
InvoiceDeletedeleteDelete an invoice
InvoiceEmailemailEmail an invoice to the client
InvoiceGetgetGet an invoice
InvoiceGet ManygetAllList invoices
PaymentCreatecreateRecord a payment against an invoice
PaymentDeletedeleteDelete a payment
PaymentGetgetGet a payment
PaymentGet ManygetAllList payments
QuoteCreatecreateCreate a quote
QuoteDeletedeleteDelete a quote
QuoteEmailemailEmail a quote to the client
QuoteGetgetGet a quote
QuoteGet ManygetAllList quotes
TaskCreatecreateCreate a task
TaskDeletedeleteDelete a task
TaskGetgetGet a task
TaskGet ManygetAllList tasks

Parameters

Bank Transaction: Create

ParameterTypeRequiredDefaultDescription
Additional FieldscollectionNo{}
Options: 1, CREDIT
— AmountnumberNo0
— Bank Integration IDstringNo—Bank integration ID. Find in Invoice Ninja under Banking > Integrations.
— Base TypeoptionsNoCREDIT
Options: CREDIT, DEBIT
— Currency IDstringNo—Currency ID.
— DatestringNo—Transaction date (YYYY-MM-DD).
— DescriptionstringNo—

Bank Transaction: Delete

ParameterTypeRequiredDefaultDescription
Bank Transaction IDstringYes—The ID of the bank transaction.

Bank Transaction: Get

ParameterTypeRequiredDefaultDescription
Bank Transaction IDstringYes—The ID of the bank transaction.

Bank Transaction: Get Many

ParameterTypeRequiredDefaultDescription
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo50Max number of results to return. (shown when Return All is false)

Bank Transaction: Match Payment

ParameterTypeRequiredDefaultDescription
Bank Transaction IDstringYes—The ID of the bank transaction to match.
Payment IDstringYes—The payment ID to match to the bank transaction. In Invoice Ninja, find matchable payments under Payments.

Client: Create

ParameterTypeRequiredDefaultDescription
Additional FieldscollectionNo{}
Options: 1, CREDIT
— Client NamestringNo—The name of the client.
— ID NumberstringNo—Client ID number.
— Private NotesstringNo—Private notes about the client.
— VAT NumberstringNo—Client VAT number.
— Work PhonestringNo—Work phone number.
— WebsitestringNo—Client website URL.
Billing AddressfixedCollectionNo{}
— Street AddressstringNo—
— Apt/SuitestringNo—
— CitystringNo—
— StatestringNo—
— Postal CodestringNo—
— Country CodestringNo—ISO numeric country code (e.g. 840 for US, 826 for UK). Find at https://en.wikipedia.org/wiki/ISO_3166-1_numeric
ContactsfixedCollectionNo{}
— First NamestringNo—
— Last NamestringNo—
— EmailstringNo—
— PhonestringNo—
Shipping AddressfixedCollectionNo{}
— Street AddressstringNo—
— Apt/SuitestringNo—
— CitystringNo—
— StatestringNo—
— Postal CodestringNo—
— Country CodestringNo—ISO numeric country code.

Client: Delete

ParameterTypeRequiredDefaultDescription
Client IDstringYes—The ID of the client.

Client: Get

ParameterTypeRequiredDefaultDescription
Client IDstringYes—The ID of the client.
OptionscollectionNo{}
Options: invoices, active, client, all
— IncludeoptionsNoinvoicesRelated data to include.
Options: invoices

Client: Get Many

ParameterTypeRequiredDefaultDescription
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo50Max number of results to return. (shown when Return All is false)
OptionscollectionNo{}
Options: invoices, active, client, all
— IncludeoptionsNoinvoices
Options: invoices
— StatusoptionsNoactive
Options: active, archived, deleted
— Created AtstringNo—Filter by creation date (ISO 8601).
— Updated AtstringNo—Filter by update date (ISO 8601).
— Is DeletedbooleanNofalse

Expense: Create

ParameterTypeRequiredDefaultDescription
Additional FieldscollectionNo{}
Options: 1, CREDIT
— AmountnumberNo0
— BillablebooleanNofalseWhether the expense should be invoiced.
— ClientstringNo—Client ID to associate the expense with.
— Custom Value 1stringNo—
— Custom Value 2stringNo—
— CategorystringNo—Expense category ID. Find in Invoice Ninja under Settings > Expense Categories.
— Expense DatestringNo—Date of the expense (YYYY-MM-DD).
— Payment DatestringNo—Date payment was made (YYYY-MM-DD).
— Payment TypeoptionsNo1The type of payment.
Options: 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 24, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52
— Private NotesstringNo—
— Public NotesstringNo—
— Tax Name 1stringNo—
— Tax Name 2stringNo—
— Tax Rate 1numberNo0
— Tax Rate 2numberNo0
— Transaction ReferencestringNo—
— VendorstringNo—Vendor ID. Find in Invoice Ninja under Vendors.

Expense: Delete

ParameterTypeRequiredDefaultDescription
Expense IDstringYes—The ID of the expense.

Expense: Get

ParameterTypeRequiredDefaultDescription
Expense IDstringYes—The ID of the expense.

Expense: Get Many

ParameterTypeRequiredDefaultDescription
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo50Max number of results to return. (shown when Return All is false)

Invoice: Create

ParameterTypeRequiredDefaultDescription
Additional FieldscollectionNo{}
Options: 1, CREDIT
— ClientstringNo—Client ID. Find in Invoice Ninja under client settings.
— Auto BillbooleanNofalse
— Custom Value 1numberNo0
— Custom Value 2numberNo0
— DiscountstringNo—
— Due DatestringNo—Due date (ISO 8601 or YYYY-MM-DD).
— EmailstringNo—
— Email InvoicebooleanNofalseWhether to email the invoice upon creation.
— Invoice DatestringNo—Invoice date (ISO 8601 or YYYY-MM-DD).
— Invoice NumberstringNo—
— Invoice StatusoptionsNo1
Options: 1, 2
— Is Amount DiscountbooleanNofalse
— Mark SentbooleanNofalse
— PaidnumberNo0
— PartialnumberNo0
— Partial Due DatestringNo—
— PO NumberstringNo—
— Private NotesstringNo—
— Public NotesstringNo—
— Tax Name 1stringNo—
— Tax Name 2stringNo—
— Tax Rate 1numberNo0
— Tax Rate 2numberNo0
Invoice ItemsfixedCollectionNo{}
— CostnumberNo0
— DescriptionstringNo—
— ServicestringNo—
— Hours/QuantitynumberNo0
— Tax Name 1stringNo—
— Tax Name 2stringNo—
— Tax Rate 1numberNo0
— Tax Rate 2numberNo0

Invoice: Delete

ParameterTypeRequiredDefaultDescription
Invoice IDstringYes—The ID of the invoice.

Invoice: Email

ParameterTypeRequiredDefaultDescription
Invoice IDstringYes—The ID of the invoice.

Invoice: Get

ParameterTypeRequiredDefaultDescription
Invoice IDstringYes—The ID of the invoice.
OptionscollectionNo{}
Options: invoices, active, client, all
— IncludeoptionsNoclient
Options: client

Invoice: Get Many

ParameterTypeRequiredDefaultDescription
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo50Max number of results to return. (shown when Return All is false)
OptionscollectionNo{}
Options: invoices, active, client, all
— Invoice NumberstringNo—
— IncludeoptionsNoclient
Options: client
— StatusoptionsNoactive
Options: active, archived, deleted
— Created AtstringNo—
— Updated AtstringNo—
— Is DeletedbooleanNofalse
— Client StatusoptionsNoall
Options: all, paid, unpaid, overdue

Payment: Create

ParameterTypeRequiredDefaultDescription
InvoicestringYes—Invoice ID to apply the payment to. Find in Invoice Ninja under invoice details.
AmountnumberNo0The payment amount.
Additional FieldscollectionNo{}
Options: 1, CREDIT
— Payment TypeoptionsNo1The type of payment.
Options: 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 24, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52
— Transfer ReferencestringNo—
— Private NotesstringNo—

Payment: Delete

ParameterTypeRequiredDefaultDescription
Payment IDstringYes—The ID of the payment.

Payment: Get

ParameterTypeRequiredDefaultDescription
Payment IDstringYes—The ID of the payment.
OptionscollectionNo{}
Options: invoices, active, client, all
— IncludeoptionsNoclient
Options: client

Payment: Get Many

ParameterTypeRequiredDefaultDescription
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo50Max number of results to return. (shown when Return All is false)
OptionscollectionNo{}
Options: invoices, active, client, all
— IncludeoptionsNoclient
Options: client
— StatusoptionsNoactive
Options: active, archived, deleted
— Created AtstringNo—
— Updated AtstringNo—
— Is DeletedbooleanNofalse

Quote: Create

ParameterTypeRequiredDefaultDescription
Additional FieldscollectionNo{}
Options: 1, CREDIT
— ClientstringNo—Client ID.
— Auto BillbooleanNofalse
— Custom Value 1numberNo0
— Custom Value 2numberNo0
— DiscountstringNo—
— Due DatestringNo—
— EmailstringNo—
— Email QuotebooleanNofalse
— Quote DatestringNo—
— Quote NumberstringNo—
— Quote StatusoptionsNo1
Options: 1, 2
— Is Amount DiscountbooleanNofalse
— PaidnumberNo0
— PartialnumberNo0
— Partial Due DatestringNo—
— PO NumberstringNo—
— Private NotesstringNo—
— Public NotesstringNo—
— Tax Name 1stringNo—
— Tax Name 2stringNo—
— Tax Rate 1numberNo0
— Tax Rate 2numberNo0
Quote ItemsfixedCollectionNo{}
— CostnumberNo0
— DescriptionstringNo—
— ServicestringNo—
— Hours/QuantitynumberNo0
— Tax Name 1stringNo—
— Tax Name 2stringNo—
— Tax Rate 1numberNo0
— Tax Rate 2numberNo0

Quote: Delete

ParameterTypeRequiredDefaultDescription
Quote IDstringYes—The ID of the quote.

Quote: Email

ParameterTypeRequiredDefaultDescription
Quote IDstringYes—The ID of the quote.

Quote: Get

ParameterTypeRequiredDefaultDescription
Quote IDstringYes—The ID of the quote.
OptionscollectionNo{}
Options: invoices, active, client, all
— IncludeoptionsNoclient
Options: client

Quote: Get Many

ParameterTypeRequiredDefaultDescription
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo50Max number of results to return. (shown when Return All is false)
OptionscollectionNo{}
Options: invoices, active, client, all
— Quote NumberstringNo—
— IncludeoptionsNoclient
Options: client
— StatusoptionsNoactive
Options: active, archived, deleted
— Created AtstringNo—
— Updated AtstringNo—
— Is DeletedbooleanNofalse

Task: Create

ParameterTypeRequiredDefaultDescription
Additional FieldscollectionNo{}
Options: 1, CREDIT
— ClientstringNo—Client ID to associate the task with.
— Custom Value 1stringNo—
— Custom Value 2stringNo—
— DescriptionstringNo—
— ProjectstringNo—Project ID. Find in Invoice Ninja under Projects.
Time LogsfixedCollectionNo{}
— Start DatestringNo—Start date/time (ISO 8601).
— End DatestringNo—End date/time (ISO 8601). Either set endDate or duration.
— Duration (Hours)numberNo0Duration in hours. Used instead of End Date.

Task: Delete

ParameterTypeRequiredDefaultDescription
Task IDstringYes—The ID of the task.

Task: Get

ParameterTypeRequiredDefaultDescription
Task IDstringYes—The ID of the task.
OptionscollectionNo{}
Options: invoices, active, client, all
— IncludeoptionsNoclient
Options: client

Task: Get Many

ParameterTypeRequiredDefaultDescription
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo50Max number of results to return. (shown when Return All is false)
OptionscollectionNo{}
Options: invoices, active, client, all
— IncludeoptionsNoclient
Options: client

All Operations

ParameterTypeRequiredDefaultDescription
API VersionoptionsNov5The Invoice Ninja API version to use. v5 is recommended for new installations.
Options: v4, v5
Max ConcurrencynumberNo10Maximum number of items to process concurrently.

Output Data

Every operation produces exactly one output item per input item — no operation fans out. Binary data on the input item is forwarded unchanged. What lands in the JSON depends on whether the call returned a record or a list:

OperationOutput
Create, Get, Delete, Email, Match Payment (any resource)The returned record is merged onto the input item’s JSON — the fields the item already carried survive, and a response key with the same name overwrites the item’s value. Address the record directly, e.g. {{ $json.id }}.
Get Many (any resource)The whole list arrives on one item as items (an array) plus count, and the input item’s JSON is replaced — nothing it carried survives. Use a Split Out node on items to turn the list into one item per record.

So a listing that matches nothing still produces an item, carrying items: [] and count: 0 rather than disappearing — check count before treating the branch as a hit.

Example Configuration

Create a client with a billing address and one contact:

{
  "type": "invoice_ninja",
  "parameters": {
    "apiVersion": "v5",
    "resource": "client",
    "operation": "create",
    "additionalFields": {
      "clientName": "{{ $json.company }}",
      "vatNumber": "GB123456789",
      "website": "https://example.com"
    },
    "billingAddressUi": {
      "billingAddressValue": {
        "streetAddress": "1 High Street",
        "city": "London",
        "postalCode": "EC1A 1AA",
        "countryCode": "826"
      }
    },
    "contactsUi": {
      "contactsValues": [
        {
          "firstName": "Jane",
          "lastName": "Doe",
          "email": "{{ $json.email }}",
          "phone": "+441234567890"
        }
      ]
    }
  }
}

Raise an invoice with two line items and email it straight away:

{
  "type": "invoice_ninja",
  "parameters": {
    "apiVersion": "v5",
    "resource": "invoice",
    "operation": "create",
    "additionalFields": {
      "client": "{{ $json.clientId }}",
      "invoiceDate": "{{ $datetime.date }}",
      "dueDate": "2026-02-28",
      "invoiceStatus": 2,
      "emailInvoice": true,
      "poNumber": "PO-4471"
    },
    "invoiceItemsUi": {
      "invoiceItemsValues": [
        { "service": "Consulting", "description": "Discovery workshop", "cost": 850, "hours": 2 },
        { "service": "Support", "description": "Monthly retainer", "cost": 400, "hours": 1 }
      ]
    }
  }
}

List unpaid invoices — one item carrying the whole list:

{
  "type": "invoice_ninja",
  "parameters": {
    "apiVersion": "v5",
    "resource": "invoice",
    "operation": "getAll",
    "returnAll": false,
    "limit": 50,
    "options": {
      "status": "active",
      "clientStatus": "unpaid",
      "include": "client"
    }
  }
}

Email an existing invoice:

{
  "type": "invoice_ninja",
  "parameters": {
    "apiVersion": "v5",
    "resource": "invoice",
    "operation": "email",
    "invoiceId": "{{ $json.id }}"
  }
}

Record a bank-transfer payment against an invoice:

{
  "type": "invoice_ninja",
  "parameters": {
    "apiVersion": "v5",
    "resource": "payment",
    "operation": "create",
    "invoice": "{{ $json.id }}",
    "amount": 1250,
    "additionalFields": {
      "paymentType": 1,
      "transferReference": "{{ $json.reference }}",
      "privateNotes": "Matched from bank feed"
    }
  }
}

Log a billable expense:

{
  "type": "invoice_ninja",
  "parameters": {
    "apiVersion": "v5",
    "resource": "expense",
    "operation": "create",
    "additionalFields": {
      "amount": 96.5,
      "billable": true,
      "client": "{{ $json.clientId }}",
      "expenseDate": "{{ $datetime.date }}",
      "paymentType": 5,
      "publicNotes": "Travel to client site"
    }
  }
}

Create a task with a time log:

{
  "type": "invoice_ninja",
  "parameters": {
    "apiVersion": "v5",
    "resource": "task",
    "operation": "create",
    "additionalFields": {
      "client": "{{ $json.clientId }}",
      "description": "Implementation call"
    },
    "timeLogsUi": {
      "timeLogsValues": [
        { "startDate": "2026-01-15T09:00:00Z", "duration": 1.5 }
      ]
    }
  }
}

Match a payment to a bank transaction:

{
  "type": "invoice_ninja",
  "parameters": {
    "apiVersion": "v5",
    "resource": "bankTransaction",
    "operation": "matchPayment",
    "bankTransactionId": "{{ $json.id }}",
    "paymentId": "{{ $json.paymentId }}"
  }
}

Error Handling

ModeBehavior
stopHalts workflow on first error
continueSkips failed items, passes successful ones through
errorPortRoutes failed items to Error output port

Tips

Invoice Ninja manages clients, invoices, payments, expenses, quotes, tasks, and bank transactions. It is ideal for comprehensive financial record keeping, offering more than just simple invoice generation. This tool produces new records, lists of existing items, and detailed information about specific financial entries.

  • Lists arrive on one item. Get Many puts everything under items with a count, so add a Split Out node on items when you want one item per record.
  • Quote line items reuse the invoice key. In a JSON config, Quote Items is written as invoiceItemsUi / invoiceItemsValues, exactly like invoice line items.
  • Country codes are ISO numeric, not two-letter codes — 840 for the US, 826 for the UK.
  • Payment and expense types are numeric codes. Bank Transfer is 1, Cash is 2, and the numbering skips values (there is no 3, 14 or 23).
  • Pick the API version once. v5 matches current hosted and self-hosted installations; v4 changes the endpoints the node calls, and only the email operations differ in behaviour.
  • Both hosted and self-hosted work — the instance URL comes from the credential, so the same node configuration works against invoicing.co or your own server.

Frequently asked questions

Why does Get Many return one item instead of many?

Lists arrive on a single item with everything under `items` and a `count`. Add a Split Out node on `items` when you want one workflow item per record.

Why do quote line items use an invoice key?

Quote Items is written as `invoiceItemsUi` / `invoiceItemsValues` in a JSON configuration, exactly like invoice line items — the same underlying structure serves both.

What format do country codes take?

ISO numeric, not two-letter codes — 840 for the United States, 826 for the United Kingdom. Passing `US` will not match.

How are payment and expense types specified?

Numerically. Look up the numeric type in Invoice Ninja rather than passing the label you see in its interface.

Build with Invoice Ninja

Drop it into a workflow, wire it to an agent, or call it on a schedule. You'll need Invoice Ninja API credentials first.

Open BusyBot

Last reviewed . Spotted something wrong? Tell us.