List invoices
curl --request GET \
--url https://api.wellapp.ai/v1/invoices \
--header 'Authorization: <authorization>'import requests
url = "https://api.wellapp.ai/v1/invoices"
headers = {"Authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<authorization>'}};
fetch('https://api.wellapp.ai/v1/invoices', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wellapp.ai/v1/invoices",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.wellapp.ai/v1/invoices"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<authorization>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.wellapp.ai/v1/invoices")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.wellapp.ai/v1/invoices")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"data": [
{
"type": "invoice",
"id": "invoice_550e8400-e29b-41d4-a716-446655440000",
"attributes": {
"reference_number": "INV-2025-001",
"document_type": "commercial_invoice",
"document_type_code": "380",
"issue_date": "2025-01-15",
"due_date": "2025-02-15",
"local_currency": "EUR",
"local_totals": {
"subtotal": "1000.00",
"tax_total": "200.00",
"total_amount": "1200.00"
},
"terms": "Payment due within 30 days",
"billing_context": "subscription",
"payment_status": {
"paid": true,
"amount_paid": 123,
"amount_remaining": 123
},
"status": "draft",
"description": "Professional services invoice for January 2025",
"created_at": "2025-01-15T10:30:00Z",
"updated_at": "2025-01-15T10:30:00Z"
},
"relationships": {
"issuer": {
"data": {
"type": "company",
"id": "company-issuer-uuid"
}
},
"receiver": {
"data": {
"type": "company",
"id": "company-receiver-uuid"
}
},
"payment_means": {
"data": [
{
"type": "payment_means",
"id": "pm_1"
}
]
},
"invoice_items": {
"data": [
{
"type": "invoice_item",
"id": "item_1"
}
]
},
"document": {
"data": {
"type": "document",
"id": "doc_original_invoice"
}
},
"people": {
"data": [
{
"type": "people",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
]
}
}
}
],
"included": [
{
"type": "people",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"attributes": {
"first_name": "John",
"last_name": "Smith",
"full_name": "John Smith",
"email": "jsmith@example.com",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
},
{
"type": "document",
"id": "doc_original_invoice",
"attributes": {
"file_name": "invoice_2025_001.pdf",
"status": "processed",
"uploaded_at": "2023-11-07T05:31:56Z",
"processed_at": "2023-11-07T05:31:56Z",
"file_type": "application/pdf",
"size_bytes": 245678,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
},
{
"type": "invoice_item",
"id": "item_1",
"attributes": {
"line_id": "1",
"sku": "WM-1001",
"name": "Wireless Mouse",
"description": "Ergonomic wireless mouse with USB receiver",
"unit_price": 25,
"currency": "EUR",
"unit": "EA",
"min_quantity": 1,
"max_quantity": 500,
"tax": {
"rate": 20,
"category": "standard",
"scheme": "VAT"
},
"period": {
"start": "2025-06-26",
"end": "2025-06-27"
},
"created_at": "2025-05-11T13:42:12Z",
"updated_at": "2025-05-11T13:45:20Z"
}
},
{
"type": "payment_means",
"id": "pm_1",
"attributes": {
"type": "card_details",
"scheme": "SEPA",
"status": "active",
"account_details": {
"iban": "DE89370400440532013000",
"bic": "COBADEFFXXX",
"account_number": "532013000",
"routing_number": "37040044",
"currency": "EUR"
},
"bank_details": {
"bank_name": "Commerzbank AG",
"bank_code": "37040044",
"branch_name": "Main Branch",
"branch_code": "440"
},
"card_details": {
"masked_pan": "****1234",
"brand": "visa",
"card_type": "credit",
"expiry_month": 12,
"expiry_year": 2027,
"cardholder_name": "John Smith"
},
"digital_wallet": {
"provider": "paypal",
"wallet_id": "john.smith@example.com",
"wallet_type": "personal"
},
"compliance": {
"kyc_status": "verified",
"aml_status": "cleared",
"sanctions_check": "passed",
"last_compliance_check": "2023-11-07T05:31:56Z"
},
"metadata": {
"source": "api",
"external_id": "ext_pm_12345"
},
"nickname": "Primary Payment Method",
"description": "Main company payment account",
"tags": [
"primary",
"sepa"
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
},
{
"type": "company",
"id": "company-receiver-uuid",
"attributes": {
"name": "ACME Corporation",
"description": "Technology solutions provider",
"domain_name_primary_link_url": "acme.com",
"locale": "en",
"tax_id": {
"value": "DE123456789",
"type": "VAT"
},
"registration": {
"trade_name": "TechSol",
"registered_name": "ACME Corporation GmbH"
},
"registration_number": {
"business_type": "GmbH",
"value": "HRB 123456",
"registry_name": "Handelsregister Berlin",
"registry_country": "DE"
},
"workspace_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
},
{
"type": "company",
"id": "company-issuer-uuid",
"attributes": {
"name": "Service Provider Inc",
"description": "Professional services company",
"domain_name_primary_link_url": "serviceprovider.com",
"locale": "en",
"tax_id": {
"value": "FR987654321",
"type": "VAT"
},
"registration": {
"trade_name": "Service Provider",
"registered_name": "Service Provider Inc."
},
"registration_number": {
"business_type": "Inc",
"value": "RCS 987654",
"registry_name": "Paris Commercial Registry",
"registry_country": "FR"
},
"workspace_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
}
],
"meta": {
"total": 150,
"page": 1,
"limit": 20
}
}{
"code": "UNAUTHORIZED",
"status": 401,
"title": "Unauthorized",
"message": "You are not authorized to access this resource",
"meta": {
"log_id": "65c669d4-679c-4a8b-b8c0-fbe37699bb5b"
}
}Invoices
Get Invoices
Retrieve a list of invoices filtered by issuer, receiver, status or date range. Supports pagination following JSON:API specification.
GET
/
v1
/
invoices
List invoices
curl --request GET \
--url https://api.wellapp.ai/v1/invoices \
--header 'Authorization: <authorization>'import requests
url = "https://api.wellapp.ai/v1/invoices"
headers = {"Authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<authorization>'}};
fetch('https://api.wellapp.ai/v1/invoices', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wellapp.ai/v1/invoices",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.wellapp.ai/v1/invoices"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<authorization>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.wellapp.ai/v1/invoices")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.wellapp.ai/v1/invoices")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"data": [
{
"type": "invoice",
"id": "invoice_550e8400-e29b-41d4-a716-446655440000",
"attributes": {
"reference_number": "INV-2025-001",
"document_type": "commercial_invoice",
"document_type_code": "380",
"issue_date": "2025-01-15",
"due_date": "2025-02-15",
"local_currency": "EUR",
"local_totals": {
"subtotal": "1000.00",
"tax_total": "200.00",
"total_amount": "1200.00"
},
"terms": "Payment due within 30 days",
"billing_context": "subscription",
"payment_status": {
"paid": true,
"amount_paid": 123,
"amount_remaining": 123
},
"status": "draft",
"description": "Professional services invoice for January 2025",
"created_at": "2025-01-15T10:30:00Z",
"updated_at": "2025-01-15T10:30:00Z"
},
"relationships": {
"issuer": {
"data": {
"type": "company",
"id": "company-issuer-uuid"
}
},
"receiver": {
"data": {
"type": "company",
"id": "company-receiver-uuid"
}
},
"payment_means": {
"data": [
{
"type": "payment_means",
"id": "pm_1"
}
]
},
"invoice_items": {
"data": [
{
"type": "invoice_item",
"id": "item_1"
}
]
},
"document": {
"data": {
"type": "document",
"id": "doc_original_invoice"
}
},
"people": {
"data": [
{
"type": "people",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
]
}
}
}
],
"included": [
{
"type": "people",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"attributes": {
"first_name": "John",
"last_name": "Smith",
"full_name": "John Smith",
"email": "jsmith@example.com",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
},
{
"type": "document",
"id": "doc_original_invoice",
"attributes": {
"file_name": "invoice_2025_001.pdf",
"status": "processed",
"uploaded_at": "2023-11-07T05:31:56Z",
"processed_at": "2023-11-07T05:31:56Z",
"file_type": "application/pdf",
"size_bytes": 245678,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
},
{
"type": "invoice_item",
"id": "item_1",
"attributes": {
"line_id": "1",
"sku": "WM-1001",
"name": "Wireless Mouse",
"description": "Ergonomic wireless mouse with USB receiver",
"unit_price": 25,
"currency": "EUR",
"unit": "EA",
"min_quantity": 1,
"max_quantity": 500,
"tax": {
"rate": 20,
"category": "standard",
"scheme": "VAT"
},
"period": {
"start": "2025-06-26",
"end": "2025-06-27"
},
"created_at": "2025-05-11T13:42:12Z",
"updated_at": "2025-05-11T13:45:20Z"
}
},
{
"type": "payment_means",
"id": "pm_1",
"attributes": {
"type": "card_details",
"scheme": "SEPA",
"status": "active",
"account_details": {
"iban": "DE89370400440532013000",
"bic": "COBADEFFXXX",
"account_number": "532013000",
"routing_number": "37040044",
"currency": "EUR"
},
"bank_details": {
"bank_name": "Commerzbank AG",
"bank_code": "37040044",
"branch_name": "Main Branch",
"branch_code": "440"
},
"card_details": {
"masked_pan": "****1234",
"brand": "visa",
"card_type": "credit",
"expiry_month": 12,
"expiry_year": 2027,
"cardholder_name": "John Smith"
},
"digital_wallet": {
"provider": "paypal",
"wallet_id": "john.smith@example.com",
"wallet_type": "personal"
},
"compliance": {
"kyc_status": "verified",
"aml_status": "cleared",
"sanctions_check": "passed",
"last_compliance_check": "2023-11-07T05:31:56Z"
},
"metadata": {
"source": "api",
"external_id": "ext_pm_12345"
},
"nickname": "Primary Payment Method",
"description": "Main company payment account",
"tags": [
"primary",
"sepa"
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
},
{
"type": "company",
"id": "company-receiver-uuid",
"attributes": {
"name": "ACME Corporation",
"description": "Technology solutions provider",
"domain_name_primary_link_url": "acme.com",
"locale": "en",
"tax_id": {
"value": "DE123456789",
"type": "VAT"
},
"registration": {
"trade_name": "TechSol",
"registered_name": "ACME Corporation GmbH"
},
"registration_number": {
"business_type": "GmbH",
"value": "HRB 123456",
"registry_name": "Handelsregister Berlin",
"registry_country": "DE"
},
"workspace_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
},
{
"type": "company",
"id": "company-issuer-uuid",
"attributes": {
"name": "Service Provider Inc",
"description": "Professional services company",
"domain_name_primary_link_url": "serviceprovider.com",
"locale": "en",
"tax_id": {
"value": "FR987654321",
"type": "VAT"
},
"registration": {
"trade_name": "Service Provider",
"registered_name": "Service Provider Inc."
},
"registration_number": {
"business_type": "Inc",
"value": "RCS 987654",
"registry_name": "Paris Commercial Registry",
"registry_country": "FR"
},
"workspace_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
}
],
"meta": {
"total": 150,
"page": 1,
"limit": 20
}
}{
"code": "UNAUTHORIZED",
"status": 401,
"title": "Unauthorized",
"message": "You are not authorized to access this resource",
"meta": {
"log_id": "65c669d4-679c-4a8b-b8c0-fbe37699bb5b"
}
}Complex Usage Example
Advanced Invoice Filtering with Full Context
This example demonstrates advanced filtering with multiple parameters, status filtering, company relationships, and pagination for retrieving invoices:curl -X GET "https://api.well.com/v1/invoices?issuer_id=550e8400-e29b-41d4-a716-446655440001&receiver_id=550e8400-e29b-41d4-a716-446655440002&status=sent&date_from=2025-01-01&date_to=2025-12-31&page[limit]=20&page[cursor]=eyJkYXRlIjoiMjAyNS0xMS0wMiIsImlkIjoiaW52b2ljZTktdXVpZCJ9" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json"
Filtering & sorting on related objects
Filter and sort on a related (included) object by nesting into the relationship — the same relationships you pass toinclude.
- To-one relations nest directly:
{ "issuer": { "name": { "_eq": "Acme" } } }, and sort by a dot-path:"orderBy": { "field": "issuer.name", "direction": "asc" }. - To-many relations must be quantified with
_some,_every, or_none:{ "items": { "_some": { "quantity": { "_gt": 1 } } } }. They are not directly sortable (a to-many sort needs an aggregate proxy). - Composite
composite_*columns are virtual — filter and sort on their underlying source fields, not on the composite.
include) and how to filter or sort on each:
| Relationship | Cardinality | Filter on a field | Sort by a field |
|---|---|---|---|
issuer | to-one (company) | { "issuer": { "name": { "_eq": … } } } | "field": "issuer.name" ✅ |
receiver | to-one (company) | { "receiver": { "name": { "_eq": … } } } | "field": "receiver.name" ✅ |
document | to-one (document) | { "document": { "file_name": { "_eq": … } } } | "field": "document.file_name" ✅ |
workspace | to-one (workspace) | { "workspace": { "name": { "_eq": … } } } | "field": "workspace.name" ✅ |
source_workspace_connector | to-one (workspace_connector) | { "source_workspace_connector": { "name": { "_eq": … } } } | "field": "source_workspace_connector.name" ✅ |
exchange_rate | to-one (exchange_rate) | { "exchange_rate": { "rate_date": { "_eq": … } } } | "field": "exchange_rate.rate_date" ✅ |
subscription | to-one (subscription) | { "subscription": { "status": { "_eq": … } } } | "field": "subscription.status" ✅ |
invoice_items | to-many (invoice_item) | { "invoice_items": { "_some": { "amount": { "_eq": … } } } } | aggregate proxy only ⚠️ |
invoice_transactions | to-many (invoice_transaction) | { "invoice_transactions": { "_some": { "field_name": { "_eq": … } } } } | aggregate proxy only ⚠️ |
payment_means | to-many (invoice_payment_means) | { "payment_means": { "_some": { "field_name": { "_eq": … } } } } | aggregate proxy only ⚠️ |
invoice_workspace_connectors | to-many (invoice_workspace_connector) | { "invoice_workspace_connectors": { "_some": { "field_name": { "_eq": … } } } } | aggregate proxy only ⚠️ |
field_name with any field of the related object. See its object-reference page for the full field list.
Filter by a to-one relation (and sort by it):
{
"root": "invoices",
"whereClause": { "issuer": { "name": { "_ilike": "%acme%" } } },
"orderBy": { "field": "issuer.name", "direction": "asc" }
}
{
"root": "invoices",
"whereClause": { "invoice_items": { "_some": { "amount": { "_gt": 0 } } } }
}
Headers
Bearer token for authentication
Query Parameters
Filter invoices where the specified company is the issuer.
Filter invoices where the specified company is the receiver.
Filter invoices by status.
Available options:
draft, sent, paid, cancelled Filter invoices issued on or after this date (YYYY-MM-DD).
Filter invoices issued on or before this date (YYYY-MM-DD).
Number of invoices per page.
Required range:
1 <= x <= 100Cursor for pagination.
Include related resources in the response. Multiple relationships can be included by separating them with commas.
Available options:
company, payment_means, people, document ⌘I