Skip to content

Quick start

  1. 1

    Sign up free and create an API key in the dashboard.

  2. 2

    Call any endpoint with the x-api-key header.

cURL
curl -H "x-api-key: ga_live_..." "https://kajidata.artonlabs.com/v1/indonesia:hari-libur/check?date=2026-08-17"

URL pattern: GET https://kajidata.artonlabs.com/v1/{category}:{api}/{endpoint}

Authentication

The key can also be sent as Authorization: Bearer … or the api_key query parameter (avoid the latter in production because URLs end up in logs). Add Accept-Language: id for Indonesian error messages.

Response format

Success
{
  "ok": true,
  "project": "indonesia:hari-libur",
  "endpoint": "check",
  "data": {
    "date": "2026-08-17",
    "is_holiday": true,
    "name": "...",
    "is_weekend": false
  },
  "meta": {
    "request_id": "9f2c1a7b3e5d4c21",
    "timestamp": "2026-11-01T05:05:18+00:00",
    "latency_ms": 300,
    "cached": false,
    "stale": false,
    "cost": 1,
    "quota_remaining": 999,
    "source": "Nager.Date",
    "fetched_at": "2026-11-01T05:05:18+00:00"
  }
}
Error
{
  "ok": false,
  "error": {
    "code": "invalid_params",
    "message": "...",
    "details": [
      {
        "loc": [
          "date"
        ],
        "msg": "..."
      }
    ]
  },
  "meta": {
    "request_id": "...",
    "timestamp": "..."
  }
}
FieldMeaning
meta.cachedtrue: served from cache, not billed
meta.staletrue: the source failed and this is the last good copy
meta.costquota used by this request
meta.sourcethe source that actually answered
meta.fetched_atwhen the data was fetched from the source

Error codes & billing

Only 200 responses fetched directly from the source use quota. Cache hits and stale copies are free.

CodeHTTPBilled?Meaning
missing_api_key401noThe x-api-key header is missing
invalid_api_key401noThe key is wrong or has been revoked
plan_required403noThe API needs a higher plan
not_found404noEndpoint or data (e.g. an area code) does not exist
invalid_params422nodetails lists the invalid fields
rate_limited429noToo many requests per second; see Retry-After
quota_exceeded429noThis month's quota is used up
upstream_error502noEvery source failed and no saved copy exists yet
upstream_timeout504noThe source took too long to respond
unavailable503noThe gateway is temporarily unavailable; retry later

Response headers

X-Request-Id
Include it when contacting support.
X-Cache
HIT, MISS or STALE.
X-Request-Cost
Quota used by this request.
X-Quota-Remaining
Quota left this month.
X-Latency-Ms
Time spent in the gateway.
Retry-After
Seconds to wait after a rate_limited error.

OpenAPI, SDKs and AI agents

Use a generator such as openapi-generator to build a client in any language. For AI agents, see the MCP server and llms.txt.

Are you sure?