{"openapi":"3.1.0","info":{"title":"KajiData","version":"0.2.0","description":"One API key for Indonesian public data."},"servers":[{"url":"https://kajidata.artonlabs.com"}],"security":[{"ApiKey":[]}],"paths":{"/v1/news:portal-search/search":{"get":{"operationId":"news_portal_search_search","summary":"Search headlines on one portal, newest first.","description":"Search headlines across 9 Indonesian news portals, together or one at a time, including older stories. Headlines, links and publish times only; read the full story on the publisher's site.\n\nSources: detikcom (www.detik.com), Kompas.com (search.kompas.com), ANTARA (www.antaranews.com), Republika (republika.co.id), VIVA (www.viva.co.id), SINDOnews (www.sindonews.com), JawaPos (www.jawapos.com), VOA Indonesia (www.voaindonesia.com), The Conversation Indonesia (theconversation.com). Cached for 1800s, costs 2 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"q","in":"query","required":true,"description":"Search text, e.g. pemilu","schema":{"maxLength":80,"minLength":3,"pattern":"^[\\w][\\w '\\-]*$","type":"string"}},{"name":"portal","in":"query","required":true,"description":"Portal: detik, kompas, antaranews, republika, viva, sindonews, jawapos, voaindonesia, theconversation","schema":{"pattern":"^(detik|kompas|antaranews|republika|viva|sindonews|jawapos|voaindonesia|theconversation)$","type":"string"}},{"name":"page","in":"query","required":false,"description":"Result page","schema":{"default":1,"maximum":20,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:portal-search/search?q=pemilu&portal=kompas\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:portal-search/search\",\n    params={\"q\": \"pemilu\", \"portal\": \"kompas\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"pemilu\", \"portal\": \"kompas\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:portal-search/search?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:portal-search/search?' . http_build_query(['q' => 'pemilu', 'portal' => 'kompas']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"pemilu\")\n\tparams.Set(\"portal\", \"kompas\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:portal-search/search?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:portal-search/search?q=pemilu&portal=kompas\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:portal-search/search\")\nuri.query = URI.encode_www_form({\"q\" => \"pemilu\", \"portal\" => \"kompas\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:portal-search/search?q=pemilu&portal=kompas\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/dev:dns/lookup":{"get":{"operationId":"dev_dns_lookup","summary":"DNS records of a domain.","description":"DNS records of a domain (A, AAAA, MX, TXT, NS, CNAME), useful for checking domain and email setup.\n\nSources: Cloudflare DNS over HTTPS (cloudflare-dns.com). Cached for 300s, costs 1 quota unit (cache hits are free).","tags":["Developer Tools"],"parameters":[{"name":"domain","in":"query","required":true,"description":"Domain name, e.g. example.com","schema":{"maxLength":253,"pattern":"^([A-Za-z0-9_]([A-Za-z0-9_-]{0,61}[A-Za-z0-9])?\\.)+[A-Za-z]{2,63}$","type":"string"}},{"name":"type","in":"query","required":false,"description":"Record type","schema":{"default":"A","enum":["A","AAAA","MX","TXT","NS","CNAME"],"type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/dev:dns/lookup?domain=example.com&type=MX\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/dev:dns/lookup\",\n    params={\"domain\": \"example.com\", \"type\": \"MX\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"domain\": \"example.com\", \"type\": \"MX\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/dev:dns/lookup?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/dev:dns/lookup?' . http_build_query(['domain' => 'example.com', 'type' => 'MX']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"domain\", \"example.com\")\n\tparams.Set(\"type\", \"MX\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/dev:dns/lookup?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/dev:dns/lookup?domain=example.com&type=MX\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/dev:dns/lookup\")\nuri.query = URI.encode_www_form({\"domain\" => \"example.com\", \"type\" => \"MX\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/dev:dns/lookup?domain=example.com&type=MX\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/dev:firefox-addons/cari":{"get":{"operationId":"dev_firefox_addons_cari","summary":"Search add-ons.","description":"Search Firefox add-ons with version, daily users and rating.\n\nSources: Mozilla Add-ons API (addons.mozilla.org). Cached for 3600s, costs 1 quota unit (cache hits are free).","tags":["Developer Tools"],"parameters":[{"name":"q","in":"query","required":true,"description":"Search text","schema":{"maxLength":100,"minLength":2,"type":"string"}},{"name":"lang","in":"query","required":false,"description":"Text language","schema":{"default":"id","enum":["id","en-US"],"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/dev:firefox-addons/cari?q=password&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/dev:firefox-addons/cari\",\n    params={\"q\": \"password\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"password\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/dev:firefox-addons/cari?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/dev:firefox-addons/cari?' . http_build_query(['q' => 'password', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"password\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/dev:firefox-addons/cari?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/dev:firefox-addons/cari?q=password&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/dev:firefox-addons/cari\")\nuri.query = URI.encode_www_form({\"q\" => \"password\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/dev:firefox-addons/cari?q=password&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/dev:flathub/aplikasi":{"get":{"operationId":"dev_flathub_aplikasi","summary":"Details of one app.","description":"Name, summary, developer, license and install count of Linux apps on Flathub.\n\nSources: Flathub API (flathub.org). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Developer Tools"],"parameters":[{"name":"app_id","in":"query","required":true,"description":"App ID, e.g. org.gimp.GIMP","schema":{"maxLength":120,"pattern":"^[A-Za-z0-9_-]+(\\.[A-Za-z0-9_-]+)+$","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/dev:flathub/aplikasi?app_id=org.gimp.GIMP\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/dev:flathub/aplikasi\",\n    params={\"app_id\": \"org.gimp.GIMP\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"app_id\": \"org.gimp.GIMP\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/dev:flathub/aplikasi?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/dev:flathub/aplikasi?' . http_build_query(['app_id' => 'org.gimp.GIMP']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"app_id\", \"org.gimp.GIMP\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/dev:flathub/aplikasi?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/dev:flathub/aplikasi?app_id=org.gimp.GIMP\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/dev:flathub/aplikasi\")\nuri.query = URI.encode_www_form({\"app_id\" => \"org.gimp.GIMP\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/dev:flathub/aplikasi?app_id=org.gimp.GIMP\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/dev:npm/cari":{"get":{"operationId":"dev_npm_cari","summary":"Search packages.","description":"Search JavaScript packages on npm and see the latest version, license and repository link.\n\nSources: npm Registry (registry.npmjs.org). Cached for 3600s, costs 1 quota unit (cache hits are free).","tags":["Developer Tools"],"parameters":[{"name":"q","in":"query","required":true,"description":"Search text","schema":{"maxLength":100,"minLength":2,"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/dev:npm/cari?q=date+picker&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/dev:npm/cari\",\n    params={\"q\": \"date picker\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"date picker\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/dev:npm/cari?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/dev:npm/cari?' . http_build_query(['q' => 'date picker', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"date picker\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/dev:npm/cari?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/dev:npm/cari?q=date+picker&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/dev:npm/cari\")\nuri.query = URI.encode_www_form({\"q\" => \"date picker\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/dev:npm/cari?q=date+picker&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/dev:npm/paket":{"get":{"operationId":"dev_npm_paket","summary":"Latest version details of one package.","description":"Search JavaScript packages on npm and see the latest version, license and repository link.\n\nSources: npm Registry (registry.npmjs.org). Cached for 3600s, costs 1 quota unit (cache hits are free).","tags":["Developer Tools"],"parameters":[{"name":"name","in":"query","required":true,"description":"Package name, e.g. express","schema":{"maxLength":120,"pattern":"^(@[a-z0-9._-]+/)?[a-z0-9._-]+$","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/dev:npm/paket?name=express\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/dev:npm/paket\",\n    params={\"name\": \"express\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"name\": \"express\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/dev:npm/paket?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/dev:npm/paket?' . http_build_query(['name' => 'express']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"name\", \"express\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/dev:npm/paket?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/dev:npm/paket?name=express\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/dev:npm/paket\")\nuri.query = URI.encode_www_form({\"name\" => \"express\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/dev:npm/paket?name=express\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/dev:rdap/domain":{"get":{"operationId":"dev_rdap_domain","summary":"Registration information of a domain.","description":"A domain's registration and expiry dates, status, registrar and name servers through RDAP (the official successor of WHOIS). Domain owner contacts are not shown.\n\nSources: rdap.org (registry RDAP resmi). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Developer Tools"],"parameters":[{"name":"domain","in":"query","required":true,"description":"Domain name, e.g. example.com","schema":{"maxLength":253,"pattern":"^([A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?\\.)+[A-Za-z]{2,63}$","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/dev:rdap/domain?domain=example.com\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/dev:rdap/domain\",\n    params={\"domain\": \"example.com\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"domain\": \"example.com\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/dev:rdap/domain?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/dev:rdap/domain?' . http_build_query(['domain' => 'example.com']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"domain\", \"example.com\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/dev:rdap/domain?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/dev:rdap/domain?domain=example.com\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/dev:rdap/domain\")\nuri.query = URI.encode_www_form({\"domain\" => \"example.com\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/dev:rdap/domain?domain=example.com\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/dev:pypi/package":{"get":{"operationId":"dev_pypi_package","summary":"Information about one package.","description":"Latest version, license, Python requirement and release history of a package.\n\nSources: PyPI JSON API (pypi.org). Cached for 3600s, costs 1 quota unit (cache hits are free).","tags":["Developer Tools"],"parameters":[{"name":"name","in":"query","required":true,"description":"Package name, e.g. django","schema":{"maxLength":100,"minLength":1,"pattern":"^[A-Za-z0-9._\\-]+$","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/dev:pypi/package?name=django\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/dev:pypi/package\",\n    params={\"name\": \"django\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"name\": \"django\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/dev:pypi/package?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/dev:pypi/package?' . http_build_query(['name' => 'django']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"name\", \"django\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/dev:pypi/package?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/dev:pypi/package?name=django\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/dev:pypi/package\")\nuri.query = URI.encode_www_form({\"name\" => \"django\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/dev:pypi/package?name=django\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/dev:nvd/cve":{"get":{"operationId":"dev_nvd_cve","summary":"Details of one CVE.","description":"Description, severity and references for vulnerabilities from the National Vulnerability Database.\n\nSources: NIST National Vulnerability Database API. Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Developer Tools"],"parameters":[{"name":"id","in":"query","required":true,"description":"CVE ID, e.g. CVE-2021-44228","schema":{"pattern":"^CVE-\\d{4}-\\d{4,}$","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/dev:nvd/cve?id=CVE-2021-44228\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/dev:nvd/cve\",\n    params={\"id\": \"CVE-2021-44228\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"id\": \"CVE-2021-44228\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/dev:nvd/cve?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/dev:nvd/cve?' . http_build_query(['id' => 'CVE-2021-44228']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"id\", \"CVE-2021-44228\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/dev:nvd/cve?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/dev:nvd/cve?id=CVE-2021-44228\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/dev:nvd/cve\")\nuri.query = URI.encode_www_form({\"id\" => \"CVE-2021-44228\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/dev:nvd/cve?id=CVE-2021-44228\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/dev:nvd/search":{"get":{"operationId":"dev_nvd_search","summary":"Search CVEs by keyword.","description":"Description, severity and references for vulnerabilities from the National Vulnerability Database.\n\nSources: NIST National Vulnerability Database API. Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Developer Tools"],"parameters":[{"name":"q","in":"query","required":true,"description":"Keyword, e.g. log4j","schema":{"maxLength":100,"minLength":3,"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/dev:nvd/search?q=log4j&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/dev:nvd/search\",\n    params={\"q\": \"log4j\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"log4j\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/dev:nvd/search?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/dev:nvd/search?' . http_build_query(['q' => 'log4j', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"log4j\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/dev:nvd/search?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/dev:nvd/search?q=log4j&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/dev:nvd/search\")\nuri.query = URI.encode_www_form({\"q\" => \"log4j\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/dev:nvd/search?q=log4j&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/dev:known-exploited/catalog":{"get":{"operationId":"dev_known_exploited_catalog","summary":"Latest catalog, newest additions first.","description":"Vulnerabilities proven to be exploited in the wild, with CISA remediation deadlines.\n\nSources: CISA KEV Catalog. Cached for 3600s, costs 1 quota unit (cache hits are free).","tags":["Developer Tools"],"parameters":[{"name":"q","in":"query","required":false,"description":"Filter by vendor, product or CVE","schema":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":20,"maximum":100,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/dev:known-exploited/catalog?q=microsoft&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/dev:known-exploited/catalog\",\n    params={\"q\": \"microsoft\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"microsoft\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/dev:known-exploited/catalog?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/dev:known-exploited/catalog?' . http_build_query(['q' => 'microsoft', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"microsoft\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/dev:known-exploited/catalog?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/dev:known-exploited/catalog?q=microsoft&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/dev:known-exploited/catalog\")\nuri.query = URI.encode_www_form({\"q\" => \"microsoft\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/dev:known-exploited/catalog?q=microsoft&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/dev:stackoverflow/cari":{"get":{"operationId":"dev_stackoverflow_cari","summary":"Search the most relevant questions.","description":"Search programming questions on Stack Overflow with score, answer count and link.\n\nSources: Stack Exchange API (api.stackexchange.com). Cached for 3600s, costs 1 quota unit (cache hits are free).","tags":["Developer Tools"],"parameters":[{"name":"q","in":"query","required":true,"description":"Search text","schema":{"maxLength":120,"minLength":2,"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":10,"maximum":30,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/dev:stackoverflow/cari?q=django+migrations&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/dev:stackoverflow/cari\",\n    params={\"q\": \"django migrations\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"django migrations\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/dev:stackoverflow/cari?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/dev:stackoverflow/cari?' . http_build_query(['q' => 'django migrations', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"django migrations\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/dev:stackoverflow/cari?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/dev:stackoverflow/cari?q=django+migrations&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/dev:stackoverflow/cari\")\nuri.query = URI.encode_www_form({\"q\" => \"django migrations\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/dev:stackoverflow/cari?q=django+migrations&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/dev:wayback/arsip":{"get":{"operationId":"dev_wayback_arsip","summary":"Closest archived copy.","description":"Find the closest archived copy of a web page in the Wayback Machine, optionally around a given date.\n\nSources: Internet Archive Wayback API (archive.org). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Developer Tools"],"parameters":[{"name":"url","in":"query","required":true,"description":"Page address, e.g. bi.go.id","schema":{"maxLength":500,"minLength":4,"type":"string"}},{"name":"date","in":"query","required":false,"description":"Optional date, YYYYMMDD","schema":{"default":"","pattern":"^(\\d{4}(\\d{2}(\\d{2})?)?)?$","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/dev:wayback/arsip?url=bi.go.id&date=20200101\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/dev:wayback/arsip\",\n    params={\"url\": \"bi.go.id\", \"date\": \"20200101\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"url\": \"bi.go.id\", \"date\": \"20200101\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/dev:wayback/arsip?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/dev:wayback/arsip?' . http_build_query(['url' => 'bi.go.id', 'date' => '20200101']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"url\", \"bi.go.id\")\n\tparams.Set(\"date\", \"20200101\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/dev:wayback/arsip?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/dev:wayback/arsip?url=bi.go.id&date=20200101\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/dev:wayback/arsip\")\nuri.query = URI.encode_www_form({\"url\" => \"bi.go.id\", \"date\" => \"20200101\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/dev:wayback/arsip?url=bi.go.id&date=20200101\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/entertainment:cheapshark/diskon":{"get":{"operationId":"entertainment_cheapshark_diskon","summary":"Current best game deals.","description":"The best PC game deals across digital stores, with normal price, sale price and link.\n\nSources: CheapShark API (cheapshark.com). Cached for 1800s, costs 1 quota unit (cache hits are free).","tags":["Entertainment"],"parameters":[{"name":"q","in":"query","required":false,"description":"Optional game title","schema":{"default":"","maxLength":80,"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum deals","schema":{"default":10,"maximum":60,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/entertainment:cheapshark/diskon?limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/entertainment:cheapshark/diskon\",\n    params={\"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/entertainment:cheapshark/diskon?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/entertainment:cheapshark/diskon?' . http_build_query(['limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/entertainment:cheapshark/diskon?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/entertainment:cheapshark/diskon?limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/entertainment:cheapshark/diskon\")\nuri.query = URI.encode_www_form({\"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/entertainment:cheapshark/diskon?limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/entertainment:itunes/cari":{"get":{"operationId":"entertainment_itunes_cari","summary":"Search Apple's catalog.","description":"Search songs, albums, movies, podcasts and apps in Apple's catalog with links.\n\nSources: iTunes Search API (itunes.apple.com). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Entertainment"],"parameters":[{"name":"q","in":"query","required":true,"description":"Search text","schema":{"maxLength":100,"minLength":2,"type":"string"}},{"name":"media","in":"query","required":false,"description":"Media type","schema":{"default":"music","enum":["music","movie","podcast","software","ebook"],"type":"string"}},{"name":"country","in":"query","required":false,"description":"2-letter store country","schema":{"default":"ID","pattern":"^[A-Za-z]{2}$","type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/entertainment:itunes/cari?q=noah&media=music&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/entertainment:itunes/cari\",\n    params={\"q\": \"noah\", \"media\": \"music\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"noah\", \"media\": \"music\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/entertainment:itunes/cari?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/entertainment:itunes/cari?' . http_build_query(['q' => 'noah', 'media' => 'music', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"noah\")\n\tparams.Set(\"media\", \"music\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/entertainment:itunes/cari?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/entertainment:itunes/cari?q=noah&media=music&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/entertainment:itunes/cari\")\nuri.query = URI.encode_www_form({\"q\" => \"noah\", \"media\" => \"music\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/entertainment:itunes/cari?q=noah&media=music&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/entertainment:musicbrainz/musisi":{"get":{"operationId":"entertainment_musicbrainz_musisi","summary":"Search artists.","description":"Search musicians and bands with country, type and active years from the open MusicBrainz database.\n\nSources: MusicBrainz API (musicbrainz.org). Cached for 604800s, costs 1 quota unit (cache hits are free).","tags":["Entertainment"],"parameters":[{"name":"q","in":"query","required":true,"description":"Artist name","schema":{"maxLength":100,"minLength":2,"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":10,"maximum":25,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/entertainment:musicbrainz/musisi?q=dewa+19&limit=3\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/entertainment:musicbrainz/musisi\",\n    params={\"q\": \"dewa 19\", \"limit\": \"3\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"dewa 19\", \"limit\": \"3\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/entertainment:musicbrainz/musisi?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/entertainment:musicbrainz/musisi?' . http_build_query(['q' => 'dewa 19', 'limit' => '3']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"dewa 19\")\n\tparams.Set(\"limit\", \"3\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/entertainment:musicbrainz/musisi?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/entertainment:musicbrainz/musisi?q=dewa+19&limit=3\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/entertainment:musicbrainz/musisi\")\nuri.query = URI.encode_www_form({\"q\" => \"dewa 19\", \"limit\" => \"3\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/entertainment:musicbrainz/musisi?q=dewa+19&limit=3\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/entertainment:pokeapi/pokemon":{"get":{"operationId":"entertainment_pokeapi_pokemon","summary":"Data of one Pokémon.","description":"Pokémon types, stats, abilities, height and weight, handy for practice projects.\n\nSources: PokéAPI (pokeapi.co). Cached for 2592000s, costs 1 quota unit (cache hits are free).","tags":["Entertainment"],"parameters":[{"name":"name","in":"query","required":true,"description":"Name or number, e.g. pikachu","schema":{"pattern":"^[A-Za-z0-9-]{1,40}$","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/entertainment:pokeapi/pokemon?name=pikachu\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/entertainment:pokeapi/pokemon\",\n    params={\"name\": \"pikachu\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"name\": \"pikachu\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/entertainment:pokeapi/pokemon?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/entertainment:pokeapi/pokemon?' . http_build_query(['name' => 'pikachu']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"name\", \"pikachu\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/entertainment:pokeapi/pokemon?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/entertainment:pokeapi/pokemon?name=pikachu\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/entertainment:pokeapi/pokemon\")\nuri.query = URI.encode_www_form({\"name\" => \"pikachu\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/entertainment:pokeapi/pokemon?name=pikachu\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/entertainment:tvmaze/cari":{"get":{"operationId":"entertainment_tvmaze_cari","summary":"Search TV shows.","description":"Search TV shows with genres, language, status, rating and network.\n\nSources: TVmaze API (tvmaze.com). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Entertainment"],"parameters":[{"name":"q","in":"query","required":true,"description":"Show title","schema":{"maxLength":100,"minLength":2,"type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/entertainment:tvmaze/cari?q=severance\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/entertainment:tvmaze/cari\",\n    params={\"q\": \"severance\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"severance\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/entertainment:tvmaze/cari?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/entertainment:tvmaze/cari?' . http_build_query(['q' => 'severance']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"severance\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/entertainment:tvmaze/cari?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/entertainment:tvmaze/cari?q=severance\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/entertainment:tvmaze/cari\")\nuri.query = URI.encode_www_form({\"q\" => \"severance\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/entertainment:tvmaze/cari?q=severance\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/finance:binance/ticker":{"get":{"operationId":"finance_binance_ticker","summary":"Price and 24-hour statistics for one pair.","description":"Last price and 24-hour statistics for crypto pairs on Binance, from its public market data endpoint.\n\nSources: Binance Market Data (data-api.binance.vision). Cached for 30s, costs 1 quota unit (cache hits are free).","tags":["Finance"],"parameters":[{"name":"symbol","in":"query","required":false,"description":"Pair symbol, e.g. BTCUSDT","schema":{"default":"BTCUSDT","pattern":"^[A-Za-z0-9]{4,20}$","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/finance:binance/ticker?symbol=BTCUSDT\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/finance:binance/ticker\",\n    params={\"symbol\": \"BTCUSDT\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"symbol\": \"BTCUSDT\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/finance:binance/ticker?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/finance:binance/ticker?' . http_build_query(['symbol' => 'BTCUSDT']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"symbol\", \"BTCUSDT\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/finance:binance/ticker?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/finance:binance/ticker?symbol=BTCUSDT\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/finance:binance/ticker\")\nuri.query = URI.encode_www_form({\"symbol\" => \"BTCUSDT\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/finance:binance/ticker?symbol=BTCUSDT\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/finance:bitcoin-ticker/harga":{"get":{"operationId":"finance_bitcoin_ticker_harga","summary":"Bitcoin price in one currency.","description":"Current Bitcoin price (last, buy, sell) in many world currencies.\n\nSources: Blockchain.com (blockchain.info). Cached for 60s, costs 1 quota unit (cache hits are free).","tags":["Finance"],"parameters":[{"name":"currency","in":"query","required":false,"description":"3-letter currency code","schema":{"default":"USD","pattern":"^[A-Za-z]{3}$","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/finance:bitcoin-ticker/harga?currency=USD\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/finance:bitcoin-ticker/harga\",\n    params={\"currency\": \"USD\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"currency\": \"USD\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/finance:bitcoin-ticker/harga?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/finance:bitcoin-ticker/harga?' . http_build_query(['currency' => 'USD']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"currency\", \"USD\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/finance:bitcoin-ticker/harga?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/finance:bitcoin-ticker/harga?currency=USD\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/finance:bitcoin-ticker/harga\")\nuri.query = URI.encode_www_form({\"currency\" => \"USD\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/finance:bitcoin-ticker/harga?currency=USD\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/finance:bls/deret":{"get":{"operationId":"finance_bls_deret","summary":"Latest values of one data series.","description":"Official BLS data series such as CPI inflation (CUUR0000SA0) and US unemployment (LNS14000000). Cite the retrieval date (meta.fetched_at) when quoting.\n\nSources: BLS Public Data API (bls.gov). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Finance"],"parameters":[{"name":"series","in":"query","required":true,"description":"BLS series ID, e.g. CUUR0000SA0","schema":{"pattern":"^[A-Za-z0-9]{6,30}$","type":"string"}},{"name":"limit","in":"query","required":false,"description":"Number of latest observations","schema":{"default":12,"maximum":36,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/finance:bls/deret?series=CUUR0000SA0&limit=6\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/finance:bls/deret\",\n    params={\"series\": \"CUUR0000SA0\", \"limit\": \"6\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"series\": \"CUUR0000SA0\", \"limit\": \"6\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/finance:bls/deret?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/finance:bls/deret?' . http_build_query(['series' => 'CUUR0000SA0', 'limit' => '6']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"series\", \"CUUR0000SA0\")\n\tparams.Set(\"limit\", \"6\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/finance:bls/deret?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/finance:bls/deret?series=CUUR0000SA0&limit=6\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/finance:bls/deret\")\nuri.query = URI.encode_www_form({\"series\" => \"CUUR0000SA0\", \"limit\" => \"6\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/finance:bls/deret?series=CUUR0000SA0&limit=6\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/finance:cftc/posisi":{"get":{"operationId":"finance_cftc_posisi","summary":"Latest position reports for one market.","description":"Weekly positions of US futures traders (commercial and non-commercial) per market, such as gold and oil.\n\nSources: CFTC Public Reporting (publicreporting.cftc.gov). Cached for 21600s, costs 1 quota unit (cache hits are free).","tags":["Finance"],"parameters":[{"name":"market","in":"query","required":true,"description":"Market keyword, e.g. GOLD","schema":{"pattern":"^[A-Za-z0-9 ]{3,40}$","type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum reports","schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/finance:cftc/posisi?market=GOLD&limit=3\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/finance:cftc/posisi\",\n    params={\"market\": \"GOLD\", \"limit\": \"3\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"market\": \"GOLD\", \"limit\": \"3\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/finance:cftc/posisi?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/finance:cftc/posisi?' . http_build_query(['market' => 'GOLD', 'limit' => '3']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"market\", \"GOLD\")\n\tparams.Set(\"limit\", \"3\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/finance:cftc/posisi?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/finance:cftc/posisi?market=GOLD&limit=3\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/finance:cftc/posisi\")\nuri.query = URI.encode_www_form({\"market\" => \"GOLD\", \"limit\" => \"3\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/finance:cftc/posisi?market=GOLD&limit=3\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/finance:defillama/chains":{"get":{"operationId":"finance_defillama_chains","summary":"Chains with the largest TVL.","description":"Blockchains ranked by DeFi total value locked (TVL) in US Dollars.\n\nSources: DefiLlama (api.llama.fi). Cached for 1800s, costs 1 quota unit (cache hits are free).","tags":["Finance"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum chains","schema":{"default":20,"maximum":100,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/finance:defillama/chains?limit=10\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/finance:defillama/chains\",\n    params={\"limit\": \"10\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"limit\": \"10\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/finance:defillama/chains?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/finance:defillama/chains?' . http_build_query(['limit' => '10']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"limit\", \"10\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/finance:defillama/chains?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/finance:defillama/chains?limit=10\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/finance:defillama/chains\")\nuri.query = URI.encode_www_form({\"limit\" => \"10\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/finance:defillama/chains?limit=10\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/finance:ecb/kurs":{"get":{"operationId":"finance_ecb_kurs","summary":"1 Euro against one currency.","description":"Official daily reference rates from the European Central Bank, 1 Euro in another currency, with history.\n\nSources: ECB Data Portal (data-api.ecb.europa.eu). Cached for 3600s, costs 1 quota unit (cache hits are free).","tags":["Finance"],"parameters":[{"name":"currency","in":"query","required":false,"description":"3-letter currency code","schema":{"default":"USD","pattern":"^[A-Za-z]{3}$","type":"string"}},{"name":"limit","in":"query","required":false,"description":"Number of latest business days","schema":{"default":1,"maximum":60,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/finance:ecb/kurs?currency=IDR&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/finance:ecb/kurs\",\n    params={\"currency\": \"IDR\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"currency\": \"IDR\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/finance:ecb/kurs?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/finance:ecb/kurs?' . http_build_query(['currency' => 'IDR', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"currency\", \"IDR\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/finance:ecb/kurs?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/finance:ecb/kurs?currency=IDR&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/finance:ecb/kurs\")\nuri.query = URI.encode_www_form({\"currency\" => \"IDR\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/finance:ecb/kurs?currency=IDR&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/finance:fear-greed/indeks":{"get":{"operationId":"finance_fear_greed_indeks","summary":"Latest index values and history.","description":"Daily crypto market sentiment index, from 0 (extreme fear) to 100 (extreme greed), with history.\n\nSources: Alternative.me. Cached for 3600s, costs 1 quota unit (cache hits are free).","tags":["Finance"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Number of latest days","schema":{"default":1,"maximum":90,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/finance:fear-greed/indeks?limit=7\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/finance:fear-greed/indeks\",\n    params={\"limit\": \"7\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"limit\": \"7\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/finance:fear-greed/indeks?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/finance:fear-greed/indeks?' . http_build_query(['limit' => '7']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"limit\", \"7\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/finance:fear-greed/indeks?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/finance:fear-greed/indeks?limit=7\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/finance:fear-greed/indeks\")\nuri.query = URI.encode_www_form({\"limit\" => \"7\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/finance:fear-greed/indeks?limit=7\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/finance:gleif/cari":{"get":{"operationId":"finance_gleif_cari","summary":"Search companies by name.","description":"Look up the Legal Entity Identifier (LEI) of companies worldwide by name or LEI code, for counterparty verification and compliance.\n\nSources: GLEIF (api.gleif.org). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Finance"],"parameters":[{"name":"name","in":"query","required":true,"description":"Legal name, e.g. Pertamina","schema":{"maxLength":100,"minLength":3,"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/finance:gleif/cari?name=Pertamina&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/finance:gleif/cari\",\n    params={\"name\": \"Pertamina\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"name\": \"Pertamina\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/finance:gleif/cari?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/finance:gleif/cari?' . http_build_query(['name' => 'Pertamina', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"name\", \"Pertamina\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/finance:gleif/cari?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/finance:gleif/cari?name=Pertamina&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/finance:gleif/cari\")\nuri.query = URI.encode_www_form({\"name\" => \"Pertamina\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/finance:gleif/cari?name=Pertamina&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/finance:gleif/lei":{"get":{"operationId":"finance_gleif_lei","summary":"Details of one LEI code.","description":"Look up the Legal Entity Identifier (LEI) of companies worldwide by name or LEI code, for counterparty verification and compliance.\n\nSources: GLEIF (api.gleif.org). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Finance"],"parameters":[{"name":"lei","in":"query","required":true,"description":"20-character LEI code","schema":{"pattern":"^[A-Za-z0-9]{20}$","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/finance:gleif/lei?lei=529900W18LQJJN6SJ336\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/finance:gleif/lei\",\n    params={\"lei\": \"529900W18LQJJN6SJ336\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"lei\": \"529900W18LQJJN6SJ336\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/finance:gleif/lei?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/finance:gleif/lei?' . http_build_query(['lei' => '529900W18LQJJN6SJ336']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"lei\", \"529900W18LQJJN6SJ336\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/finance:gleif/lei?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/finance:gleif/lei?lei=529900W18LQJJN6SJ336\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/finance:gleif/lei\")\nuri.query = URI.encode_www_form({\"lei\" => \"529900W18LQJJN6SJ336\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/finance:gleif/lei?lei=529900W18LQJJN6SJ336\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/finance:harga-emas/merek":{"get":{"operationId":"finance_harga_emas_merek","summary":"Available gold brands.","description":"Selling and buyback prices of gold bars per weight at Galeri 24, for brands such as Galeri 24, Antam and UBS. These are Galeri 24's prices, not each manufacturer's official prices.\n\nSources: Galeri 24 (galeri24.co.id). Cached for 3600s, costs 1 quota unit (cache hits are free).","tags":["Finance"],"parameters":[],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/finance:harga-emas/merek\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/finance:harga-emas/merek\",\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const response = await fetch(\"https://kajidata.artonlabs.com/v1/finance:harga-emas/merek\", {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/finance:harga-emas/merek');\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n)\n\nfunc main() {\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/finance:harga-emas/merek\", nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/finance:harga-emas/merek\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/finance:harga-emas/merek\")\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/finance:harga-emas/merek\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/finance:harga-emas/harga":{"get":{"operationId":"finance_harga_emas_harga","summary":"Selling and buyback prices of one brand per weight.","description":"Selling and buyback prices of gold bars per weight at Galeri 24, for brands such as Galeri 24, Antam and UBS. These are Galeri 24's prices, not each manufacturer's official prices.\n\nSources: Galeri 24 (galeri24.co.id). Cached for 3600s, costs 1 quota unit (cache hits are free).","tags":["Finance"],"parameters":[{"name":"brand","in":"query","required":false,"description":"Brand from the merek endpoint, e.g. ANTAM","schema":{"default":"ANTAM","pattern":"^[A-Za-z0-9 ]{2,30}$","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/finance:harga-emas/harga?brand=ANTAM\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/finance:harga-emas/harga\",\n    params={\"brand\": \"ANTAM\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"brand\": \"ANTAM\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/finance:harga-emas/harga?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/finance:harga-emas/harga?' . http_build_query(['brand' => 'ANTAM']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"brand\", \"ANTAM\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/finance:harga-emas/harga?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/finance:harga-emas/harga?brand=ANTAM\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/finance:harga-emas/harga\")\nuri.query = URI.encode_www_form({\"brand\" => \"ANTAM\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/finance:harga-emas/harga?brand=ANTAM\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/finance:indodax/ticker":{"get":{"operationId":"finance_indodax_ticker","summary":"Price and 24-hour statistics for one pair.","description":"Crypto prices in Rupiah on Indodax: last, buy, sell, high, low and 24-hour volume.\n\nSources: Indodax Public API (indodax.com). Cached for 30s, costs 1 quota unit (cache hits are free).","tags":["Finance"],"parameters":[{"name":"pair","in":"query","required":false,"description":"Pair ID, e.g. btcidr","schema":{"default":"btcidr","pattern":"^[A-Za-z0-9_]{4,20}$","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/finance:indodax/ticker?pair=btcidr\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/finance:indodax/ticker\",\n    params={\"pair\": \"btcidr\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"pair\": \"btcidr\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/finance:indodax/ticker?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/finance:indodax/ticker?' . http_build_query(['pair' => 'btcidr']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"pair\", \"btcidr\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/finance:indodax/ticker?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/finance:indodax/ticker?pair=btcidr\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/finance:indodax/ticker\")\nuri.query = URI.encode_www_form({\"pair\" => \"btcidr\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/finance:indodax/ticker?pair=btcidr\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/finance:indodax/pasangan":{"get":{"operationId":"finance_indodax_pasangan","summary":"List of traded pairs.","description":"Crypto prices in Rupiah on Indodax: last, buy, sell, high, low and 24-hour volume.\n\nSources: Indodax Public API (indodax.com). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Finance"],"parameters":[],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/finance:indodax/pasangan\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/finance:indodax/pasangan\",\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const response = await fetch(\"https://kajidata.artonlabs.com/v1/finance:indodax/pasangan\", {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/finance:indodax/pasangan');\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n)\n\nfunc main() {\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/finance:indodax/pasangan\", nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/finance:indodax/pasangan\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/finance:indodax/pasangan\")\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/finance:indodax/pasangan\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/finance:jisdor/terbaru":{"get":{"operationId":"finance_jisdor_terbaru","summary":"Latest JISDOR rate with the change from the previous business day.","description":"Bank Indonesia's official Rupiah reference rate against the US Dollar (Jakarta Interbank Spot Dollar Rate), published every business day around 10:00 WIB. Taken from the table on BI's website since BI offers no API.\n\nSources: Bank Indonesia (bi.go.id). Cached for 1800s, costs 1 quota unit (cache hits are free).","tags":["Finance"],"parameters":[],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/finance:jisdor/terbaru\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/finance:jisdor/terbaru\",\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const response = await fetch(\"https://kajidata.artonlabs.com/v1/finance:jisdor/terbaru\", {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/finance:jisdor/terbaru');\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n)\n\nfunc main() {\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/finance:jisdor/terbaru\", nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/finance:jisdor/terbaru\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/finance:jisdor/terbaru\")\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/finance:jisdor/terbaru\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/finance:jisdor/riwayat":{"get":{"operationId":"finance_jisdor_riwayat","summary":"JISDOR rates for recent business days.","description":"Bank Indonesia's official Rupiah reference rate against the US Dollar (Jakarta Interbank Spot Dollar Rate), published every business day around 10:00 WIB. Taken from the table on BI's website since BI offers no API.\n\nSources: Bank Indonesia (bi.go.id). Cached for 1800s, costs 1 quota unit (cache hits are free).","tags":["Finance"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Number of latest business days, max 10","schema":{"default":10,"maximum":10,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/finance:jisdor/riwayat?limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/finance:jisdor/riwayat\",\n    params={\"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/finance:jisdor/riwayat?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/finance:jisdor/riwayat?' . http_build_query(['limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/finance:jisdor/riwayat?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/finance:jisdor/riwayat?limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/finance:jisdor/riwayat\")\nuri.query = URI.encode_www_form({\"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/finance:jisdor/riwayat?limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/finance:kripto/harga":{"get":{"operationId":"finance_kripto_harga","summary":"Current prices of crypto assets.","description":"Current crypto asset prices in Rupiah, US Dollar and other currencies, with 24-hour change, market cap and volume. Use CoinGecko IDs such as bitcoin, ethereum, tether.\n\nSources: CoinGecko (coingecko.com). Cached for 60s, costs 1 quota unit (cache hits are free).","tags":["Finance"],"parameters":[{"name":"ids","in":"query","required":true,"description":"Comma-separated CoinGecko IDs (max 25), e.g. bitcoin,ethereum","schema":{"type":"string"}},{"name":"vs","in":"query","required":false,"description":"Comma-separated quote currencies (max 5), e.g. idr,usd","schema":{"default":"idr,usd","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/finance:kripto/harga?ids=bitcoin%2Cethereum&vs=idr%2Cusd\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/finance:kripto/harga\",\n    params={\"ids\": \"bitcoin,ethereum\", \"vs\": \"idr,usd\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"ids\": \"bitcoin,ethereum\", \"vs\": \"idr,usd\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/finance:kripto/harga?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/finance:kripto/harga?' . http_build_query(['ids' => 'bitcoin,ethereum', 'vs' => 'idr,usd']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"ids\", \"bitcoin,ethereum\")\n\tparams.Set(\"vs\", \"idr,usd\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/finance:kripto/harga?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/finance:kripto/harga?ids=bitcoin%2Cethereum&vs=idr%2Cusd\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/finance:kripto/harga\")\nuri.query = URI.encode_www_form({\"ids\" => \"bitcoin,ethereum\", \"vs\" => \"idr,usd\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/finance:kripto/harga?ids=bitcoin%2Cethereum&vs=idr%2Cusd\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/finance:kurs/terbaru":{"get":{"operationId":"finance_kurs_terbaru","summary":"Latest rates against a base currency.","description":"Daily reference rates for the Rupiah and world currencies. Not Bank Indonesia's JISDOR rate. Backed by two sources: if the primary fails, the backup answers automatically.\n\nSources: Frankfurter (data ECB), ExchangeRate-API (open.er-api.com). Cached for 3600s, costs 1 quota unit (cache hits are free).","tags":["Finance"],"parameters":[{"name":"base","in":"query","required":false,"description":"Base currency (ISO 4217), e.g. IDR or USD","schema":{"default":"IDR","pattern":"^[A-Za-z]{3}$","type":"string"}},{"name":"symbols","in":"query","required":false,"description":"Optional comma-separated codes, e.g. USD,SGD,JPY","schema":{"default":"","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/finance:kurs/terbaru?base=USD&symbols=IDR%2CSGD\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/finance:kurs/terbaru\",\n    params={\"base\": \"USD\", \"symbols\": \"IDR,SGD\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"base\": \"USD\", \"symbols\": \"IDR,SGD\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/finance:kurs/terbaru?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/finance:kurs/terbaru?' . http_build_query(['base' => 'USD', 'symbols' => 'IDR,SGD']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"base\", \"USD\")\n\tparams.Set(\"symbols\", \"IDR,SGD\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/finance:kurs/terbaru?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/finance:kurs/terbaru?base=USD&symbols=IDR%2CSGD\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/finance:kurs/terbaru\")\nuri.query = URI.encode_www_form({\"base\" => \"USD\", \"symbols\" => \"IDR,SGD\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/finance:kurs/terbaru?base=USD&symbols=IDR%2CSGD\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/finance:kurs/konversi":{"get":{"operationId":"finance_kurs_konversi","summary":"Convert an amount between currencies.","description":"Daily reference rates for the Rupiah and world currencies. Not Bank Indonesia's JISDOR rate. Backed by two sources: if the primary fails, the backup answers automatically.\n\nSources: Frankfurter (data ECB), ExchangeRate-API (open.er-api.com). Cached for 3600s, costs 1 quota unit (cache hits are free).","tags":["Finance"],"parameters":[{"name":"amount","in":"query","required":true,"description":"Amount to convert, e.g. 100","schema":{"exclusiveMinimum":0,"type":"number"}},{"name":"from","in":"query","required":true,"description":"Source currency, e.g. USD","schema":{"pattern":"^[A-Za-z]{3}$","type":"string"}},{"name":"to","in":"query","required":false,"description":"Target currency, e.g. IDR","schema":{"default":"IDR","pattern":"^[A-Za-z]{3}$","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/finance:kurs/konversi?amount=100&from=USD&to=IDR\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/finance:kurs/konversi\",\n    params={\"amount\": \"100\", \"from\": \"USD\", \"to\": \"IDR\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"amount\": \"100\", \"from\": \"USD\", \"to\": \"IDR\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/finance:kurs/konversi?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/finance:kurs/konversi?' . http_build_query(['amount' => '100', 'from' => 'USD', 'to' => 'IDR']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"amount\", \"100\")\n\tparams.Set(\"from\", \"USD\")\n\tparams.Set(\"to\", \"IDR\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/finance:kurs/konversi?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/finance:kurs/konversi?amount=100&from=USD&to=IDR\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/finance:kurs/konversi\")\nuri.query = URI.encode_www_form({\"amount\" => \"100\", \"from\" => \"USD\", \"to\" => \"IDR\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/finance:kurs/konversi?amount=100&from=USD&to=IDR\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/finance:kurs-bi/terbaru":{"get":{"operationId":"finance_kurs_bi_terbaru","summary":"Latest BI transaction rates; leave currency empty for all currencies. Prices are per `unit` of currency.","description":"Bank Indonesia's official selling, buying and middle rates for 25 currencies against the Rupiah, updated every business day. The reference for bookkeeping and FX transactions.\n\nSources: Bank Indonesia (bi.go.id). Cached for 1800s, costs 1 quota unit (cache hits are free).","tags":["Finance"],"parameters":[{"name":"currency","in":"query","required":false,"description":"Optional 3-letter currency code, e.g. USD","schema":{"default":"","pattern":"^([A-Za-z]{3})?$","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/finance:kurs-bi/terbaru?currency=USD\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/finance:kurs-bi/terbaru\",\n    params={\"currency\": \"USD\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"currency\": \"USD\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/finance:kurs-bi/terbaru?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/finance:kurs-bi/terbaru?' . http_build_query(['currency' => 'USD']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"currency\", \"USD\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/finance:kurs-bi/terbaru?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/finance:kurs-bi/terbaru?currency=USD\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/finance:kurs-bi/terbaru\")\nuri.query = URI.encode_www_form({\"currency\" => \"USD\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/finance:kurs-bi/terbaru?currency=USD\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/finance:kurs-pajak/kurs":{"get":{"operationId":"finance_kurs_pajak_kurs","summary":"Tax exchange rates valid this week or on a given date, with the decree number.","description":"Official weekly tax exchange rates set by the Minister of Finance (valid Wednesday to Tuesday) for 25 currencies, with the decree number and validity period. Used for VAT, income tax and import duties on foreign-currency transactions.\n\nSources: Badan Kebijakan Fiskal, Kemenkeu (fiskal.kemenkeu.go.id). Cached for 21600s, costs 1 quota unit (cache hits are free).","tags":["Finance"],"parameters":[{"name":"date","in":"query","required":false,"description":"Optional date; returns the rates valid on that day (default: this week)","schema":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null}},{"name":"currency","in":"query","required":false,"description":"Optional 3-letter currency code, e.g. USD","schema":{"default":"","pattern":"^([A-Za-z]{3})?$","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/finance:kurs-pajak/kurs?currency=USD\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/finance:kurs-pajak/kurs\",\n    params={\"currency\": \"USD\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"currency\": \"USD\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/finance:kurs-pajak/kurs?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/finance:kurs-pajak/kurs?' . http_build_query(['currency' => 'USD']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"currency\", \"USD\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/finance:kurs-pajak/kurs?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/finance:kurs-pajak/kurs?currency=USD\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/finance:kurs-pajak/kurs\")\nuri.query = URI.encode_www_form({\"currency\" => \"USD\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/finance:kurs-pajak/kurs?currency=USD\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/finance:bitcoin-network/biaya":{"get":{"operationId":"finance_bitcoin_network_biaya","summary":"Recommended transaction fees (sat/vB).","description":"Recommended transaction fees and the latest block height of the Bitcoin network.\n\nSources: mempool.space. Cached for 60s, costs 1 quota unit (cache hits are free).","tags":["Finance"],"parameters":[],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/finance:bitcoin-network/biaya\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/finance:bitcoin-network/biaya\",\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const response = await fetch(\"https://kajidata.artonlabs.com/v1/finance:bitcoin-network/biaya\", {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/finance:bitcoin-network/biaya');\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n)\n\nfunc main() {\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/finance:bitcoin-network/biaya\", nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/finance:bitcoin-network/biaya\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/finance:bitcoin-network/biaya\")\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/finance:bitcoin-network/biaya\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/finance:bitcoin-network/blok":{"get":{"operationId":"finance_bitcoin_network_blok","summary":"Latest block height.","description":"Recommended transaction fees and the latest block height of the Bitcoin network.\n\nSources: mempool.space. Cached for 60s, costs 1 quota unit (cache hits are free).","tags":["Finance"],"parameters":[],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/finance:bitcoin-network/blok\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/finance:bitcoin-network/blok\",\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const response = await fetch(\"https://kajidata.artonlabs.com/v1/finance:bitcoin-network/blok\", {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/finance:bitcoin-network/blok');\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n)\n\nfunc main() {\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/finance:bitcoin-network/blok\", nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/finance:bitcoin-network/blok\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/finance:bitcoin-network/blok\")\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/finance:bitcoin-network/blok\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/finance:sec-edgar/laporan":{"get":{"operationId":"finance_sec_edgar_laporan","summary":"Company profile and its latest filings.","description":"Profile and latest filings (10-K, 10-Q, 8-K and more) of US public companies by ticker.\n\nSources: SEC EDGAR (sec.gov). Cached for 3600s, costs 1 quota unit (cache hits are free).","tags":["Finance"],"parameters":[{"name":"ticker","in":"query","required":true,"description":"Stock ticker, e.g. NVDA","schema":{"pattern":"^[A-Za-z0-9.\\-]{1,10}$","type":"string"}},{"name":"form","in":"query","required":false,"description":"Optional form type, e.g. 10-K","schema":{"default":"","pattern":"^[A-Za-z0-9\\-/]{0,10}$","type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum filings","schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/finance:sec-edgar/laporan?ticker=NVDA&form=10-K&limit=3\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/finance:sec-edgar/laporan\",\n    params={\"ticker\": \"NVDA\", \"form\": \"10-K\", \"limit\": \"3\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"ticker\": \"NVDA\", \"form\": \"10-K\", \"limit\": \"3\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/finance:sec-edgar/laporan?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/finance:sec-edgar/laporan?' . http_build_query(['ticker' => 'NVDA', 'form' => '10-K', 'limit' => '3']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"ticker\", \"NVDA\")\n\tparams.Set(\"form\", \"10-K\")\n\tparams.Set(\"limit\", \"3\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/finance:sec-edgar/laporan?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/finance:sec-edgar/laporan?ticker=NVDA&form=10-K&limit=3\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/finance:sec-edgar/laporan\")\nuri.query = URI.encode_www_form({\"ticker\" => \"NVDA\", \"form\" => \"10-K\", \"limit\" => \"3\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/finance:sec-edgar/laporan?ticker=NVDA&form=10-K&limit=3\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/finance:twse/harga":{"get":{"operationId":"finance_twse_harga","summary":"Latest closing price of one stock.","description":"Closing price and monthly average of stocks on the Taiwan Stock Exchange (including TSMC, code 2330) from TWSE's official Open API.\n\nSources: TWSE Open API (openapi.twse.com.tw). Cached for 21600s, costs 1 quota unit (cache hits are free).","tags":["Finance"],"parameters":[{"name":"code","in":"query","required":true,"description":"Stock code, e.g. 2330","schema":{"pattern":"^[0-9A-Za-z]{2,8}$","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/finance:twse/harga?code=2330\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/finance:twse/harga\",\n    params={\"code\": \"2330\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"code\": \"2330\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/finance:twse/harga?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/finance:twse/harga?' . http_build_query(['code' => '2330']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"code\", \"2330\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/finance:twse/harga?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/finance:twse/harga?code=2330\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/finance:twse/harga\")\nuri.query = URI.encode_www_form({\"code\" => \"2330\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/finance:twse/harga?code=2330\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/finance:us-treasury/utang":{"get":{"operationId":"finance_us_treasury_utang","summary":"Total US public debt per day.","description":"Total US public debt and the average interest rates on its securities, from the US Treasury.\n\nSources: U.S. Treasury Fiscal Data (fiscaldata.treasury.gov). Cached for 21600s, costs 1 quota unit (cache hits are free).","tags":["Finance"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Number of latest records","schema":{"default":1,"maximum":60,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/finance:us-treasury/utang?limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/finance:us-treasury/utang\",\n    params={\"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/finance:us-treasury/utang?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/finance:us-treasury/utang?' . http_build_query(['limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/finance:us-treasury/utang?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/finance:us-treasury/utang?limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/finance:us-treasury/utang\")\nuri.query = URI.encode_www_form({\"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/finance:us-treasury/utang?limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/finance:us-treasury/suku-bunga":{"get":{"operationId":"finance_us_treasury_suku-bunga","summary":"Average interest rates on US securities for the latest month.","description":"Total US public debt and the average interest rates on its securities, from the US Treasury.\n\nSources: U.S. Treasury Fiscal Data (fiscaldata.treasury.gov). Cached for 21600s, costs 1 quota unit (cache hits are free).","tags":["Finance"],"parameters":[],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/finance:us-treasury/suku-bunga\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/finance:us-treasury/suku-bunga\",\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const response = await fetch(\"https://kajidata.artonlabs.com/v1/finance:us-treasury/suku-bunga\", {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/finance:us-treasury/suku-bunga');\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n)\n\nfunc main() {\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/finance:us-treasury/suku-bunga\", nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/finance:us-treasury/suku-bunga\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/finance:us-treasury/suku-bunga\")\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/finance:us-treasury/suku-bunga\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/geo:geocoding/cari":{"get":{"operationId":"geo_geocoding_cari","summary":"Search places by name.","description":"Search cities and places worldwide by name and get their coordinates, country, time zone and population. Useful as the first step for the weather and air quality APIs.\n\nSources: Open-Meteo Geocoding (GeoNames). Cached for 604800s, costs 1 quota unit (cache hits are free).","tags":["Geography"],"parameters":[{"name":"q","in":"query","required":true,"description":"Place name, e.g. Bandung","schema":{"maxLength":100,"minLength":2,"type":"string"}},{"name":"country","in":"query","required":false,"description":"Optional ISO country code filter, e.g. ID","schema":{"default":"","pattern":"^([A-Za-z]{2})?$","type":"string"}},{"name":"language","in":"query","required":false,"description":"Language of place names","schema":{"default":"id","enum":["id","en"],"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":5,"maximum":20,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/geo:geocoding/cari?q=Bandung&country=ID\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/geo:geocoding/cari\",\n    params={\"q\": \"Bandung\", \"country\": \"ID\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"Bandung\", \"country\": \"ID\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/geo:geocoding/cari?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/geo:geocoding/cari?' . http_build_query(['q' => 'Bandung', 'country' => 'ID']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"Bandung\")\n\tparams.Set(\"country\", \"ID\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/geo:geocoding/cari?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/geo:geocoding/cari?q=Bandung&country=ID\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/geo:geocoding/cari\")\nuri.query = URI.encode_www_form({\"q\" => \"Bandung\", \"country\" => \"ID\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/geo:geocoding/cari?q=Bandung&country=ID\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/geo:kode-pos/cari":{"get":{"operationId":"geo_kode_pos_cari","summary":"Search postal codes or areas.","description":"Look up postal codes by village, district or regency name, or find the area for a postal code. Includes coordinates and time zone, ideal for address form autocomplete.\n\nSources: sooluh/kodepos (kodepos.vercel.app). Cached for 2592000s, costs 1 quota unit (cache hits are free).","tags":["Geography"],"parameters":[{"name":"q","in":"query","required":true,"description":"Postal code or area name, e.g. 16913 or cibinong","schema":{"maxLength":80,"minLength":3,"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":20,"maximum":100,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/geo:kode-pos/cari?q=cibinong&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/geo:kode-pos/cari\",\n    params={\"q\": \"cibinong\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"cibinong\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/geo:kode-pos/cari?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/geo:kode-pos/cari?' . http_build_query(['q' => 'cibinong', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"cibinong\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/geo:kode-pos/cari?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/geo:kode-pos/cari?q=cibinong&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/geo:kode-pos/cari\")\nuri.query = URI.encode_www_form({\"q\" => \"cibinong\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/geo:kode-pos/cari?q=cibinong&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/geo:wilayah/provinsi":{"get":{"operationId":"geo_wilayah_provinsi","summary":"All provinces.","description":"All 38 provinces, regencies/cities, districts and villages with their Ministry of Home Affairs codes, per Ministerial Decree 300.2.2-2138 of 2025. Ideal for cascading address pickers.\n\nSources: wilayah.id (data cahyadsn/wilayah, Kepmendagri 2025). Cached for 2592000s, costs 1 quota unit (cache hits are free).","tags":["Geography"],"parameters":[],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/geo:wilayah/provinsi\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/geo:wilayah/provinsi\",\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const response = await fetch(\"https://kajidata.artonlabs.com/v1/geo:wilayah/provinsi\", {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/geo:wilayah/provinsi');\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n)\n\nfunc main() {\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/geo:wilayah/provinsi\", nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/geo:wilayah/provinsi\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/geo:wilayah/provinsi\")\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/geo:wilayah/provinsi\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/geo:wilayah/kabupaten":{"get":{"operationId":"geo_wilayah_kabupaten","summary":"Regencies/cities in a province.","description":"All 38 provinces, regencies/cities, districts and villages with their Ministry of Home Affairs codes, per Ministerial Decree 300.2.2-2138 of 2025. Ideal for cascading address pickers.\n\nSources: wilayah.id (data cahyadsn/wilayah, Kepmendagri 2025). Cached for 2592000s, costs 1 quota unit (cache hits are free).","tags":["Geography"],"parameters":[{"name":"province_id","in":"query","required":true,"description":"2-digit province code, e.g. 31","schema":{"type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/geo:wilayah/kabupaten?province_id=31\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/geo:wilayah/kabupaten\",\n    params={\"province_id\": \"31\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"province_id\": \"31\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/geo:wilayah/kabupaten?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/geo:wilayah/kabupaten?' . http_build_query(['province_id' => '31']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"province_id\", \"31\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/geo:wilayah/kabupaten?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/geo:wilayah/kabupaten?province_id=31\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/geo:wilayah/kabupaten\")\nuri.query = URI.encode_www_form({\"province_id\" => \"31\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/geo:wilayah/kabupaten?province_id=31\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/geo:wilayah/kecamatan":{"get":{"operationId":"geo_wilayah_kecamatan","summary":"Districts in a regency/city.","description":"All 38 provinces, regencies/cities, districts and villages with their Ministry of Home Affairs codes, per Ministerial Decree 300.2.2-2138 of 2025. Ideal for cascading address pickers.\n\nSources: wilayah.id (data cahyadsn/wilayah, Kepmendagri 2025). Cached for 2592000s, costs 1 quota unit (cache hits are free).","tags":["Geography"],"parameters":[{"name":"regency_id","in":"query","required":true,"description":"Regency/city code, e.g. 31.71 or 3171","schema":{"type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/geo:wilayah/kecamatan?regency_id=31.71\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/geo:wilayah/kecamatan\",\n    params={\"regency_id\": \"31.71\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"regency_id\": \"31.71\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/geo:wilayah/kecamatan?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/geo:wilayah/kecamatan?' . http_build_query(['regency_id' => '31.71']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"regency_id\", \"31.71\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/geo:wilayah/kecamatan?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/geo:wilayah/kecamatan?regency_id=31.71\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/geo:wilayah/kecamatan\")\nuri.query = URI.encode_www_form({\"regency_id\" => \"31.71\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/geo:wilayah/kecamatan?regency_id=31.71\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/geo:wilayah/kelurahan":{"get":{"operationId":"geo_wilayah_kelurahan","summary":"Villages in a district.","description":"All 38 provinces, regencies/cities, districts and villages with their Ministry of Home Affairs codes, per Ministerial Decree 300.2.2-2138 of 2025. Ideal for cascading address pickers.\n\nSources: wilayah.id (data cahyadsn/wilayah, Kepmendagri 2025). Cached for 2592000s, costs 1 quota unit (cache hits are free).","tags":["Geography"],"parameters":[{"name":"district_id","in":"query","required":true,"description":"District code, e.g. 31.71.01 or 317101","schema":{"type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/geo:wilayah/kelurahan?district_id=31.71.01\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/geo:wilayah/kelurahan\",\n    params={\"district_id\": \"31.71.01\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"district_id\": \"31.71.01\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/geo:wilayah/kelurahan?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/geo:wilayah/kelurahan?' . http_build_query(['district_id' => '31.71.01']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"district_id\", \"31.71.01\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/geo:wilayah/kelurahan?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/geo:wilayah/kelurahan?district_id=31.71.01\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/geo:wilayah/kelurahan\")\nuri.query = URI.encode_www_form({\"district_id\" => \"31.71.01\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/geo:wilayah/kelurahan?district_id=31.71.01\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/global:climate-trends/temperature":{"get":{"operationId":"global_climate_trends_temperature","summary":"Global temperature anomaly against the 1951-1980 average, in degrees Celsius.","description":"Monthly global temperature anomaly, atmospheric CO2 and the El Niño index, from official NASA and NOAA records.\n\nSources: NASA GISTEMP v4 (data.giss.nasa.gov), NOAA Global Monitoring Laboratory (gml.noaa.gov), NOAA Climate Prediction Center (cpc.ncep.noaa.gov). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Global"],"parameters":[{"name":"months","in":"query","required":false,"description":"How many latest months","schema":{"default":120,"maximum":2400,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/global:climate-trends/temperature?months=24\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/global:climate-trends/temperature\",\n    params={\"months\": \"24\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"months\": \"24\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/global:climate-trends/temperature?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/global:climate-trends/temperature?' . http_build_query(['months' => '24']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"months\", \"24\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/global:climate-trends/temperature?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/global:climate-trends/temperature?months=24\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/global:climate-trends/temperature\")\nuri.query = URI.encode_www_form({\"months\" => \"24\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/global:climate-trends/temperature?months=24\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/global:climate-trends/co2":{"get":{"operationId":"global_climate_trends_co2","summary":"Global mean CO2 concentration, in ppm.","description":"Monthly global temperature anomaly, atmospheric CO2 and the El Niño index, from official NASA and NOAA records.\n\nSources: NASA GISTEMP v4 (data.giss.nasa.gov), NOAA Global Monitoring Laboratory (gml.noaa.gov), NOAA Climate Prediction Center (cpc.ncep.noaa.gov). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Global"],"parameters":[{"name":"months","in":"query","required":false,"description":"How many latest months","schema":{"default":120,"maximum":2400,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/global:climate-trends/co2?months=24\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/global:climate-trends/co2\",\n    params={\"months\": \"24\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"months\": \"24\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/global:climate-trends/co2?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/global:climate-trends/co2?' . http_build_query(['months' => '24']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"months\", \"24\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/global:climate-trends/co2?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/global:climate-trends/co2?months=24\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/global:climate-trends/co2\")\nuri.query = URI.encode_www_form({\"months\" => \"24\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/global:climate-trends/co2?months=24\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/global:climate-trends/enso":{"get":{"operationId":"global_climate_trends_enso","summary":"Oceanic Niño Index (ONI). Values of 0.5 or more point to El Niño and -0.5 or less to La Niña; NOAA only declares a phase when the threshold holds for several seasons.","description":"Monthly global temperature anomaly, atmospheric CO2 and the El Niño index, from official NASA and NOAA records.\n\nSources: NASA GISTEMP v4 (data.giss.nasa.gov), NOAA Global Monitoring Laboratory (gml.noaa.gov), NOAA Climate Prediction Center (cpc.ncep.noaa.gov). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Global"],"parameters":[{"name":"months","in":"query","required":false,"description":"How many latest months","schema":{"default":120,"maximum":2400,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/global:climate-trends/enso?months=24\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/global:climate-trends/enso\",\n    params={\"months\": \"24\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"months\": \"24\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/global:climate-trends/enso?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/global:climate-trends/enso?' . http_build_query(['months' => '24']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"months\", \"24\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/global:climate-trends/enso?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/global:climate-trends/enso?months=24\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/global:climate-trends/enso\")\nuri.query = URI.encode_www_form({\"months\" => \"24\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/global:climate-trends/enso?months=24\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/global:natural-events/events":{"get":{"operationId":"global_natural_events_events","summary":"Natural events still ongoing.","description":"Ongoing wildfires, storms, volcanic eruptions and floods, with location and date.\n\nSources: NASA EONET (eonet.gsfc.nasa.gov). Cached for 3600s, costs 1 quota unit (cache hits are free).","tags":["Global"],"parameters":[{"name":"category","in":"query","required":false,"description":"Event type, e.g. wildfires","schema":{"anyOf":[{"enum":["drought","dustHaze","earthquakes","floods","landslides","manmade","seaLakeIce","severeStorms","snow","tempExtremes","volcanoes","waterColor","wildfires"],"type":"string"},{"type":"null"}],"default":null}},{"name":"indonesia","in":"query","required":false,"description":"Only around Indonesia","schema":{"default":false,"type":"boolean"}},{"name":"days","in":"query","required":false,"description":"How many days back","schema":{"default":30,"maximum":365,"minimum":1,"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":20,"maximum":100,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/global:natural-events/events?category=wildfires&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/global:natural-events/events\",\n    params={\"category\": \"wildfires\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"category\": \"wildfires\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/global:natural-events/events?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/global:natural-events/events?' . http_build_query(['category' => 'wildfires', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"category\", \"wildfires\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/global:natural-events/events?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/global:natural-events/events?category=wildfires&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/global:natural-events/events\")\nuri.query = URI.encode_www_form({\"category\" => \"wildfires\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/global:natural-events/events?category=wildfires&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/global:asteroid-approaches/upcoming":{"get":{"operationId":"global_asteroid_approaches_upcoming","summary":"Asteroids that will pass close to Earth.","description":"Asteroids passing close to Earth, with distance and speed.\n\nSources: NASA/JPL SBDB Close Approach Data API. Cached for 43200s, costs 1 quota unit (cache hits are free).","tags":["Global"],"parameters":[{"name":"days","in":"query","required":false,"description":"How many days ahead","schema":{"default":30,"maximum":365,"minimum":1,"type":"integer"}},{"name":"dist_max","in":"query","required":false,"description":"Maximum distance in astronomical units","schema":{"default":0.05,"exclusiveMinimum":0,"maximum":0.5,"type":"number"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/global:asteroid-approaches/upcoming?days=30\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/global:asteroid-approaches/upcoming\",\n    params={\"days\": \"30\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"days\": \"30\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/global:asteroid-approaches/upcoming?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/global:asteroid-approaches/upcoming?' . http_build_query(['days' => '30']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"days\", \"30\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/global:asteroid-approaches/upcoming?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/global:asteroid-approaches/upcoming?days=30\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/global:asteroid-approaches/upcoming\")\nuri.query = URI.encode_www_form({\"days\" => \"30\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/global:asteroid-approaches/upcoming?days=30\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/global:space-weather/kp-index":{"get":{"operationId":"global_space_weather_kp-index","summary":"Latest Kp index and the last 24 readings.","description":"Latest Kp index, a measure of geomagnetic disturbance that can affect satellites and GPS.\n\nSources: NOAA Space Weather Prediction Center. Cached for 1800s, costs 1 quota unit (cache hits are free).","tags":["Global"],"parameters":[],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/global:space-weather/kp-index\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/global:space-weather/kp-index\",\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const response = await fetch(\"https://kajidata.artonlabs.com/v1/global:space-weather/kp-index\", {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/global:space-weather/kp-index');\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n)\n\nfunc main() {\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/global:space-weather/kp-index\", nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/global:space-weather/kp-index\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/global:space-weather/kp-index\")\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/global:space-weather/kp-index\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/global:historical-hazards/tsunamis":{"get":{"operationId":"global_historical_hazards_tsunamis","summary":"Tsunami records by country.","description":"Tsunami and volcanic eruption records by country, including casualties and damage.\n\nSources: NOAA NCEI Global Historical Hazard Database. Cached for 604800s, costs 1 quota unit (cache hits are free).","tags":["Global"],"parameters":[{"name":"country","in":"query","required":false,"description":"Country in English","schema":{"default":"Indonesia","maxLength":60,"minLength":3,"pattern":"^[A-Za-z .\\-]+$","type":"string"}},{"name":"min_year","in":"query","required":false,"description":"Earliest year","schema":{"default":2000,"maximum":2100,"minimum":-2000,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/global:historical-hazards/tsunamis?country=Indonesia&min_year=2010\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/global:historical-hazards/tsunamis\",\n    params={\"country\": \"Indonesia\", \"min_year\": \"2010\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"country\": \"Indonesia\", \"min_year\": \"2010\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/global:historical-hazards/tsunamis?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/global:historical-hazards/tsunamis?' . http_build_query(['country' => 'Indonesia', 'min_year' => '2010']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"country\", \"Indonesia\")\n\tparams.Set(\"min_year\", \"2010\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/global:historical-hazards/tsunamis?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/global:historical-hazards/tsunamis?country=Indonesia&min_year=2010\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/global:historical-hazards/tsunamis\")\nuri.query = URI.encode_www_form({\"country\" => \"Indonesia\", \"min_year\" => \"2010\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/global:historical-hazards/tsunamis?country=Indonesia&min_year=2010\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/global:historical-hazards/eruptions":{"get":{"operationId":"global_historical_hazards_eruptions","summary":"Volcanic eruption records by country.","description":"Tsunami and volcanic eruption records by country, including casualties and damage.\n\nSources: NOAA NCEI Global Historical Hazard Database. Cached for 604800s, costs 1 quota unit (cache hits are free).","tags":["Global"],"parameters":[{"name":"country","in":"query","required":false,"description":"Country in English","schema":{"default":"Indonesia","maxLength":60,"minLength":3,"pattern":"^[A-Za-z .\\-]+$","type":"string"}},{"name":"min_year","in":"query","required":false,"description":"Earliest year","schema":{"default":2000,"maximum":2100,"minimum":-2000,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/global:historical-hazards/eruptions?country=Indonesia&min_year=2010\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/global:historical-hazards/eruptions\",\n    params={\"country\": \"Indonesia\", \"min_year\": \"2010\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"country\": \"Indonesia\", \"min_year\": \"2010\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/global:historical-hazards/eruptions?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/global:historical-hazards/eruptions?' . http_build_query(['country' => 'Indonesia', 'min_year' => '2010']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"country\", \"Indonesia\")\n\tparams.Set(\"min_year\", \"2010\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/global:historical-hazards/eruptions?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/global:historical-hazards/eruptions?country=Indonesia&min_year=2010\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/global:historical-hazards/eruptions\")\nuri.query = URI.encode_www_form({\"country\" => \"Indonesia\", \"min_year\" => \"2010\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/global:historical-hazards/eruptions?country=Indonesia&min_year=2010\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/global:monthly-climate/point":{"get":{"operationId":"global_monthly_climate_point","summary":"Monthly climate for one coordinate.","description":"Monthly temperature, rainfall and humidity for any coordinate since 1981. From satellites and models, not weather stations.\n\nSources: NASA POWER (power.larc.nasa.gov). Cached for 2592000s, costs 1 quota unit (cache hits are free).","tags":["Global"],"parameters":[{"name":"lat","in":"query","required":true,"description":"Latitude","schema":{"maximum":90,"minimum":-90,"type":"number"}},{"name":"lon","in":"query","required":true,"description":"Longitude","schema":{"maximum":180,"minimum":-180,"type":"number"}},{"name":"start_year","in":"query","required":false,"description":"First year","schema":{"default":2020,"maximum":2100,"minimum":1981,"type":"integer"}},{"name":"end_year","in":"query","required":false,"description":"Last year","schema":{"default":2024,"maximum":2100,"minimum":1981,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/global:monthly-climate/point?lat=-6.21&lon=106.85&start_year=2023&end_year=2024\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/global:monthly-climate/point\",\n    params={\"lat\": \"-6.21\", \"lon\": \"106.85\", \"start_year\": \"2023\", \"end_year\": \"2024\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"lat\": \"-6.21\", \"lon\": \"106.85\", \"start_year\": \"2023\", \"end_year\": \"2024\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/global:monthly-climate/point?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/global:monthly-climate/point?' . http_build_query(['lat' => '-6.21', 'lon' => '106.85', 'start_year' => '2023', 'end_year' => '2024']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"lat\", \"-6.21\")\n\tparams.Set(\"lon\", \"106.85\")\n\tparams.Set(\"start_year\", \"2023\")\n\tparams.Set(\"end_year\", \"2024\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/global:monthly-climate/point?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/global:monthly-climate/point?lat=-6.21&lon=106.85&start_year=2023&end_year=2024\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/global:monthly-climate/point\")\nuri.query = URI.encode_www_form({\"lat\" => \"-6.21\", \"lon\" => \"106.85\", \"start_year\" => \"2023\", \"end_year\" => \"2024\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/global:monthly-climate/point?lat=-6.21&lon=106.85&start_year=2023&end_year=2024\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/global:eurostat/inflation":{"get":{"operationId":"global_eurostat_inflation","summary":"Annual HICP inflation by month (percent).","description":"Monthly inflation, unemployment and economic sentiment for EU and EFTA countries.\n\nSources: Eurostat Statistics API (ec.europa.eu). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Global"],"parameters":[{"name":"country","in":"query","required":true,"description":"Eurostat country code, e.g. DE","schema":{"pattern":"^(AT|BE|BG|CH|CY|CZ|DE|DK|EE|EL|ES|FI|FR|HR|HU|IE|IS|IT|LI|LT|LU|LV|MT|NL|NO|PL|PT|RO|SE|SI|SK)$","type":"string"}},{"name":"months","in":"query","required":false,"description":"How many latest months","schema":{"default":12,"maximum":120,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/global:eurostat/inflation?country=DE&months=12\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/global:eurostat/inflation\",\n    params={\"country\": \"DE\", \"months\": \"12\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"country\": \"DE\", \"months\": \"12\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/global:eurostat/inflation?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/global:eurostat/inflation?' . http_build_query(['country' => 'DE', 'months' => '12']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"country\", \"DE\")\n\tparams.Set(\"months\", \"12\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/global:eurostat/inflation?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/global:eurostat/inflation?country=DE&months=12\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/global:eurostat/inflation\")\nuri.query = URI.encode_www_form({\"country\" => \"DE\", \"months\" => \"12\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/global:eurostat/inflation?country=DE&months=12\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/global:eurostat/unemployment":{"get":{"operationId":"global_eurostat_unemployment","summary":"Monthly unemployment rate (percent).","description":"Monthly inflation, unemployment and economic sentiment for EU and EFTA countries.\n\nSources: Eurostat Statistics API (ec.europa.eu). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Global"],"parameters":[{"name":"country","in":"query","required":true,"description":"Eurostat country code, e.g. DE","schema":{"pattern":"^(AT|BE|BG|CH|CY|CZ|DE|DK|EE|EL|ES|FI|FR|HR|HU|IE|IS|IT|LI|LT|LU|LV|MT|NL|NO|PL|PT|RO|SE|SI|SK)$","type":"string"}},{"name":"months","in":"query","required":false,"description":"How many latest months","schema":{"default":12,"maximum":120,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/global:eurostat/unemployment?country=DE&months=12\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/global:eurostat/unemployment\",\n    params={\"country\": \"DE\", \"months\": \"12\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"country\": \"DE\", \"months\": \"12\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/global:eurostat/unemployment?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/global:eurostat/unemployment?' . http_build_query(['country' => 'DE', 'months' => '12']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"country\", \"DE\")\n\tparams.Set(\"months\", \"12\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/global:eurostat/unemployment?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/global:eurostat/unemployment?country=DE&months=12\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/global:eurostat/unemployment\")\nuri.query = URI.encode_www_form({\"country\" => \"DE\", \"months\" => \"12\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/global:eurostat/unemployment?country=DE&months=12\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/global:eurostat/economic-sentiment":{"get":{"operationId":"global_eurostat_economic-sentiment","summary":"Monthly economic sentiment indicator. Its long-term average is 100.","description":"Monthly inflation, unemployment and economic sentiment for EU and EFTA countries.\n\nSources: Eurostat Statistics API (ec.europa.eu). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Global"],"parameters":[{"name":"country","in":"query","required":true,"description":"Eurostat country code, e.g. DE","schema":{"pattern":"^(AT|BE|BG|CH|CY|CZ|DE|DK|EE|EL|ES|FI|FR|HR|HU|IE|IS|IT|LI|LT|LU|LV|MT|NL|NO|PL|PT|RO|SE|SI|SK)$","type":"string"}},{"name":"months","in":"query","required":false,"description":"How many latest months","schema":{"default":12,"maximum":120,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/global:eurostat/economic-sentiment?country=DE&months=12\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/global:eurostat/economic-sentiment\",\n    params={\"country\": \"DE\", \"months\": \"12\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"country\": \"DE\", \"months\": \"12\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/global:eurostat/economic-sentiment?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/global:eurostat/economic-sentiment?' . http_build_query(['country' => 'DE', 'months' => '12']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"country\", \"DE\")\n\tparams.Set(\"months\", \"12\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/global:eurostat/economic-sentiment?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/global:eurostat/economic-sentiment?country=DE&months=12\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/global:eurostat/economic-sentiment\")\nuri.query = URI.encode_www_form({\"country\" => \"DE\", \"months\" => \"12\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/global:eurostat/economic-sentiment?country=DE&months=12\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/global:federal-register/search":{"get":{"operationId":"global_federal_register_search","summary":"Search documents, newest first.","description":"Search US rules, notices and presidential documents. Useful for reporting on tariffs, sanctions and trade rules that affect Indonesia.\n\nSources: FederalRegister.gov API (federalregister.gov). Cached for 21600s, costs 1 quota unit (cache hits are free).","tags":["Global"],"parameters":[{"name":"q","in":"query","required":true,"description":"Search text, e.g. Indonesia antidumping","schema":{"maxLength":200,"minLength":2,"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/global:federal-register/search?q=Indonesia+antidumping&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/global:federal-register/search\",\n    params={\"q\": \"Indonesia antidumping\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"Indonesia antidumping\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/global:federal-register/search?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/global:federal-register/search?' . http_build_query(['q' => 'Indonesia antidumping', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"Indonesia antidumping\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/global:federal-register/search?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/global:federal-register/search?q=Indonesia+antidumping&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/global:federal-register/search\")\nuri.query = URI.encode_www_form({\"q\" => \"Indonesia antidumping\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/global:federal-register/search?q=Indonesia+antidumping&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/global:hdx/datasets":{"get":{"operationId":"global_hdx_datasets","summary":"Search humanitarian datasets.","description":"Search humanitarian datasets from UN agencies and NGOs: disasters, refugees, food and boundaries, including hundreds of datasets on Indonesia.\n\nSources: HDX CKAN API (data.humdata.org). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Global"],"parameters":[{"name":"q","in":"query","required":true,"description":"Search text, e.g. flood","schema":{"maxLength":200,"minLength":2,"type":"string"}},{"name":"country","in":"query","required":false,"description":"ISO3 country code, e.g. IDN","schema":{"anyOf":[{"pattern":"^[A-Za-z]{3}$","type":"string"},{"type":"null"}],"default":null}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/global:hdx/datasets?q=flood&country=IDN&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/global:hdx/datasets\",\n    params={\"q\": \"flood\", \"country\": \"IDN\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"flood\", \"country\": \"IDN\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/global:hdx/datasets?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/global:hdx/datasets?' . http_build_query(['q' => 'flood', 'country' => 'IDN', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"flood\")\n\tparams.Set(\"country\", \"IDN\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/global:hdx/datasets?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/global:hdx/datasets?q=flood&country=IDN&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/global:hdx/datasets\")\nuri.query = URI.encode_www_form({\"q\" => \"flood\", \"country\" => \"IDN\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/global:hdx/datasets?q=flood&country=IDN&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/global:hari-libur/list":{"get":{"operationId":"global_hari_libur_list","summary":"All public holidays of a country in a year.","description":"Public holidays for more than 100 countries: per-year lists, upcoming holidays and the list of supported countries. Useful for cross-border scheduling.\n\nSources: Nager.Date (date.nager.at). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Global"],"parameters":[{"name":"country","in":"query","required":true,"description":"ISO 3166-1 alpha-2 country code, e.g. SG","schema":{"pattern":"^[A-Za-z]{2}$","type":"string"}},{"name":"year","in":"query","required":false,"description":"Year","schema":{"maximum":2100,"minimum":1975,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/global:hari-libur/list?country=SG&year=2026\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/global:hari-libur/list\",\n    params={\"country\": \"SG\", \"year\": \"2026\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"country\": \"SG\", \"year\": \"2026\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/global:hari-libur/list?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/global:hari-libur/list?' . http_build_query(['country' => 'SG', 'year' => '2026']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"country\", \"SG\")\n\tparams.Set(\"year\", \"2026\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/global:hari-libur/list?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/global:hari-libur/list?country=SG&year=2026\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/global:hari-libur/list\")\nuri.query = URI.encode_www_form({\"country\" => \"SG\", \"year\" => \"2026\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/global:hari-libur/list?country=SG&year=2026\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/global:hari-libur/berikutnya":{"get":{"operationId":"global_hari_libur_berikutnya","summary":"Upcoming public holidays in the next 365 days.","description":"Public holidays for more than 100 countries: per-year lists, upcoming holidays and the list of supported countries. Useful for cross-border scheduling.\n\nSources: Nager.Date (date.nager.at). Cached for 21600s, costs 1 quota unit (cache hits are free).","tags":["Global"],"parameters":[{"name":"country","in":"query","required":true,"description":"ISO 3166-1 alpha-2 country code, e.g. SG","schema":{"pattern":"^[A-Za-z]{2}$","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/global:hari-libur/berikutnya?country=SG\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/global:hari-libur/berikutnya\",\n    params={\"country\": \"SG\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"country\": \"SG\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/global:hari-libur/berikutnya?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/global:hari-libur/berikutnya?' . http_build_query(['country' => 'SG']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"country\", \"SG\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/global:hari-libur/berikutnya?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/global:hari-libur/berikutnya?country=SG\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/global:hari-libur/berikutnya\")\nuri.query = URI.encode_www_form({\"country\" => \"SG\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/global:hari-libur/berikutnya?country=SG\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/global:hari-libur/negara":{"get":{"operationId":"global_hari_libur_negara","summary":"Supported countries.","description":"Public holidays for more than 100 countries: per-year lists, upcoming holidays and the list of supported countries. Useful for cross-border scheduling.\n\nSources: Nager.Date (date.nager.at). Cached for 604800s, costs 1 quota unit (cache hits are free).","tags":["Global"],"parameters":[],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/global:hari-libur/negara\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/global:hari-libur/negara\",\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const response = await fetch(\"https://kajidata.artonlabs.com/v1/global:hari-libur/negara\", {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/global:hari-libur/negara');\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n)\n\nfunc main() {\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/global:hari-libur/negara\", nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/global:hari-libur/negara\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/global:hari-libur/negara\")\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/global:hari-libur/negara\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/global:ilostat/indicator":{"get":{"operationId":"global_ilostat_indicator","summary":"One indicator per year for ages 15 and over, in percent.","description":"Yearly unemployment, labour force participation and employment ratio by sex, for Indonesia and other countries.\n\nSources: ILOSTAT SDMX API (sdmx.ilo.org). Cached for 604800s, costs 1 quota unit (cache hits are free).","tags":["Global"],"parameters":[{"name":"indicator","in":"query","required":false,"description":"unemployment, labour-participation or employment-ratio","schema":{"default":"unemployment","pattern":"^(unemployment|labour-participation|employment-ratio)$","type":"string"}},{"name":"country","in":"query","required":false,"description":"ISO3 country code","schema":{"default":"IDN","pattern":"^[A-Za-z]{3}$","type":"string"}},{"name":"sex","in":"query","required":false,"description":"total, female or male","schema":{"default":"total","pattern":"^(total|female|male)$","type":"string"}},{"name":"start_year","in":"query","required":false,"description":"First year","schema":{"default":2010,"maximum":2100,"minimum":1950,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/global:ilostat/indicator?indicator=unemployment&country=IDN&sex=female\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/global:ilostat/indicator\",\n    params={\"indicator\": \"unemployment\", \"country\": \"IDN\", \"sex\": \"female\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"indicator\": \"unemployment\", \"country\": \"IDN\", \"sex\": \"female\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/global:ilostat/indicator?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/global:ilostat/indicator?' . http_build_query(['indicator' => 'unemployment', 'country' => 'IDN', 'sex' => 'female']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"indicator\", \"unemployment\")\n\tparams.Set(\"country\", \"IDN\")\n\tparams.Set(\"sex\", \"female\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/global:ilostat/indicator?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/global:ilostat/indicator?indicator=unemployment&country=IDN&sex=female\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/global:ilostat/indicator\")\nuri.query = URI.encode_www_form({\"indicator\" => \"unemployment\", \"country\" => \"IDN\", \"sex\" => \"female\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/global:ilostat/indicator?indicator=unemployment&country=IDN&sex=female\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/global:kode-pos/cari":{"get":{"operationId":"global_kode_pos_cari","summary":"Places for a postal code.","description":"Find the city, state and coordinates for a postal code in more than 60 countries, such as the US, Japan, Germany, Malaysia and Australia.\n\nSources: Zippopotam.us (api.zippopotam.us). Cached for 2592000s, costs 1 quota unit (cache hits are free).","tags":["Global"],"parameters":[{"name":"country","in":"query","required":true,"description":"ISO 3166 alpha-2 country code, e.g. US","schema":{"pattern":"^[A-Za-z]{2}$","type":"string"}},{"name":"code","in":"query","required":true,"description":"Postal code, e.g. 90210","schema":{"pattern":"^[A-Za-z0-9 -]{2,10}$","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/global:kode-pos/cari?country=US&code=90210\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/global:kode-pos/cari\",\n    params={\"country\": \"US\", \"code\": \"90210\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"country\": \"US\", \"code\": \"90210\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/global:kode-pos/cari?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/global:kode-pos/cari?' . http_build_query(['country' => 'US', 'code' => '90210']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"country\", \"US\")\n\tparams.Set(\"code\", \"90210\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/global:kode-pos/cari?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/global:kode-pos/cari?country=US&code=90210\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/global:kode-pos/cari\")\nuri.query = URI.encode_www_form({\"country\" => \"US\", \"code\" => \"90210\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/global:kode-pos/cari?country=US&code=90210\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/global:oecd-confidence/consumer-confidence":{"get":{"operationId":"global_oecd_confidence_consumer-confidence","summary":"Consumer confidence by month. Compare its direction rather than its level, because each country uses its own scale.","description":"Monthly consumer confidence from each country's own survey, for Indonesia and 38 other countries or areas. Scales differ between countries.\n\nSources: OECD Data Explorer (sdmx.oecd.org). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Global"],"parameters":[{"name":"country","in":"query","required":true,"description":"OECD area code, e.g. IDN","schema":{"pattern":"^(AUS|AUT|BEL|BGR|BRA|CHL|CHN|COL|CZE|DEU|DNK|EA20|ESP|EU|FIN|FRA|GBR|GRC|HRV|HUN|IDN|IRL|ISR|ITA|JPN|KOR|LTU|LUX|LVA|MEX|NLD|POL|PRT|ROU|SVK|SVN|SWE|TUR|USA)$","type":"string"}},{"name":"months","in":"query","required":false,"description":"How many months back","schema":{"default":24,"maximum":360,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/global:oecd-confidence/consumer-confidence?country=IDN&months=12\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/global:oecd-confidence/consumer-confidence\",\n    params={\"country\": \"IDN\", \"months\": \"12\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"country\": \"IDN\", \"months\": \"12\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/global:oecd-confidence/consumer-confidence?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/global:oecd-confidence/consumer-confidence?' . http_build_query(['country' => 'IDN', 'months' => '12']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"country\", \"IDN\")\n\tparams.Set(\"months\", \"12\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/global:oecd-confidence/consumer-confidence?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/global:oecd-confidence/consumer-confidence?country=IDN&months=12\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/global:oecd-confidence/consumer-confidence\")\nuri.query = URI.encode_www_form({\"country\" => \"IDN\", \"months\" => \"12\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/global:oecd-confidence/consumer-confidence?country=IDN&months=12\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/global:cuaca/sekarang":{"get":{"operationId":"global_cuaca_sekarang","summary":"Current weather at a coordinate.","description":"Current weather and daily forecasts up to 16 days for any coordinate in the world, with weather descriptions in Indonesian and English. Pair with geo:geocoding to look up a city's coordinates.\n\nSources: Open-Meteo (open-meteo.com). Cached for 900s, costs 1 quota unit (cache hits are free).","tags":["Global"],"parameters":[{"name":"lat","in":"query","required":true,"description":"Latitude, e.g. -6.2","schema":{"maximum":90,"minimum":-90,"type":"number"}},{"name":"lon","in":"query","required":true,"description":"Longitude, e.g. 106.8","schema":{"maximum":180,"minimum":-180,"type":"number"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/global:cuaca/sekarang?lat=-6.2&lon=106.8\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/global:cuaca/sekarang\",\n    params={\"lat\": \"-6.2\", \"lon\": \"106.8\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"lat\": \"-6.2\", \"lon\": \"106.8\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/global:cuaca/sekarang?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/global:cuaca/sekarang?' . http_build_query(['lat' => '-6.2', 'lon' => '106.8']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"lat\", \"-6.2\")\n\tparams.Set(\"lon\", \"106.8\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/global:cuaca/sekarang?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/global:cuaca/sekarang?lat=-6.2&lon=106.8\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/global:cuaca/sekarang\")\nuri.query = URI.encode_www_form({\"lat\" => \"-6.2\", \"lon\" => \"106.8\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/global:cuaca/sekarang?lat=-6.2&lon=106.8\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/global:cuaca/harian":{"get":{"operationId":"global_cuaca_harian","summary":"Daily forecast (temperature, rain, sunrise/sunset).","description":"Current weather and daily forecasts up to 16 days for any coordinate in the world, with weather descriptions in Indonesian and English. Pair with geo:geocoding to look up a city's coordinates.\n\nSources: Open-Meteo (open-meteo.com). Cached for 3600s, costs 1 quota unit (cache hits are free).","tags":["Global"],"parameters":[{"name":"lat","in":"query","required":true,"description":"Latitude, e.g. -6.2","schema":{"maximum":90,"minimum":-90,"type":"number"}},{"name":"lon","in":"query","required":true,"description":"Longitude, e.g. 106.8","schema":{"maximum":180,"minimum":-180,"type":"number"}},{"name":"days","in":"query","required":false,"description":"Number of days, 1-16","schema":{"default":7,"maximum":16,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/global:cuaca/harian?lat=-6.2&lon=106.8&days=3\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/global:cuaca/harian\",\n    params={\"lat\": \"-6.2\", \"lon\": \"106.8\", \"days\": \"3\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"lat\": \"-6.2\", \"lon\": \"106.8\", \"days\": \"3\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/global:cuaca/harian?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/global:cuaca/harian?' . http_build_query(['lat' => '-6.2', 'lon' => '106.8', 'days' => '3']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"lat\", \"-6.2\")\n\tparams.Set(\"lon\", \"106.8\")\n\tparams.Set(\"days\", \"3\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/global:cuaca/harian?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/global:cuaca/harian?lat=-6.2&lon=106.8&days=3\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/global:cuaca/harian\")\nuri.query = URI.encode_www_form({\"lat\" => \"-6.2\", \"lon\" => \"106.8\", \"days\" => \"3\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/global:cuaca/harian?lat=-6.2&lon=106.8&days=3\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/global:kualitas-udara/sekarang":{"get":{"operationId":"global_kualitas_udara_sekarang","summary":"Current air quality at a coordinate.","description":"Current air quality indices (US AQI & European AQI) plus PM2.5, PM10, ozone and NO2 for any coordinate, from the CAMS model.\n\nSources: Open-Meteo Air Quality (CAMS). Cached for 1800s, costs 1 quota unit (cache hits are free).","tags":["Global"],"parameters":[{"name":"lat","in":"query","required":true,"description":"Latitude, e.g. -6.2","schema":{"maximum":90,"minimum":-90,"type":"number"}},{"name":"lon","in":"query","required":true,"description":"Longitude, e.g. 106.8","schema":{"maximum":180,"minimum":-180,"type":"number"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/global:kualitas-udara/sekarang?lat=-6.2&lon=106.8\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/global:kualitas-udara/sekarang\",\n    params={\"lat\": \"-6.2\", \"lon\": \"106.8\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"lat\": \"-6.2\", \"lon\": \"106.8\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/global:kualitas-udara/sekarang?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/global:kualitas-udara/sekarang?' . http_build_query(['lat' => '-6.2', 'lon' => '106.8']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"lat\", \"-6.2\")\n\tparams.Set(\"lon\", \"106.8\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/global:kualitas-udara/sekarang?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/global:kualitas-udara/sekarang?lat=-6.2&lon=106.8\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/global:kualitas-udara/sekarang\")\nuri.query = URI.encode_www_form({\"lat\" => \"-6.2\", \"lon\" => \"106.8\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/global:kualitas-udara/sekarang?lat=-6.2&lon=106.8\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/global:our-world-in-data/series":{"get":{"operationId":"global_our_world_in_data_series","summary":"Rows of one chart for the chosen countries, with units and citation.","description":"Thousands of series on health, energy, climate, education and poverty, comparable between countries. Use the chart name from an ourworldindata.org/grapher address.\n\nSources: Our World in Data Chart API (ourworldindata.org/grapher). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Global"],"parameters":[{"name":"chart","in":"query","required":true,"description":"Chart name, e.g. life-expectancy","schema":{"pattern":"^[a-z0-9][a-z0-9-]{1,119}$","type":"string"}},{"name":"countries","in":"query","required":false,"description":"Up to 5 ISO3 codes separated by commas, e.g. IDN,MYS","schema":{"default":"IDN","maxLength":60,"type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/global:our-world-in-data/series?chart=life-expectancy&countries=IDN%2CMYS\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/global:our-world-in-data/series\",\n    params={\"chart\": \"life-expectancy\", \"countries\": \"IDN,MYS\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"chart\": \"life-expectancy\", \"countries\": \"IDN,MYS\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/global:our-world-in-data/series?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/global:our-world-in-data/series?' . http_build_query(['chart' => 'life-expectancy', 'countries' => 'IDN,MYS']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"chart\", \"life-expectancy\")\n\tparams.Set(\"countries\", \"IDN,MYS\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/global:our-world-in-data/series?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/global:our-world-in-data/series?chart=life-expectancy&countries=IDN%2CMYS\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/global:our-world-in-data/series\")\nuri.query = URI.encode_www_form({\"chart\" => \"life-expectancy\", \"countries\" => \"IDN,MYS\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/global:our-world-in-data/series?chart=life-expectancy&countries=IDN%2CMYS\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/global:produk/barcode":{"get":{"operationId":"global_produk_barcode","summary":"Product details for a barcode.","description":"Name, brand, ingredients, allergens, Nutri-Score and nutrition facts for food & drink products from an EAN/UPC barcode, including many products sold in Indonesia. Community data that may be incomplete.\n\nSources: Open Food Facts (openfoodfacts.org). Cached for 604800s, costs 1 quota unit (cache hits are free).","tags":["Global"],"parameters":[{"name":"barcode","in":"query","required":true,"description":"EAN-8, EAN-13 or UPC barcode digits","schema":{"pattern":"^\\d{8,14}$","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/global:produk/barcode?barcode=8992388101016\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/global:produk/barcode\",\n    params={\"barcode\": \"8992388101016\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"barcode\": \"8992388101016\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/global:produk/barcode?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/global:produk/barcode?' . http_build_query(['barcode' => '8992388101016']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"barcode\", \"8992388101016\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/global:produk/barcode?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/global:produk/barcode?barcode=8992388101016\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/global:produk/barcode\")\nuri.query = URI.encode_www_form({\"barcode\" => \"8992388101016\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/global:produk/barcode?barcode=8992388101016\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/global:unhcr/population":{"get":{"operationId":"global_unhcr_population","summary":"Yearly numbers for one country of asylum or origin.","description":"Yearly numbers of refugees, asylum seekers and stateless people, by country of asylum or origin.\n\nSources: UNHCR Refugee Statistics API (api.unhcr.org). Cached for 604800s, costs 1 quota unit (cache hits are free).","tags":["Global"],"parameters":[{"name":"asylum","in":"query","required":false,"description":"ISO3 code of the country of asylum, e.g. IDN","schema":{"anyOf":[{"pattern":"^[A-Za-z]{3}$","type":"string"},{"type":"null"}],"default":null}},{"name":"origin","in":"query","required":false,"description":"ISO3 code of the country of origin, e.g. AFG","schema":{"anyOf":[{"pattern":"^[A-Za-z]{3}$","type":"string"},{"type":"null"}],"default":null}},{"name":"year_from","in":"query","required":false,"description":"First year","schema":{"default":2015,"maximum":2100,"minimum":1951,"type":"integer"}},{"name":"year_to","in":"query","required":false,"description":"Last year","schema":{"default":2100,"maximum":2100,"minimum":1951,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/global:unhcr/population?asylum=IDN&year_from=2018\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/global:unhcr/population\",\n    params={\"asylum\": \"IDN\", \"year_from\": \"2018\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"asylum\": \"IDN\", \"year_from\": \"2018\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/global:unhcr/population?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/global:unhcr/population?' . http_build_query(['asylum' => 'IDN', 'year_from' => '2018']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"asylum\", \"IDN\")\n\tparams.Set(\"year_from\", \"2018\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/global:unhcr/population?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/global:unhcr/population?asylum=IDN&year_from=2018\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/global:unhcr/population\")\nuri.query = URI.encode_www_form({\"asylum\" => \"IDN\", \"year_from\" => \"2018\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/global:unhcr/population?asylum=IDN&year_from=2018\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/global:gempa/terkini":{"get":{"operationId":"global_gempa_terkini","summary":"Recent earthquakes worldwide.","description":"Earthquakes worldwide from the U.S. Geological Survey, updated every minute. Choose a magnitude threshold and period.\n\nSources: USGS Earthquake Hazards Program (earthquake.usgs.gov). Cached for 120s, costs 1 quota unit (cache hits are free).","tags":["Global"],"parameters":[{"name":"min_magnitude","in":"query","required":false,"description":"Magnitude threshold: significant, 4.5, 2.5, 1.0 or all","schema":{"default":"4.5","enum":["significant","4.5","2.5","1.0","all"],"type":"string"}},{"name":"period","in":"query","required":false,"description":"Period: hour, day, week or month","schema":{"default":"day","enum":["hour","day","week","month"],"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":20,"maximum":100,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/global:gempa/terkini?min_magnitude=4.5&period=day&limit=10\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/global:gempa/terkini\",\n    params={\"min_magnitude\": \"4.5\", \"period\": \"day\", \"limit\": \"10\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"min_magnitude\": \"4.5\", \"period\": \"day\", \"limit\": \"10\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/global:gempa/terkini?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/global:gempa/terkini?' . http_build_query(['min_magnitude' => '4.5', 'period' => 'day', 'limit' => '10']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"min_magnitude\", \"4.5\")\n\tparams.Set(\"period\", \"day\")\n\tparams.Set(\"limit\", \"10\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/global:gempa/terkini?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/global:gempa/terkini?min_magnitude=4.5&period=day&limit=10\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/global:gempa/terkini\")\nuri.query = URI.encode_www_form({\"min_magnitude\" => \"4.5\", \"period\" => \"day\", \"limit\" => \"10\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/global:gempa/terkini?min_magnitude=4.5&period=day&limit=10\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/global:ekonomi/profil":{"get":{"operationId":"global_ekonomi_profil","summary":"Country profile: region, income group, capital, coordinates.","description":"Country profiles and official development indicators from the World Bank for 200+ countries: population, GDP, GDP per capita, growth, inflation, unemployment, life expectancy and internet use.\n\nSources: World Bank Open Data (data.worldbank.org). Cached for 604800s, costs 1 quota unit (cache hits are free).","tags":["Global"],"parameters":[{"name":"country","in":"query","required":true,"description":"ISO country code (2 or 3 letters), e.g. ID or IDN","schema":{"pattern":"^[A-Za-z]{2,3}$","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/global:ekonomi/profil?country=ID\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/global:ekonomi/profil\",\n    params={\"country\": \"ID\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"country\": \"ID\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/global:ekonomi/profil?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/global:ekonomi/profil?' . http_build_query(['country' => 'ID']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"country\", \"ID\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/global:ekonomi/profil?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/global:ekonomi/profil?country=ID\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/global:ekonomi/profil\")\nuri.query = URI.encode_www_form({\"country\" => \"ID\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/global:ekonomi/profil?country=ID\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/global:ekonomi/indikator":{"get":{"operationId":"global_ekonomi_indikator","summary":"One indicator's values for recent years.","description":"Country profiles and official development indicators from the World Bank for 200+ countries: population, GDP, GDP per capita, growth, inflation, unemployment, life expectancy and internet use.\n\nSources: World Bank Open Data (data.worldbank.org). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Global"],"parameters":[{"name":"country","in":"query","required":true,"description":"ISO country code (2 or 3 letters), e.g. ID or IDN","schema":{"pattern":"^[A-Za-z]{2,3}$","type":"string"}},{"name":"indicator","in":"query","required":true,"description":"Indicator: populasi, pdb, pdb_per_kapita, pertumbuhan_pdb, inflasi, pengangguran, harapan_hidup, akses_internet","schema":{"enum":["populasi","pdb","pdb_per_kapita","pertumbuhan_pdb","inflasi","pengangguran","harapan_hidup","akses_internet"],"type":"string"}},{"name":"years","in":"query","required":false,"description":"Number of latest years with data","schema":{"default":5,"maximum":30,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/global:ekonomi/indikator?country=ID&indicator=inflasi&years=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/global:ekonomi/indikator\",\n    params={\"country\": \"ID\", \"indicator\": \"inflasi\", \"years\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"country\": \"ID\", \"indicator\": \"inflasi\", \"years\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/global:ekonomi/indikator?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/global:ekonomi/indikator?' . http_build_query(['country' => 'ID', 'indicator' => 'inflasi', 'years' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"country\", \"ID\")\n\tparams.Set(\"indicator\", \"inflasi\")\n\tparams.Set(\"years\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/global:ekonomi/indikator?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/global:ekonomi/indikator?country=ID&indicator=inflasi&years=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/global:ekonomi/indikator\")\nuri.query = URI.encode_www_form({\"country\" => \"ID\", \"indicator\" => \"inflasi\", \"years\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/global:ekonomi/indikator?country=ID&indicator=inflasi&years=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/indonesia:cuaca/prakiraan":{"get":{"operationId":"indonesia_cuaca_prakiraan","summary":"3-day forecast for one village.","description":"3-day weather forecast per village (3-hour steps) from BMKG. Area codes use the Ministry of Home Affairs level-IV format, e.g. 31.71.03.1001.\n\nSources: BMKG (api.bmkg.go.id). Cached for 1800s, costs 1 quota unit (cache hits are free).","tags":["Indonesia"],"parameters":[{"name":"adm4","in":"query","required":true,"description":"Village code (Ministry of Home Affairs), e.g. 31.71.03.1001","schema":{"pattern":"^\\d{2}\\.\\d{2}\\.\\d{2}\\.\\d{4}$","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/indonesia:cuaca/prakiraan?adm4=31.71.03.1001\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/indonesia:cuaca/prakiraan\",\n    params={\"adm4\": \"31.71.03.1001\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"adm4\": \"31.71.03.1001\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/indonesia:cuaca/prakiraan?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/indonesia:cuaca/prakiraan?' . http_build_query(['adm4' => '31.71.03.1001']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"adm4\", \"31.71.03.1001\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/indonesia:cuaca/prakiraan?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/indonesia:cuaca/prakiraan?adm4=31.71.03.1001\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/indonesia:cuaca/prakiraan\")\nuri.query = URI.encode_www_form({\"adm4\" => \"31.71.03.1001\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/indonesia:cuaca/prakiraan?adm4=31.71.03.1001\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/indonesia:gempa/terbaru":{"get":{"operationId":"indonesia_gempa_terbaru","summary":"The most recent earthquake, with shakemap link.","description":"Latest earthquake, M5.0+ list and felt earthquakes from BMKG, with values converted to numbers (magnitude, depth, coordinates).\n\nSources: BMKG (data.bmkg.go.id). Cached for 60s, costs 1 quota unit (cache hits are free).","tags":["Indonesia"],"parameters":[],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/indonesia:gempa/terbaru\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/indonesia:gempa/terbaru\",\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const response = await fetch(\"https://kajidata.artonlabs.com/v1/indonesia:gempa/terbaru\", {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/indonesia:gempa/terbaru');\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n)\n\nfunc main() {\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/indonesia:gempa/terbaru\", nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/indonesia:gempa/terbaru\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/indonesia:gempa/terbaru\")\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/indonesia:gempa/terbaru\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/indonesia:gempa/terkini":{"get":{"operationId":"indonesia_gempa_terkini","summary":"Recent earthquakes with magnitude 5.0 or more.","description":"Latest earthquake, M5.0+ list and felt earthquakes from BMKG, with values converted to numbers (magnitude, depth, coordinates).\n\nSources: BMKG (data.bmkg.go.id). Cached for 120s, costs 1 quota unit (cache hits are free).","tags":["Indonesia"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Number of earthquakes, max 15","schema":{"default":15,"maximum":15,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/indonesia:gempa/terkini?limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/indonesia:gempa/terkini\",\n    params={\"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/indonesia:gempa/terkini?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/indonesia:gempa/terkini?' . http_build_query(['limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/indonesia:gempa/terkini?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/indonesia:gempa/terkini?limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/indonesia:gempa/terkini\")\nuri.query = URI.encode_www_form({\"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/indonesia:gempa/terkini?limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/indonesia:gempa/dirasakan":{"get":{"operationId":"indonesia_gempa_dirasakan","summary":"Recent earthquakes felt by residents.","description":"Latest earthquake, M5.0+ list and felt earthquakes from BMKG, with values converted to numbers (magnitude, depth, coordinates).\n\nSources: BMKG (data.bmkg.go.id). Cached for 120s, costs 1 quota unit (cache hits are free).","tags":["Indonesia"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Number of earthquakes, max 15","schema":{"default":15,"maximum":15,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/indonesia:gempa/dirasakan?limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/indonesia:gempa/dirasakan\",\n    params={\"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/indonesia:gempa/dirasakan?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/indonesia:gempa/dirasakan?' . http_build_query(['limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/indonesia:gempa/dirasakan?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/indonesia:gempa/dirasakan?limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/indonesia:gempa/dirasakan\")\nuri.query = URI.encode_www_form({\"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/indonesia:gempa/dirasakan?limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/indonesia:harga-pangan/komoditas":{"get":{"operationId":"indonesia_harga_pangan_komoditas","summary":"List of commodities with their IDs.","description":"Prices of rice, chilli, shallots, eggs, cooking oil and other food commodities per province from Bank Indonesia's PIHPS, for traditional markets, modern markets, wholesalers and producers.\n\nSources: PIHPS Nasional, Bank Indonesia (bi.go.id/hargapangan). Cached for 604800s, costs 1 quota unit (cache hits are free).","tags":["Indonesia"],"parameters":[],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/indonesia:harga-pangan/komoditas\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/indonesia:harga-pangan/komoditas\",\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const response = await fetch(\"https://kajidata.artonlabs.com/v1/indonesia:harga-pangan/komoditas\", {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/indonesia:harga-pangan/komoditas');\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n)\n\nfunc main() {\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/indonesia:harga-pangan/komoditas\", nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/indonesia:harga-pangan/komoditas\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/indonesia:harga-pangan/komoditas\")\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/indonesia:harga-pangan/komoditas\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/indonesia:harga-pangan/provinsi":{"get":{"operationId":"indonesia_harga_pangan_provinsi","summary":"List of provinces with their PIHPS IDs.","description":"Prices of rice, chilli, shallots, eggs, cooking oil and other food commodities per province from Bank Indonesia's PIHPS, for traditional markets, modern markets, wholesalers and producers.\n\nSources: PIHPS Nasional, Bank Indonesia (bi.go.id/hargapangan). Cached for 604800s, costs 1 quota unit (cache hits are free).","tags":["Indonesia"],"parameters":[],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/indonesia:harga-pangan/provinsi\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/indonesia:harga-pangan/provinsi\",\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const response = await fetch(\"https://kajidata.artonlabs.com/v1/indonesia:harga-pangan/provinsi\", {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/indonesia:harga-pangan/provinsi');\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n)\n\nfunc main() {\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/indonesia:harga-pangan/provinsi\", nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/indonesia:harga-pangan/provinsi\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/indonesia:harga-pangan/provinsi\")\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/indonesia:harga-pangan/provinsi\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/indonesia:harga-pangan/harga":{"get":{"operationId":"indonesia_harga_pangan_harga","summary":"Price of one commodity per province (IDR per kg or commodity unit).","description":"Prices of rice, chilli, shallots, eggs, cooking oil and other food commodities per province from Bank Indonesia's PIHPS, for traditional markets, modern markets, wholesalers and producers.\n\nSources: PIHPS Nasional, Bank Indonesia (bi.go.id/hargapangan). Cached for 3600s, costs 1 quota unit (cache hits are free).","tags":["Indonesia"],"parameters":[{"name":"commodity","in":"query","required":false,"description":"Commodity ID from the komoditas endpoint, e.g. 1 or 1_3","schema":{"default":"1","pattern":"^\\d{1,3}(_\\d{1,3})?$","type":"string"}},{"name":"market","in":"query","required":false,"description":"Market type","schema":{"default":"tradisional","enum":["tradisional","modern","pedagang-besar","produsen"],"type":"string"}},{"name":"date","in":"query","required":false,"description":"Optional ISO date; the response states the actual data date (default: latest)","schema":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null}},{"name":"province_id","in":"query","required":false,"description":"Optional province ID from the provinsi endpoint","schema":{"anyOf":[{"maximum":99,"minimum":1,"type":"integer"},{"type":"null"}],"default":null}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/indonesia:harga-pangan/harga?commodity=1&market=tradisional\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/indonesia:harga-pangan/harga\",\n    params={\"commodity\": \"1\", \"market\": \"tradisional\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"commodity\": \"1\", \"market\": \"tradisional\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/indonesia:harga-pangan/harga?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/indonesia:harga-pangan/harga?' . http_build_query(['commodity' => '1', 'market' => 'tradisional']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"commodity\", \"1\")\n\tparams.Set(\"market\", \"tradisional\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/indonesia:harga-pangan/harga?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/indonesia:harga-pangan/harga?commodity=1&market=tradisional\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/indonesia:harga-pangan/harga\")\nuri.query = URI.encode_www_form({\"commodity\" => \"1\", \"market\" => \"tradisional\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/indonesia:harga-pangan/harga?commodity=1&market=tradisional\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/indonesia:hari-libur/list":{"get":{"operationId":"indonesia_hari_libur_list","summary":"All national holidays, collective leave days and observances in a year.","description":"Indonesian national holidays and collective leave days (joint ministerial decree) per year, a date checker and a business-day calculator. Dates not yet officially confirmed are flagged tentative. Years outside the primary source fall back to a source without collective leave.\n\nSources: guangrei/APIHariLibur_V2 (GitHub), Nager.Date (date.nager.at). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Indonesia"],"parameters":[{"name":"year","in":"query","required":false,"description":"Year, e.g. 2026","schema":{"maximum":2100,"minimum":1975,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/indonesia:hari-libur/list?year=2026\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/indonesia:hari-libur/list\",\n    params={\"year\": \"2026\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"year\": \"2026\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/indonesia:hari-libur/list?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/indonesia:hari-libur/list?' . http_build_query(['year' => '2026']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"year\", \"2026\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/indonesia:hari-libur/list?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/indonesia:hari-libur/list?year=2026\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/indonesia:hari-libur/list\")\nuri.query = URI.encode_www_form({\"year\" => \"2026\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/indonesia:hari-libur/list?year=2026\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/indonesia:hari-libur/check":{"get":{"operationId":"indonesia_hari_libur_check","summary":"Check whether a date is a holiday, collective leave day or weekend.","description":"Indonesian national holidays and collective leave days (joint ministerial decree) per year, a date checker and a business-day calculator. Dates not yet officially confirmed are flagged tentative. Years outside the primary source fall back to a source without collective leave.\n\nSources: guangrei/APIHariLibur_V2 (GitHub), Nager.Date (date.nager.at). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Indonesia"],"parameters":[{"name":"date","in":"query","required":false,"description":"ISO date, e.g. 2026-08-17","schema":{"format":"date","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/indonesia:hari-libur/check?date=2026-08-17\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/indonesia:hari-libur/check\",\n    params={\"date\": \"2026-08-17\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"date\": \"2026-08-17\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/indonesia:hari-libur/check?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/indonesia:hari-libur/check?' . http_build_query(['date' => '2026-08-17']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"date\", \"2026-08-17\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/indonesia:hari-libur/check?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/indonesia:hari-libur/check?date=2026-08-17\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/indonesia:hari-libur/check\")\nuri.query = URI.encode_www_form({\"date\" => \"2026-08-17\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/indonesia:hari-libur/check?date=2026-08-17\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/indonesia:hari-libur/hari-kerja":{"get":{"operationId":"indonesia_hari_libur_hari-kerja","summary":"Number of business days (Mon-Fri, excluding holidays and collective leave) between two dates.","description":"Indonesian national holidays and collective leave days (joint ministerial decree) per year, a date checker and a business-day calculator. Dates not yet officially confirmed are flagged tentative. Years outside the primary source fall back to a source without collective leave.\n\nSources: guangrei/APIHariLibur_V2 (GitHub), Nager.Date (date.nager.at). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Indonesia"],"parameters":[{"name":"start","in":"query","required":true,"description":"First day, ISO date","schema":{"format":"date","type":"string"}},{"name":"end","in":"query","required":true,"description":"Last day (inclusive), ISO date","schema":{"format":"date","type":"string"}},{"name":"cuti_bersama","in":"query","required":false,"description":"Treat collective leave days as days off","schema":{"default":true,"type":"boolean"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/indonesia:hari-libur/hari-kerja?start=2026-03-16&end=2026-03-31\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/indonesia:hari-libur/hari-kerja\",\n    params={\"start\": \"2026-03-16\", \"end\": \"2026-03-31\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"start\": \"2026-03-16\", \"end\": \"2026-03-31\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/indonesia:hari-libur/hari-kerja?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/indonesia:hari-libur/hari-kerja?' . http_build_query(['start' => '2026-03-16', 'end' => '2026-03-31']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"start\", \"2026-03-16\")\n\tparams.Set(\"end\", \"2026-03-31\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/indonesia:hari-libur/hari-kerja?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/indonesia:hari-libur/hari-kerja?start=2026-03-16&end=2026-03-31\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/indonesia:hari-libur/hari-kerja\")\nuri.query = URI.encode_www_form({\"start\" => \"2026-03-16\", \"end\" => \"2026-03-31\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/indonesia:hari-libur/hari-kerja?start=2026-03-16&end=2026-03-31\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/indonesia:kampus/provinsi":{"get":{"operationId":"indonesia_kampus_provinsi","summary":"Number of campuses per province with codes.","description":"Number of academies, polytechnics, colleges, institutes and universities per province and regency, plus the list of campuses per district. Use the school API with the NPSN for campus details. Region codes are the Ministry of Education's, which differ from the Home Affairs codes.\n\nSources: Data Referensi Kemendikdasmen (referensi.data.kemendikdasmen.go.id). Cached for 604800s, costs 1 quota unit (cache hits are free).","tags":["Indonesia"],"parameters":[],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/indonesia:kampus/provinsi\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/indonesia:kampus/provinsi\",\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const response = await fetch(\"https://kajidata.artonlabs.com/v1/indonesia:kampus/provinsi\", {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/indonesia:kampus/provinsi');\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n)\n\nfunc main() {\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/indonesia:kampus/provinsi\", nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/indonesia:kampus/provinsi\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/indonesia:kampus/provinsi\")\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/indonesia:kampus/provinsi\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/indonesia:kampus/kabupaten":{"get":{"operationId":"indonesia_kampus_kabupaten","summary":"Campuses per regency in a province.","description":"Number of academies, polytechnics, colleges, institutes and universities per province and regency, plus the list of campuses per district. Use the school API with the NPSN for campus details. Region codes are the Ministry of Education's, which differ from the Home Affairs codes.\n\nSources: Data Referensi Kemendikdasmen (referensi.data.kemendikdasmen.go.id). Cached for 604800s, costs 1 quota unit (cache hits are free).","tags":["Indonesia"],"parameters":[{"name":"code","in":"query","required":true,"description":"6-digit region code from the previous level, e.g. 016000","schema":{"pattern":"^\\d{6}$","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/indonesia:kampus/kabupaten?code=010000\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/indonesia:kampus/kabupaten\",\n    params={\"code\": \"010000\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"code\": \"010000\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/indonesia:kampus/kabupaten?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/indonesia:kampus/kabupaten?' . http_build_query(['code' => '010000']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"code\", \"010000\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/indonesia:kampus/kabupaten?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/indonesia:kampus/kabupaten?code=010000\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/indonesia:kampus/kabupaten\")\nuri.query = URI.encode_www_form({\"code\" => \"010000\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/indonesia:kampus/kabupaten?code=010000\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/indonesia:kampus/kecamatan":{"get":{"operationId":"indonesia_kampus_kecamatan","summary":"Campuses per district in a regency.","description":"Number of academies, polytechnics, colleges, institutes and universities per province and regency, plus the list of campuses per district. Use the school API with the NPSN for campus details. Region codes are the Ministry of Education's, which differ from the Home Affairs codes.\n\nSources: Data Referensi Kemendikdasmen (referensi.data.kemendikdasmen.go.id). Cached for 604800s, costs 1 quota unit (cache hits are free).","tags":["Indonesia"],"parameters":[{"name":"code","in":"query","required":true,"description":"6-digit region code from the previous level, e.g. 016000","schema":{"pattern":"^\\d{6}$","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/indonesia:kampus/kecamatan?code=016000\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/indonesia:kampus/kecamatan\",\n    params={\"code\": \"016000\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"code\": \"016000\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/indonesia:kampus/kecamatan?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/indonesia:kampus/kecamatan?' . http_build_query(['code' => '016000']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"code\", \"016000\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/indonesia:kampus/kecamatan?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/indonesia:kampus/kecamatan?code=016000\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/indonesia:kampus/kecamatan\")\nuri.query = URI.encode_www_form({\"code\" => \"016000\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/indonesia:kampus/kecamatan?code=016000\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/indonesia:kampus/daftar":{"get":{"operationId":"indonesia_kampus_daftar","summary":"List of campuses in a district.","description":"Number of academies, polytechnics, colleges, institutes and universities per province and regency, plus the list of campuses per district. Use the school API with the NPSN for campus details. Region codes are the Ministry of Education's, which differ from the Home Affairs codes.\n\nSources: Data Referensi Kemendikdasmen (referensi.data.kemendikdasmen.go.id). Cached for 604800s, costs 1 quota unit (cache hits are free).","tags":["Indonesia"],"parameters":[{"name":"code","in":"query","required":true,"description":"6-digit region code from the previous level, e.g. 016000","schema":{"pattern":"^\\d{6}$","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/indonesia:kampus/daftar?code=016006\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/indonesia:kampus/daftar\",\n    params={\"code\": \"016006\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"code\": \"016006\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/indonesia:kampus/daftar?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/indonesia:kampus/daftar?' . http_build_query(['code' => '016006']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"code\", \"016006\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/indonesia:kampus/daftar?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/indonesia:kampus/daftar?code=016006\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/indonesia:kampus/daftar\")\nuri.query = URI.encode_www_form({\"code\" => \"016006\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/indonesia:kampus/daftar?code=016006\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/indonesia:rumah-sakit/provinsi":{"get":{"operationId":"indonesia_rumah_sakit_provinsi","summary":"Number of hospitals per province.","description":"Number of hospitals per province according to the Ministry of Health's SIRS Online. Hospital names are not included yet.\n\nSources: SIRS Online, Kemenkes (sirs.kemkes.go.id). Cached for 604800s, costs 1 quota unit (cache hits are free).","tags":["Indonesia"],"parameters":[],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/indonesia:rumah-sakit/provinsi\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/indonesia:rumah-sakit/provinsi\",\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const response = await fetch(\"https://kajidata.artonlabs.com/v1/indonesia:rumah-sakit/provinsi\", {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/indonesia:rumah-sakit/provinsi');\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n)\n\nfunc main() {\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/indonesia:rumah-sakit/provinsi\", nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/indonesia:rumah-sakit/provinsi\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/indonesia:rumah-sakit/provinsi\")\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/indonesia:rumah-sakit/provinsi\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/indonesia:sekolah/npsn":{"get":{"operationId":"indonesia_sekolah_npsn","summary":"Institution profile of one school by NPSN.","description":"Find schools by name or NPSN, and see the address, status, level, accreditation and school contact details from the Ministry of Education's reference data.\n\nSources: Data Referensi Kemendikdasmen (referensi.data.kemendikdasmen.go.id). Cached for 604800s, costs 1 quota unit (cache hits are free).","tags":["Indonesia"],"parameters":[{"name":"npsn","in":"query","required":true,"description":"School NPSN, e.g. 20100235","schema":{"pattern":"^[0-9A-Za-z]{6,8}$","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/indonesia:sekolah/npsn?npsn=20100235\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/indonesia:sekolah/npsn\",\n    params={\"npsn\": \"20100235\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"npsn\": \"20100235\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/indonesia:sekolah/npsn?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/indonesia:sekolah/npsn?' . http_build_query(['npsn' => '20100235']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"npsn\", \"20100235\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/indonesia:sekolah/npsn?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/indonesia:sekolah/npsn?npsn=20100235\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/indonesia:sekolah/npsn\")\nuri.query = URI.encode_www_form({\"npsn\" => \"20100235\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/indonesia:sekolah/npsn?npsn=20100235\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/indonesia:sekolah/cari":{"get":{"operationId":"indonesia_sekolah_cari","summary":"Search schools by name or NPSN.","description":"Find schools by name or NPSN, and see the address, status, level, accreditation and school contact details from the Ministry of Education's reference data.\n\nSources: Data Referensi Kemendikdasmen (referensi.data.kemendikdasmen.go.id). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Indonesia"],"parameters":[{"name":"q","in":"query","required":true,"description":"School name or NPSN, e.g. SMA NEGERI 1 BOGOR","schema":{"maxLength":80,"minLength":3,"pattern":"^[0-9A-Za-z .'-]+$","type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":20,"maximum":100,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/indonesia:sekolah/cari?q=SMA+NEGERI+1+BOGOR&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/indonesia:sekolah/cari\",\n    params={\"q\": \"SMA NEGERI 1 BOGOR\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"SMA NEGERI 1 BOGOR\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/indonesia:sekolah/cari?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/indonesia:sekolah/cari?' . http_build_query(['q' => 'SMA NEGERI 1 BOGOR', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"SMA NEGERI 1 BOGOR\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/indonesia:sekolah/cari?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/indonesia:sekolah/cari?q=SMA+NEGERI+1+BOGOR&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/indonesia:sekolah/cari\")\nuri.query = URI.encode_www_form({\"q\" => \"SMA NEGERI 1 BOGOR\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/indonesia:sekolah/cari?q=SMA+NEGERI+1+BOGOR&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:arxiv/cari":{"get":{"operationId":"knowledge_arxiv_cari","summary":"Search papers.","description":"Search scientific papers on arXiv with authors, abstract, categories and link. Metadata only; read the papers on arXiv. Data comes from arXiv and does not imply arXiv's endorsement.\n\nSources: arXiv API (export.arxiv.org). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"q","in":"query","required":true,"description":"Search text, e.g. large language models","schema":{"maxLength":120,"minLength":2,"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:arxiv/cari?q=large+language+models&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:arxiv/cari\",\n    params={\"q\": \"large language models\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"large language models\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:arxiv/cari?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:arxiv/cari?' . http_build_query(['q' => 'large language models', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"large language models\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:arxiv/cari?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:arxiv/cari?q=large+language+models&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:arxiv/cari\")\nuri.query = URI.encode_www_form({\"q\" => \"large language models\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:arxiv/cari?q=large+language+models&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:buku/isbn":{"get":{"operationId":"knowledge_buku_isbn","summary":"Book data by ISBN.","description":"Search books by keyword, or open one by ISBN-10 or ISBN-13: title, authors, publishers, publish date, page count, subjects and cover. The ISBN checksum is verified before querying the source.\n\nSources: Open Library (openlibrary.org, Internet Archive). Cached for 2592000s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"isbn","in":"query","required":true,"description":"ISBN-10 or ISBN-13, dashes allowed, e.g. 978-0140328721","schema":{"type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:buku/isbn?isbn=9780140328721\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:buku/isbn\",\n    params={\"isbn\": \"9780140328721\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"isbn\": \"9780140328721\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:buku/isbn?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:buku/isbn?' . http_build_query(['isbn' => '9780140328721']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"isbn\", \"9780140328721\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:buku/isbn?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:buku/isbn?isbn=9780140328721\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:buku/isbn\")\nuri.query = URI.encode_www_form({\"isbn\" => \"9780140328721\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:buku/isbn?isbn=9780140328721\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:buku/search":{"get":{"operationId":"knowledge_buku_search","summary":"Search books by title, author or subject.","description":"Search books by keyword, or open one by ISBN-10 or ISBN-13: title, authors, publishers, publish date, page count, subjects and cover. The ISBN checksum is verified before querying the source.\n\nSources: Open Library (openlibrary.org, Internet Archive). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"q","in":"query","required":true,"description":"Title, author or subject, e.g. sejarah indonesia","schema":{"maxLength":200,"minLength":2,"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:buku/search?q=sejarah+indonesia&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:buku/search\",\n    params={\"q\": \"sejarah indonesia\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"sejarah indonesia\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:buku/search?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:buku/search?' . http_build_query(['q' => 'sejarah indonesia', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"sejarah indonesia\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:buku/search?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:buku/search?q=sejarah+indonesia&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:buku/search\")\nuri.query = URI.encode_www_form({\"q\" => \"sejarah indonesia\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:buku/search?q=sejarah+indonesia&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:clinical-trials/search":{"get":{"operationId":"knowledge_clinical_trials_search","summary":"Search clinical trials.","description":"Search clinical trials in the US National Library of Medicine registry: status, phase, sponsor and condition studied. Not medical advice.\n\nSources: ClinicalTrials.gov API v2 (clinicaltrials.gov). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"q","in":"query","required":true,"description":"Search text, e.g. dengue","schema":{"maxLength":200,"minLength":2,"type":"string"}},{"name":"country","in":"query","required":false,"description":"Country where the trial runs, in English, e.g. Indonesia","schema":{"anyOf":[{"pattern":"^[A-Za-z][A-Za-z ]{1,59}$","type":"string"},{"type":"null"}],"default":null}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:clinical-trials/search?q=dengue&country=Indonesia&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:clinical-trials/search\",\n    params={\"q\": \"dengue\", \"country\": \"Indonesia\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"dengue\", \"country\": \"Indonesia\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:clinical-trials/search?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:clinical-trials/search?' . http_build_query(['q' => 'dengue', 'country' => 'Indonesia', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"dengue\")\n\tparams.Set(\"country\", \"Indonesia\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:clinical-trials/search?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:clinical-trials/search?q=dengue&country=Indonesia&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:clinical-trials/search\")\nuri.query = URI.encode_www_form({\"q\" => \"dengue\", \"country\" => \"Indonesia\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:clinical-trials/search?q=dengue&country=Indonesia&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:europepmc/cari":{"get":{"operationId":"knowledge_europepmc_cari","summary":"Search scientific articles.","description":"Search biomedical and life-science articles with authors, journal, year and DOI.\n\nSources: Europe PMC REST API (ebi.ac.uk). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"q","in":"query","required":true,"description":"Search text, e.g. dengue","schema":{"maxLength":200,"minLength":2,"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:europepmc/cari?q=dengue+vaccine&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:europepmc/cari\",\n    params={\"q\": \"dengue vaccine\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"dengue vaccine\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:europepmc/cari?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:europepmc/cari?' . http_build_query(['q' => 'dengue vaccine', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"dengue vaccine\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:europepmc/cari?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:europepmc/cari?q=dengue+vaccine&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:europepmc/cari\")\nuri.query = URI.encode_www_form({\"q\" => \"dengue vaccine\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:europepmc/cari?q=dengue+vaccine&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:gbif/species":{"get":{"operationId":"knowledge_gbif_species","summary":"Match a scientific name against the GBIF taxonomy.","description":"Match a species' scientific name and see how many occurrence records it has per year in a country.\n\nSources: GBIF API (api.gbif.org). Cached for 604800s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"name","in":"query","required":true,"description":"Scientific name, e.g. Panthera tigris","schema":{"maxLength":120,"minLength":2,"type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:gbif/species?name=Panthera+tigris\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:gbif/species\",\n    params={\"name\": \"Panthera tigris\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"name\": \"Panthera tigris\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:gbif/species?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:gbif/species?' . http_build_query(['name' => 'Panthera tigris']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"name\", \"Panthera tigris\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:gbif/species?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:gbif/species?name=Panthera+tigris\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:gbif/species\")\nuri.query = URI.encode_www_form({\"name\" => \"Panthera tigris\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:gbif/species?name=Panthera+tigris\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:gbif/occurrence-counts":{"get":{"operationId":"knowledge_gbif_occurrence-counts","summary":"Records per year. This counts recording effort, not population size.","description":"Match a species' scientific name and see how many occurrence records it has per year in a country.\n\nSources: GBIF API (api.gbif.org). Cached for 604800s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"name","in":"query","required":true,"description":"Scientific name, e.g. Panthera tigris","schema":{"maxLength":120,"minLength":2,"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter country code","schema":{"default":"ID","pattern":"^[A-Za-z]{2}$","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:gbif/occurrence-counts?name=Panthera+tigris&country=ID\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:gbif/occurrence-counts\",\n    params={\"name\": \"Panthera tigris\", \"country\": \"ID\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"name\": \"Panthera tigris\", \"country\": \"ID\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:gbif/occurrence-counts?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:gbif/occurrence-counts?' . http_build_query(['name' => 'Panthera tigris', 'country' => 'ID']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"name\", \"Panthera tigris\")\n\tparams.Set(\"country\", \"ID\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:gbif/occurrence-counts?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:gbif/occurrence-counts?name=Panthera+tigris&country=ID\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:gbif/occurrence-counts\")\nuri.query = URI.encode_www_form({\"name\" => \"Panthera tigris\", \"country\" => \"ID\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:gbif/occurrence-counts?name=Panthera+tigris&country=ID\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:kamus-inggris/arti":{"get":{"operationId":"knowledge_kamus_inggris_arti","summary":"Meaning and details of an English word.","description":"English word definitions with part of speech, example sentences, synonyms, antonyms, phonetics and pronunciation audio. Ideal for language-learning apps.\n\nSources: Free Dictionary API (dictionaryapi.dev, data Wiktionary). Cached for 2592000s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"word","in":"query","required":true,"description":"English word, e.g. gateway","schema":{"maxLength":50,"minLength":1,"pattern":"^[A-Za-z][A-Za-z' -]*$","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:kamus-inggris/arti?word=gateway\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:kamus-inggris/arti\",\n    params={\"word\": \"gateway\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"word\": \"gateway\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:kamus-inggris/arti?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:kamus-inggris/arti?' . http_build_query(['word' => 'gateway']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"word\", \"gateway\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:kamus-inggris/arti?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:kamus-inggris/arti?word=gateway\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:kamus-inggris/arti\")\nuri.query = URI.encode_www_form({\"word\" => \"gateway\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:kamus-inggris/arti?word=gateway\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:medlineplus/cari":{"get":{"operationId":"knowledge_medlineplus_cari","summary":"Search health topics.","description":"Search health topics from MedlinePlus with summary and link, in English. General information, not a substitute for medical advice.\n\nSources: MedlinePlus Web Service (nlm.nih.gov). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"q","in":"query","required":true,"description":"Health topic, e.g. diabetes","schema":{"maxLength":100,"minLength":2,"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":5,"maximum":20,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:medlineplus/cari?q=diabetes&limit=3\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:medlineplus/cari\",\n    params={\"q\": \"diabetes\", \"limit\": \"3\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"diabetes\", \"limit\": \"3\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:medlineplus/cari?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:medlineplus/cari?' . http_build_query(['q' => 'diabetes', 'limit' => '3']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"diabetes\")\n\tparams.Set(\"limit\", \"3\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:medlineplus/cari?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:medlineplus/cari?q=diabetes&limit=3\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:medlineplus/cari\")\nuri.query = URI.encode_www_form({\"q\" => \"diabetes\", \"limit\" => \"3\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:medlineplus/cari?q=diabetes&limit=3\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:nobel/prizes":{"get":{"operationId":"knowledge_nobel_prizes","summary":"List prizes, newest first.","description":"Nobel Prize winners since 1901 with category, year, prize amount and motivation.\n\nSources: Nobel Prize API (api.nobelprize.org). Cached for 604800s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"year","in":"query","required":false,"description":"Award year, e.g. 2024","schema":{"anyOf":[{"maximum":2100,"minimum":1901,"type":"integer"},{"type":"null"}],"default":null}},{"name":"category","in":"query","required":false,"description":"phy, che, med, lit, pea or eco","schema":{"anyOf":[{"pattern":"^(phy|che|med|lit|pea|eco)$","type":"string"},{"type":"null"}],"default":null}},{"name":"limit","in":"query","required":false,"description":"Maximum prizes","schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:nobel/prizes?year=2024&category=phy\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:nobel/prizes\",\n    params={\"year\": \"2024\", \"category\": \"phy\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"year\": \"2024\", \"category\": \"phy\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:nobel/prizes?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:nobel/prizes?' . http_build_query(['year' => '2024', 'category' => 'phy']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"year\", \"2024\")\n\tparams.Set(\"category\", \"phy\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:nobel/prizes?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:nobel/prizes?year=2024&category=phy\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:nobel/prizes\")\nuri.query = URI.encode_www_form({\"year\" => \"2024\", \"category\" => \"phy\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:nobel/prizes?year=2024&category=phy\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:nusax/texts":{"get":{"operationId":"knowledge_nusax_texts","summary":"Sentiment-labelled sentences.","description":"Sentences labelled positive, neutral or negative for training and testing sentiment models, in Indonesian, 10 local languages and English. Also includes sentiment word translations.\n\nSources: IndoNLP NusaX (github.com/IndoNLP/nusax). Cached for 604800s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"language","in":"query","required":false,"description":"Language, e.g. indonesian or javanese","schema":{"default":"indonesian","pattern":"^(indonesian|acehnese|balinese|banjarese|buginese|english|javanese|madurese|minangkabau|ngaju|sundanese|toba_batak)$","type":"string"}},{"name":"split","in":"query","required":false,"description":"Part of the corpus: train, valid or test","schema":{"default":"train","pattern":"^(train|valid|test)$","type":"string"}},{"name":"label","in":"query","required":false,"description":"Only this label","schema":{"anyOf":[{"pattern":"^(positive|neutral|negative)$","type":"string"},{"type":"null"}],"default":null}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":20,"maximum":200,"minimum":1,"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"Rows to skip","schema":{"default":0,"minimum":0,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:nusax/texts?language=indonesian&split=test&label=negative&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:nusax/texts\",\n    params={\"language\": \"indonesian\", \"split\": \"test\", \"label\": \"negative\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"language\": \"indonesian\", \"split\": \"test\", \"label\": \"negative\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:nusax/texts?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:nusax/texts?' . http_build_query(['language' => 'indonesian', 'split' => 'test', 'label' => 'negative', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"language\", \"indonesian\")\n\tparams.Set(\"split\", \"test\")\n\tparams.Set(\"label\", \"negative\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:nusax/texts?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:nusax/texts?language=indonesian&split=test&label=negative&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:nusax/texts\")\nuri.query = URI.encode_www_form({\"language\" => \"indonesian\", \"split\" => \"test\", \"label\" => \"negative\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:nusax/texts?language=indonesian&split=test&label=negative&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:nusax/lexicon":{"get":{"operationId":"knowledge_nusax_lexicon","summary":"Sentiment word translations from Indonesian to another language. Translations only, with no positive or negative score.","description":"Sentences labelled positive, neutral or negative for training and testing sentiment models, in Indonesian, 10 local languages and English. Also includes sentiment word translations.\n\nSources: IndoNLP NusaX (github.com/IndoNLP/nusax). Cached for 604800s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"language","in":"query","required":true,"description":"Target language, e.g. javanese","schema":{"pattern":"^(acehnese|balinese|banjarese|buginese|english|javanese|madurese|minangkabau|ngaju|sundanese|toba_batak)$","type":"string"}},{"name":"word","in":"query","required":false,"description":"Indonesian word, e.g. senang","schema":{"anyOf":[{"maxLength":40,"minLength":2,"type":"string"},{"type":"null"}],"default":null}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":50,"maximum":500,"minimum":1,"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"Rows to skip","schema":{"default":0,"minimum":0,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:nusax/lexicon?language=javanese&word=senang\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:nusax/lexicon\",\n    params={\"language\": \"javanese\", \"word\": \"senang\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"language\": \"javanese\", \"word\": \"senang\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:nusax/lexicon?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:nusax/lexicon?' . http_build_query(['language' => 'javanese', 'word' => 'senang']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"language\", \"javanese\")\n\tparams.Set(\"word\", \"senang\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:nusax/lexicon?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:nusax/lexicon?language=javanese&word=senang\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:nusax/lexicon\")\nuri.query = URI.encode_www_form({\"language\" => \"javanese\", \"word\" => \"senang\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:nusax/lexicon?language=javanese&word=senang\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:pubmed/search":{"get":{"operationId":"knowledge_pubmed_search","summary":"Search PubMed articles.","description":"Search medicine and life science articles in PubMed: title, journal, publication date, authors and DOI.\n\nSources: NCBI E-utilities (eutils.ncbi.nlm.nih.gov). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"q","in":"query","required":true,"description":"Search text, e.g. stunting indonesia","schema":{"maxLength":200,"minLength":2,"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:pubmed/search?q=stunting+indonesia&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:pubmed/search\",\n    params={\"q\": \"stunting indonesia\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"stunting indonesia\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:pubmed/search?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:pubmed/search?' . http_build_query(['q' => 'stunting indonesia', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"stunting indonesia\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:pubmed/search?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:pubmed/search?q=stunting+indonesia&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:pubmed/search\")\nuri.query = URI.encode_www_form({\"q\" => \"stunting indonesia\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:pubmed/search?q=stunting+indonesia&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:openfda/labels":{"get":{"operationId":"knowledge_openfda_labels","summary":"Search drug labels.","description":"Purpose, warnings and directions from drug labels registered in the United States, plus drug recall records. Not medical advice.\n\nSources: openFDA Drug APIs (api.fda.gov). Cached for 604800s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"name","in":"query","required":true,"description":"Generic or brand name, e.g. ibuprofen","schema":{"maxLength":80,"minLength":3,"pattern":"^[A-Za-z0-9 \\-]+$","type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":3,"maximum":10,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:openfda/labels?name=ibuprofen&limit=2\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:openfda/labels\",\n    params={\"name\": \"ibuprofen\", \"limit\": \"2\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"name\": \"ibuprofen\", \"limit\": \"2\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:openfda/labels?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:openfda/labels?' . http_build_query(['name' => 'ibuprofen', 'limit' => '2']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"name\", \"ibuprofen\")\n\tparams.Set(\"limit\", \"2\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:openfda/labels?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:openfda/labels?name=ibuprofen&limit=2\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:openfda/labels\")\nuri.query = URI.encode_www_form({\"name\" => \"ibuprofen\", \"limit\" => \"2\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:openfda/labels?name=ibuprofen&limit=2\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:openfda/recalls":{"get":{"operationId":"knowledge_openfda_recalls","summary":"Drug recalls in the United States, newest first.","description":"Purpose, warnings and directions from drug labels registered in the United States, plus drug recall records. Not medical advice.\n\nSources: openFDA Drug APIs (api.fda.gov). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"q","in":"query","required":true,"description":"Word in the product or recall reason, e.g. metformin","schema":{"maxLength":120,"minLength":2,"pattern":"^[^\"\\\\\\\\]+$","type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:openfda/recalls?q=metformin&limit=3\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:openfda/recalls\",\n    params={\"q\": \"metformin\", \"limit\": \"3\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"metformin\", \"limit\": \"3\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:openfda/recalls?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:openfda/recalls?' . http_build_query(['q' => 'metformin', 'limit' => '3']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"metformin\")\n\tparams.Set(\"limit\", \"3\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:openfda/recalls?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:openfda/recalls?q=metformin&limit=3\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:openfda/recalls\")\nuri.query = URI.encode_www_form({\"q\" => \"metformin\", \"limit\" => \"3\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:openfda/recalls?q=metformin&limit=3\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:wikipedia-pageviews/article":{"get":{"operationId":"knowledge_wikipedia_pageviews_article","summary":"Daily views of one article.","description":"Daily views of a Wikipedia article and the most read articles, to see how much public attention a topic gets.\n\nSources: Wikimedia Analytics API (wikimedia.org). Cached for 21600s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"article","in":"query","required":true,"description":"Article title, e.g. Inflasi","schema":{"maxLength":200,"minLength":2,"type":"string"}},{"name":"lang","in":"query","required":false,"description":"Wikipedia language","schema":{"default":"id","pattern":"^[a-z]{2,3}$","type":"string"}},{"name":"days","in":"query","required":false,"description":"How many days back","schema":{"default":30,"maximum":365,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:wikipedia-pageviews/article?article=Inflasi&days=14\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:wikipedia-pageviews/article\",\n    params={\"article\": \"Inflasi\", \"days\": \"14\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"article\": \"Inflasi\", \"days\": \"14\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:wikipedia-pageviews/article?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:wikipedia-pageviews/article?' . http_build_query(['article' => 'Inflasi', 'days' => '14']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"article\", \"Inflasi\")\n\tparams.Set(\"days\", \"14\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:wikipedia-pageviews/article?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:wikipedia-pageviews/article?article=Inflasi&days=14\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:wikipedia-pageviews/article\")\nuri.query = URI.encode_www_form({\"article\" => \"Inflasi\", \"days\" => \"14\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:wikipedia-pageviews/article?article=Inflasi&days=14\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:wikipedia-pageviews/top":{"get":{"operationId":"knowledge_wikipedia_pageviews_top","summary":"Most read articles on one day, to see what the public is looking up.","description":"Daily views of a Wikipedia article and the most read articles, to see how much public attention a topic gets.\n\nSources: Wikimedia Analytics API (wikimedia.org). Cached for 21600s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"lang","in":"query","required":false,"description":"Wikipedia language","schema":{"default":"id","pattern":"^[a-z]{2,3}$","type":"string"}},{"name":"date","in":"query","required":false,"description":"Day as YYYY-MM-DD; the latest available day if empty","schema":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null}},{"name":"limit","in":"query","required":false,"description":"Maximum articles","schema":{"default":25,"maximum":100,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:wikipedia-pageviews/top?lang=id&limit=10\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:wikipedia-pageviews/top\",\n    params={\"lang\": \"id\", \"limit\": \"10\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"lang\": \"id\", \"limit\": \"10\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:wikipedia-pageviews/top?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:wikipedia-pageviews/top?' . http_build_query(['lang' => 'id', 'limit' => '10']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"lang\", \"id\")\n\tparams.Set(\"limit\", \"10\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:wikipedia-pageviews/top?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:wikipedia-pageviews/top?lang=id&limit=10\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:wikipedia-pageviews/top\")\nuri.query = URI.encode_www_form({\"lang\" => \"id\", \"limit\" => \"10\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:wikipedia-pageviews/top?lang=id&limit=10\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:wikidata/search":{"get":{"operationId":"knowledge_wikidata_search","summary":"Search entities.","description":"Search entities such as places, organisations and concepts, with descriptions and identifiers.\n\nSources: Wikidata API (wikidata.org). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"q","in":"query","required":true,"description":"Search text, e.g. Jakarta","schema":{"maxLength":120,"minLength":2,"type":"string"}},{"name":"lang","in":"query","required":false,"description":"Language of labels","schema":{"default":"id","pattern":"^[a-z]{2,3}$","type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":10,"maximum":20,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:wikidata/search?q=Jakarta&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:wikidata/search\",\n    params={\"q\": \"Jakarta\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"Jakarta\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:wikidata/search?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:wikidata/search?' . http_build_query(['q' => 'Jakarta', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"Jakarta\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:wikidata/search?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:wikidata/search?q=Jakarta&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:wikidata/search\")\nuri.query = URI.encode_www_form({\"q\" => \"Jakarta\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:wikidata/search?q=Jakarta&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:cleveland-museum/artworks":{"get":{"operationId":"knowledge_cleveland_museum_artworks","summary":"Search CC0 artworks.","description":"Search CC0 artworks with culture, technique, date and image.\n\nSources: Cleveland Museum of Art Open Access API. Cached for 604800s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"q","in":"query","required":true,"description":"Search text, e.g. batik","schema":{"maxLength":120,"minLength":2,"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:cleveland-museum/artworks?q=batik&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:cleveland-museum/artworks\",\n    params={\"q\": \"batik\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"batik\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:cleveland-museum/artworks?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:cleveland-museum/artworks?' . http_build_query(['q' => 'batik', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"batik\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:cleveland-museum/artworks?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:cleveland-museum/artworks?q=batik&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:cleveland-museum/artworks\")\nuri.query = URI.encode_www_form({\"q\" => \"batik\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:cleveland-museum/artworks?q=batik&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:zenodo/search":{"get":{"operationId":"knowledge_zenodo_search","summary":"Search Zenodo records.","description":"Search datasets, papers, software and other research material stored on Zenodo, with DOI and license.\n\nSources: Zenodo REST API (zenodo.org). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"q","in":"query","required":true,"description":"Search text, e.g. indonesia flood","schema":{"maxLength":200,"minLength":2,"type":"string"}},{"name":"type","in":"query","required":false,"description":"Kind of record, e.g. dataset","schema":{"anyOf":[{"pattern":"^(dataset|publication|software|poster|presentation|image|video|lesson|other)$","type":"string"},{"type":"null"}],"default":null}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":10,"maximum":25,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:zenodo/search?q=indonesia+flood&type=dataset&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:zenodo/search\",\n    params={\"q\": \"indonesia flood\", \"type\": \"dataset\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"indonesia flood\", \"type\": \"dataset\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:zenodo/search?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:zenodo/search?' . http_build_query(['q' => 'indonesia flood', 'type' => 'dataset', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"indonesia flood\")\n\tparams.Set(\"type\", \"dataset\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:zenodo/search?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:zenodo/search?q=indonesia+flood&type=dataset&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:zenodo/search\")\nuri.query = URI.encode_www_form({\"q\" => \"indonesia flood\", \"type\" => \"dataset\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:zenodo/search?q=indonesia+flood&type=dataset&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:harvard-dataverse/search":{"get":{"operationId":"knowledge_harvard_dataverse_search","summary":"Search Harvard Dataverse datasets.","description":"Search research datasets on Harvard Dataverse, with a ready citation and DOI.\n\nSources: Dataverse Search API (dataverse.harvard.edu). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"q","in":"query","required":true,"description":"Search text, e.g. indonesia election","schema":{"maxLength":200,"minLength":2,"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:harvard-dataverse/search?q=indonesia&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:harvard-dataverse/search\",\n    params={\"q\": \"indonesia\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"indonesia\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:harvard-dataverse/search?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:harvard-dataverse/search?' . http_build_query(['q' => 'indonesia', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"indonesia\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:harvard-dataverse/search?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:harvard-dataverse/search?q=indonesia&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:harvard-dataverse/search\")\nuri.query = URI.encode_www_form({\"q\" => \"indonesia\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:harvard-dataverse/search?q=indonesia&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:ror/search":{"get":{"operationId":"knowledge_ror_search","summary":"Search research organizations.","description":"Search universities and research organizations worldwide, including Indonesia, to clean affiliation names and get their standard identifier.\n\nSources: Research Organization Registry API (api.ror.org). Cached for 604800s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"q","in":"query","required":true,"description":"Organization name, e.g. Universitas Gadjah Mada","schema":{"maxLength":200,"minLength":2,"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter country code, e.g. ID","schema":{"anyOf":[{"pattern":"^[A-Za-z]{2}$","type":"string"},{"type":"null"}],"default":null}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":10,"maximum":20,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:ror/search?q=Universitas+Gadjah+Mada&country=ID&limit=3\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:ror/search\",\n    params={\"q\": \"Universitas Gadjah Mada\", \"country\": \"ID\", \"limit\": \"3\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"Universitas Gadjah Mada\", \"country\": \"ID\", \"limit\": \"3\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:ror/search?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:ror/search?' . http_build_query(['q' => 'Universitas Gadjah Mada', 'country' => 'ID', 'limit' => '3']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"Universitas Gadjah Mada\")\n\tparams.Set(\"country\", \"ID\")\n\tparams.Set(\"limit\", \"3\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:ror/search?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:ror/search?q=Universitas+Gadjah+Mada&country=ID&limit=3\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:ror/search\")\nuri.query = URI.encode_www_form({\"q\" => \"Universitas Gadjah Mada\", \"country\" => \"ID\", \"limit\" => \"3\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:ror/search?q=Universitas+Gadjah+Mada&country=ID&limit=3\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:crossref/search":{"get":{"operationId":"knowledge_crossref_search","summary":"Search scholarly works.","description":"Search articles, books and proceedings across all fields, or open one work by its DOI.\n\nSources: Crossref REST API (api.crossref.org). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"q","in":"query","required":true,"description":"Search text, e.g. stunting","schema":{"maxLength":200,"minLength":2,"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:crossref/search?q=stunting+indonesia&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:crossref/search\",\n    params={\"q\": \"stunting indonesia\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"stunting indonesia\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:crossref/search?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:crossref/search?' . http_build_query(['q' => 'stunting indonesia', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"stunting indonesia\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:crossref/search?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:crossref/search?q=stunting+indonesia&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:crossref/search\")\nuri.query = URI.encode_www_form({\"q\" => \"stunting indonesia\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:crossref/search?q=stunting+indonesia&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:crossref/retractions":{"get":{"operationId":"knowledge_crossref_retractions","summary":"Search retracted works, to check a reference before citing it.","description":"Search articles, books and proceedings across all fields, or open one work by its DOI.\n\nSources: Crossref REST API (api.crossref.org). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"q","in":"query","required":true,"description":"Search text, e.g. stunting","schema":{"maxLength":200,"minLength":2,"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:crossref/retractions?q=vaccine&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:crossref/retractions\",\n    params={\"q\": \"vaccine\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"vaccine\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:crossref/retractions?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:crossref/retractions?' . http_build_query(['q' => 'vaccine', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"vaccine\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:crossref/retractions?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:crossref/retractions?q=vaccine&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:crossref/retractions\")\nuri.query = URI.encode_www_form({\"q\" => \"vaccine\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:crossref/retractions?q=vaccine&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:crossref/doi":{"get":{"operationId":"knowledge_crossref_doi","summary":"Open one work by DOI.","description":"Search articles, books and proceedings across all fields, or open one work by its DOI.\n\nSources: Crossref REST API (api.crossref.org). Cached for 604800s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"doi","in":"query","required":true,"description":"DOI, e.g. 10.1038/nature12373","schema":{"maxLength":200,"minLength":7,"pattern":"^10\\.\\d{4,9}/\\S+$","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:crossref/doi?doi=10.1038%2Fnature12373\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:crossref/doi\",\n    params={\"doi\": \"10.1038/nature12373\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"doi\": \"10.1038/nature12373\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:crossref/doi?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:crossref/doi?' . http_build_query(['doi' => '10.1038/nature12373']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"doi\", \"10.1038/nature12373\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:crossref/doi?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:crossref/doi?doi=10.1038%2Fnature12373\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:crossref/doi\")\nuri.query = URI.encode_www_form({\"doi\" => \"10.1038/nature12373\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:crossref/doi?doi=10.1038%2Fnature12373\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:doaj/articles":{"get":{"operationId":"knowledge_doaj_articles","summary":"Search open access articles.","description":"Search open access journals and articles indexed by DOAJ, including Indonesian journals.\n\nSources: DOAJ Public API (doaj.org). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"q","in":"query","required":true,"description":"Search text, e.g. stunting","schema":{"maxLength":200,"minLength":2,"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:doaj/articles?q=stunting&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:doaj/articles\",\n    params={\"q\": \"stunting\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"stunting\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:doaj/articles?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:doaj/articles?' . http_build_query(['q' => 'stunting', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"stunting\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:doaj/articles?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:doaj/articles?q=stunting&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:doaj/articles\")\nuri.query = URI.encode_www_form({\"q\" => \"stunting\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:doaj/articles?q=stunting&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:doaj/journals":{"get":{"operationId":"knowledge_doaj_journals","summary":"Search open access journals.","description":"Search open access journals and articles indexed by DOAJ, including Indonesian journals.\n\nSources: DOAJ Public API (doaj.org). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"q","in":"query","required":true,"description":"Search text, e.g. stunting","schema":{"maxLength":200,"minLength":2,"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:doaj/journals?q=kesehatan+masyarakat&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:doaj/journals\",\n    params={\"q\": \"kesehatan masyarakat\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"kesehatan masyarakat\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:doaj/journals?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:doaj/journals?' . http_build_query(['q' => 'kesehatan masyarakat', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"kesehatan masyarakat\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:doaj/journals?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:doaj/journals?q=kesehatan+masyarakat&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:doaj/journals\")\nuri.query = URI.encode_www_form({\"q\" => \"kesehatan masyarakat\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:doaj/journals?q=kesehatan+masyarakat&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:datacite/datasets":{"get":{"operationId":"knowledge_datacite_datasets","summary":"Search research datasets.","description":"Search research datasets with a DOI from repositories worldwide.\n\nSources: DataCite REST API (api.datacite.org). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"q","in":"query","required":true,"description":"Search text, e.g. stunting","schema":{"maxLength":200,"minLength":2,"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:datacite/datasets?q=stunting&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:datacite/datasets\",\n    params={\"q\": \"stunting\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"stunting\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:datacite/datasets?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:datacite/datasets?' . http_build_query(['q' => 'stunting', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"stunting\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:datacite/datasets?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:datacite/datasets?q=stunting&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:datacite/datasets\")\nuri.query = URI.encode_www_form({\"q\" => \"stunting\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:datacite/datasets?q=stunting&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:sejarah-hari-ini/peristiwa":{"get":{"operationId":"knowledge_sejarah_hari_ini_peristiwa","summary":"Selected events, births and deaths on a date.","description":"Notable events, births and deaths on any date from Wikipedia, ideal for daily content. Text is in English (Indonesian Wikipedia does not offer this feed yet).\n\nSources: Wikimedia Feed API (api.wikimedia.org). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"month","in":"query","required":false,"description":"Month, 1-12","schema":{"maximum":12,"minimum":1,"type":"integer"}},{"name":"day","in":"query","required":false,"description":"Day, 1-31","schema":{"maximum":31,"minimum":1,"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"Maximum events","schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:sejarah-hari-ini/peristiwa?month=8&day=17&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:sejarah-hari-ini/peristiwa\",\n    params={\"month\": \"8\", \"day\": \"17\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"month\": \"8\", \"day\": \"17\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:sejarah-hari-ini/peristiwa?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:sejarah-hari-ini/peristiwa?' . http_build_query(['month' => '8', 'day' => '17', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"month\", \"8\")\n\tparams.Set(\"day\", \"17\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:sejarah-hari-ini/peristiwa?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:sejarah-hari-ini/peristiwa?month=8&day=17&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:sejarah-hari-ini/peristiwa\")\nuri.query = URI.encode_www_form({\"month\" => \"8\", \"day\" => \"17\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:sejarah-hari-ini/peristiwa?month=8&day=17&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:sentiment-datasets/search":{"get":{"operationId":"knowledge_sentiment_datasets_search","summary":"Sentiment datasets, most downloaded first.","description":"Find open sentiment datasets by language, with the licence stated by the uploader.\n\nSources: Hugging Face Hub API (huggingface.co). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"language","in":"query","required":false,"description":"Language code, e.g. id","schema":{"default":"id","pattern":"^[a-z]{2,3}$","type":"string"}},{"name":"q","in":"query","required":false,"description":"Search text, e.g. reviews","schema":{"anyOf":[{"maxLength":80,"minLength":2,"type":"string"},{"type":"null"}],"default":null}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:sentiment-datasets/search?language=id&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:sentiment-datasets/search\",\n    params={\"language\": \"id\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"language\": \"id\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:sentiment-datasets/search?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:sentiment-datasets/search?' . http_build_query(['language' => 'id', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"language\", \"id\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:sentiment-datasets/search?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:sentiment-datasets/search?language=id&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:sentiment-datasets/search\")\nuri.query = URI.encode_www_form({\"language\" => \"id\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:sentiment-datasets/search?language=id&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:vader/lexicon":{"get":{"operationId":"knowledge_vader_lexicon","summary":"Tokens with their score and rating spread.","description":"Sentiment scores for English words, abbreviations and emoticons, from -4 to +4. Not valid for Indonesian text.\n\nSources: vaderSentiment (github.com/cjhutto/vaderSentiment). Cached for 604800s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"prefix","in":"query","required":false,"description":"Only tokens starting with this text","schema":{"anyOf":[{"maxLength":40,"minLength":1,"type":"string"},{"type":"null"}],"default":null}},{"name":"polarity","in":"query","required":false,"description":"positive or negative","schema":{"anyOf":[{"pattern":"^(positive|negative)$","type":"string"},{"type":"null"}],"default":null}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":50,"maximum":500,"minimum":1,"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"Rows to skip","schema":{"default":0,"minimum":0,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:vader/lexicon?prefix=happ&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:vader/lexicon\",\n    params={\"prefix\": \"happ\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"prefix\": \"happ\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:vader/lexicon?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:vader/lexicon?' . http_build_query(['prefix' => 'happ', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"prefix\", \"happ\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:vader/lexicon?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:vader/lexicon?prefix=happ&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:vader/lexicon\")\nuri.query = URI.encode_www_form({\"prefix\" => \"happ\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:vader/lexicon?prefix=happ&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:wikipedia/ringkasan":{"get":{"operationId":"knowledge_wikipedia_ringkasan","summary":"Summary of one article.","description":"Article summaries and title search on Indonesian or English Wikipedia: lead paragraph, short description, image, coordinates and link.\n\nSources: Wikipedia (Wikimedia REST API). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"title","in":"query","required":true,"description":"Article title, e.g. Borobudur","schema":{"maxLength":250,"minLength":1,"type":"string"}},{"name":"lang","in":"query","required":false,"description":"Wikipedia language: id or en","schema":{"default":"id","enum":["id","en"],"type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:wikipedia/ringkasan?title=Borobudur&lang=id\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:wikipedia/ringkasan\",\n    params={\"title\": \"Borobudur\", \"lang\": \"id\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"title\": \"Borobudur\", \"lang\": \"id\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:wikipedia/ringkasan?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:wikipedia/ringkasan?' . http_build_query(['title' => 'Borobudur', 'lang' => 'id']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"title\", \"Borobudur\")\n\tparams.Set(\"lang\", \"id\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:wikipedia/ringkasan?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:wikipedia/ringkasan?title=Borobudur&lang=id\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:wikipedia/ringkasan\")\nuri.query = URI.encode_www_form({\"title\" => \"Borobudur\", \"lang\" => \"id\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:wikipedia/ringkasan?title=Borobudur&lang=id\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/knowledge:wikipedia/cari":{"get":{"operationId":"knowledge_wikipedia_cari","summary":"Search article titles.","description":"Article summaries and title search on Indonesian or English Wikipedia: lead paragraph, short description, image, coordinates and link.\n\nSources: Wikipedia (Wikimedia REST API). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Knowledge"],"parameters":[{"name":"q","in":"query","required":true,"description":"Search terms","schema":{"maxLength":100,"minLength":2,"type":"string"}},{"name":"lang","in":"query","required":false,"description":"Wikipedia language: id or en","schema":{"default":"id","enum":["id","en"],"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":5,"maximum":20,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/knowledge:wikipedia/cari?q=candi&lang=id&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/knowledge:wikipedia/cari\",\n    params={\"q\": \"candi\", \"lang\": \"id\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"candi\", \"lang\": \"id\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/knowledge:wikipedia/cari?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/knowledge:wikipedia/cari?' . http_build_query(['q' => 'candi', 'lang' => 'id', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"candi\")\n\tparams.Set(\"lang\", \"id\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/knowledge:wikipedia/cari?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/knowledge:wikipedia/cari?q=candi&lang=id&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/knowledge:wikipedia/cari\")\nuri.query = URI.encode_www_form({\"q\" => \"candi\", \"lang\" => \"id\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/knowledge:wikipedia/cari?q=candi&lang=id&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:antara/terbaru":{"get":{"operationId":"news_antara_terbaru","summary":"Latest headlines in a channel.","description":"Latest headlines from the ANTARA news agency per channel (politics, economy, sport, tech and more) with link, publish time and image. Headlines and links only; read the full story on ANTARA's site.\n\nSources: ANTARA RSS (antaranews.com). Cached for 600s, costs 1 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"channel","in":"query","required":false,"description":"News channel","schema":{"default":"terkini","enum":["terkini","politik","hukum","ekonomi","metro","dunia","olahraga","sepakbola","tekno","otomotif","hiburan","lifestyle","humaniora","warta-bumi"],"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum headlines","schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:antara/terbaru?channel=ekonomi&limit=10\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:antara/terbaru\",\n    params={\"channel\": \"ekonomi\", \"limit\": \"10\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"channel\": \"ekonomi\", \"limit\": \"10\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:antara/terbaru?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:antara/terbaru?' . http_build_query(['channel' => 'ekonomi', 'limit' => '10']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"channel\", \"ekonomi\")\n\tparams.Set(\"limit\", \"10\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:antara/terbaru?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:antara/terbaru?channel=ekonomi&limit=10\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:antara/terbaru\")\nuri.query = URI.encode_www_form({\"channel\" => \"ekonomi\", \"limit\" => \"10\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:antara/terbaru?channel=ekonomi&limit=10\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:dev-to/terbaru":{"get":{"operationId":"news_dev_to_terbaru","summary":"Latest articles.","description":"Latest developer articles from DEV Community, optionally filtered by a tag such as python or webdev.\n\nSources: DEV Community API (dev.to). Cached for 900s, costs 1 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"tag","in":"query","required":false,"description":"Optional tag, e.g. python","schema":{"default":"","pattern":"^[a-z0-9]{0,30}$","type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum articles","schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:dev-to/terbaru?tag=python&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:dev-to/terbaru\",\n    params={\"tag\": \"python\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"tag\": \"python\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:dev-to/terbaru?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:dev-to/terbaru?' . http_build_query(['tag' => 'python', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"tag\", \"python\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:dev-to/terbaru?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:dev-to/terbaru?tag=python&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:dev-to/terbaru\")\nuri.query = URI.encode_www_form({\"tag\" => \"python\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:dev-to/terbaru?tag=python&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:cnn-indonesia/terbaru":{"get":{"operationId":"news_cnn_indonesia_terbaru","summary":"Latest headlines.","description":"Latest headlines from CNN Indonesia (Indonesian national news) with link, publish time and image. Headlines and links only; read the full story on CNN Indonesia's site.\n\nSources: CNN Indonesia RSS. Cached for 600s, costs 1 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum headlines","schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:cnn-indonesia/terbaru?limit=10\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:cnn-indonesia/terbaru\",\n    params={\"limit\": \"10\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"limit\": \"10\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:cnn-indonesia/terbaru?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:cnn-indonesia/terbaru?' . http_build_query(['limit' => '10']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"limit\", \"10\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:cnn-indonesia/terbaru?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:cnn-indonesia/terbaru?limit=10\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:cnn-indonesia/terbaru\")\nuri.query = URI.encode_www_form({\"limit\" => \"10\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:cnn-indonesia/terbaru?limit=10\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:detik/terbaru":{"get":{"operationId":"news_detik_terbaru","summary":"Latest headlines.","description":"Latest headlines from detikNews (Indonesian national news) with link, publish time and image. Headlines and links only; read the full story on detikNews's site.\n\nSources: detikNews RSS. Cached for 600s, costs 1 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum headlines","schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:detik/terbaru?limit=10\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:detik/terbaru\",\n    params={\"limit\": \"10\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"limit\": \"10\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:detik/terbaru?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:detik/terbaru?' . http_build_query(['limit' => '10']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"limit\", \"10\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:detik/terbaru?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:detik/terbaru?limit=10\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:detik/terbaru\")\nuri.query = URI.encode_www_form({\"limit\" => \"10\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:detik/terbaru?limit=10\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:tempo/terbaru":{"get":{"operationId":"news_tempo_terbaru","summary":"Latest headlines.","description":"Latest headlines from Tempo (Indonesian national news) with link, publish time and image. Headlines and links only; read the full story on Tempo's site.\n\nSources: Tempo RSS. Cached for 600s, costs 1 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum headlines","schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:tempo/terbaru?limit=10\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:tempo/terbaru\",\n    params={\"limit\": \"10\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"limit\": \"10\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:tempo/terbaru?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:tempo/terbaru?' . http_build_query(['limit' => '10']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"limit\", \"10\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:tempo/terbaru?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:tempo/terbaru?limit=10\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:tempo/terbaru\")\nuri.query = URI.encode_www_form({\"limit\" => \"10\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:tempo/terbaru?limit=10\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:okezone/terbaru":{"get":{"operationId":"news_okezone_terbaru","summary":"Latest headlines.","description":"Latest headlines from Okezone (Indonesian national news) with link, publish time and image. Headlines and links only; read the full story on Okezone's site.\n\nSources: Okezone RSS. Cached for 600s, costs 1 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum headlines","schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:okezone/terbaru?limit=10\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:okezone/terbaru\",\n    params={\"limit\": \"10\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"limit\": \"10\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:okezone/terbaru?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:okezone/terbaru?' . http_build_query(['limit' => '10']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"limit\", \"10\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:okezone/terbaru?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:okezone/terbaru?limit=10\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:okezone/terbaru\")\nuri.query = URI.encode_www_form({\"limit\" => \"10\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:okezone/terbaru?limit=10\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:media-indonesia/terbaru":{"get":{"operationId":"news_media_indonesia_terbaru","summary":"Latest headlines.","description":"Latest headlines from Media Indonesia (Indonesian national news) with link, publish time and image. Headlines and links only; read the full story on Media Indonesia's site.\n\nSources: Media Indonesia RSS. Cached for 600s, costs 1 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum headlines","schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:media-indonesia/terbaru?limit=10\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:media-indonesia/terbaru\",\n    params={\"limit\": \"10\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"limit\": \"10\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:media-indonesia/terbaru?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:media-indonesia/terbaru?' . http_build_query(['limit' => '10']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"limit\", \"10\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:media-indonesia/terbaru?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:media-indonesia/terbaru?limit=10\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:media-indonesia/terbaru\")\nuri.query = URI.encode_www_form({\"limit\" => \"10\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:media-indonesia/terbaru?limit=10\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:republika/terbaru":{"get":{"operationId":"news_republika_terbaru","summary":"Latest headlines.","description":"Latest headlines from Republika (Indonesian national news) with link, publish time and image. Headlines and links only; read the full story on Republika's site.\n\nSources: Republika RSS. Cached for 600s, costs 1 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum headlines","schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:republika/terbaru?limit=10\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:republika/terbaru\",\n    params={\"limit\": \"10\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"limit\": \"10\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:republika/terbaru?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:republika/terbaru?' . http_build_query(['limit' => '10']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"limit\", \"10\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:republika/terbaru?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:republika/terbaru?limit=10\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:republika/terbaru\")\nuri.query = URI.encode_www_form({\"limit\" => \"10\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:republika/terbaru?limit=10\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:liputan6/terbaru":{"get":{"operationId":"news_liputan6_terbaru","summary":"Latest headlines.","description":"Latest headlines from Liputan6 (Indonesian national news) with link, publish time and image. Headlines and links only; read the full story on Liputan6's site.\n\nSources: Liputan6 RSS. Cached for 600s, costs 1 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum headlines","schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:liputan6/terbaru?limit=10\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:liputan6/terbaru\",\n    params={\"limit\": \"10\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"limit\": \"10\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:liputan6/terbaru?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:liputan6/terbaru?' . http_build_query(['limit' => '10']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"limit\", \"10\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:liputan6/terbaru?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:liputan6/terbaru?limit=10\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:liputan6/terbaru\")\nuri.query = URI.encode_www_form({\"limit\" => \"10\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:liputan6/terbaru?limit=10\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:cnbc-indonesia/terbaru":{"get":{"operationId":"news_cnbc_indonesia_terbaru","summary":"Latest headlines.","description":"Latest headlines from CNBC Indonesia (business and economy) with link, publish time and image. Headlines and links only; read the full story on CNBC Indonesia's site.\n\nSources: CNBC Indonesia RSS. Cached for 600s, costs 1 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum headlines","schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:cnbc-indonesia/terbaru?limit=10\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:cnbc-indonesia/terbaru\",\n    params={\"limit\": \"10\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"limit\": \"10\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:cnbc-indonesia/terbaru?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:cnbc-indonesia/terbaru?' . http_build_query(['limit' => '10']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"limit\", \"10\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:cnbc-indonesia/terbaru?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:cnbc-indonesia/terbaru?limit=10\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:cnbc-indonesia/terbaru\")\nuri.query = URI.encode_www_form({\"limit\" => \"10\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:cnbc-indonesia/terbaru?limit=10\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:mongabay/terbaru":{"get":{"operationId":"news_mongabay_terbaru","summary":"Latest headlines.","description":"Latest headlines from Mongabay Indonesia (Indonesian environment) with link, publish time and image. Headlines and links only; read the full story on Mongabay Indonesia's site.\n\nSources: Mongabay Indonesia RSS. Cached for 600s, costs 1 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum headlines","schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:mongabay/terbaru?limit=10\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:mongabay/terbaru\",\n    params={\"limit\": \"10\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"limit\": \"10\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:mongabay/terbaru?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:mongabay/terbaru?' . http_build_query(['limit' => '10']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"limit\", \"10\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:mongabay/terbaru?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:mongabay/terbaru?limit=10\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:mongabay/terbaru\")\nuri.query = URI.encode_www_form({\"limit\" => \"10\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:mongabay/terbaru?limit=10\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:the-verge/terbaru":{"get":{"operationId":"news_the_verge_terbaru","summary":"Latest headlines.","description":"Latest headlines from The Verge (technology) with link, publish time and image. Headlines and links only; read the full story on The Verge's site.\n\nSources: The Verge RSS. Cached for 600s, costs 1 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum headlines","schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:the-verge/terbaru?limit=10\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:the-verge/terbaru\",\n    params={\"limit\": \"10\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"limit\": \"10\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:the-verge/terbaru?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:the-verge/terbaru?' . http_build_query(['limit' => '10']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"limit\", \"10\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:the-verge/terbaru?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:the-verge/terbaru?limit=10\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:the-verge/terbaru\")\nuri.query = URI.encode_www_form({\"limit\" => \"10\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:the-verge/terbaru?limit=10\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:ars-technica/terbaru":{"get":{"operationId":"news_ars_technica_terbaru","summary":"Latest headlines.","description":"Latest headlines from Ars Technica (technology) with link, publish time and image. Headlines and links only; read the full story on Ars Technica's site.\n\nSources: Ars Technica RSS. Cached for 600s, costs 1 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum headlines","schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:ars-technica/terbaru?limit=10\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:ars-technica/terbaru\",\n    params={\"limit\": \"10\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"limit\": \"10\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:ars-technica/terbaru?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:ars-technica/terbaru?' . http_build_query(['limit' => '10']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"limit\", \"10\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:ars-technica/terbaru?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:ars-technica/terbaru?limit=10\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:ars-technica/terbaru\")\nuri.query = URI.encode_www_form({\"limit\" => \"10\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:ars-technica/terbaru?limit=10\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:coindesk/terbaru":{"get":{"operationId":"news_coindesk_terbaru","summary":"Latest headlines.","description":"Latest headlines from CoinDesk (crypto) with link, publish time and image. Headlines and links only; read the full story on CoinDesk's site.\n\nSources: CoinDesk RSS. Cached for 600s, costs 1 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum headlines","schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:coindesk/terbaru?limit=10\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:coindesk/terbaru\",\n    params={\"limit\": \"10\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"limit\": \"10\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:coindesk/terbaru?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:coindesk/terbaru?' . http_build_query(['limit' => '10']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"limit\", \"10\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:coindesk/terbaru?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:coindesk/terbaru?limit=10\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:coindesk/terbaru\")\nuri.query = URI.encode_www_form({\"limit\" => \"10\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:coindesk/terbaru?limit=10\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:cointelegraph/terbaru":{"get":{"operationId":"news_cointelegraph_terbaru","summary":"Latest headlines.","description":"Latest headlines from Cointelegraph (crypto) with link, publish time and image. Headlines and links only; read the full story on Cointelegraph's site.\n\nSources: Cointelegraph RSS. Cached for 600s, costs 1 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum headlines","schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:cointelegraph/terbaru?limit=10\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:cointelegraph/terbaru\",\n    params={\"limit\": \"10\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"limit\": \"10\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:cointelegraph/terbaru?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:cointelegraph/terbaru?' . http_build_query(['limit' => '10']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"limit\", \"10\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:cointelegraph/terbaru?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:cointelegraph/terbaru?limit=10\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:cointelegraph/terbaru\")\nuri.query = URI.encode_www_form({\"limit\" => \"10\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:cointelegraph/terbaru?limit=10\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:gdelt/search":{"get":{"operationId":"news_gdelt_search","summary":"Search recent news headlines.","description":"Search news headlines from media worldwide, and see the coverage volume and tone of a topic over time.\n\nSources: GDELT DOC 2.0 API (gdeltproject.org). Cached for 3600s, costs 1 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"q","in":"query","required":true,"description":"Search text in English, e.g. inflation","schema":{"maxLength":200,"minLength":3,"type":"string"}},{"name":"country","in":"query","required":false,"description":"Country of the media in lowercase English, e.g. indonesia","schema":{"anyOf":[{"pattern":"^[a-z]+$","type":"string"},{"type":"null"}],"default":null}},{"name":"days","in":"query","required":false,"description":"How many days back","schema":{"default":7,"maximum":90,"minimum":1,"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:gdelt/search?q=inflation&country=indonesia&limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:gdelt/search\",\n    params={\"q\": \"inflation\", \"country\": \"indonesia\", \"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"inflation\", \"country\": \"indonesia\", \"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:gdelt/search?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:gdelt/search?' . http_build_query(['q' => 'inflation', 'country' => 'indonesia', 'limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"inflation\")\n\tparams.Set(\"country\", \"indonesia\")\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:gdelt/search?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:gdelt/search?q=inflation&country=indonesia&limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:gdelt/search\")\nuri.query = URI.encode_www_form({\"q\" => \"inflation\", \"country\" => \"indonesia\", \"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:gdelt/search?q=inflation&country=indonesia&limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:gdelt/coverage":{"get":{"operationId":"news_gdelt_coverage","summary":"Daily coverage volume, as a percentage of all monitored news.","description":"Search news headlines from media worldwide, and see the coverage volume and tone of a topic over time.\n\nSources: GDELT DOC 2.0 API (gdeltproject.org). Cached for 21600s, costs 1 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"q","in":"query","required":true,"description":"Topic in English, e.g. inflation","schema":{"maxLength":200,"minLength":3,"type":"string"}},{"name":"country","in":"query","required":false,"description":"Country of the media in lowercase English, e.g. indonesia","schema":{"anyOf":[{"pattern":"^[a-z]+$","type":"string"},{"type":"null"}],"default":null}},{"name":"days","in":"query","required":false,"description":"How many days back","schema":{"default":30,"maximum":90,"minimum":8,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:gdelt/coverage?q=inflation&country=indonesia\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:gdelt/coverage\",\n    params={\"q\": \"inflation\", \"country\": \"indonesia\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"inflation\", \"country\": \"indonesia\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:gdelt/coverage?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:gdelt/coverage?' . http_build_query(['q' => 'inflation', 'country' => 'indonesia']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"inflation\")\n\tparams.Set(\"country\", \"indonesia\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:gdelt/coverage?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:gdelt/coverage?q=inflation&country=indonesia\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:gdelt/coverage\")\nuri.query = URI.encode_www_form({\"q\" => \"inflation\", \"country\" => \"indonesia\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:gdelt/coverage?q=inflation&country=indonesia\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:gdelt/tone":{"get":{"operationId":"news_gdelt_tone","summary":"Average daily news tone, machine-scored by GDELT. Below 0 leans negative.","description":"Search news headlines from media worldwide, and see the coverage volume and tone of a topic over time.\n\nSources: GDELT DOC 2.0 API (gdeltproject.org). Cached for 21600s, costs 1 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"q","in":"query","required":true,"description":"Topic in English, e.g. inflation","schema":{"maxLength":200,"minLength":3,"type":"string"}},{"name":"country","in":"query","required":false,"description":"Country of the media in lowercase English, e.g. indonesia","schema":{"anyOf":[{"pattern":"^[a-z]+$","type":"string"},{"type":"null"}],"default":null}},{"name":"days","in":"query","required":false,"description":"How many days back","schema":{"default":30,"maximum":90,"minimum":8,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:gdelt/tone?q=inflation&country=indonesia\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:gdelt/tone\",\n    params={\"q\": \"inflation\", \"country\": \"indonesia\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"inflation\", \"country\": \"indonesia\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:gdelt/tone?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:gdelt/tone?' . http_build_query(['q' => 'inflation', 'country' => 'indonesia']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"inflation\")\n\tparams.Set(\"country\", \"indonesia\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:gdelt/tone?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:gdelt/tone?q=inflation&country=indonesia\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:gdelt/tone\")\nuri.query = URI.encode_www_form({\"q\" => \"inflation\", \"country\" => \"indonesia\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:gdelt/tone?q=inflation&country=indonesia\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:hacker-news/teratas":{"get":{"operationId":"news_hacker_news_teratas","summary":"Current top stories.","description":"Top technology stories on Hacker News with link, score and comment count.\n\nSources: Hacker News API (hacker-news.firebaseio.com). Cached for 600s, costs 1 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum stories","schema":{"default":10,"maximum":30,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:hacker-news/teratas?limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:hacker-news/teratas\",\n    params={\"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:hacker-news/teratas?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:hacker-news/teratas?' . http_build_query(['limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:hacker-news/teratas?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:hacker-news/teratas?limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:hacker-news/teratas\")\nuri.query = URI.encode_www_form({\"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:hacker-news/teratas?limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/religion:doa/nomor":{"get":{"operationId":"religion_doa_nomor","summary":"One prayer by number.","description":"108 daily prayers from the Qur'an and hadith with Arabic text, title and Indonesian meaning; by number or at random.\n\nSources: myQuran API (api.myquran.com). Cached for 2592000s, costs 1 quota unit (cache hits are free).","tags":["Religion"],"parameters":[{"name":"number","in":"query","required":true,"description":"Prayer number, 1-108","schema":{"maximum":108,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/religion:doa/nomor?number=1\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/religion:doa/nomor\",\n    params={\"number\": \"1\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"number\": \"1\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/religion:doa/nomor?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/religion:doa/nomor?' . http_build_query(['number' => '1']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"number\", \"1\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/religion:doa/nomor?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/religion:doa/nomor?number=1\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/religion:doa/nomor\")\nuri.query = URI.encode_www_form({\"number\" => \"1\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/religion:doa/nomor?number=1\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/religion:doa/acak":{"get":{"operationId":"religion_doa_acak","summary":"A random prayer (changes hourly because of caching).","description":"108 daily prayers from the Qur'an and hadith with Arabic text, title and Indonesian meaning; by number or at random.\n\nSources: myQuran API (api.myquran.com). Cached for 3600s, costs 1 quota unit (cache hits are free).","tags":["Religion"],"parameters":[],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/religion:doa/acak\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/religion:doa/acak\",\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const response = await fetch(\"https://kajidata.artonlabs.com/v1/religion:doa/acak\", {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/religion:doa/acak');\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n)\n\nfunc main() {\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/religion:doa/acak\", nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/religion:doa/acak\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/religion:doa/acak\")\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/religion:doa/acak\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/religion:hadits/nomor":{"get":{"operationId":"religion_hadits_nomor","summary":"One Arbain hadith by number.","description":"The 42 hadith of An-Nawawi's Forty Hadith with Arabic text, title and Indonesian translation; fetch by number or at random for daily content.\n\nSources: myQuran API (api.myquran.com). Cached for 2592000s, costs 1 quota unit (cache hits are free).","tags":["Religion"],"parameters":[{"name":"number","in":"query","required":true,"description":"Hadith number, 1-42","schema":{"maximum":42,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/religion:hadits/nomor?number=1\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/religion:hadits/nomor\",\n    params={\"number\": \"1\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"number\": \"1\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/religion:hadits/nomor?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/religion:hadits/nomor?' . http_build_query(['number' => '1']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"number\", \"1\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/religion:hadits/nomor?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/religion:hadits/nomor?number=1\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/religion:hadits/nomor\")\nuri.query = URI.encode_www_form({\"number\" => \"1\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/religion:hadits/nomor?number=1\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/religion:hadits/acak":{"get":{"operationId":"religion_hadits_acak","summary":"A random Arbain hadith (changes hourly because of caching).","description":"The 42 hadith of An-Nawawi's Forty Hadith with Arabic text, title and Indonesian translation; fetch by number or at random for daily content.\n\nSources: myQuran API (api.myquran.com). Cached for 3600s, costs 1 quota unit (cache hits are free).","tags":["Religion"],"parameters":[],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/religion:hadits/acak\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/religion:hadits/acak\",\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const response = await fetch(\"https://kajidata.artonlabs.com/v1/religion:hadits/acak\", {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/religion:hadits/acak');\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n)\n\nfunc main() {\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/religion:hadits/acak\", nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/religion:hadits/acak\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/religion:hadits/acak\")\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/religion:hadits/acak\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/religion:kalender-hijriah/ke-hijriah":{"get":{"operationId":"religion_kalender_hijriah_ke-hijriah","summary":"Gregorian date to Hijri.","description":"Convert Gregorian dates to Hijri and back, with Indonesian month names. Astronomical calculation; the official start of Ramadan, Shawwal and Dhu al-Hijjah in Indonesia follows the government's isbat session and can differ by one day.\n\nSources: Aladhan (api.aladhan.com). Cached for 2592000s, costs 1 quota unit (cache hits are free).","tags":["Religion"],"parameters":[{"name":"date","in":"query","required":false,"description":"Gregorian date, ISO","schema":{"format":"date","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/religion:kalender-hijriah/ke-hijriah?date=2026-11-01\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/religion:kalender-hijriah/ke-hijriah\",\n    params={\"date\": \"2026-11-01\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"date\": \"2026-11-01\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/religion:kalender-hijriah/ke-hijriah?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/religion:kalender-hijriah/ke-hijriah?' . http_build_query(['date' => '2026-11-01']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"date\", \"2026-11-01\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/religion:kalender-hijriah/ke-hijriah?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/religion:kalender-hijriah/ke-hijriah?date=2026-11-01\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/religion:kalender-hijriah/ke-hijriah\")\nuri.query = URI.encode_www_form({\"date\" => \"2026-11-01\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/religion:kalender-hijriah/ke-hijriah?date=2026-11-01\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/religion:kalender-hijriah/ke-masehi":{"get":{"operationId":"religion_kalender_hijriah_ke-masehi","summary":"Hijri date to Gregorian.","description":"Convert Gregorian dates to Hijri and back, with Indonesian month names. Astronomical calculation; the official start of Ramadan, Shawwal and Dhu al-Hijjah in Indonesia follows the government's isbat session and can differ by one day.\n\nSources: Aladhan (api.aladhan.com). Cached for 2592000s, costs 1 quota unit (cache hits are free).","tags":["Religion"],"parameters":[{"name":"day","in":"query","required":true,"description":"Hijri day, 1-30","schema":{"maximum":30,"minimum":1,"type":"integer"}},{"name":"month","in":"query","required":true,"description":"Hijri month, 1-12","schema":{"maximum":12,"minimum":1,"type":"integer"}},{"name":"year","in":"query","required":true,"description":"Hijri year, e.g. 1448","schema":{"maximum":1600,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/religion:kalender-hijriah/ke-masehi?day=1&month=9&year=1448\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/religion:kalender-hijriah/ke-masehi\",\n    params={\"day\": \"1\", \"month\": \"9\", \"year\": \"1448\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"day\": \"1\", \"month\": \"9\", \"year\": \"1448\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/religion:kalender-hijriah/ke-masehi?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/religion:kalender-hijriah/ke-masehi?' . http_build_query(['day' => '1', 'month' => '9', 'year' => '1448']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"day\", \"1\")\n\tparams.Set(\"month\", \"9\")\n\tparams.Set(\"year\", \"1448\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/religion:kalender-hijriah/ke-masehi?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/religion:kalender-hijriah/ke-masehi?day=1&month=9&year=1448\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/religion:kalender-hijriah/ke-masehi\")\nuri.query = URI.encode_www_form({\"day\" => \"1\", \"month\" => \"9\", \"year\" => \"1448\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/religion:kalender-hijriah/ke-masehi?day=1&month=9&year=1448\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/religion:quran/surah":{"get":{"operationId":"religion_quran_surah","summary":"List of 114 surahs.","description":"The 114 surahs and full verses: Arabic text, Latin transliteration and Indonesian translation (Ministry of Religious Affairs), with murattal audio links.\n\nSources: EQuran.id API (equran.id). Cached for 2592000s, costs 1 quota unit (cache hits are free).","tags":["Religion"],"parameters":[],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/religion:quran/surah\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/religion:quran/surah\",\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const response = await fetch(\"https://kajidata.artonlabs.com/v1/religion:quran/surah\", {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/religion:quran/surah');\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n)\n\nfunc main() {\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/religion:quran/surah\", nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/religion:quran/surah\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/religion:quran/surah\")\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/religion:quran/surah\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/religion:quran/ayat":{"get":{"operationId":"religion_quran_ayat","summary":"All verses of one surah.","description":"The 114 surahs and full verses: Arabic text, Latin transliteration and Indonesian translation (Ministry of Religious Affairs), with murattal audio links.\n\nSources: EQuran.id API (equran.id). Cached for 2592000s, costs 1 quota unit (cache hits are free).","tags":["Religion"],"parameters":[{"name":"number","in":"query","required":true,"description":"Surah number, 1-114","schema":{"maximum":114,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/religion:quran/ayat?number=1\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/religion:quran/ayat\",\n    params={\"number\": \"1\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"number\": \"1\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/religion:quran/ayat?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/religion:quran/ayat?' . http_build_query(['number' => '1']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"number\", \"1\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/religion:quran/ayat?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/religion:quran/ayat?number=1\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/religion:quran/ayat\")\nuri.query = URI.encode_www_form({\"number\" => \"1\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/religion:quran/ayat?number=1\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/religion:quran/tafsir":{"get":{"operationId":"religion_quran_tafsir","summary":"Ministry of Religious Affairs tafsir for each verse of a surah.","description":"The 114 surahs and full verses: Arabic text, Latin transliteration and Indonesian translation (Ministry of Religious Affairs), with murattal audio links.\n\nSources: EQuran.id API (equran.id). Cached for 2592000s, costs 1 quota unit (cache hits are free).","tags":["Religion"],"parameters":[{"name":"number","in":"query","required":true,"description":"Surah number, 1-114","schema":{"maximum":114,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/religion:quran/tafsir?number=1\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/religion:quran/tafsir\",\n    params={\"number\": \"1\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"number\": \"1\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/religion:quran/tafsir?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/religion:quran/tafsir?' . http_build_query(['number' => '1']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"number\", \"1\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/religion:quran/tafsir?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/religion:quran/tafsir?number=1\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/religion:quran/tafsir\")\nuri.query = URI.encode_www_form({\"number\" => \"1\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/religion:quran/tafsir?number=1\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/religion:jadwal-sholat/kota":{"get":{"operationId":"religion_jadwal_sholat_kota","summary":"Find the city ID for prayer times.","description":"Daily Islamic prayer times (imsak, fajr, sunrise, dhuha, dhuhr, asr, maghrib, isha) for 500+ Indonesian regencies/cities, following the Ministry of Religious Affairs calculation.\n\nSources: MyQuran API (api.myquran.com), bersumber dari Bimas Islam Kemenag. Cached for 2592000s, costs 1 quota unit (cache hits are free).","tags":["Religion"],"parameters":[{"name":"q","in":"query","required":true,"description":"City/regency name, e.g. bandung","schema":{"maxLength":50,"minLength":3,"type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/religion:jadwal-sholat/kota?q=bandung\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/religion:jadwal-sholat/kota\",\n    params={\"q\": \"bandung\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"q\": \"bandung\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/religion:jadwal-sholat/kota?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/religion:jadwal-sholat/kota?' . http_build_query(['q' => 'bandung']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"q\", \"bandung\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/religion:jadwal-sholat/kota?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/religion:jadwal-sholat/kota?q=bandung\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/religion:jadwal-sholat/kota\")\nuri.query = URI.encode_www_form({\"q\" => \"bandung\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/religion:jadwal-sholat/kota?q=bandung\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/religion:jadwal-sholat/jadwal":{"get":{"operationId":"religion_jadwal_sholat_jadwal","summary":"Prayer times for one city on one date.","description":"Daily Islamic prayer times (imsak, fajr, sunrise, dhuha, dhuhr, asr, maghrib, isha) for 500+ Indonesian regencies/cities, following the Ministry of Religious Affairs calculation.\n\nSources: MyQuran API (api.myquran.com), bersumber dari Bimas Islam Kemenag. Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Religion"],"parameters":[{"name":"city_id","in":"query","required":true,"description":"City ID from the kota endpoint, e.g. 1219","schema":{"pattern":"^\\d{3,4}$","type":"string"}},{"name":"date","in":"query","required":false,"description":"ISO date, e.g. 2026-11-01","schema":{"format":"date","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/religion:jadwal-sholat/jadwal?city_id=1219&date=2026-11-01\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/religion:jadwal-sholat/jadwal\",\n    params={\"city_id\": \"1219\", \"date\": \"2026-11-01\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"city_id\": \"1219\", \"date\": \"2026-11-01\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/religion:jadwal-sholat/jadwal?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/religion:jadwal-sholat/jadwal?' . http_build_query(['city_id' => '1219', 'date' => '2026-11-01']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"city_id\", \"1219\")\n\tparams.Set(\"date\", \"2026-11-01\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/religion:jadwal-sholat/jadwal?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/religion:jadwal-sholat/jadwal?city_id=1219&date=2026-11-01\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/religion:jadwal-sholat/jadwal\")\nuri.query = URI.encode_www_form({\"city_id\" => \"1219\", \"date\" => \"2026-11-01\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/religion:jadwal-sholat/jadwal?city_id=1219&date=2026-11-01\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/social:mastodon/trending-tags":{"get":{"operationId":"social_mastodon_trending-tags","summary":"Trending hashtags.","description":"Trending hashtags and links, and daily hashtag use on mastodon.social. Aggregates only, with no profiles or post content. Not representative of public conversation in general.\n\nSources: Mastodon API (mastodon.social). Cached for 3600s, costs 1 quota unit (cache hits are free).","tags":["Social"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":10,"maximum":20,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/social:mastodon/trending-tags?limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/social:mastodon/trending-tags\",\n    params={\"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/social:mastodon/trending-tags?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/social:mastodon/trending-tags?' . http_build_query(['limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/social:mastodon/trending-tags?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/social:mastodon/trending-tags?limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/social:mastodon/trending-tags\")\nuri.query = URI.encode_www_form({\"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/social:mastodon/trending-tags?limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/social:mastodon/tag":{"get":{"operationId":"social_mastodon_tag","summary":"Daily use of one hashtag, last 7 days.","description":"Trending hashtags and links, and daily hashtag use on mastodon.social. Aggregates only, with no profiles or post content. Not representative of public conversation in general.\n\nSources: Mastodon API (mastodon.social). Cached for 3600s, costs 1 quota unit (cache hits are free).","tags":["Social"],"parameters":[{"name":"tag","in":"query","required":true,"description":"Hashtag without #, e.g. indonesia","schema":{"maxLength":60,"minLength":2,"pattern":"^[A-Za-z0-9_]+$","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/social:mastodon/tag?tag=indonesia\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/social:mastodon/tag\",\n    params={\"tag\": \"indonesia\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"tag\": \"indonesia\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/social:mastodon/tag?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/social:mastodon/tag?' . http_build_query(['tag' => 'indonesia']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"tag\", \"indonesia\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/social:mastodon/tag?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/social:mastodon/tag?tag=indonesia\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/social:mastodon/tag\")\nuri.query = URI.encode_www_form({\"tag\" => \"indonesia\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/social:mastodon/tag?tag=indonesia\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/social:mastodon/trending-links":{"get":{"operationId":"social_mastodon_trending-links","summary":"News links being widely shared.","description":"Trending hashtags and links, and daily hashtag use on mastodon.social. Aggregates only, with no profiles or post content. Not representative of public conversation in general.\n\nSources: Mastodon API (mastodon.social). Cached for 3600s, costs 1 quota unit (cache hits are free).","tags":["Social"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum results","schema":{"default":10,"maximum":20,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/social:mastodon/trending-links?limit=5\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/social:mastodon/trending-links\",\n    params={\"limit\": \"5\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"limit\": \"5\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/social:mastodon/trending-links?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/social:mastodon/trending-links?' . http_build_query(['limit' => '5']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"limit\", \"5\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/social:mastodon/trending-links?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/social:mastodon/trending-links?limit=5\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/social:mastodon/trending-links\")\nuri.query = URI.encode_www_form({\"limit\" => \"5\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/social:mastodon/trending-links?limit=5\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/social:mastodon/server":{"get":{"operationId":"social_mastodon_server","summary":"Server statistics: monthly active users.","description":"Trending hashtags and links, and daily hashtag use on mastodon.social. Aggregates only, with no profiles or post content. Not representative of public conversation in general.\n\nSources: Mastodon API (mastodon.social). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Social"],"parameters":[],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/social:mastodon/server\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/social:mastodon/server\",\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const response = await fetch(\"https://kajidata.artonlabs.com/v1/social:mastodon/server\", {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/social:mastodon/server');\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n)\n\nfunc main() {\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/social:mastodon/server\", nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/social:mastodon/server\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/social:mastodon/server\")\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/social:mastodon/server\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/tools:terbilang/angka":{"get":{"operationId":"tools_terbilang_angka","summary":"Convert one number into words.","description":"Convert numbers into Indonesian words (\"terbilang\") for receipts, invoices and official documents, up to hundreds of trillions, including decimals and an optional \"rupiah\" suffix.\n\nSources: KajiData (komputasi lokal). Cached for 2592000s, costs 1 quota unit (cache hits are free).","tags":["Utilities"],"parameters":[{"name":"number","in":"query","required":true,"description":"Number, up to 15 integer digits and 4 decimals, e.g. 1250000","schema":{"anyOf":[{"maximum":1000000000000000.0,"minimum":-1000000000000000.0,"type":"number"},{"type":"string"}]}},{"name":"rupiah","in":"query","required":false,"description":"Append \"rupiah\"","schema":{"default":false,"type":"boolean"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/tools:terbilang/angka?number=1250000&rupiah=true\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/tools:terbilang/angka\",\n    params={\"number\": \"1250000\", \"rupiah\": \"true\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"number\": \"1250000\", \"rupiah\": \"true\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/tools:terbilang/angka?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/tools:terbilang/angka?' . http_build_query(['number' => '1250000', 'rupiah' => 'true']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"number\", \"1250000\")\n\tparams.Set(\"rupiah\", \"true\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/tools:terbilang/angka?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/tools:terbilang/angka?number=1250000&rupiah=true\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/tools:terbilang/angka\")\nuri.query = URI.encode_www_form({\"number\" => \"1250000\", \"rupiah\" => \"true\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/tools:terbilang/angka?number=1250000&rupiah=true\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/tools:validasi/nik":{"get":{"operationId":"tools_validasi_nik","summary":"Check an NIK's structure and decode its region code, birth date and sex.","description":"Check the format of an NIK (region code, birth date, sex), a 15/16-digit NPWP tax number and a phone number (normalised to +62 with operator detection). Only the number's structure is checked; nothing is looked up in population records and submitted numbers are not stored.\n\nSources: KajiData (komputasi lokal). Cached for 0s, costs 1 quota unit (cache hits are free).","tags":["Utilities"],"parameters":[{"name":"nik","in":"query","required":true,"description":"16-digit NIK (spaces and dots are ignored)","schema":{"maxLength":32,"type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/tools:validasi/nik?nik=3171014107900001\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/tools:validasi/nik\",\n    params={\"nik\": \"3171014107900001\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"nik\": \"3171014107900001\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/tools:validasi/nik?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/tools:validasi/nik?' . http_build_query(['nik' => '3171014107900001']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"nik\", \"3171014107900001\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/tools:validasi/nik?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/tools:validasi/nik?nik=3171014107900001\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/tools:validasi/nik\")\nuri.query = URI.encode_www_form({\"nik\" => \"3171014107900001\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/tools:validasi/nik?nik=3171014107900001\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/tools:validasi/npwp":{"get":{"operationId":"tools_validasi_npwp","summary":"Check a 15- or 16-digit NPWP format and return its standard form.","description":"Check the format of an NIK (region code, birth date, sex), a 15/16-digit NPWP tax number and a phone number (normalised to +62 with operator detection). Only the number's structure is checked; nothing is looked up in population records and submitted numbers are not stored.\n\nSources: KajiData (komputasi lokal). Cached for 0s, costs 1 quota unit (cache hits are free).","tags":["Utilities"],"parameters":[{"name":"npwp","in":"query","required":true,"description":"NPWP, 15 or 16 digits, with or without punctuation","schema":{"maxLength":32,"type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/tools:validasi/npwp?npwp=01.234.567.8-901.000\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/tools:validasi/npwp\",\n    params={\"npwp\": \"01.234.567.8-901.000\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"npwp\": \"01.234.567.8-901.000\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/tools:validasi/npwp?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/tools:validasi/npwp?' . http_build_query(['npwp' => '01.234.567.8-901.000']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"npwp\", \"01.234.567.8-901.000\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/tools:validasi/npwp?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/tools:validasi/npwp?npwp=01.234.567.8-901.000\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/tools:validasi/npwp\")\nuri.query = URI.encode_www_form({\"npwp\" => \"01.234.567.8-901.000\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/tools:validasi/npwp?npwp=01.234.567.8-901.000\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/tools:validasi/telepon":{"get":{"operationId":"tools_validasi_telepon","summary":"Normalise a phone number to +62 and detect the mobile operator.","description":"Check the format of an NIK (region code, birth date, sex), a 15/16-digit NPWP tax number and a phone number (normalised to +62 with operator detection). Only the number's structure is checked; nothing is looked up in population records and submitted numbers are not stored.\n\nSources: KajiData (komputasi lokal). Cached for 0s, costs 1 quota unit (cache hits are free).","tags":["Utilities"],"parameters":[{"name":"number","in":"query","required":true,"description":"Phone number, e.g. 0812-3456-7890 or +62 812 3456 7890","schema":{"maxLength":32,"type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/tools:validasi/telepon?number=0812-3456-7890\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/tools:validasi/telepon\",\n    params={\"number\": \"0812-3456-7890\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"number\": \"0812-3456-7890\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/tools:validasi/telepon?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/tools:validasi/telepon?' . http_build_query(['number' => '0812-3456-7890']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"number\", \"0812-3456-7890\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/tools:validasi/telepon?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/tools:validasi/telepon?number=0812-3456-7890\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/tools:validasi/telepon\")\nuri.query = URI.encode_www_form({\"number\" => \"0812-3456-7890\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/tools:validasi/telepon?number=0812-3456-7890\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/tools:zona-waktu/sekarang":{"get":{"operationId":"tools_zona_waktu_sekarang","summary":"Current time in several zones.","description":"Current time in several zones at once and conversion between IANA time zones, with WIB/WITA/WIT abbreviations for Indonesia and daylight saving handled for other countries.\n\nSources: KajiData (basis data zona waktu IANA). Cached for 1s, costs 1 quota unit (cache hits are free).","tags":["Utilities"],"parameters":[{"name":"zones","in":"query","required":false,"description":"Comma-separated IANA zones (max 10), e.g. Asia/Jakarta,Europe/London","schema":{"default":"Asia/Jakarta,Asia/Makassar,Asia/Jayapura","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/tools:zona-waktu/sekarang?zones=Asia%2FJakarta%2CAsia%2FTokyo%2CEurope%2FLondon\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/tools:zona-waktu/sekarang\",\n    params={\"zones\": \"Asia/Jakarta,Asia/Tokyo,Europe/London\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"zones\": \"Asia/Jakarta,Asia/Tokyo,Europe/London\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/tools:zona-waktu/sekarang?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/tools:zona-waktu/sekarang?' . http_build_query(['zones' => 'Asia/Jakarta,Asia/Tokyo,Europe/London']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"zones\", \"Asia/Jakarta,Asia/Tokyo,Europe/London\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/tools:zona-waktu/sekarang?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/tools:zona-waktu/sekarang?zones=Asia%2FJakarta%2CAsia%2FTokyo%2CEurope%2FLondon\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/tools:zona-waktu/sekarang\")\nuri.query = URI.encode_www_form({\"zones\" => \"Asia/Jakarta,Asia/Tokyo,Europe/London\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/tools:zona-waktu/sekarang?zones=Asia%2FJakarta%2CAsia%2FTokyo%2CEurope%2FLondon\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/tools:zona-waktu/konversi":{"get":{"operationId":"tools_zona_waktu_konversi","summary":"Convert a time between zones.","description":"Current time in several zones at once and conversion between IANA time zones, with WIB/WITA/WIT abbreviations for Indonesia and daylight saving handled for other countries.\n\nSources: KajiData (basis data zona waktu IANA). Cached for 86400s, costs 1 quota unit (cache hits are free).","tags":["Utilities"],"parameters":[{"name":"time","in":"query","required":true,"description":"Local date-time without offset, e.g. 2026-11-01T09:00","schema":{"format":"date-time","type":"string"}},{"name":"from","in":"query","required":false,"description":"Source IANA zone","schema":{"default":"Asia/Jakarta","type":"string"}},{"name":"to","in":"query","required":false,"description":"Target IANA zones, comma-separated","schema":{"default":"Europe/London,America/New_York","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/tools:zona-waktu/konversi?time=2026-11-01T09%3A00&from=Asia%2FJakarta&to=Europe%2FLondon%2CAmerica%2FNew_York\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/tools:zona-waktu/konversi\",\n    params={\"time\": \"2026-11-01T09:00\", \"from\": \"Asia/Jakarta\", \"to\": \"Europe/London,America/New_York\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"time\": \"2026-11-01T09:00\", \"from\": \"Asia/Jakarta\", \"to\": \"Europe/London,America/New_York\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/tools:zona-waktu/konversi?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/tools:zona-waktu/konversi?' . http_build_query(['time' => '2026-11-01T09:00', 'from' => 'Asia/Jakarta', 'to' => 'Europe/London,America/New_York']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"time\", \"2026-11-01T09:00\")\n\tparams.Set(\"from\", \"Asia/Jakarta\")\n\tparams.Set(\"to\", \"Europe/London,America/New_York\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/tools:zona-waktu/konversi?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/tools:zona-waktu/konversi?time=2026-11-01T09%3A00&from=Asia%2FJakarta&to=Europe%2FLondon%2CAmerica%2FNew_York\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/tools:zona-waktu/konversi\")\nuri.query = URI.encode_www_form({\"time\" => \"2026-11-01T09:00\", \"from\" => \"Asia/Jakarta\", \"to\" => \"Europe/London,America/New_York\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/tools:zona-waktu/konversi?time=2026-11-01T09%3A00&from=Asia%2FJakarta&to=Europe%2FLondon%2CAmerica%2FNew_York\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:indeks-cnbc-indonesia/indeks":{"get":{"operationId":"news_indeks_cnbc_indonesia_indeks","summary":"Every headline on one day, by index page.","description":"Every CNBC Indonesia headline on a given day from its index pages, with link and publish time. Headlines and links only.\n\nSources: CNBC Indonesia (www.cnbcindonesia.com). Cached for 1800s, costs 1 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"date","in":"query","required":false,"description":"Day as YYYY-MM-DD, today in WIB if empty","schema":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null}},{"name":"page","in":"query","required":false,"description":"Index page","schema":{"default":1,"maximum":100,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:indeks-cnbc-indonesia/indeks?page=1\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:indeks-cnbc-indonesia/indeks\",\n    params={\"page\": \"1\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"page\": \"1\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:indeks-cnbc-indonesia/indeks?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:indeks-cnbc-indonesia/indeks?' . http_build_query(['page' => '1']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"page\", \"1\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:indeks-cnbc-indonesia/indeks?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:indeks-cnbc-indonesia/indeks?page=1\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:indeks-cnbc-indonesia/indeks\")\nuri.query = URI.encode_www_form({\"page\" => \"1\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:indeks-cnbc-indonesia/indeks?page=1\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:indeks-cnbc-indonesia/artikel":{"get":{"operationId":"news_indeks_cnbc_indonesia_artikel","summary":"The body of one CNBC Indonesia article: title, publish time, summary and paragraphs.","description":"Every CNBC Indonesia headline on a given day from its index pages, with link and publish time. Headlines and links only.\n\nSources: CNBC Indonesia (www.cnbcindonesia.com). Cached for 86400s, costs 2 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"url","in":"query","required":true,"description":"Address of an article on this site","schema":{"maxLength":500,"minLength":12,"pattern":"^https?://","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:indeks-cnbc-indonesia/artikel?url=https%3A%2F%2Fcnbcindonesia.com%2F\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:indeks-cnbc-indonesia/artikel\",\n    params={\"url\": \"https://cnbcindonesia.com/\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"url\": \"https://cnbcindonesia.com/\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:indeks-cnbc-indonesia/artikel?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:indeks-cnbc-indonesia/artikel?' . http_build_query(['url' => 'https://cnbcindonesia.com/']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"url\", \"https://cnbcindonesia.com/\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:indeks-cnbc-indonesia/artikel?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:indeks-cnbc-indonesia/artikel?url=https%3A%2F%2Fcnbcindonesia.com%2F\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:indeks-cnbc-indonesia/artikel\")\nuri.query = URI.encode_www_form({\"url\" => \"https://cnbcindonesia.com/\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:indeks-cnbc-indonesia/artikel?url=https%3A%2F%2Fcnbcindonesia.com%2F\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:indeks-cnn-indonesia/indeks":{"get":{"operationId":"news_indeks_cnn_indonesia_indeks","summary":"Every headline on one day, by index page.","description":"Every CNN Indonesia headline on a given day from its index pages, with link and publish time. Headlines and links only.\n\nSources: CNN Indonesia (www.cnnindonesia.com). Cached for 1800s, costs 1 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"date","in":"query","required":false,"description":"Day as YYYY-MM-DD, today in WIB if empty","schema":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null}},{"name":"page","in":"query","required":false,"description":"Index page","schema":{"default":1,"maximum":100,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:indeks-cnn-indonesia/indeks?page=1\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:indeks-cnn-indonesia/indeks\",\n    params={\"page\": \"1\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"page\": \"1\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:indeks-cnn-indonesia/indeks?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:indeks-cnn-indonesia/indeks?' . http_build_query(['page' => '1']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"page\", \"1\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:indeks-cnn-indonesia/indeks?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:indeks-cnn-indonesia/indeks?page=1\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:indeks-cnn-indonesia/indeks\")\nuri.query = URI.encode_www_form({\"page\" => \"1\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:indeks-cnn-indonesia/indeks?page=1\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:indeks-cnn-indonesia/artikel":{"get":{"operationId":"news_indeks_cnn_indonesia_artikel","summary":"The body of one CNN Indonesia article: title, publish time, summary and paragraphs.","description":"Every CNN Indonesia headline on a given day from its index pages, with link and publish time. Headlines and links only.\n\nSources: CNN Indonesia (www.cnnindonesia.com). Cached for 86400s, costs 2 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"url","in":"query","required":true,"description":"Address of an article on this site","schema":{"maxLength":500,"minLength":12,"pattern":"^https?://","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:indeks-cnn-indonesia/artikel?url=https%3A%2F%2Fcnnindonesia.com%2F\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:indeks-cnn-indonesia/artikel\",\n    params={\"url\": \"https://cnnindonesia.com/\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"url\": \"https://cnnindonesia.com/\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:indeks-cnn-indonesia/artikel?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:indeks-cnn-indonesia/artikel?' . http_build_query(['url' => 'https://cnnindonesia.com/']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"url\", \"https://cnnindonesia.com/\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:indeks-cnn-indonesia/artikel?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:indeks-cnn-indonesia/artikel?url=https%3A%2F%2Fcnnindonesia.com%2F\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:indeks-cnn-indonesia/artikel\")\nuri.query = URI.encode_www_form({\"url\" => \"https://cnnindonesia.com/\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:indeks-cnn-indonesia/artikel?url=https%3A%2F%2Fcnnindonesia.com%2F\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:indeks-detik/indeks":{"get":{"operationId":"news_indeks_detik_indeks","summary":"Every headline on one day, by index page.","description":"Every detikNews headline on a given day from its index pages, with link and publish time. Headlines and links only.\n\nSources: detikNews (news.detik.com). Cached for 1800s, costs 1 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"date","in":"query","required":false,"description":"Day as YYYY-MM-DD, today in WIB if empty","schema":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null}},{"name":"page","in":"query","required":false,"description":"Index page","schema":{"default":1,"maximum":100,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:indeks-detik/indeks?page=1\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:indeks-detik/indeks\",\n    params={\"page\": \"1\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"page\": \"1\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:indeks-detik/indeks?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:indeks-detik/indeks?' . http_build_query(['page' => '1']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"page\", \"1\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:indeks-detik/indeks?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:indeks-detik/indeks?page=1\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:indeks-detik/indeks\")\nuri.query = URI.encode_www_form({\"page\" => \"1\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:indeks-detik/indeks?page=1\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:indeks-detik/artikel":{"get":{"operationId":"news_indeks_detik_artikel","summary":"The body of one detikNews article: title, publish time, summary and paragraphs.","description":"Every detikNews headline on a given day from its index pages, with link and publish time. Headlines and links only.\n\nSources: detikNews (news.detik.com). Cached for 86400s, costs 2 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"url","in":"query","required":true,"description":"Address of an article on this site","schema":{"maxLength":500,"minLength":12,"pattern":"^https?://","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:indeks-detik/artikel?url=https%3A%2F%2Fdetik.com%2F\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:indeks-detik/artikel\",\n    params={\"url\": \"https://detik.com/\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"url\": \"https://detik.com/\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:indeks-detik/artikel?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:indeks-detik/artikel?' . http_build_query(['url' => 'https://detik.com/']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"url\", \"https://detik.com/\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:indeks-detik/artikel?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:indeks-detik/artikel?url=https%3A%2F%2Fdetik.com%2F\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:indeks-detik/artikel\")\nuri.query = URI.encode_www_form({\"url\" => \"https://detik.com/\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:indeks-detik/artikel?url=https%3A%2F%2Fdetik.com%2F\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:indeks-jpnn/indeks":{"get":{"operationId":"news_indeks_jpnn_indeks","summary":"Every headline on one day, by index page.","description":"Every JPNN.com headline on a given day from its index pages, with link and publish time. Headlines and links only.\n\nSources: JPNN.com (www.jpnn.com). Cached for 1800s, costs 1 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"date","in":"query","required":false,"description":"Day as YYYY-MM-DD, today in WIB if empty","schema":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null}},{"name":"page","in":"query","required":false,"description":"Index page","schema":{"default":1,"maximum":100,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:indeks-jpnn/indeks?page=1\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:indeks-jpnn/indeks\",\n    params={\"page\": \"1\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"page\": \"1\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:indeks-jpnn/indeks?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:indeks-jpnn/indeks?' . http_build_query(['page' => '1']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"page\", \"1\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:indeks-jpnn/indeks?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:indeks-jpnn/indeks?page=1\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:indeks-jpnn/indeks\")\nuri.query = URI.encode_www_form({\"page\" => \"1\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:indeks-jpnn/indeks?page=1\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:indeks-jpnn/artikel":{"get":{"operationId":"news_indeks_jpnn_artikel","summary":"The body of one JPNN.com article: title, publish time, summary and paragraphs.","description":"Every JPNN.com headline on a given day from its index pages, with link and publish time. Headlines and links only.\n\nSources: JPNN.com (www.jpnn.com). Cached for 86400s, costs 2 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"url","in":"query","required":true,"description":"Address of an article on this site","schema":{"maxLength":500,"minLength":12,"pattern":"^https?://","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:indeks-jpnn/artikel?url=https%3A%2F%2Fjpnn.com%2F\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:indeks-jpnn/artikel\",\n    params={\"url\": \"https://jpnn.com/\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"url\": \"https://jpnn.com/\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:indeks-jpnn/artikel?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:indeks-jpnn/artikel?' . http_build_query(['url' => 'https://jpnn.com/']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"url\", \"https://jpnn.com/\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:indeks-jpnn/artikel?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:indeks-jpnn/artikel?url=https%3A%2F%2Fjpnn.com%2F\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:indeks-jpnn/artikel\")\nuri.query = URI.encode_www_form({\"url\" => \"https://jpnn.com/\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:indeks-jpnn/artikel?url=https%3A%2F%2Fjpnn.com%2F\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:indeks-kompas/indeks":{"get":{"operationId":"news_indeks_kompas_indeks","summary":"Every headline on one day, by index page.","description":"Every Kompas.com headline on a given day from its index pages, with link and publish time. Headlines and links only.\n\nSources: Kompas.com (indeks.kompas.com). Cached for 1800s, costs 1 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"date","in":"query","required":false,"description":"Day as YYYY-MM-DD, today in WIB if empty","schema":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null}},{"name":"page","in":"query","required":false,"description":"Index page","schema":{"default":1,"maximum":100,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:indeks-kompas/indeks?page=1\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:indeks-kompas/indeks\",\n    params={\"page\": \"1\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"page\": \"1\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:indeks-kompas/indeks?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:indeks-kompas/indeks?' . http_build_query(['page' => '1']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"page\", \"1\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:indeks-kompas/indeks?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:indeks-kompas/indeks?page=1\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:indeks-kompas/indeks\")\nuri.query = URI.encode_www_form({\"page\" => \"1\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:indeks-kompas/indeks?page=1\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:indeks-kompas/artikel":{"get":{"operationId":"news_indeks_kompas_artikel","summary":"The body of one Kompas.com article: title, publish time, summary and paragraphs.","description":"Every Kompas.com headline on a given day from its index pages, with link and publish time. Headlines and links only.\n\nSources: Kompas.com (indeks.kompas.com). Cached for 86400s, costs 2 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"url","in":"query","required":true,"description":"Address of an article on this site","schema":{"maxLength":500,"minLength":12,"pattern":"^https?://","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:indeks-kompas/artikel?url=https%3A%2F%2Fkompas.com%2F\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:indeks-kompas/artikel\",\n    params={\"url\": \"https://kompas.com/\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"url\": \"https://kompas.com/\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:indeks-kompas/artikel?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:indeks-kompas/artikel?' . http_build_query(['url' => 'https://kompas.com/']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"url\", \"https://kompas.com/\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:indeks-kompas/artikel?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:indeks-kompas/artikel?url=https%3A%2F%2Fkompas.com%2F\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:indeks-kompas/artikel\")\nuri.query = URI.encode_www_form({\"url\" => \"https://kompas.com/\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:indeks-kompas/artikel?url=https%3A%2F%2Fkompas.com%2F\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:indeks-kontan/indeks":{"get":{"operationId":"news_indeks_kontan_indeks","summary":"Every headline on one day, by index page.","description":"Every Kontan headline on a given day from its index pages, with link and publish time. Headlines and links only.\n\nSources: Kontan (www.kontan.co.id). Cached for 1800s, costs 1 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"date","in":"query","required":false,"description":"Day as YYYY-MM-DD, today in WIB if empty","schema":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null}},{"name":"page","in":"query","required":false,"description":"Index page","schema":{"default":1,"maximum":100,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:indeks-kontan/indeks?page=1\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:indeks-kontan/indeks\",\n    params={\"page\": \"1\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"page\": \"1\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:indeks-kontan/indeks?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:indeks-kontan/indeks?' . http_build_query(['page' => '1']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"page\", \"1\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:indeks-kontan/indeks?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:indeks-kontan/indeks?page=1\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:indeks-kontan/indeks\")\nuri.query = URI.encode_www_form({\"page\" => \"1\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:indeks-kontan/indeks?page=1\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:indeks-kontan/artikel":{"get":{"operationId":"news_indeks_kontan_artikel","summary":"The body of one Kontan article: title, publish time, summary and paragraphs.","description":"Every Kontan headline on a given day from its index pages, with link and publish time. Headlines and links only.\n\nSources: Kontan (www.kontan.co.id). Cached for 86400s, costs 2 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"url","in":"query","required":true,"description":"Address of an article on this site","schema":{"maxLength":500,"minLength":12,"pattern":"^https?://","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:indeks-kontan/artikel?url=https%3A%2F%2Fkontan.co.id%2F\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:indeks-kontan/artikel\",\n    params={\"url\": \"https://kontan.co.id/\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"url\": \"https://kontan.co.id/\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:indeks-kontan/artikel?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:indeks-kontan/artikel?' . http_build_query(['url' => 'https://kontan.co.id/']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"url\", \"https://kontan.co.id/\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:indeks-kontan/artikel?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:indeks-kontan/artikel?url=https%3A%2F%2Fkontan.co.id%2F\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:indeks-kontan/artikel\")\nuri.query = URI.encode_www_form({\"url\" => \"https://kontan.co.id/\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:indeks-kontan/artikel?url=https%3A%2F%2Fkontan.co.id%2F\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:indeks-liputan6/indeks":{"get":{"operationId":"news_indeks_liputan6_indeks","summary":"Every headline on one day, by index page.","description":"Every Liputan6 headline on a given day from its index pages, with link and publish time. Headlines and links only.\n\nSources: Liputan6 (www.liputan6.com). Cached for 1800s, costs 1 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"date","in":"query","required":false,"description":"Day as YYYY-MM-DD, today in WIB if empty","schema":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null}},{"name":"page","in":"query","required":false,"description":"Index page","schema":{"default":1,"maximum":100,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:indeks-liputan6/indeks?page=1\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:indeks-liputan6/indeks\",\n    params={\"page\": \"1\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"page\": \"1\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:indeks-liputan6/indeks?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:indeks-liputan6/indeks?' . http_build_query(['page' => '1']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"page\", \"1\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:indeks-liputan6/indeks?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:indeks-liputan6/indeks?page=1\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:indeks-liputan6/indeks\")\nuri.query = URI.encode_www_form({\"page\" => \"1\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:indeks-liputan6/indeks?page=1\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:indeks-liputan6/artikel":{"get":{"operationId":"news_indeks_liputan6_artikel","summary":"The body of one Liputan6 article: title, publish time, summary and paragraphs.","description":"Every Liputan6 headline on a given day from its index pages, with link and publish time. Headlines and links only.\n\nSources: Liputan6 (www.liputan6.com). Cached for 86400s, costs 2 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"url","in":"query","required":true,"description":"Address of an article on this site","schema":{"maxLength":500,"minLength":12,"pattern":"^https?://","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:indeks-liputan6/artikel?url=https%3A%2F%2Fliputan6.com%2F\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:indeks-liputan6/artikel\",\n    params={\"url\": \"https://liputan6.com/\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"url\": \"https://liputan6.com/\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:indeks-liputan6/artikel?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:indeks-liputan6/artikel?' . http_build_query(['url' => 'https://liputan6.com/']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"url\", \"https://liputan6.com/\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:indeks-liputan6/artikel?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:indeks-liputan6/artikel?url=https%3A%2F%2Fliputan6.com%2F\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:indeks-liputan6/artikel\")\nuri.query = URI.encode_www_form({\"url\" => \"https://liputan6.com/\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:indeks-liputan6/artikel?url=https%3A%2F%2Fliputan6.com%2F\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:indeks-okezone/indeks":{"get":{"operationId":"news_indeks_okezone_indeks","summary":"Every headline on one day, by index page.","description":"Every Okezone headline on a given day from its index pages, with link and publish time. Headlines and links only.\n\nSources: Okezone (index.okezone.com). Cached for 1800s, costs 1 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"date","in":"query","required":false,"description":"Day as YYYY-MM-DD, today in WIB if empty","schema":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null}},{"name":"page","in":"query","required":false,"description":"Index page","schema":{"default":1,"maximum":100,"minimum":1,"type":"integer"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:indeks-okezone/indeks?page=1\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:indeks-okezone/indeks\",\n    params={\"page\": \"1\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"page\": \"1\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:indeks-okezone/indeks?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:indeks-okezone/indeks?' . http_build_query(['page' => '1']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"page\", \"1\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:indeks-okezone/indeks?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:indeks-okezone/indeks?page=1\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:indeks-okezone/indeks\")\nuri.query = URI.encode_www_form({\"page\" => \"1\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:indeks-okezone/indeks?page=1\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/v1/news:indeks-okezone/artikel":{"get":{"operationId":"news_indeks_okezone_artikel","summary":"The body of one Okezone article: title, publish time, summary and paragraphs.","description":"Every Okezone headline on a given day from its index pages, with link and publish time. Headlines and links only.\n\nSources: Okezone (index.okezone.com). Cached for 86400s, costs 2 quota unit (cache hits are free).","tags":["News"],"parameters":[{"name":"url","in":"query","required":true,"description":"Address of an article on this site","schema":{"maxLength":500,"minLength":12,"pattern":"^https?://","type":"string"}}],"x-codeSamples":[{"lang":"shell","label":"cURL","source":"curl -H \"x-api-key: YOUR_API_KEY\" \"https://kajidata.artonlabs.com/v1/news:indeks-okezone/artikel?url=https%3A%2F%2Fokezone.com%2F\""},{"lang":"python","label":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://kajidata.artonlabs.com/v1/news:indeks-okezone/artikel\",\n    params={\"url\": \"https://okezone.com/\"},\n    headers={\"x-api-key\": \"YOUR_API_KEY\"},\n    timeout=30,\n)\nbody = response.json()\nprint(body[\"data\"] if body[\"ok\"] else body[\"error\"])"},{"lang":"javascript","label":"JavaScript","source":"const params = new URLSearchParams({\"url\": \"https://okezone.com/\"});\nconst response = await fetch(`https://kajidata.artonlabs.com/v1/news:indeks-okezone/artikel?${params}`, {\n  headers: { \"x-api-key\": \"YOUR_API_KEY\" },\n});\nconst body = await response.json();\nconsole.log(body.ok ? body.data : body.error);"},{"lang":"php","label":"PHP","source":"<?php\n$ch = curl_init('https://kajidata.artonlabs.com/v1/news:indeks-okezone/artikel?' . http_build_query(['url' => 'https://okezone.com/']));\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => ['x-api-key: YOUR_API_KEY'],\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = json_decode(curl_exec($ch), true);\ncurl_close($ch);\nprint_r($body['ok'] ? $body['data'] : $body['error']);"},{"lang":"go","label":"Go","source":"package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\tparams := url.Values{}\n\tparams.Set(\"url\", \"https://okezone.com/\")\n\treq, _ := http.NewRequest(\"GET\", \"https://kajidata.artonlabs.com/v1/news:indeks-okezone/artikel?\"+params.Encode(), nil)\n\treq.Header.Set(\"x-api-key\", \"YOUR_API_KEY\")\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\tvar body map[string]any\n\tjson.NewDecoder(res.Body).Decode(&body)\n\tfmt.Println(body[\"data\"])\n}"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        HttpRequest request = HttpRequest.newBuilder(URI.create(\"https://kajidata.artonlabs.com/v1/news:indeks-okezone/artikel?url=https%3A%2F%2Fokezone.com%2F\"))\n            .header(\"x-api-key\", \"YOUR_API_KEY\")\n            .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n            .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n}"},{"lang":"ruby","label":"Ruby","source":"require \"net/http\"\nrequire \"json\"\n\nuri = URI(\"https://kajidata.artonlabs.com/v1/news:indeks-okezone/artikel\")\nuri.query = URI.encode_www_form({\"url\" => \"https://okezone.com/\"})\nrequest = Net::HTTP::Get.new(uri)\nrequest[\"x-api-key\"] = \"YOUR_API_KEY\"\nresponse = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == \"https\") { |http| http.request(request) }\nbody = JSON.parse(response.body)\nputs body[\"ok\"] ? body[\"data\"] : body[\"error\"]"},{"lang":"csharp","label":"C#","source":"using var client = new HttpClient();\nclient.DefaultRequestHeaders.Add(\"x-api-key\", \"YOUR_API_KEY\");\nvar json = await client.GetStringAsync(\"https://kajidata.artonlabs.com/v1/news:indeks-okezone/artikel?url=https%3A%2F%2Fokezone.com%2F\");\nConsole.WriteLine(json);"}],"responses":{"200":{"description":"Success (including the last good copy when meta.stale=true)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Plan does not include this API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Endpoint or data not found (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Invalid parameters (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Rate limit or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Source failed (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"504":{"description":"Source timed out (not billed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}}},"components":{"securitySchemes":{"ApiKey":{"type":"apiKey","in":"header","name":"x-api-key"}},"schemas":{"Envelope":{"type":"object","properties":{"ok":{"type":"boolean"},"project":{"type":"string"},"endpoint":{"type":"string"},"data":{},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{}}},"meta":{"type":"object","properties":{"request_id":{"type":"string"},"timestamp":{"type":"string","format":"date-time"},"latency_ms":{"type":"integer"},"cached":{"type":"boolean"},"stale":{"type":"boolean","description":"true when the source failed and this is the last good copy"},"cost":{"type":"integer"},"quota_remaining":{"type":"integer"},"source":{"type":"string"},"fetched_at":{"type":"string","format":"date-time"}}}}}}}}