# Free tools API

> Every SuperBooks free tool as a no-key HTTP endpoint: JSON, or Markdown with Accept: text/markdown; RFC 9457 errors; CORS open.

Canonical page: https://superbooks.io/tools/developers/

## Endpoints

- https://app.superbooks.io/api/tools/invoice.pdf: Make a PDF invoice with the details your country requires: US, Canada, UK, Germany, France, Netherlands or Australia.
- https://app.superbooks.io/api/tools/e-invoicing-mandates: Which countries require e-invoices, from when and in which formats, each date linked to its official source.
- https://app.superbooks.io/api/tools/gst-hst-calculator: Add or remove Canadian GST, HST, PST or QST for any province or territory.
- https://app.superbooks.io/api/tools/mileage: Business mileage at the 2026 IRS, CRA and HMRC rates for the US, Canada and the UK.
- https://app.superbooks.io/api/tools/vat-calculator: Add or remove VAT, or reverse it from a gross price, at the current rate for the UK, any EU country, Switzerland or Norway.
- https://app.superbooks.io/api/tools/vat-rates: Standard and reduced VAT rates for 30 European countries, each with its official source and check date.
- https://app.superbooks.io/api/tools/vat-check: Check an EU VAT number against VIES, or a UK one against its HMRC check digits.

## Limits

Each endpoint allows 30 requests a minute and 300 a day per IP address. A VAT number check counts once per number, so a batch of ten counts ten. The invoice PDF is the exception: 10 a minute and 20 a day. Past a limit the answer is 429 with a Retry-After header in seconds.

## Errors

- invalid-input (400): A parameter is missing or out of range; the field name is in the problem's field member.
- invalid-json (400): The POST body is not valid JSON.
- batch-too-large (400): More than ten VAT numbers in one request.
- unknown-country (404): The country code is not one of the 30 covered: the EU-27 (EL or GR for Greece), GB, CH and NO.
- render-failed (500): The invoice PDF could not be rendered on our side; try again.
- rate-limited (429): The per-address limit for this endpoint is spent; wait the Retry-After seconds.
