Skip to main content

PayslipIQ API for developers

A simple REST API for Irish payslip extraction, validation, and reconciliation. JSON in, JSON out, hosted in Dublin.

Pricing tiers

TierMonthly priceIncluded callsOverage
Free0 euro100Hard limit
Starter29 euro10,0000.005 euro per call
Growth149 euro100,0000.0025 euro per call
EnterpriseCustom1M+Negotiated

Endpoints

  • POST /v1/payslip/extract: OCR and field extraction from a JPEG, PNG, or PDF.
  • POST /v1/payslip/validate: pass structured figures, get a 2026 PAYE, USC, PRSI verdict.
  • POST /v1/payslip/reconcile: cross-check multiple payslips against an annual Statement of Liability.
  • GET /v1/usage: query your current month consumption.

Authentication

Every request carries a bearer token in the Authorization header. Tokens are scoped to a project and can be rotated without downtime via the dashboard. Rate limits are 60 requests per minute on Free, 600 on Starter, 6,000 on Growth.

Code samples

The four samples below show the same call (validate a single payslip) in curl, Node.js, Python, and Go. Production samples with error handling are in our docs at docs.payslipiq.co.uk.

curl

# curl example
curl -X POST https://api.payslipiq.co.uk/v1/payslip/validate \
  -H "Authorization: Bearer $PAYSLIPIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"country":"IE","gross":4000,"paye":520,"usc":120,"prsi":164,"period":"monthly"}'

Node.js

// Node 20+
const r = await fetch('https://api.payslipiq.co.uk/v1/payslip/validate', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer ' + process.env.PAYSLIPIQ_KEY,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ country: 'IE', gross: 4000, paye: 520, usc: 120, prsi: 164, period: 'monthly' }),
});
const data = await r.json();

Python

# Python 3.11+
import os, requests
r = requests.post(
    'https://api.payslipiq.co.uk/v1/payslip/validate',
    headers={'Authorization': f"Bearer {os.environ['PAYSLIPIQ_KEY']}"},
    json={'country': 'IE', 'gross': 4000, 'paye': 520, 'usc': 120, 'prsi': 164, 'period': 'monthly'},
)
data = r.json()

Go

// Go 1.22+
body := strings.NewReader(`{"country":"IE","gross":4000,"paye":520,"usc":120,"prsi":164,"period":"monthly"}`)
req, _ := http.NewRequest("POST", "https://api.payslipiq.co.uk/v1/payslip/validate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("PAYSLIPIQ_KEY"))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)

Reliability

  • 99.9% uptime target on paid tiers, 99.5% on Free.
  • Multi-AZ in eu-west-1 (Dublin). Single region by default.
  • Status page at status.payslipiq.co.uk with RSS and webhook subscription.

Compliance

Data is processed in memory. We do not log payload bodies. Headers and status codes are retained for 30 days for incident debugging. Full DPA available on request, see our trust page.

Get a key

Sign up at the dashboard, no card needed for the Free tier. Email api@payslipiq.co.uk for Enterprise volumes.

API responses are educational and informational. Customers must not present API output as regulated tax, legal, or financial advice to end users.