List clients
List clients. Requires Manager, Admin, or Owner. Member tokens receive 403 forbidden_scope — Members have no client access in Hoursmith.
Authorization
BearerAuth Personal Access Token. Mint at Settings → API. Token shape: hsk_<env>_<prefix12>_<secret32>.
In: header
Query Parameters
Opaque pagination cursor — pass nextCursor back unchanged with the same filters and sort. A mismatch returns 422; legacy cursors remain accepted.
Page size (1–200, default 50).
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 clients: createdAt, id, name, relevance, updatedAt. Unsigned relevance is best-first and requires a non-empty search parameter.
Unicode-normalized token-AND search across: name, contacts, contactName, email, billingEmail, phone, website, taxNumber, notes, billing address. Three-or-more-character terms include indexed typo-tolerant candidates; one/two-character input is an indexed primary-field prefix. Max 200 chars.
Exact billing-country value. Repeat the parameter for OR semantics; duplicates are ignored (max 25 values).
ISO-4217 currency code (case-insensitive). Repeat the parameter for OR semantics; duplicates are ignored (max 25 values).
Boolean — true/false/1/0/yes/no.
Boolean — true/false/1/0/yes/no.
Boolean — true/false/1/0/yes/no.
Inclusive lower bound on createdAt. Accepts YYYY-MM-DD (treated as UTC midnight) or full ISO timestamp.
Inclusive upper bound on createdAt. YYYY-MM-DD is treated as end-of-day so the date is fully included.
Inclusive lower bound on updatedAt. Accepts YYYY-MM-DD (treated as UTC midnight) or full ISO timestamp.
Inclusive upper bound on updatedAt. YYYY-MM-DD is treated as end-of-day so the date is fully included.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/clients"{ "data": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "orgId": "25b2c2d5-a7fc-47d0-89e4-8709a1560bfa", "name": "string", "contactName": "string", "email": "string", "phone": "string", "website": "string", "currency": "string", "notes": "string", "billingAddress": "string", "billingLine1": "string", "billingLine2": "string", "billingCity": "string", "billingRegion": "string", "billingPostalCode": "string", "billingCountry": "string", "taxNumber": "string", "defaultRate": "string", "defaultPaymentTerms": "string", "defaultTaxRate": "string", "requirePoNumber": true, "billingEmail": "string", "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" }}