PASAR API · DOCS

The API directory, through REST and MCP.

← back to directory

The Pasar API catalogue ~ government open data (data.gov.my, data.go.th, data.go.id, data.gov.sg) plus curated commercial APIs ~ is available as a public REST API and a remote MCP server. Both are read-only, authless, and CORS-open. Base URL: https://pasarapi.xyz

REST API

Every response is JSON, versioned and edge-cached (the full catalogue refreshes daily; detail and freshness responses use shorter caches). Each entry has a tier (open = free, no-auth, copy-paste-ready · commercial = real auth/pricing + docs link).

EndpointReturns
GET /api/catalogueCatalogue list: { updated, source, total, apis[] }. Add limit (max 200) and offset for pagination.
GET /api/searchRanked filtered list with facets. Params: q, category, tier, pricing, auth, country, free=true, no_auth=true, limit, offset.
GET /api/apis/:idOne entry + a ready-to-run snippet, docs link, and AI prompt
GET /api/categories[{ category, count }]
GET /api/freshness?days=90Rot report ~ apis lists entries whose verification stamp is older than the cutoff, unstamped_apis lists curated entries never verified once. Government live-fetch datasets carry no stamp by design and are counted as self_maintaining.
GET /openapi.jsonOpenAPI 3.1 contract for client generation.

Example ~ find free, no-auth weather APIs

curl 'https://pasarapi.xyz/api/search?q=weather&no_auth=true'

Example ~ get one API with a working snippet

curl 'https://pasarapi.xyz/api/apis/fuelprice'

{
  "id": "fuelprice",
  "title": "Weekly fuel prices (RON95, RON97, diesel)",
  "tier": "open",
  "auth": "none",
  "pricing": "free",
  "copyable": true,
  "curl": "curl 'https://api.data.gov.my/data-catalogue/?id=fuelprice&limit=10'",
  "prompt": "..."
}

MCP server

A remote MCP server at /mcp (stateless Streamable HTTP). Connect it in Claude, Cursor, or any MCP client and your AI agent can search and integrate Southeast Asian APIs directly ~ no copy-pasting.

Connect it

The server speaks native remote MCP (Streamable HTTP) ~ no local proxy needed.

ClientHow
Claude.aiSettings → Connectors → Add custom connector → paste https://pasarapi.xyz/mcp
Claude Codeclaude mcp add --transport http pasarapi https://pasarapi.xyz/mcp
CursorOne-click install ↗
VS Code / WindsurfAdd { "pasar-api": { "type": "http", "url": "https://pasarapi.xyz/mcp" } } to the client's MCP config

Older stdio-only clients can still bridge via npx mcp-remote https://pasarapi.xyz/mcp.

Tools

All eight the server answers tools/list with ~ same names, same arguments, same wording as /llms.txt, which renders them straight from the server's own tool table. * marks a required argument.

ToolArgumentsDoes
search_sea_apisquery, category, country, free, no_auth, limit, offsetRelevance-ranked search ~ the reply states the true match total and the offset for the next page
get_sea_apiid*One entry in full: trust caveat, setup guide, ready-to-run snippet
try_sea_apiid*One live sample GET against a copyable entry (auth none AND one concrete endpoint), so you see the real response shape
list_api_categoriesno argumentsThe whole taxonomy with a count per category
list_api_stacksno argumentsCurated build recipes (stacks) per project type
get_api_stackid*The APIs in one stack, each with its role in the build
search_malaysian_apisquery, category, country, free, no_auth, limit, offsetLegacy alias for search_sea_apis (same ranking, same paging)
get_malaysian_apiid*Legacy alias for get_sea_api

The two legacy aliases stay for older clients; new ones should use the _sea_ names. Try asking your agent: “What free Malaysian, Singaporean, Indonesian or Thai weather API can I use, and how do I call it?”

Tiers & honesty

open entries are free and need no auth ~ the snippet works as-is. commercial entries (payments, logistics, telco, banking, e-invoicing…) are key-gated, so instead of a fake call you get the provider's real docs link, auth type, and pricing. Every commercial entry's docs URL is fact-checked; providers with no genuinely public API are excluded, not invented.