When Indonesia can actually work.
An Indonesian deadline does not move on the dates a generic holiday feed knows about. It moves on Idul Fitri and the joint-leave days bolted around it, on Isakawu, on the day a ministry decides to bridge a weekend. This is that calendar as four endpoints: the year list, a working-day count between two dates, a yes/no on one date, and the next date work resumes. No account, no key, priced per call.
Coverage 2021-2027 — the range the government calendar publishes. Requests outside it are refused, not answered with an empty list.
Next on the calendar
- 2026-12-24 — Cuti Bersama Natal (Malam Natal) (joint leave)50 days away
- 2026-12-25 — Christmas Day51 days away
- 2026-12-31 — Malam Tahun Baru57 days away
Computed by the same code the paid routes run, on the government calendar, at page-request time. Source string returned by the API: Kalender libur nasional Pemerintah Indonesia (SKB tiga menteri).
What one call answers
| Question a contract or a payroll asks | Route | Shape of the answer |
|---|---|---|
| How many working days do we have between two dates? | GET /workdays?from=&to= | working_days, weekend_days, holiday_days, the dated list, and the calendar days so the arithmetic is checkable |
| Is this specific date off? | GET /holiday-check?date= | is_public_holiday, is_weekend, is_working_day, the name, and the next holiday after it |
| When can work resume? | GET /next-working-day?from= | the date plus every weekend and leave day it skipped and why |
| What does the year look like? | GET /holidays?year=2026 | dated list with Indonesian and English names, joint-leave flagged, days-away included |
Every route also answers as an MCP tool (indonesia_workdays, indonesia_holiday_check, indonesia_next_working_day, indonesia_holidays) on the same price, so an agent that speaks MCP never has to parse HTTP.
Try it
curl -i "https://indo-news-api.vercel.app/workdays?from=2026-12-01&to=2027-01-31"
First response is HTTP 402 with PAYMENT-REQUIRED: price, asset, network, and the address to pay. Repeat the identical URL with the PAYMENT-SIGNATURE header and the JSON arrives. No key is ever stored on our side because there is nothing to store.
{"mcpServers":{"indo-news":{"url":"https://indo-news-api.vercel.app/mcp"}}}
Seven MCP tools are free, including the coverage preview; the calendar tools are paid on the same rails as HTTP.
Before you pay
- Nothing here is a subscription. One call, one price. If you would rather not pay per call, $19 buys 30 days of unmetered access to all 18 data and news endpoints, delivered as a bearer token inside the response you paid for, and
/license/claimre-issues it from the same transaction hash if you lose it. - An answer you cannot use is refused before it is billed. Impossible parameters get
400; an unreachable upstream with no stored copy gets503with"charged": false. Both happen before a payment challenge exists. On the MPP rail the authorisation is already moving when our code runs, so this is the part we can actually control. - The calendar is a third party's. We read the government's published list; when a ministry revises it, our numbers follow the revision, and dates in the far year can change. We do not sell certainty about a decree that has not been signed.
- No SLA, as-is. This is a small paid endpoint, not an enterprise data contract. The honest test is a $0.05 call.
Questions agents ask
- Does it include cuti bersama, the joint leave days around religious holidays?
- Yes. The primary source is the Indonesian government's published holiday calendar (the SKB three-minister decree), which lists national holidays and joint-leave days together. A global calendar API that only knows fixed public dates will miss the joint-leave block around Idul Fitri, which is exactly when an Indonesian contract or payroll deadline moves.
- Which years are covered?
- Only 2021-2027. That is what the government calendar we read publishes, verified by re-reading the source. Ask for 2028 and the route refuses with a machine-readable reason instead of answering "no holidays" — an empty table is not a fact.
- How does an agent pay for it?
- There is no account and no API key. The first request is answered HTTP 402 with the price and the address; the agent pays USDC on Base, Polygon, Arbitrum or Avalanche (or MPP on Tempo), then repeats the same URL with the payment signature. A permissive licence is also offered at $19 for 30 days of unmetered calls, delivered inside the paid response.
- What happens if the upstream calendar is unreachable?
- A request whose parameters cannot be satisfied is answered 400, and a route whose single upstream is unreachable and has no cached copy on that instance is answered 503 with charged:false. Both are sent before any payment challenge exists, so nothing is billed. On x402 an error response also cancels settlement; on MPP the authorisation is already in flight, which is why refusing early matters.
- Can I check the data before paying?
- Yes. The free pages /libur and /libur/2026 render the same calendar, and the MCP server at /mcp answers a coverage question for free at /data/preview. The paid routes are the JSON contract with stable fields, day counts and the arithmetic already done.
Elsewhere
Rate card · What has actually settled · Team licences · Terms · Hari libur 2026 (Bahasa Indonesia) · Earthquake endpoint