Kartik Kabadi

Developers

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

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:

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