API reference
Invoices
The CallShift invoices of the account, most recent first, with their status, amounts and hosted page.
List invoices
/v1/invoicesLists the Callshift invoices of the tenant the API key belongs to, most recent first: the invoices of the billing page. Filter on status=paid for the payment history. Each response carries the tenant's name, so invoices fetched with several tenants' API keys can be reconciled against each other. Page back through older invoices by passing nextCursor as cursor.
Authorization
AuthorizationstringrequiredBearer <API key>, a key created at app.callshift.ai/api-keys.
Query parameters
limitintegercursorstringThe nextCursor of the previous page. Leave it out for the most recent invoices.
statusenum<string>Only the invoices in this status. paid gives the payment history.
draftopenpaiduncollectiblevoidResponses
Invoices listed successfully
tenantNamestring | nullrequiredName of the tenant the API key belongs to, as shown in the dashboard.
dataobject[]requiredShow child attributes
idstringrequiredtypeenum<string>requiredWhat the invoice is for: the plan (subscription), credits bought from the billing page (credit_purchase), an automatic recharge of the wallet (auto_recharge), or anything else Callshift invoiced (other).
subscriptioncredit_purchaseauto_rechargeothernumberstring | nullrequiredThe number printed on the invoice. Null while the invoice is a draft.
createdAtstring<date-time>requiredpaidAtstring<date-time> | nullrequiredWhen the invoice was paid. Null until it is.
totalCentsintegerrequiredTotal of the invoice, tax included, in euro cents: the figure printed on it.
amountPaidCentsintegerrequiredWhat has been paid on the invoice, in euro cents.
statusenum<string>requireddraft (not issued yet), open (awaiting payment), paid, uncollectible (payment abandoned), or void (cancelled, nothing is owed — e.g. a declined automatic recharge).
draftopenpaiduncollectiblevoiddescriptionstring | nullrequiredinvoiceUrlstring | nullrequiredHosted page of the invoice, with its PDF.
nextCursorstring | nullrequiredPass it as cursor for the next, older page. Null on the last page.
Invalid query parameters, or a cursor that names no invoice
successenum<boolean>requiredfalseerrorobjectrequiredShow child attributes
nameenum<string>requiredZodErrorissuesobject[]requiredShow child attributes
codestringrequiredpathstring | number[]requiredmessagestringrequirederrorstringrequiredUnauthorized
errorstringrequiredInternal server error
errorstringrequiredcurl "https://api.callshift.ai/v1/invoices?status=paid&limit=20" \
-H "Authorization: Bearer $CALLSHIFT_API_KEY"const res = await fetch("https://api.callshift.ai/v1/invoices?status=paid&limit=20", {
headers: {
Authorization: `Bearer ${process.env.CALLSHIFT_API_KEY}`,
},
});
const data = await res.json();import os
import requests
res = requests.get(
"https://api.callshift.ai/v1/invoices?status=paid&limit=20",
headers={"Authorization": f"Bearer {os.environ['CALLSHIFT_API_KEY']}"},
)
print(res.json()){
"tenantName": "Lyon Part-Dieu",
"data": [
{
"id": "in_1QaBcDeFgHiJkLmN",
"type": "subscription",
"number": "3A66EC3B-0253",
"createdAt": "2026-03-02T09:00:00.000Z",
"paidAt": "2026-03-02T09:00:05.000Z",
"totalCents": 6000,
"amountPaidCents": 6000,
"status": "paid",
"description": null,
"invoiceUrl": "https://invoice.stripe.com/i/acct_123/test_456"
}
],
"nextCursor": "in_1QaBcDeFgHiJkLmN"
}{
"success": false,
"error": {
"name": "ZodError",
"issues": [
{
"code": "invalid_enum_value",
"path": [
"contacts",
0,
"email"
],
"message": "Invalid email"
}
]
}
}{
"error": "Authentication error"
}{
"error": "Internal server error"
}