induwara.lk

Free Sri Lanka Developer API

A free, public JSON API for Sri-Lanka-specific data — NIC decoding, gazetted holidays, working days, income tax, land-area conversion, districts and AI text-to-speech. CORS-enabled, no signup to try, free API keys for higher limits.

Try it instantly

Most endpoints work with no key at 50 requests/day per IP. Just curl them.

Free key = 1,000/day

Sign in and create a key for higher limits and key-only endpoints.

Predictable JSON

Every response is { ok, data, meta } with X-RateLimit-* headers.

Built with our free AI builder

Build yours
Cross Multi Talenta — AI Workspace
AI-built site

Cross Multi Talenta — AI Workspace

BIKININ GW WEBSITE YG BERJUDUL CROSS MULTI TALENTA SEKALI BUKA LANGSUNG MUNCUL TULISAN, SELAMAT DATANG (USN YG LOGIN), SAYA DIRANCANG OLEH T

by Anonymous #12

View it live

Authentication

Send your key in a header. Anonymous calls (no header) work at the lower limit.

# header option 1
Authorization: Bearer ilk_live_xxxxxxxx

# header option 2
x-api-key: ilk_live_xxxxxxxx

Use it in your language

cURL

curl "https://induwara.lk/api/v1/nic/199234567890"

JavaScript (SDK)

import { InduwaraLK } from
  "https://induwara.lk/sdk/induwaralk.js";
const api = new InduwaraLK();
const nic = await api.nic("199234567890");

Python

import requests
r = requests.get(
  "https://induwara.lk/api/v1/nic/199234567890")
print(r.json()["data"])

Machine-readable spec: OpenAPI 3.1 · JS SDK · API index (JSON)

Rate limits

TierDaily limitNotes
Anonymous50 / day per IPNo key needed. Voice not available.
Free key1,000 / dayVoice: 100 / day. Resets 00:00 UTC.

Endpoints

AI

POST/api/v1/voice key required Featured

AI Voice (Text to Speech)

Convert text into natural AI speech (MP3). Requires a free API key. Body: { text, voice }. Hosted on our own infrastructure.

ParamInReqDescription
textqueryyesText to synthesise (JSON body). May embed effects: inline [pause] [laugh] [sigh], or wrapping <whisper>…</whisper> <slow>…</slow>.
voicequerynoVoice id: eve | ara | leo | rex | sal (default eve).
languagequerynoLanguage code, e.g. en, auto, fr, de, hi, ja … (28 supported, default en).
codecquerynomp3 | wav (default mp3).
sample_ratequeryno8000 | 16000 | 22050 | 24000 | 44100 | 48000 Hz.
bit_ratequeryno32000 | 64000 | 96000 | 128000 | 192000 (mp3 only).
text_normalizationquerynoExpand numbers/dates/abbreviations before speaking (default true).

Example request

curl -X POST https://induwara.lk/api/v1/voice -H "Authorization: Bearer ilk_live_…" -H "Content-Type: application/json" -d '{"text":"Hello! <whisper>secret</whisper> [laugh]","voice":"eve","language":"en","codec":"mp3"}' --output voice.mp3

Example response

# Returns binary audio (Content-Type: audio/mpeg).
# Save it to a file:
curl -X POST https://induwara.lk/api/v1/voice \
  -H "Authorization: Bearer ilk_live_…" \
  -H "Content-Type: application/json" \
  -d '{"text":"Hello from Sri Lanka","voice":"eve"}' \
  --output voice.mp3
Full reference

Identity

GET/api/v1/nic/{number}

NIC Decoder

Decode a Sri Lankan NIC (old 10-char or new 12-digit) into the data the number encodes: date of birth, gender, age, serial and voting eligibility. Pure parsing — no personal database lookup.

ParamInReqDescription
numberpathyesThe NIC number.

Example request

curl "https://induwara.lk/api/v1/nic/199234567890"

Example response

{
  "ok": true,
  "data": {
    "nic": "199234567890",
    "valid": true,
    "format": "new",
    "dateOfBirth": "1992-12-10",
    "gender": "Male",
    "age": { "years": 33, "months": 5, "days": 24 },
    "serial": 6789,
    "votingEligible": null,
    "source": "Department for Registration of Persons, Sri Lanka",
    "lastVerified": "2026-05-10"
  },
  "meta": { "tier": "anonymous", "endpoint": "nic", "limit": 50, "remaining": 49 }
}
Full reference

Calendar

GET/api/v1/holidays

Public Holidays

Sri Lankan gazetted holidays for a year (public, bank, mercantile and poya days), with English/Sinhala/Tamil names.

ParamInReqDescription
yearquerynoYear (supported: 2026, 2027). Defaults to current year.
typequerynoFilter to one calendar: public | bank | mercantile.

Example request

curl "https://induwara.lk/api/v1/holidays?year=2026&type=public"

Example response

{
  "ok": true,
  "data": {
    "year": 2026,
    "type": "public",
    "count": 24,
    "holidays": [
      { "date": "2026-01-03", "name": "Duruthu Full Moon Poya Day",
        "type": "Buddhist", "public": true, "bank": true, "mercantile": true }
    ],
    "source": "Sri Lanka Government Gazette",
    "lastVerified": "2026-05-16"
  }
}
Full reference
GET/api/v1/working-days

Working Days

Count business days between two dates, excluding weekends and Sri Lankan holidays for the chosen calendar.

