# Late Payment Calculator

What a late-paid business invoice is owed: statutory interest at the right rate for each half-year, plus the fixed compensation.

Interest at 8% over the reference Bank Rate, by the day, per half-year; the fixed compensation; the per-day figure while unpaid. The Bank's rate read daily from its own page.

Under the Late Payment of Commercial Debts (Interest) Act 1998 a business that's paid late may charge statutory interest at 8% over the Bank of England's Bank Rate, and add a fixed sum per invoice (£40, £70 or £100 by its size). The catch people get wrong: the rate isn't today's Bank Rate but the rate on the previous 30 June or 31 December, each half-year on its own, so an invoice late across the new year runs at two rates. This endpoint reads the Bank's own rate page daily, works the interest by the day for each half-year, adds the compensation, and gives the per-day figure for an invoice still unpaid. Business-to-business, where the contract sets no other rate. Not legal advice; it says so.

- Price: 1 credit
- Page: https://meetkatalis.com/apis/late-payment
- OpenAPI: https://meetkatalis.com/openapi.yaml

## Endpoints

- `GET /api/v1/late-payment?amount=…&due=…&paid=…` — Amount in pounds, due date, paid date (leave out if unpaid: today is used)

## Call it

```bash
curl -H "x-api-key: $KATALIS_API_KEY" \
  "https://meetkatalis.com/api/v1/late-payment?amount=5000&due=2025-12-01&paid=2026-01-30"
```

```javascript
const res = await fetch("https://meetkatalis.com/api/v1/late-payment?amount=5000&due=2025-12-01&paid=2026-01-30", {
  headers: { "x-api-key": process.env.KATALIS_API_KEY },
});
if (!res.ok) throw new Error(`Katalis ${res.status}: ${await res.text()}`);
console.log(await res.json());
```

```python
import os, requests

r = requests.get(
    "https://meetkatalis.com/api/v1/late-payment?amount=5000&due=2025-12-01&paid=2026-01-30",
    headers={"x-api-key": os.environ["KATALIS_API_KEY"]},
    timeout=60,
)
r.raise_for_status()
print(r.json())
```

## Example response (a real reply)

```json
{
  "invoice": { "amount": 5000, "due": "2025-12-01", "paid": "2026-01-30" },
  "late": true,
  "daysLate": 60,
  "statutoryInterest": 98.63,
  "fixedCompensation": 70,
  "total": 168.63,
  "rate": { "pct": 12.25, "bankRatePct": 4.25, "basis": "8% over the Bank Rate of 4.25% on 2025-06-30, for interest in the half-year 2025-07-01 to 2025-12-31" },
  "periods": [
    { "from": "2025-12-02", "to": "2025-12-31", "days": 30, "ratePct": 12.25, "interest": 50.34 },
    { "from": "2026-01-01", "to": "2026-01-30", "days": 30, "ratePct": 11.75, "interest": 48.29 }
  ],
  "currentStatutoryRatePct": 11.75
}
```

## What you'd build with it

- **Invoicing and accounting software.** The exact statutory sum on every overdue invoice, with the reference-rate basis spelled out.
- **Debt recovery and credit control.** The figure for the letter before action, the day it's sent.
- **Small businesses.** What you're owed, in one call, before you decide whether to claim it.

## Why this one

- **The right rate, by half-year.** The reference Bank Rate on 30 June or 31 December, each period on its own, not today's rate applied to the lot.
- **The Bank's own page, daily.** No hard-coded rate to go stale; every reply says when the rate was read.
- **Per-day while unpaid.** The sum today and what it grows by tomorrow, for the chasing letter.

## Conventions

- Auth: `x-api-key: kat_live_…` on every request (free key at https://meetkatalis.com/developers: a verified email and mobile, 100 credits a month, no card).
- One credit balance across every API; each endpoint's price is on its page and in `x-credits` in https://meetkatalis.com/openapi.yaml.
- Keys are camelCase everywhere. A registered company is `company: { name, number, status, statusDetail?, filingsOverdue? }` on the register endpoints; the enrichment family (enrich, score, assess, brand-kit, ai-visibility, tender-match) keeps `business` / `profile` with `companyNumber`.
- Every error has `code` and `requestId`; every reply an `x-request-id` header; a charged reply `x-credits-remaining`; a reply that gave credits back `x-credits-refunded`. Missing = 404 with `query`.
- Burst ceiling 60 requests a minute per key (429, `Retry-After`, no credits used). A failure on our side (5xx) gives the call's credits back.
- Company data contains public sector information licensed under the Open Government Licence v3.0.

Provided "as is"; results come from public sources and, in places, AI, and may be inaccurate or out of date; not legal, professional or credit advice. Terms: https://meetkatalis.com/apis/terms