Skip to content
Hoursmith Docs
APIReferenceInvoices

List invoices

List invoices. Requires Manager, Admin, or Owner — Member tokens receive 403 forbidden_scope. Read-only in v1: invoice create/send/payment endpoints are not part of the public API yet.

GET
/invoices

Authorization

BearerAuth
AuthorizationBearer <token>

Personal Access Token. Mint at Settings → API. Token shape: hsk_<env>_<prefix12>_<secret32>.

In: header

Query Parameters

cursor?string

Opaque pagination cursor — pass nextCursor back unchanged with the same filters and sort. A mismatch returns 422; legacy cursors remain accepted.

limit?integer

Page size (1–200, default 50).

sort?string

Sort field, optionally prefixed with - for descending (Stripe-style). Defaults to -createdAt (newest first). The allowed fields differ per resource — see each list* operation. Common examples: ?sort=-paidAt (latest paid invoice), ?sort=dueDate (earliest due first), ?sort=name (alphabetical). Cursors are sort-aware: keep the same sort= when paginating. Allowed sort fields for invoices: amountPaid, createdAt, dueDate, id, issueDate, number, paidAt, paymentStatus, relevance, sentAt, status, total, updatedAt. Unsigned relevance is best-first and requires a non-empty search parameter.

search?string

Unicode-normalized token-AND search across: number, billToName, poNumber, notes, client.name, lineItems.description/subtitle/detail/groupLabel. Three-or-more-character terms include indexed typo-tolerant candidates; one/two-character input is an indexed primary-field prefix. Max 200 chars.

clientName?string

Case-insensitive partial match on the related client's name. Joins through the relation — pair with other filters as needed.

clientId?array<>

Filter by client UUID. Repeat the parameter for OR semantics; duplicates are ignored (max 25 values).

currency?array<string>

ISO-4217 currency code (case-insensitive). Repeat the parameter for OR semantics; duplicates are ignored (max 25 values).

status?array<>

One of: DRAFT, SENT, PAID, CANCELLED. Repeat the parameter for OR semantics; duplicates are ignored (max 25 values).

paymentStatus?array<>

One of: unpaid, partially_paid, paid, refunded. Repeat the parameter for OR semantics; duplicates are ignored (max 25 values).

recurring?string

Boolean — true/false/1/0/yes/no.

viewed?string

Boolean — true/false/1/0/yes/no.

issueDateFrom?string

Inclusive lower bound on issueDate. Accepts YYYY-MM-DD (treated as UTC midnight) or full ISO timestamp.

issueDateTo?string

Inclusive upper bound on issueDate. YYYY-MM-DD is treated as end-of-day so the date is fully included.

dueDateFrom?string

Inclusive lower bound on dueDate. Accepts YYYY-MM-DD (treated as UTC midnight) or full ISO timestamp.

dueDateTo?string

Inclusive upper bound on dueDate. YYYY-MM-DD is treated as end-of-day so the date is fully included.

sentAtFrom?string

Inclusive lower bound on sentAt. Accepts YYYY-MM-DD (treated as UTC midnight) or full ISO timestamp.

sentAtTo?string

Inclusive upper bound on sentAt. YYYY-MM-DD is treated as end-of-day so the date is fully included.

paidAtFrom?string

Inclusive lower bound on paidAt. Accepts YYYY-MM-DD (treated as UTC midnight) or full ISO timestamp.

paidAtTo?string

Inclusive upper bound on paidAt. YYYY-MM-DD is treated as end-of-day so the date is fully included.

createdAtFrom?string

Inclusive lower bound on createdAt. Accepts YYYY-MM-DD (treated as UTC midnight) or full ISO timestamp.

createdAtTo?string

Inclusive upper bound on createdAt. YYYY-MM-DD is treated as end-of-day so the date is fully included.

updatedAtFrom?string

Inclusive lower bound on updatedAt. Accepts YYYY-MM-DD (treated as UTC midnight) or full ISO timestamp.

updatedAtTo?string

Inclusive upper bound on updatedAt. YYYY-MM-DD is treated as end-of-day so the date is fully included.

totalMin?string

Inclusive lower bound on total. Accepts decimal-string values like "150.00" to preserve precision.

totalMax?string

Inclusive upper bound on total.

amountPaidMin?string

Inclusive lower bound on amountPaid. Accepts decimal-string values like "150.00" to preserve precision.

amountPaidMax?string

Inclusive upper bound on amountPaid.

balanceMin?string

Inclusive lower bound on balance. Accepts decimal-string values like "150.00" to preserve precision.

balanceMax?string

Inclusive upper bound on balance.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/invoices"
{  "data": [    {      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",      "orgId": "25b2c2d5-a7fc-47d0-89e4-8709a1560bfa",      "clientId": "5e505642-9024-474d-9434-e5a44f505cc5",      "number": "string",      "status": "DRAFT",      "paymentStatus": "unpaid",      "subtotal": "string",      "discountAmount": "string",      "taxRate": "string",      "total": "string",      "amountPaid": "string",      "currency": "string",      "notes": "string",      "billToName": "string",      "issueDate": "2019-08-24",      "dueDate": "2019-08-24",      "sentAt": "2019-08-24T14:15:22Z",      "paidAt": "2019-08-24T14:15:22Z",      "createdAt": "2019-08-24T14:15:22Z",      "updatedAt": "2019-08-24T14:15:22Z",      "deletedAt": "2019-08-24T14:15:22Z"    }  ],  "pagination": {    "limit": 1,    "nextCursor": "string"  }}
{  "error": {    "code": "unauthenticated",    "message": "string",    "fields": {      "property1": "string",      "property2": "string"    },    "requiredPlan": "studio",    "feature": "string",    "requestId": "string"  }}
{  "error": {    "code": "unauthenticated",    "message": "string",    "fields": {      "property1": "string",      "property2": "string"    },    "requiredPlan": "studio",    "feature": "string",    "requestId": "string"  }}
{  "error": {    "code": "unauthenticated",    "message": "string",    "fields": {      "property1": "string",      "property2": "string"    },    "requiredPlan": "studio",    "feature": "string",    "requestId": "string"  }}
{  "error": {    "code": "unauthenticated",    "message": "string",    "fields": {      "property1": "string",      "property2": "string"    },    "requiredPlan": "studio",    "feature": "string",    "requestId": "string"  }}
{  "error": {    "code": "unauthenticated",    "message": "string",    "fields": {      "property1": "string",      "property2": "string"    },    "requiredPlan": "studio",    "feature": "string",    "requestId": "string"  }}
{  "error": {    "code": "unauthenticated",    "message": "string",    "fields": {      "property1": "string",      "property2": "string"    },    "requiredPlan": "studio",    "feature": "string",    "requestId": "string"  }}
Was this page helpful?