ParamInReqDescription
fromqueryyesStart date YYYY-MM-DD.
toqueryyesEnd date YYYY-MM-DD.
calendarquerynopublic | bank | mercantile | government (default: mercantile).
saturdayquerynoSet to 1 to count Saturdays as working days.

Example request

curl "https://induwara.lk/api/v1/working-days?from=2026-01-01&to=2026-03-31&calendar=mercantile"

Example response

{
  "ok": true,
  "data": {
    "from": "2026-01-01", "to": "2026-03-31", "calendar": "mercantile",
    "workingDays": 58, "totalDays": 90, "weekendDays": 25, "holidayDays": 7
  }
}
Full reference

Finance

GET/api/v1/tax/paye

Income Tax (PAYE / APIT)

Calculate Sri Lankan personal income tax (APIT) on a gross monthly salary using the current IRD brackets.

ParamInReqDescription
monthlyqueryyesGross monthly salary in LKR.

Example request

curl "https://induwara.lk/api/v1/tax/paye?monthly=250000"

Example response

{
  "ok": true,
  "data": {
    "grossMonthly": 250000, "grossAnnual": 3000000,
    "monthlyTax": 8000, "annualTax": 96000,
    "monthlyNet": 242000, "annualNet": 2904000, "currency": "LKR"
  }
}
Full reference
GET/api/v1/vat

VAT Calculator

Add or remove Sri Lankan VAT. mode=add adds VAT to a net amount; mode=remove extracts VAT from a gross amount. Rate defaults to the standard 18%.

ParamInReqDescription
amountqueryyesAmount in LKR.
ratequerynoVAT rate %, default 18.
modequerynoadd | remove (default add).

Example request

curl "https://induwara.lk/api/v1/vat?amount=10000&rate=18&mode=add"

Example response

{
  "ok": true,
  "data": {
    "mode": "add", "rate": 18, "base": 10000,
    "vat": 1800, "total": 11800, "currency": "LKR"
  }
}
Full reference
GET/api/v1/loan

Loan EMI Calculator

Equated monthly instalment (EMI) plus total interest and total payment, using the reducing-balance formula.

ParamInReqDescription
principalqueryyesLoan amount in LKR.
ratequeryyesAnnual interest rate %.
monthsqueryyesTenure in months.

Example request

curl "https://induwara.lk/api/v1/loan?principal=5000000&rate=12.5&months=240"

Example response

{
  "ok": true,
  "data": {
    "principal": 5000000, "annualRate": 12.5, "tenureMonths": 240,
    "emi": 56785.71, "totalInterest": 8628570.4, "totalPayment": 13628570.4,
    "currency": "LKR"
  }
}
Full reference
GET/api/v1/fd

Fixed Deposit Calculator

Fixed-deposit maturity and effective annual yield. payout=cumulative|monthly; wht=1 applies the 5% withholding tax on interest.

ParamInReqDescription
principalqueryyesDeposit amount in LKR.
ratequeryyesAnnual interest rate %.
monthsqueryyesTenure in months.
payoutquerynocumulative | monthly.
whtqueryno1 to apply 5% WHT.

Example request

curl "https://induwara.lk/api/v1/fd?principal=1000000&rate=10&months=12&payout=cumulative"

Example response

{
  "ok": true,
  "data": {
    "principal": 1000000, "annualRate": 10, "tenureMonths": 12,
    "payout": "cumulative", "maturityGross": 1104713.07,
    "totalInterestGross": 104713.07, "effectiveAnnualYieldGross": 10.47,
    "currency": "LKR"
  }
}
Full reference

Utility

GET/api/v1/convert/land

Land Area Converter

Convert a Sri Lankan land area between perch, rood, acre, cent, hectare, m², ft² and yd², with acre-rood-perch deed notation.

ParamInReqDescription
valuequeryyesThe amount to convert.
fromqueryyesSource unit: perch | sqft | sqm | sqyd | rood | acre | hectare | cent.

Example request

curl "https://induwara.lk/api/v1/convert/land?value=10&from=perch"

Example response

{
  "ok": true,
  "data": {
    "value": 10, "from": "perch", "squareMetres": 252.9285264,
    "values": { "perch": 10, "acre": 0.0625, "rood": 0.25, "hectare": 0.0253 },
    "deed": { "acres": 0, "roods": 0, "perches": 10, "text": "0A-0R-10.0P" }
  }
}
Full reference

Reference

GET/api/v1/districts

Districts of Sri Lanka

The 25 districts with province, a short tagline and notable places — for address forms, dropdowns and travel apps.

Example request

curl "https://induwara.lk/api/v1/districts"

Example response

{
  "ok": true,
  "data": {
    "count": 25,
    "districts": [
      { "slug": "kandy", "name": "Kandy", "province": "Central",
        "tagline": "…", "notablePlaces": ["Temple of the Tooth", "…"] }
    ]
  }
}
Full reference

Frequently asked questions

Is the API free?
Yes. Every endpoint is free. You can call most of them with no key at a lower daily limit; create a free API key for a higher limit. Some endpoints (like voice) require a free key.
Do I need an API key?
Not to try it — anonymous calls work at 50 requests/day per IP. For 1,000/day and access to key-only endpoints, create a free key in your developer dashboard.
Can I use this in production / commercially?
Yes, within the rate limits. Data endpoints cite their official source and a last-verified date. We may introduce higher paid tiers later, but the current free tier stays free.
Is the NIC API a personal-data lookup?
No. It only decodes the information encoded in the NIC number itself (date of birth, gender, serial). It does not look anyone up in any database.