The Chipa Kit public API provides programmatic access to the component catalog. Use it to search, fetch component details, resolve shortcodes, and browse categories.
Overview#
| Base URL | https://chipakit.com/api/v1 |
| Protocol | HTTPS only |
| Format | JSON |
| Authentication | Optional (public endpoints work without auth) |
| Rate Limit | 60 requests/minute (unauthenticated) |
Authentication#
Most public endpoints work without authentication. For higher rate limits and access to premium features, include your API key in the request header:
curl -H "Authorization: Bearer ck_live_your_key_here" \
https://chipakit.com/api/v1/public/search?q=heroGetting an API key
- Sign in to your Chipa Kit account.
- Go to Settings > API Keys.
- Click Generate New Key.
- Copy and store the key securely -- it is only shown once.
Keep your API key secret. Never commit it to version control or include it in client-side code. Use environment variables instead.
Rate Limiting#
| Tier | Rate Limit | Window |
|---|---|---|
| Unauthenticated | 60 requests | Per minute |
| Authenticated (free) | 120 requests | Per minute |
| Authenticated (premium) | 600 requests | Per minute |
Rate limit headers are included in every response:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 58
X-RateLimit-Reset: 1709136000When the rate limit is exceeded, the API returns a 429 Too Many Requests status with a Retry-After header indicating when you can retry.
Response Format#
All responses follow a consistent envelope format:
{
"data": { ... },
"meta": {
"total": 42,
"page": 1,
"limit": 20
},
"message": "OK"
}{
"data": null,
"message": "Component not found",
"statusCode": 404
}Always unwrap the data field. The actual payload is nested inside data. The meta field is only present for paginated list responses.
Endpoints#
/api/v1/public/searchSearch the component catalog with optional filters.
Query Parameters
| Name | Type | Default | Description |
|---|---|---|---|
q | string | -- | Search keyword |
category | string | -- | Category slug |
framework | string | -- | react, vue, html, svelte |
styling | string | -- | tailwind, css, scss |
sort | string | relevance | relevance, newest, downloads |
page | number | 1 | Page number |
limit | number | 20 | Results per page (max 50) |
Example
curl "https://chipakit.com/api/v1/public/search?q=hero&framework=react&styling=tailwind&limit=5"{
"data": [
{
"id": "clx1234...",
"title": "Gradient Hero Section with CTA",
"slug": "janedoe/gradient-hero-cta",
"shortcode": "chipakit:janedoe/gradient-hero-cta",
"description": "A responsive hero section with gradient background...",
"framework": "react",
"styling": "tailwind",
"category": { "name": "Hero Sections", "slug": "hero-sections" },
"creator": { "username": "janedoe", "displayName": "Jane Doe" },
"downloadCount": 128,
"tags": ["hero", "gradient", "cta", "responsive"],
"createdAt": "2026-02-15T10:30:00.000Z"
}
],
"meta": { "total": 12, "page": 1, "limit": 5 },
"message": "OK"
}/api/v1/public/components/:slugGet full details for a specific component including file list.
Path Parameters
| Name | Type | Description |
|---|---|---|
slug | string | Component slug (e.g. janedoe/gradient-hero-cta) |
Example
curl "https://chipakit.com/api/v1/public/components/janedoe/gradient-hero-cta"{
"data": {
"id": "clx1234...",
"title": "Gradient Hero Section with CTA",
"slug": "janedoe/gradient-hero-cta",
"shortcode": "chipakit:janedoe/gradient-hero-cta",
"description": "A responsive hero section...",
"framework": "react",
"styling": "tailwind",
"license": "MIT",
"dependencies": ["framer-motion"],
"files": [
{ "name": "hero.tsx", "size": 2048, "type": "text/tsx" },
{ "name": "hero.css", "size": 512, "type": "text/css" }
],
"category": { "name": "Hero Sections", "slug": "hero-sections" },
"creator": {
"username": "janedoe",
"displayName": "Jane Doe",
"avatarUrl": "https://..."
},
"downloadCount": 128,
"tags": ["hero", "gradient", "cta"],
"createdAt": "2026-02-15T10:30:00.000Z",
"updatedAt": "2026-02-20T14:00:00.000Z"
},
"message": "OK"
}/api/v1/public/categoriesList all component categories with their component counts.
Example
curl "https://chipakit.com/api/v1/public/categories"{
"data": [
{ "name": "Hero Sections", "slug": "hero-sections", "componentCount": 24 },
{ "name": "Navigation", "slug": "navigation", "componentCount": 18 },
{ "name": "Cards", "slug": "cards", "componentCount": 31 },
{ "name": "Forms", "slug": "forms", "componentCount": 15 },
{ "name": "Pricing", "slug": "pricing", "componentCount": 9 }
],
"message": "OK"
}/api/v1/resolve/:shortcodeResolve a shortcode to a full component with file contents (used by MCP).
Path Parameters
| Name | Type | Description |
|---|---|---|
shortcode | string | Component shortcode (e.g. janedoe/gradient-hero-cta) |
Example
curl "https://chipakit.com/api/v1/resolve/janedoe/gradient-hero-cta"{
"data": {
"shortcode": "chipakit:janedoe/gradient-hero-cta",
"title": "Gradient Hero Section with CTA",
"files": [
{
"name": "hero.tsx",
"content": "import { motion } from 'framer-motion';\n\nexport function Hero() { ... }",
"size": 2048
}
],
"dependencies": ["framer-motion"],
"license": "MIT"
},
"message": "OK"
}Error Handling#
The API uses standard HTTP status codes to indicate success or failure:
| Code | Meaning | Description |
|---|---|---|
200 | OK | Request succeeded |
400 | Bad Request | Invalid query parameters or malformed request |
401 | Unauthorized | Invalid or expired API key |
404 | Not Found | Component or resource does not exist |
429 | Too Many Requests | Rate limit exceeded |
500 | Internal Server Error | Unexpected server error |
Error responses always include a message field with a human-readable explanation:
{
"data": null,
"message": "Component 'unknown/nonexistent' not found",
"statusCode": 404
}{
"data": null,
"message": "Rate limit exceeded. Retry after 45 seconds.",
"statusCode": 429
}