Skip to content
induwara.lk
Premium

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
FUDDU DeFi Protocol
AI-built site

FUDDU DeFi Protocol

"Create a DeFi protocol website called FUDDU with these features: PROTOCOL: FUDDU TREASURY: 0x1294a7e473236990210296223b38fc4163419244 TOKEN

by Anonymous #23

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
GET/api/v1/plate/{plate}

Vehicle Number Plate Decoder

Decode a Sri Lankan number plate into the province, vehicle class and approximate issue era encoded in the letters and digits. Pure parsing of the plate string — no vehicle register is queried and no owner information is returned.

ParamInReqDescription
platepathyesThe number plate. Use hyphens for spaces, e.g. WP-CAB-1234 or CAR-4582.

Example request

curl "https://induwara.lk/api/v1/plate/WP-CAB-1234"
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
GET/api/v1/tools

Tool Catalogue

Search the full catalogue of live tools on induwara.lk. Returns each tool's title, description, category, keywords and URL, ordered by real organic traffic, and flags the tools that also have a computational API endpoint.

ParamInReqDescription
qquerynoFree-text search across title, description and keywords.
categoryquerynoFilter to one category, e.g. Finance, Education, AI.
limitquerynoResults per page, 1-200 (default 50).
offsetquerynoPagination offset (default 0).

Example request

curl "https://induwara.lk/api/v1/tools?q=tax&limit=10"
Full reference

Education

GET/api/v1/z-score

A/L Z-Score Calculator

Compute a Sri Lankan A/L Z-score from three subject marks, with per-subject Z, the final Z and an estimated all-island percentile. Built-in subject statistics are approximate — pass the verbatim Department of Examinations mean and standard deviation for an authoritative result. Call with no parameters to list valid subject ids and streams.

ParamInReqDescription
subjectsquerynoThree comma-separated terms as subject:mark, e.g. combined-maths:75,physics:68,chemistry:71. Optionally override the reference statistics per subject as subject:mark:mean:sd. Omit entirely to get the list of subject ids and streams.

Example request

curl "https://induwara.lk/api/v1/z-score?subjects=combined-maths:75,physics:68,chemistry:71"
Full reference
GET/api/v1/scholarship-cutoff

Grade 5 Scholarship Cut-Off & School Eligibility

Check whether a Grade 5 Scholarship mark clears a district's official cut-off, and which national schools in that district it qualifies for under the merit quota. Covers the 2024-2026 exams, all 25 districts, both mediums, and the Ministry of Education's complete 302-school Grade 6 admission list. Call with no parameters to list valid years, districts and mediums.

ParamInReqDescription
yearquerynoExam year. Defaults to the latest published year.
districtqueryyesOne of the 25 Sri Lankan districts.
mediumqueryyesExam language: Sinhala or Tamil.
markquerynoChild's mark, 0-200. Omit to get just the district cut-off.

Example request

curl "https://induwara.lk/api/v1/scholarship-cutoff?year=2026&district=Colombo&medium=Sinhala&mark=174"
Full reference

News

GET/api/v1/news

Sri Lanka News Feed

Structured, sourced writeups on trending Sri Lanka topics, each reviewed and approved by a human before publishing. Every post lists the independent source URLs used to verify it. Call with ?slug=<slug> for one full post (title, full body, every source), or without it for a paginated, searchable list of summaries.

ParamInReqDescription
slugquerynoGet one full post by slug, including its full body and source URLs.
qquerynoFree-text search across title, excerpt, tags and keywords.
categoryquerynoFilter to one category, e.g. Sports, Economy, Tech.
limitquerynoResults per page, 1-100 (default 20).
offsetquerynoPagination offset (default 0).

Example request

curl "https://induwara.lk/api/v1/news?limit=5"

Example response

{
  "ok": true,
  "data": {
    "total": 3, "limit": 20, "offset": 0, "query": null, "category": null,
    "categories": ["Economy", "Sports", "Tech"],
    "feed": "https://induwara.lk/news/feed.xml",
    "posts": [
      { "slug": "rumesh-pathirage-wins-the-diamond-league-final-a-first-for-sri-lanka",
        "title": "Rumesh Pathirage wins the Diamond League Final — a first for Sri Lanka",
        "category": "Sports", "publishedAt": "2026-09-06T06:45:26.000Z",
        "readingMinutes": 2, "sourceCount": 3,
        "url": "https://induwara.lk/news/rumesh-pathirage-wins-the-diamond-league-final-a-first-for-sri-lanka" }
    ]
  }
}
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.