Browse the docs

API reference

Invoices

The CallShift invoices of the account, most recent first, with their status, amounts and hosted page.

List invoices

GET/v1/invoices
Bearer API key

Lists 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

Authorizationstringrequired

Bearer <API key>, a key created at app.callshift.ai/api-keys.

Query parameters

limitinteger
from 1 to 100default 50example 50
cursorstring

The nextCursor of the previous page. Leave it out for the most recent invoices.

at least 1 characterexample in_1QaBcDeFgHiJkLmN
statusenum<string>

Only the invoices in this status. paid gives the payment history.

example paid
Alloweddraftopenpaiduncollectiblevoid

Responses

Invoices listed successfully

tenantNamestring | nullrequired

Name of the tenant the API key belongs to, as shown in the dashboard.

example Lyon Part-Dieu
dataobject[]required
Show child attributes
idstringrequired
example in_1QaBcDeFgHiJkLmN
typeenum<string>required

What 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).

example subscription
Allowedsubscriptioncredit_purchaseauto_rechargeother
numberstring | nullrequired

The number printed on the invoice. Null while the invoice is a draft.

example 3A66EC3B-0253
createdAtstring<date-time>required
example 2026-03-02T09:00:00.000Z
paidAtstring<date-time> | nullrequired

When the invoice was paid. Null until it is.

example 2026-03-02T09:00:05.000Z
totalCentsintegerrequired

Total of the invoice, tax included, in euro cents: the figure printed on it.

example 6000
amountPaidCentsintegerrequired

What has been paid on the invoice, in euro cents.

example 6000
statusenum<string>required

draft (not issued yet), open (awaiting payment), paid, uncollectible (payment abandoned), or void (cancelled, nothing is owed — e.g. a declined automatic recharge).

example paid
Alloweddraftopenpaiduncollectiblevoid
descriptionstring | nullrequired
example null
invoiceUrlstring | nullrequired

Hosted page of the invoice, with its PDF.

example https://invoice.stripe.com/i/acct_123/test_456
nextCursorstring | nullrequired

Pass it as cursor for the next, older page. Null on the last page.

example in_1QaBcDeFgHiJkLmN

Invalid query parameters, or a cursor that names no invoice

successenum<boolean>required
Allowedfalse
errorobjectrequired
Show child attributes
nameenum<string>required
AllowedZodError
issuesobject[]required
Show child attributes
codestringrequired
example invalid_enum_value
pathstring | number[]required
messagestringrequired
example Invalid email
errorstringrequired

Unauthorized

errorstringrequired

Internal server error

errorstringrequired
GET
curl "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())
Response
{
  "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"
}