API reference
Customer
Someone the business sells to. Invoices and payments belong to a customer.
The customer object
- object string
- string
- Always "customer".
- id id
- id
- The customer's id (a UUID). Use it to fetch it, or to refer to it from other things.
- name string
- string
- The display name: what invoices, bills and lists show.
- company_name string or null
- string or null
- The company's name, when different.
- title string or null
- string or null
- Mr., Ms., Dr.…
- first_name string or null
- string or null
- First name of the person to deal with.
- middle_name string or null
- string or null
- Middle name.
- last_name string or null
- string or null
- Last name.
- suffix string or null
- string or null
- Jr., Sr.…
- email string or null
- string or null
- Email address (where invoices or remittances go).
- cc string or null
- string or null
- More addresses copied on emails, separated by commas.
- bcc string or null
- string or null
- Addresses blind-copied on emails.
- phone string or null
- string or null
- Phone.
- mobile string or null
- string or null
- Mobile.
- fax string or null
- string or null
- Fax.
- website string or null
- string or null
- Website.
- address string or null
- string or null
- Billing address; lines separated by \n.
- terms string or null
- string or null
- Usual payment terms: due_on_receipt, net_7, net_15, net_30 or net_60.
- notes string or null
- string or null
- Private notes.
- active boolean
- boolean
- False once it's made inactive in TallyPip (it's kept, with its history, but left out of pickers).
- created_at timestamp
- timestamp
- When it was added, in UTC.
- currency string or null
- string or null
- Their currency when it isn't the business's (Multicurrency, like EUR): their invoices and open balance are in it. Null otherwise.
- shipping_address string or null
- string or null
- Where goods go, if different from the address.
- payment_method string or null
- string or null
- How they usually pay.
- delivery_method string or null
- string or null
- How they like invoices: print or email.
- tax_exempt boolean
- boolean
- True if they don't pay sales tax.
- tax_exempt_reason string or null
- string or null
- Why they're exempt.
- parent_id string or null
- string or null
- A sub-customer's parent customer (a job, location or department under it). Null at the top.
- bill_with_parent boolean
- boolean
- True when the parent pays this sub-customer's invoices (its statement and payments include them).
- open_balance_cents integer
- integer
- What they owe on sent invoices now, in cents.
Example
{
"object": "customer",
"id": "3f6c1e2a-8b4d-4c1e-9a7b-2d5e6f708101",
"name": "Oak Street Dental",
"company_name": "Oak Street Dental LLC",
"title": null,
"first_name": "Robin",
"middle_name": null,
"last_name": "Shah",
"suffix": null,
"email": "accounts@oakstreetdental.example",
"cc": null,
"bcc": null,
"phone": "(555) 010-2299",
"mobile": null,
"fax": null,
"website": null,
"address": "12 Oak Street\nSpringfield, IL 62701",
"terms": "net_30",
"notes": null,
"active": true,
"created_at": "2026-10-06T14:30:00.000Z",
"currency": null,
"shipping_address": null,
"payment_method": null,
"delivery_method": "email",
"tax_exempt": false,
"tax_exempt_reason": null,
"parent_id": null,
"bill_with_parent": false,
"open_balance_cents": 24000
}List customers
GET /api/v1/customers
Customers, newest first, with what each owes on sent invoices.
Key: any (Read only works).
Query
- limit integer
- integer
- How many, 1 to 100 (default 25).
- starting_after id
- id
- The last id of the page before, for the next page (when has_more is true).
- filters
- email, name (exact, ignoring capitals: to find one before adding it)
Newest first. Answers a list: { object: "list", url, has_more, data }.
Request
curl https://tallypip.com/api/v1/customers?limit=3 \ -H "Authorization: Bearer tpk_your_key"
Answer: 200
{
"object": "list",
"url": "/api/v1/customers",
"has_more": false,
"data": [
{
"object": "customer",
"id": "3f6c1e2a-8b4d-4c1e-9a7b-2d5e6f708101",
"name": "Oak Street Dental",
"company_name": "Oak Street Dental LLC",
"title": null,
"first_name": "Robin",
"middle_name": null,
"last_name": "Shah",
"suffix": null,
"email": "accounts@oakstreetdental.example",
"cc": null,
"bcc": null,
"phone": "(555) 010-2299",
"mobile": null,
"fax": null,
"website": null,
"address": "12 Oak Street\nSpringfield, IL 62701",
"terms": "net_30",
"notes": null,
"active": true,
"created_at": "2026-10-06T14:30:00.000Z",
"currency": null,
"shipping_address": null,
"payment_method": null,
"delivery_method": "email",
"tax_exempt": false,
"tax_exempt_reason": null,
"parent_id": null,
"bill_with_parent": false,
"open_balance_cents": 24000
}
]
}Try it
With your own key (Settings › Connected apps). It stays in this page only, and reading can't change anything.
Create a customer
POST /api/v1/customers
Add a customer.
Key: Read and change.
Body (JSON)
- name string
- string
- Required. The name shown on invoices.
- email, phone, mobile, fax, website string
- string
- Optional contact details.
- company_name, title, first_name, middle_name, last_name, suffix string
- string
- Optional.
- cc, bcc string
- string
- Extra addresses for emailed invoices.
- address, shipping_address string
- string
- Optional. Lines separated by \n.
- terms string
- string
- due_on_receipt, net_7, net_15, net_30 or net_60.
- payment_method, delivery_method, notes string
- string
- Optional.
- tax_exempt, tax_exempt_reason boolean, string
- boolean, string
- Optional.
- parent_id, bill_with_parent string, boolean
- string, boolean
- Optional. Makes it a sub-customer of that customer (same currency, up to 5 levels); bill_with_parent: the parent pays its invoices.
Answers 201 with the new customer. Refused with 400 and the reason (nothing is saved); send an Idempotency-Key so a retry can't make it twice.
Request
curl https://tallypip.com/api/v1/customers \
-H "Authorization: Bearer tpk_your_key" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: <a new id for each change>" \
-d '{
"name": "Oak Street Dental",
"email": "accounts@oakstreetdental.example",
"phone": "(555) 010-2299",
"terms": "net_30"
}'Answer: 201
{
"object": "customer",
"id": "3f6c1e2a-8b4d-4c1e-9a7b-2d5e6f708101",
"name": "Oak Street Dental",
"company_name": "Oak Street Dental LLC",
"title": null,
"first_name": "Robin",
"middle_name": null,
"last_name": "Shah",
"suffix": null,
"email": "accounts@oakstreetdental.example",
"cc": null,
"bcc": null,
"phone": "(555) 010-2299",
"mobile": null,
"fax": null,
"website": null,
"address": "12 Oak Street\nSpringfield, IL 62701",
"terms": "net_30",
"notes": null,
"active": true,
"created_at": "2026-10-06T14:30:00.000Z",
"currency": null,
"shipping_address": null,
"payment_method": null,
"delivery_method": "email",
"tax_exempt": false,
"tax_exempt_reason": null,
"parent_id": null,
"bill_with_parent": false,
"open_balance_cents": 24000
}Retrieve a customer
GET /api/v1/customers/{id}
One customer.
Key: any (Read only works).
Request
curl https://tallypip.com/api/v1/customers/3f6c1e2a-8b4d-4c1e-9a7b-2d5e6f708101 \ -H "Authorization: Bearer tpk_your_key"
Answer: 200
{
"object": "customer",
"id": "3f6c1e2a-8b4d-4c1e-9a7b-2d5e6f708101",
"name": "Oak Street Dental",
"company_name": "Oak Street Dental LLC",
"title": null,
"first_name": "Robin",
"middle_name": null,
"last_name": "Shah",
"suffix": null,
"email": "accounts@oakstreetdental.example",
"cc": null,
"bcc": null,
"phone": "(555) 010-2299",
"mobile": null,
"fax": null,
"website": null,
"address": "12 Oak Street\nSpringfield, IL 62701",
"terms": "net_30",
"notes": null,
"active": true,
"created_at": "2026-10-06T14:30:00.000Z",
"currency": null,
"shipping_address": null,
"payment_method": null,
"delivery_method": "email",
"tax_exempt": false,
"tax_exempt_reason": null,
"parent_id": null,
"bill_with_parent": false,
"open_balance_cents": 24000
}Try it
With your own key (Settings › Connected apps). It stays in this page only, and reading can't change anything.