Invoices
Invoices start as draft. Sending or taking payment finalizes them
(status is no longer draft). Paying in full moves them to paid; a
partial payment leaves them open.
Only drafts can be updated or deleted, and an invoice's client can't be changed. Deleted invoices are hidden until you restore them.
The invoice object
- Name
id- Type
- string
- Description
Example:
0abcDEF1234567890xyzAB.
- Name
number- Type
- string
- Name
status- Type
- string
- Description
One of
draft,open,paid,void.
- Name
client_id- Type
- string
- Description
Example:
0abcDEF1234567890xyzAB.
- Name
client- Type
- object
- Description
The client embedded in invoices and subscriptions, without
payment_methods.
- Name
client.id- Type
- string
- Description
Example:
0abcDEF1234567890xyzAB.
- Name
client.name- Type
- string
- Name
client.emails- Type
- array of string
- Description
Min 1 items.
- Name
client.address- Type
- string or null
- Name
client.currency- Type
- string
- Description
Three-letter currency code, in lowercase. Example:
usd.
- Name
client.language- Type
- string
- Description
Two-letter language code, in lowercase. One of
da,en,fr,de,it,no,pt,es.
- Name
client.default_payment_method_id- Type
- string or null
- Description
The card
POST /invoices/{id}/payuses when nopayment_method_idis sent. Null when the client has no card on file. Example:0abcDEF1234567890xyzAB.
- Name
client.created_at- Type
- timestamp
- Description
Date and time in UTC. Example:
2024-06-15T12:00:00.000000Z.
- Name
client.updated_at- Type
- timestamp
- Description
Date and time in UTC. Example:
2024-06-15T12:00:00.000000Z.
- Name
client.is_deleted- Type
- boolean
- Name
currency- Type
- string
- Description
Three-letter currency code, in lowercase. Example:
usd.
- Name
language- Type
- string
- Description
Two-letter language code, in lowercase. One of
da,en,fr,de,it,no,pt,es.
- Name
date- Type
- date
- Description
Example:
2024-06-15.
- Name
notes- Type
- string or null
- Name
items- Type
- array of object
- Name
items[].description- Type
- string
- Name
items[].amount- Type
- integer
- Description
Amount in the smallest currency unit (cents). Example:
10000. Min 0.
- Name
items[].quantity- Type
- string
- Description
Quantity as a decimal string, without trailing zeros. Example:
1.
- Name
items[].total- Type
- integer
- Description
Amount in the smallest currency unit (cents). Example:
10000. Min 0.
- Name
discounts- Type
- array of object
- Name
discounts[].amount- Type
- integer or null
- Description
Fixed amount off, in cents. Example:
10000. Min 0.
- Name
discounts[].percent- Type
- string or null
- Description
Percent off the subtotal, as a decimal string without trailing zeros. Example:
12.5.
- Name
discount_amount- Type
- integer
- Description
Total discount applied to the subtotal, computed from
discounts. Example:10000. Min 0.
- Name
taxable_amount- Type
- integer
- Description
Amount in the smallest currency unit (cents). Example:
10000. Min 0.
- Name
tax_rates- Type
- array of object
- Name
tax_rates[].id- Type
- string
- Description
The tax rate's ID. Use it in
tax_rates. Example:0abcDEF1234567890xyzAB.
- Name
tax_rates[].name- Type
- string
- Description
Example:
TPS.
- Name
tax_rates[].percentage- Type
- string
- Description
Percentage as a decimal string, without trailing zeros. Example:
5.
- Name
tax_rates[].amount- Type
- integer
- Description
Tax amount for this rate. Example:
10000. Min 0.
- Name
tax_amount- Type
- integer
- Description
Amount in the smallest currency unit (cents). Example:
10000. Min 0.
- Name
subtotal- Type
- integer
- Description
Amount in the smallest currency unit (cents). Example:
10000. Min 0.
- Name
total- Type
- integer
- Description
Amount in the smallest currency unit (cents). Example:
10000. Min 0.
- Name
amount_paid- Type
- integer
- Description
Amount in the smallest currency unit (cents). Example:
10000. Min 0.
- Name
amount_refunded- Type
- integer
- Description
Part of
amount_paidthat has been refunded. Example:10000. Min 0.
- Name
amount_remaining- Type
- integer
- Description
Amount in the smallest currency unit (cents). Example:
10000. Min 0.
- Name
accept_cards- Type
- boolean
- Name
sent_at- Type
- timestamp or null
- Description
Date and time in UTC. Example:
2024-06-15T12:00:00.000000Z.
- Name
paid_at- Type
- timestamp or null
- Description
Date and time in UTC. Example:
2024-06-15T12:00:00.000000Z.
- Name
created_at- Type
- timestamp
- Description
Date and time in UTC. Example:
2024-06-15T12:00:00.000000Z.
- Name
updated_at- Type
- timestamp
- Description
Date and time in UTC. Example:
2024-06-15T12:00:00.000000Z.
- Name
is_deleted- Type
- boolean
The invoice object
{
"id": "0abcDEF1234567890xyzAB",
"number": "AB-0001",
"status": "draft",
"client_id": "0abcDEF1234567890xyzAB",
"client": {
"id": "0abcDEF1234567890xyzAB",
"name": "Jane Doe",
"emails": [
"jane@example.com"
],
"address": "1 Main St",
"currency": "usd",
"language": "en",
"default_payment_method_id": null,
"created_at": "2024-06-15T12:00:00.000000Z",
"updated_at": "2024-06-15T12:00:00.000000Z",
"is_deleted": false
},
"currency": "usd",
"language": "en",
"date": "2024-06-15",
"notes": "these are the notes",
"items": [
{
"description": "Design work",
"amount": 10000,
"quantity": "1",
"total": 10000
}
],
"discounts": [],
"discount_amount": 0,
"taxable_amount": 10000,
"tax_rates": [],
"tax_amount": 0,
"subtotal": 10000,
"total": 10000,
"amount_paid": 0,
"amount_refunded": 0,
"amount_remaining": 10000,
"accept_cards": false,
"sent_at": null,
"paid_at": null,
"created_at": "2024-06-15T12:00:00.000000Z",
"updated_at": "2024-06-15T12:00:00.000000Z",
"is_deleted": false
}List invoices
Query parameters
- Name
search- Type
- string
- Description
Matches number, notes, client name and emails, and item descriptions. Not case-sensitive. Example:
design.
- Name
status- Type
- string
- Description
One of
draft,open,paid,void.
- Name
client_id- Type
- string
- Description
The client ID. Example:
0abcDEF1234567890xyzAB.
- Name
limit- Type
- integer
- Description
Number of results per page. Default:
10. Min 1. Max 100.
- Name
cursor- Type
- string
- Description
To get the next page, pass the
next_cursorfrom the previous response.
- Name
created_at- Type
- object
- Description
Keys
gt,gte,lt,lte. Example:created_at[gt]=2024-06-15T12:00:00.000000Z.
- Name
updated_at- Type
- object
- Description
Keys
gt,gte,lt,lte. Example:updated_at[gt]=2024-06-15T12:00:00.000000Z.
Response
- Name
200- Description
Paginated invoices. Returns a paginated list of invoice objects.
Errors
- Name
400- Type
- request_failed
- Description
Your request could not be processed.
- Name
400- Type
- api_version_unsupported
- Description
The requested API version is not supported. Current version: 2026-08-21
- Name
401- Type
- api_key_missing
- Description
The API key is missing.
- Name
401- Type
- api_key_invalid
- Description
The API key is invalid or has been revoked.
- Name
404- Description
The record doesn't exist or was deleted.
- Name
422- Description
The request body or query parameters are invalid.
- Name
429- Description
Too many requests. The limit is 300 requests per 5 minutes.
Request
curl https://api.tallymark.com/invoices \
-H "Authorization: Bearer $TALLYMARK_API_KEY"Response
{
"data": [
{
"id": "0abcDEF1234567890xyzAB",
"number": "AB-0001",
"status": "draft",
"client_id": "0abcDEF1234567890xyzAB",
"client": {
"id": "0abcDEF1234567890xyzAB",
"name": "Jane Doe",
"emails": [
"jane@example.com"
],
"address": "1 Main St",
"currency": "usd",
"language": "en",
"default_payment_method_id": null,
"created_at": "2024-06-15T12:00:00.000000Z",
"updated_at": "2024-06-15T12:00:00.000000Z",
"is_deleted": false
},
"currency": "usd",
"language": "en",
"date": "2024-06-15",
"notes": "these are the notes",
"items": [
{
"description": "Design work",
"amount": 10000,
"quantity": "1",
"total": 10000
}
],
"discounts": [],
"discount_amount": 0,
"taxable_amount": 10000,
"tax_rates": [],
"tax_amount": 0,
"subtotal": 10000,
"total": 10000,
"amount_paid": 0,
"amount_refunded": 0,
"amount_remaining": 10000,
"accept_cards": false,
"sent_at": null,
"paid_at": null,
"created_at": "2024-06-15T12:00:00.000000Z",
"updated_at": "2024-06-15T12:00:00.000000Z",
"is_deleted": false
}
],
"has_more": false,
"next_cursor": null
}Create an invoice
Creates an invoice. Pass client_id for an existing client, or a
client object to create one, but not both.
Without pay or send the invoice is a draft. pay and send are
attempts. The invoice is always created and the request succeeds even
if they don't go through, so check the returned invoice when it
matters:
pay: truetries to charge the client's default saved card. If the card is declined, the invoice is returned finalized (open) and unpaid. If the client has no saved card, no charge is attempted. Checkstatusandamount_remaining.send: truetries to email the invoice to the client, after the payment attempt. If the email can't be sent right now, the invoice is returned finalized (open) withsent_at: null. Retry withPOST /invoices/{id}/send.
A finalized invoice can no longer be updated or deleted.
Request body
Send exactly one of client_id (an existing client) or client (a
new client).
- Name
client_id- Type
- string
- Description
Example:
0abcDEF1234567890xyzAB.
- Name
client- Type
- object
- Description
A new client. If a non-deleted client with exactly these emails (same order) already exists, it is reused and updated: its name, its address (cleared when
addressis omitted), and its currency and language (set to this request's).
- Name
client.name- Type
- string
- Required
- required
- Description
Max length 255.
- Name
client.email- Type
- string or array of string
- Required
- required
- Description
One email address, or a list of up to 4. Example:
jane@example.com.
- Name
client.address- Type
- string or null
- Name
send- Type
- boolean
- Description
Try to email the invoice to the client after creating it (and after the payment attempt). Never fails the request. Check
sent_atto see if it was sent. Default:false.
- Name
pay- Type
- boolean
- Description
Try to charge the client's default saved card after creating the invoice. Never fails the request. Check
statusandamount_remainingto see if it was paid. Default:false.
- Name
items- Type
- array of object
- Required
- required
- Description
Min 1 items.
- Name
items[].description- Type
- string
- Required
- required
- Description
Max length 255.
- Name
items[].amount- Type
- integer
- Required
- required
- Description
Amount in the smallest currency unit (cents). Example:
10000. Min 0.
- Name
items[].quantity- Type
- number
- Required
- required
- Description
Rounded to 4 decimals. Example:
1. Min 0.
- Name
discounts- Type
- array of object
- Description
Max 1 items.
- Name
discounts[].amount- Type
- integer or null
- Description
Fixed amount off, in cents. Example:
10000. Min 0.
- Name
discounts[].percent- Type
- number or null
- Description
Percent off the subtotal, up to 4 decimals. Example:
12.5. Min 0. Max 100.
- Name
date- Type
- date
- Required
- required
- Name
currency- Type
- string
- Required
- required
- Description
Three-letter currency code, in lowercase. Example:
usd.
- Name
language- Type
- string
- Required
- required
- Description
Two-letter language code, in lowercase. One of
da,en,fr,de,it,no,pt,es.
- Name
tax_rates- Type
- array of string
- Description
Tax rate IDs belonging to the account. Deleted tax rates cannot be added, but ones already on the invoice can be kept.
- Name
include_default_tax_rates- Type
- boolean
- Description
Adds the account's default tax rates on top of
tax_rates. On update, iftax_ratesis omitted, the defaults are added to the tax rates already on the invoice. A tax rate is never applied twice. Default:false.
- Name
accept_cards- Type
- boolean
- Required
- required
- Name
notes- Type
- string or null
Response
- Name
201- Description
Created invoice. Returns a invoice object.
Errors
- Name
400- Type
- request_failed
- Description
Your request could not be processed.
- Name
400- Type
- api_version_unsupported
- Description
The requested API version is not supported. Current version: 2026-08-21
- Name
401- Type
- api_key_missing
- Description
The API key is missing.
- Name
401- Type
- api_key_invalid
- Description
The API key is invalid or has been revoked.
- Name
403- Type
- api_key_read_only
- Description
This API key is read-only and cannot make write requests.
- Name
404- Description
The record doesn't exist or was deleted.
- Name
422- Description
The request body or query parameters are invalid.
- Name
429- Description
Too many requests. The limit is 300 requests per 5 minutes.
Request
curl -X POST https://api.tallymark.com/invoices \
-H "Authorization: Bearer $TALLYMARK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"client": {
"name": "Jane Doe",
"email": "jane@example.com",
"address": "1 Main St"
},
"items": [
{
"description": "Design work",
"amount": 10000,
"quantity": 1
}
],
"date": "2024-06-15",
"currency": "usd",
"language": "en",
"accept_cards": false,
"notes": "these are the notes"
}'Response
{
"id": "0abcDEF1234567890xyzAB",
"number": "AB-0001",
"status": "draft",
"client_id": "0abcDEF1234567890xyzAB",
"client": {
"id": "0abcDEF1234567890xyzAB",
"name": "Jane Doe",
"emails": [
"jane@example.com"
],
"address": "1 Main St",
"currency": "usd",
"language": "en",
"default_payment_method_id": null,
"created_at": "2024-06-15T12:00:00.000000Z",
"updated_at": "2024-06-15T12:00:00.000000Z",
"is_deleted": false
},
"currency": "usd",
"language": "en",
"date": "2024-06-15",
"notes": "these are the notes",
"items": [
{
"description": "Design work",
"amount": 10000,
"quantity": "1",
"total": 10000
}
],
"discounts": [],
"discount_amount": 0,
"taxable_amount": 10000,
"tax_rates": [],
"tax_amount": 0,
"subtotal": 10000,
"total": 10000,
"amount_paid": 0,
"amount_refunded": 0,
"amount_remaining": 10000,
"accept_cards": false,
"sent_at": null,
"paid_at": null,
"created_at": "2024-06-15T12:00:00.000000Z",
"updated_at": "2024-06-15T12:00:00.000000Z",
"is_deleted": false
}Show an invoice
Path parameters
- Name
id- Type
- string
- Required
- required
- Description
The invoice ID. Example:
0abcDEF1234567890xyzAB.
Response
- Name
200- Description
Invoice. Returns a invoice object.
Errors
- Name
400- Type
- request_failed
- Description
Your request could not be processed.
- Name
400- Type
- api_version_unsupported
- Description
The requested API version is not supported. Current version: 2026-08-21
- Name
401- Type
- api_key_missing
- Description
The API key is missing.
- Name
401- Type
- api_key_invalid
- Description
The API key is invalid or has been revoked.
- Name
404- Description
The record doesn't exist or was deleted.
- Name
429- Description
Too many requests. The limit is 300 requests per 5 minutes.
Request
curl https://api.tallymark.com/invoices/0abcDEF1234567890xyzAB \
-H "Authorization: Bearer $TALLYMARK_API_KEY"Response
{
"id": "0abcDEF1234567890xyzAB",
"number": "AB-0001",
"status": "draft",
"client_id": "0abcDEF1234567890xyzAB",
"client": {
"id": "0abcDEF1234567890xyzAB",
"name": "Jane Doe",
"emails": [
"jane@example.com"
],
"address": "1 Main St",
"currency": "usd",
"language": "en",
"default_payment_method_id": null,
"created_at": "2024-06-15T12:00:00.000000Z",
"updated_at": "2024-06-15T12:00:00.000000Z",
"is_deleted": false
},
"currency": "usd",
"language": "en",
"date": "2024-06-15",
"notes": "these are the notes",
"items": [
{
"description": "Design work",
"amount": 10000,
"quantity": "1",
"total": 10000
}
],
"discounts": [],
"discount_amount": 0,
"taxable_amount": 10000,
"tax_rates": [],
"tax_amount": 0,
"subtotal": 10000,
"total": 10000,
"amount_paid": 0,
"amount_refunded": 0,
"amount_remaining": 10000,
"accept_cards": false,
"sent_at": null,
"paid_at": null,
"created_at": "2024-06-15T12:00:00.000000Z",
"updated_at": "2024-06-15T12:00:00.000000Z",
"is_deleted": false
}Update an invoice
Updates a draft invoice. Only the fields you send are changed; omitted
fields keep their current value. Send notes: null to clear the notes,
and discounts: [] or tax_rates: [] to remove them. The client
can't be changed.
Path parameters
- Name
id- Type
- string
- Required
- required
- Description
The invoice ID. Example:
0abcDEF1234567890xyzAB.
Request body
Send at most one discount.
- Name
items- Type
- array of object
- Description
Min 1 items.
- Name
items[].description- Type
- string
- Required
- required
- Description
Max length 255.
- Name
items[].amount- Type
- integer
- Required
- required
- Description
Amount in the smallest currency unit (cents). Example:
10000. Min 0.
- Name
items[].quantity- Type
- number
- Required
- required
- Description
Rounded to 4 decimals. Example:
1. Min 0.
- Name
discounts- Type
- array of object
- Description
Max 1 items.
- Name
discounts[].amount- Type
- integer or null
- Description
Fixed amount off, in cents. Example:
10000. Min 0.
- Name
discounts[].percent- Type
- number or null
- Description
Percent off the subtotal, up to 4 decimals. Example:
12.5. Min 0. Max 100.
- Name
date- Type
- date
- Name
currency- Type
- string
- Description
Three-letter currency code, in lowercase. Example:
usd.
- Name
language- Type
- string
- Description
Two-letter language code, in lowercase. One of
da,en,fr,de,it,no,pt,es.
- Name
tax_rates- Type
- array of string
- Description
Tax rate IDs belonging to the account. Deleted tax rates cannot be added, but ones already on the invoice can be kept.
- Name
include_default_tax_rates- Type
- boolean
- Description
Adds the account's default tax rates on top of
tax_rates. On update, iftax_ratesis omitted, the defaults are added to the tax rates already on the invoice. A tax rate is never applied twice. Default:false.
- Name
accept_cards- Type
- boolean
- Name
notes- Type
- string or null
Response
- Name
200- Description
Updated invoice. Returns a invoice object.
Errors
- Name
400- Type
- invoice_finalized
- Description
This invoice is finalized and cannot be updated. Only drafts can be updated.
- Name
400- Type
- request_failed
- Description
Your request could not be processed.
- Name
400- Type
- api_version_unsupported
- Description
The requested API version is not supported. Current version: 2026-08-21
- Name
401- Type
- api_key_missing
- Description
The API key is missing.
- Name
401- Type
- api_key_invalid
- Description
The API key is invalid or has been revoked.
- Name
403- Type
- api_key_read_only
- Description
This API key is read-only and cannot make write requests.
- Name
404- Description
The record doesn't exist or was deleted.
- Name
422- Description
The request body or query parameters are invalid.
- Name
429- Description
Too many requests. The limit is 300 requests per 5 minutes.
Request
curl -X POST https://api.tallymark.com/invoices/0abcDEF1234567890xyzAB/update \
-H "Authorization: Bearer $TALLYMARK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"items": [
{
"description": "Design work",
"amount": 15000,
"quantity": 2
}
],
"notes": "Thanks for your business."
}'Response
{
"id": "0abcDEF1234567890xyzAB",
"number": "AB-0001",
"status": "draft",
"client_id": "0abcDEF1234567890xyzAB",
"client": {
"id": "0abcDEF1234567890xyzAB",
"name": "Jane Doe",
"emails": [
"jane@example.com"
],
"address": "1 Main St",
"currency": "usd",
"language": "en",
"default_payment_method_id": null,
"created_at": "2024-06-15T12:00:00.000000Z",
"updated_at": "2024-06-15T12:00:00.000000Z",
"is_deleted": false
},
"currency": "usd",
"language": "en",
"date": "2024-06-15",
"notes": "these are the notes",
"items": [
{
"description": "Design work",
"amount": 10000,
"quantity": "1",
"total": 10000
}
],
"discounts": [],
"discount_amount": 0,
"taxable_amount": 10000,
"tax_rates": [],
"tax_amount": 0,
"subtotal": 10000,
"total": 10000,
"amount_paid": 0,
"amount_refunded": 0,
"amount_remaining": 10000,
"accept_cards": false,
"sent_at": null,
"paid_at": null,
"created_at": "2024-06-15T12:00:00.000000Z",
"updated_at": "2024-06-15T12:00:00.000000Z",
"is_deleted": false
}Send an invoice
Finalizes a draft (status becomes open) and emails the client.
Sending an already-sent invoice emails it again; sent_at keeps the
time of the first send. Sending a paid invoice emails the client a
receipt.
Path parameters
- Name
id- Type
- string
- Required
- required
- Description
The invoice ID. Example:
0abcDEF1234567890xyzAB.
Response
- Name
200- Description
Sent invoice. Returns a invoice object.
Errors
- Name
400- Type
- invoice_void
- Description
This invoice is void and cannot be sent.
- Name
400- Type
- request_failed
- Description
Your request could not be processed.
- Name
400- Type
- api_version_unsupported
- Description
The requested API version is not supported. Current version: 2026-08-21
- Name
401- Type
- api_key_missing
- Description
The API key is missing.
- Name
401- Type
- api_key_invalid
- Description
The API key is invalid or has been revoked.
- Name
403- Type
- api_key_read_only
- Description
This API key is read-only and cannot make write requests.
- Name
403- Type
- account_not_verified
- Description
Verify your account's email before performing this action.
- Name
404- Description
The record doesn't exist or was deleted.
- Name
429- Description
Too many requests, or the account can't send email right now because it hit its email limit.
- Name
429- Type
- too_many_emails
- Description
Unable to send invoice at this time.
Request
curl -X POST https://api.tallymark.com/invoices/0abcDEF1234567890xyzAB/send \
-H "Authorization: Bearer $TALLYMARK_API_KEY"Response
{
"id": "0abcDEF1234567890xyzAB",
"number": "AB-0001",
"status": "draft",
"client_id": "0abcDEF1234567890xyzAB",
"client": {
"id": "0abcDEF1234567890xyzAB",
"name": "Jane Doe",
"emails": [
"jane@example.com"
],
"address": "1 Main St",
"currency": "usd",
"language": "en",
"default_payment_method_id": null,
"created_at": "2024-06-15T12:00:00.000000Z",
"updated_at": "2024-06-15T12:00:00.000000Z",
"is_deleted": false
},
"currency": "usd",
"language": "en",
"date": "2024-06-15",
"notes": "these are the notes",
"items": [
{
"description": "Design work",
"amount": 10000,
"quantity": "1",
"total": 10000
}
],
"discounts": [],
"discount_amount": 0,
"taxable_amount": 10000,
"tax_rates": [],
"tax_amount": 0,
"subtotal": 10000,
"total": 10000,
"amount_paid": 0,
"amount_refunded": 0,
"amount_remaining": 10000,
"accept_cards": false,
"sent_at": null,
"paid_at": null,
"created_at": "2024-06-15T12:00:00.000000Z",
"updated_at": "2024-06-15T12:00:00.000000Z",
"is_deleted": false
}Delete a draft invoice
Deletes a draft invoice. You can restore it later. Only drafts can be deleted: once an invoice is sent or paid, it's final.
Path parameters
- Name
id- Type
- string
- Required
- required
- Description
The invoice ID. Example:
0abcDEF1234567890xyzAB.
Response
- Name
200- Description
Deleted invoice (
is_deletedtrue). Returns a invoice object.
Errors
- Name
400- Type
- invoice_finalized
- Description
This invoice is finalized and cannot be deleted. Only drafts can be deleted.
- Name
400- Type
- request_failed
- Description
Your request could not be processed.
- Name
400- Type
- api_version_unsupported
- Description
The requested API version is not supported. Current version: 2026-08-21
- Name
401- Type
- api_key_missing
- Description
The API key is missing.
- Name
401- Type
- api_key_invalid
- Description
The API key is invalid or has been revoked.
- Name
403- Type
- api_key_read_only
- Description
This API key is read-only and cannot make write requests.
- Name
404- Description
The record doesn't exist or was deleted.
- Name
429- Description
Too many requests. The limit is 300 requests per 5 minutes.
Request
curl -X POST https://api.tallymark.com/invoices/0abcDEF1234567890xyzAB/delete \
-H "Authorization: Bearer $TALLYMARK_API_KEY"Response
{
"id": "0abcDEF1234567890xyzAB",
"number": "AB-0001",
"status": "draft",
"client_id": "0abcDEF1234567890xyzAB",
"client": {
"id": "0abcDEF1234567890xyzAB",
"name": "Jane Doe",
"emails": [
"jane@example.com"
],
"address": "1 Main St",
"currency": "usd",
"language": "en",
"default_payment_method_id": null,
"created_at": "2024-06-15T12:00:00.000000Z",
"updated_at": "2024-06-15T12:00:00.000000Z",
"is_deleted": false
},
"currency": "usd",
"language": "en",
"date": "2024-06-15",
"notes": "these are the notes",
"items": [
{
"description": "Design work",
"amount": 10000,
"quantity": "1",
"total": 10000
}
],
"discounts": [],
"discount_amount": 0,
"taxable_amount": 10000,
"tax_rates": [],
"tax_amount": 0,
"subtotal": 10000,
"total": 10000,
"amount_paid": 0,
"amount_refunded": 0,
"amount_remaining": 10000,
"accept_cards": false,
"sent_at": null,
"paid_at": null,
"created_at": "2024-06-15T12:00:00.000000Z",
"updated_at": "2024-06-15T12:00:00.000000Z",
"is_deleted": false
}Restore a deleted invoice
Restores a deleted draft invoice.
Path parameters
- Name
id- Type
- string
- Required
- required
- Description
The invoice ID. Example:
0abcDEF1234567890xyzAB.
Response
- Name
200- Description
Restored invoice (
is_deletedfalse). Returns a invoice object.
Errors
- Name
400- Type
- request_failed
- Description
Your request could not be processed.
- Name
400- Type
- api_version_unsupported
- Description
The requested API version is not supported. Current version: 2026-08-21
- Name
401- Type
- api_key_missing
- Description
The API key is missing.
- Name
401- Type
- api_key_invalid
- Description
The API key is invalid or has been revoked.
- Name
403- Type
- api_key_read_only
- Description
This API key is read-only and cannot make write requests.
- Name
404- Description
The record doesn't exist or was deleted.
- Name
429- Description
Too many requests. The limit is 300 requests per 5 minutes.
Request
curl -X POST https://api.tallymark.com/invoices/0abcDEF1234567890xyzAB/restore \
-H "Authorization: Bearer $TALLYMARK_API_KEY"Response
{
"id": "0abcDEF1234567890xyzAB",
"number": "AB-0001",
"status": "draft",
"client_id": "0abcDEF1234567890xyzAB",
"client": {
"id": "0abcDEF1234567890xyzAB",
"name": "Jane Doe",
"emails": [
"jane@example.com"
],
"address": "1 Main St",
"currency": "usd",
"language": "en",
"default_payment_method_id": null,
"created_at": "2024-06-15T12:00:00.000000Z",
"updated_at": "2024-06-15T12:00:00.000000Z",
"is_deleted": false
},
"currency": "usd",
"language": "en",
"date": "2024-06-15",
"notes": "these are the notes",
"items": [
{
"description": "Design work",
"amount": 10000,
"quantity": "1",
"total": 10000
}
],
"discounts": [],
"discount_amount": 0,
"taxable_amount": 10000,
"tax_rates": [],
"tax_amount": 0,
"subtotal": 10000,
"total": 10000,
"amount_paid": 0,
"amount_refunded": 0,
"amount_remaining": 10000,
"accept_cards": false,
"sent_at": null,
"paid_at": null,
"created_at": "2024-06-15T12:00:00.000000Z",
"updated_at": "2024-06-15T12:00:00.000000Z",
"is_deleted": false
}Pay an invoice
Pays amount cents, or the full amount_remaining when amount is
omitted. A draft is finalized first. The invoice becomes paid once
nothing is left to pay; after a partial payment it stays open with
a lower amount_remaining.
processor: cashrecords a payment made outside Tallymark (cash, check, bank transfer). No money moves.processor: stripecharges a card the client saved when paying in the app:payment_method_idfrom the client'spayment_methods, or the client'sdefault_payment_method_idwhen omitted.
If the card is declined, the invoice stays unpaid and you can call this endpoint again to retry.
Path parameters
- Name
id- Type
- string
- Required
- required
- Description
The invoice ID. Example:
0abcDEF1234567890xyzAB.
Request body
- Name
processor- Type
- string
- Required
- required
- Description
cashis recorded outside Tallymark (cash, check, bank transfer). No money moves. One ofstripe,cash.
- Name
payment_method_id- Type
- string or null
- Description
stripeonly. One of the client'spayment_methods. Omit to use the client's default card. Example:0abcDEF1234567890xyzAB.
- Name
amount- Type
- integer or null
- Description
Omit (or null) to pay the full
amount_remaining. Can't be more thanamount_remaining. Example:10000. Min 1.
Response
- Name
200- Description
Paid invoice. Returns a invoice object.
Errors
- Name
400- Type
- invoice_void
- Description
This invoice is void and cannot be paid.
- Name
400- Type
- amount_too_large
- Description
The amount is more than what is left to pay on this invoice.
- Name
400- Type
- amount_too_small
- Description
The amount is below the minimum card charge for this currency.
- Name
400- Type
- payment_method_not_found
- Description
The payment method was not found on this client.
- Name
400- Type
- request_failed
- Description
Your request could not be processed.
- Name
400- Type
- api_version_unsupported
- Description
The requested API version is not supported. Current version: 2026-08-21
- Name
401- Type
- api_key_missing
- Description
The API key is missing.
- Name
401- Type
- api_key_invalid
- Description
The API key is invalid or has been revoked.
- Name
402- Type
- payment_failed
- Description
The payment could not be processed.
- Name
403- Type
- api_key_read_only
- Description
This API key is read-only and cannot make write requests.
- Name
403- Type
- account_not_verified
- Description
Verify your account's email before performing this action.
- Name
404- Description
The record doesn't exist or was deleted.
- Name
409- Type
- already_paid
- Description
This invoice is already paid.
- Name
409- Type
- stripe_not_connected
- Description
This account has not connected Stripe.
- Name
409- Type
- no_payment_method
- Description
This client has no card on file.
- Name
422- Description
The request body or query parameters are invalid.
- Name
429- Description
Too many requests. The limit is 300 requests per 5 minutes.
Request
curl -X POST https://api.tallymark.com/invoices/0abcDEF1234567890xyzAB/pay \
-H "Authorization: Bearer $TALLYMARK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"processor": "stripe",
"payment_method_id": "0abcDEF1234567890xyzAB",
"amount": 2500
}'Response
{
"id": "0abcDEF1234567890xyzAB",
"number": "AB-0001",
"status": "draft",
"client_id": "0abcDEF1234567890xyzAB",
"client": {
"id": "0abcDEF1234567890xyzAB",
"name": "Jane Doe",
"emails": [
"jane@example.com"
],
"address": "1 Main St",
"currency": "usd",
"language": "en",
"default_payment_method_id": null,
"created_at": "2024-06-15T12:00:00.000000Z",
"updated_at": "2024-06-15T12:00:00.000000Z",
"is_deleted": false
},
"currency": "usd",
"language": "en",
"date": "2024-06-15",
"notes": "these are the notes",
"items": [
{
"description": "Design work",
"amount": 10000,
"quantity": "1",
"total": 10000
}
],
"discounts": [],
"discount_amount": 0,
"taxable_amount": 10000,
"tax_rates": [],
"tax_amount": 0,
"subtotal": 10000,
"total": 10000,
"amount_paid": 0,
"amount_refunded": 0,
"amount_remaining": 10000,
"accept_cards": false,
"sent_at": null,
"paid_at": null,
"created_at": "2024-06-15T12:00:00.000000Z",
"updated_at": "2024-06-15T12:00:00.000000Z",
"is_deleted": false
}Refund an invoice
Refunds amount cents, or everything still refundable
(amount_paid − amount_refunded) when amount is omitted. Card
payments are refunded to the card. Refunding doesn't change status
or amount_remaining; check amount_refunded. The client is emailed
when the account notifies clients.
Path parameters
- Name
id- Type
- string
- Required
- required
- Description
The invoice ID. Example:
0abcDEF1234567890xyzAB.
Request body
- Name
amount- Type
- integer or null
- Description
Omit (or null) to refund everything still refundable. Example:
10000. Min 1.
Response
- Name
200- Description
Refunded invoice. Returns a invoice object.
Errors
- Name
400- Type
- amount_too_large
- Description
The amount is more than what is left to refund on this invoice.
- Name
400- Type
- request_failed
- Description
Your request could not be processed.
- Name
400- Type
- api_version_unsupported
- Description
The requested API version is not supported. Current version: 2026-08-21
- Name
401- Type
- api_key_missing
- Description
The API key is missing.
- Name
401- Type
- api_key_invalid
- Description
The API key is invalid or has been revoked.
- Name
402- Type
- refund_failed
- Description
The invoice could not be refunded.
- Name
403- Type
- api_key_read_only
- Description
This API key is read-only and cannot make write requests.
- Name
404- Description
The record doesn't exist or was deleted.
- Name
409- Type
- nothing_to_refund
- Description
This invoice has no payments left to refund.
- Name
409- Type
- stripe_not_connected
- Description
This account has not connected Stripe.
- Name
422- Description
The request body or query parameters are invalid.
- Name
429- Description
Too many requests. The limit is 300 requests per 5 minutes.
Request
curl -X POST https://api.tallymark.com/invoices/0abcDEF1234567890xyzAB/refund \
-H "Authorization: Bearer $TALLYMARK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"amount": 2500
}'Response
{
"id": "0abcDEF1234567890xyzAB",
"number": "AB-0001",
"status": "draft",
"client_id": "0abcDEF1234567890xyzAB",
"client": {
"id": "0abcDEF1234567890xyzAB",
"name": "Jane Doe",
"emails": [
"jane@example.com"
],
"address": "1 Main St",
"currency": "usd",
"language": "en",
"default_payment_method_id": null,
"created_at": "2024-06-15T12:00:00.000000Z",
"updated_at": "2024-06-15T12:00:00.000000Z",
"is_deleted": false
},
"currency": "usd",
"language": "en",
"date": "2024-06-15",
"notes": "these are the notes",
"items": [
{
"description": "Design work",
"amount": 10000,
"quantity": "1",
"total": 10000
}
],
"discounts": [],
"discount_amount": 0,
"taxable_amount": 10000,
"tax_rates": [],
"tax_amount": 0,
"subtotal": 10000,
"total": 10000,
"amount_paid": 0,
"amount_refunded": 0,
"amount_remaining": 10000,
"accept_cards": false,
"sent_at": null,
"paid_at": null,
"created_at": "2024-06-15T12:00:00.000000Z",
"updated_at": "2024-06-15T12:00:00.000000Z",
"is_deleted": false
}