Kartik Kabadi API
The kartikkabadi.com API is a small read-only JSON API for agents and tools. No key, no account, no writes.
Base URL: https://kartikkabadi.com/api/v1
Quickstart
curl https://kartikkabadi.com/api/v1
curl https://kartikkabadi.com/api/v1/profile
curl https://kartikkabadi.com/api/v1/projects
Endpoints
GET /api/v1returns the API index: the endpoint list plus links to the spec and docs.GET /api/v1/profilereturns name, role, location, email, and profile links.GET /api/v1/projectsreturns the open-source projects with descriptions and star counts. Uselimit(1-50) andcursorto page through the list.
A real response from GET /api/v1:
{
"name": "Kartik Kabadi API",
"description": "Read-only JSON API for kartikkabadi.com. No key needed, no writes.",
"version": "1.0.0",
"docs": "https://kartikkabadi.com/developers",
"spec": "https://kartikkabadi.com/openapi.json",
"data": "https://kartikkabadi.com/data/site.json",
"endpoints": [
{ "method": "GET", "path": "/api/v1", "description": "This index." },
{ "method": "GET", "path": "/api/v1/profile", "description": "Name, role, location, email, and profile links." },
{ "method": "GET", "path": "/api/v1/projects", "description": "Open-source projects with descriptions and star counts. Supports limit and cursor." }
]
}
Paging through projects:
curl "https://kartikkabadi.com/api/v1/projects?limit=5"
curl "https://kartikkabadi.com/api/v1/projects?limit=5&cursor=5"
Each page returns count (projects in this page), total, next_cursor (null on the last page), updated, and projects.
Sparse fieldsets
Every endpoint accepts fields, a comma-separated list of top-level fields to keep. Omit it for the full document; a sparse response contains only the named fields, so the spec’s required list describes the full document. Repeated parameters combine.
curl "https://kartikkabadi.com/api/v1/profile?fields=name,role,links"
curl "https://kartikkabadi.com/api/v1/profile?fields=name&fields=role"
Unknown field names return a 400, with the valid names listed in the error hint.
Versioning
The API is versioned in the URL path. Version 1 lives at /api/v1. Breaking changes would ship as /api/v2, and v1 stays available for at least 180 days after a deprecation notice. Deprecations are announced with Deprecation and Sunset response headers and on this page. The unversioned /api paths are aliases for v1.
Authentication
None. The API is public and read-only. There are no API keys to issue, and nothing to sandbox: every request is safe to replay. Every response carries Access-Control-Allow-Origin: *, so browser code on any origin can call it, and Access-Control-Expose-Headers so it can read the rate-limit headers.
Rate limits
120 requests per minute per IP. Every API response carries the standard RateLimit headers:
RateLimit-Limit: 120RateLimit-Remaining: requests left in the windowRateLimit-Reset: seconds until the window resetsRateLimit-Policy: 120;w=60
When the limit is exceeded the API returns 429 with Retry-After and a JSON error. The limit is enforced per edge location on a best-effort basis.
Errors
Errors are JSON with a code, a message, a hint, and a docs link. The API never returns an HTML error page.
{
"error": {
"code": "not_found",
"message": "No API endpoint at /api/v1/example.",
"hint": "See https://kartikkabadi.com/openapi.json for the endpoint list.",
"docs": "https://kartikkabadi.com/developers"
}
}
Codes: invalid_parameter (400), not_found (404), method_not_allowed (405), rate_limited (429), upstream_unavailable (500).
Machine-readable files
- OpenAPI 3.1 spec
- Full site data: profile, links, and projects in one JSON file
- llms.txt: the agent guide for this site
- Markdown versions of pages: append
.mdto any page URL, for example /developers.md