Skills API
Programmatic access to GAP MINING's 300+ production-grade AI skills. List, search, retrieve, and invoke any skill via REST.
Overview
The Skills API gives developers direct access to the GAP MINING skill database. Use it to build AI-powered applications, integrate skills into your own products, or monitor skill usage across your team.
- 300+ production-grade skills across 14 domains
- All responses in JSON
- CORS enabled — call directly from the browser
- No SDK required — plain HTTP
Authentication
None required. The skills catalogue is a public, documented API — every endpoint below, including POST /invoke, is callable without a key or an account. No sign-up, no token, no Authorization header.
curl https://hqghfkllopnboyaxxuje.supabase.co/functions/v1/skills-api/skills
Sending Supabase Authorization/apikey headers is harmless and they are simply ignored — the endpoint does not read them.
Rate limits
Access is bounded per client IP rather than per account:
- 60 requests/minute for reads (all GET endpoints)
- 10 requests/minute for writes (POST /invoke)
Exceeding either returns 429 with a Retry-After header:
HTTP 429
Retry-After: 60
{ "error": "Rate limit exceeded. Try again shortly." }
Limits are enforced per edge instance, so the effective ceiling can be higher under load. Treat the figures above as the guaranteed floor, not a quota to plan against.
Base URL
https://hqghfkllopnboyaxxuje.supabase.co/functions/v1/skills-api
All endpoints below are relative to this base URL. CORS is enabled for vib-pulse.com, and localhost.
List skills
Returns skills ordered by invocation count (most-used first). Supports pagination via limit and offset.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| categoryoptional | string | Filter by category (e.g. sales, compliance) |
| limitoptional | integer | Max results per page. Default: 50. Max: 200. |
| offsetoptional | integer | Number of results to skip (for pagination). Default: 0. |
Pagination example
# Page 1 — first 50 skills
curl "https://hqghfkllopnboyaxxuje.supabase.co/functions/v1/skills-api/skills?limit=50&offset=0" \
-H "Authorization: Bearer YOUR_KEY" -H "apikey: YOUR_KEY"
# Page 2 — next 50 skills
curl "https://hqghfkllopnboyaxxuje.supabase.co/functions/v1/skills-api/skills?limit=50&offset=50" \
-H "Authorization: Bearer YOUR_KEY" -H "apikey: YOUR_KEY"
Example request
curl https://hqghfkllopnboyaxxuje.supabase.co/functions/v1/skills-api/skills \
-H "Authorization: Bearer YOUR_API_KEY"
Example response
{
"skills": [
{
"name": "hermes",
"category": "System",
"description": "APEX Master Orchestrator — full control over all skills, agents, MCP plugins",
"line_count": 892,
"invocation_count": 47,
"last_invoked": "2026-06-09T10:00:00Z",
"created_at": "2026-06-04T00:00:00Z"
},
...
],
"total": 380,
"timestamp": "2026-06-09T11:00:00Z"
}
Get skill
Retrieve full metadata for a single skill by name.
Path parameters
| Parameter | Type | Description |
|---|---|---|
| namerequired | string | Skill name slug (e.g. competitive-intelligence) |
Example request
curl https://hqghfkllopnboyaxxuje.supabase.co/functions/v1/skills-api/skills/competitive-intelligence \
-H "Authorization: Bearer YOUR_API_KEY"
Example response
{
"id": 42,
"name": "competitive-intelligence",
"category": "Sales & Account",
"description": "Deep competitor analysis — positioning, pricing, moats, SWOT",
"line_count": 487,
"invocation_count": 12,
"last_invoked": "2026-06-08T14:30:00Z",
"created_at": "2026-05-15T00:00:00Z",
"updated_at": "2026-06-08T14:30:00Z"
}
{ "error": "Skill not found", "skill": "competitive-intelligence" }
Search skills
Full-text search across skill names and descriptions.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| qrequired | string | Search query (min 2 characters) |
| limitoptional | integer | Max results. Default: 20 |
Example request
curl "https://hqghfkllopnboyaxxuje.supabase.co/functions/v1/skills-api/search?q=compliance" \
-H "Authorization: Bearer YOUR_API_KEY"
Stats
Platform-wide analytics: invocation rates, top skills, category distribution.
Example response
{
"total_skills": 380,
"invoked_skills": 4,
"invocation_rate_pct": 1,
"total_invocations": 63,
"avg_skill_depth_lines": 447,
"top_10_skills": [
{ "name": "hermes", "invocations": 47 },
{ "name": "competitive-intelligence", "invocations": 12 },
...
],
"category_distribution": {
"Sales & Account": 11,
"System": 8,
"Compliance": 7,
...
},
"timestamp": "2026-06-09T11:00:00Z"
}
Invoke skill
Log a skill invocation and increment its usage counter. Call this whenever your application uses a skill so analytics stay accurate.
Path parameters
| Parameter | Type | Description |
|---|---|---|
| namerequired | string | Skill name slug |
Request body
| Field | Type | Description |
|---|---|---|
| session_idoptional | string | Your session or user identifier |
| contextoptional | string | What the skill was used for (logged for analytics) |
Example request
curl -X POST https://hqghfkllopnboyaxxuje.supabase.co/functions/v1/skills-api/skills/hermes/invoke \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "session_id": "usr_123", "context": "System orchestration run" }'
Example response
{ "success": true, "skill": "hermes", "invocation_count": 48 }
Skill object
| Field | Type | Description |
|---|---|---|
| id | integer | Unique skill ID |
| name | string | URL-safe slug (e.g. competitive-intelligence) |
| category | string | Domain category |
| description | string | One-line description |
| line_count | integer | Skill depth in lines (min 200) |
| invocation_count | integer | Total times invoked |
| last_invoked | string (ISO 8601) | Timestamp of most recent invocation |
| created_at | string (ISO 8601) | When skill was added |
| updated_at | string (ISO 8601) | Last modification |
Errors
| Status | Code | Description |
|---|---|---|
| 400 | bad_request | Missing or invalid parameter |
| 404 | not_found | Skill does not exist |
| 429 | rate_limited | Too many requests — retry after the interval in Retry-After |
| 500 | server_error | Internal error — contact support |
All error responses follow the format: { "error": "description" }
Rate limits
Limits are applied per client IP. They are not tied to a plan or an account — there is no metering, no monthly quota, and no per-plan tier on this API today.
| Operation | Limit | On exceeding |
|---|---|---|
| Reads (all GET) | 60 / minute / IP | 429 + Retry-After: 60 |
| Writes (POST /invoke) | 10 / minute / IP | 429 + Retry-After: 60 |
Retry-After is the only rate-limit header returned. There are no X-RateLimit-* headers — read the 429 status rather than polling counters that aren't sent.
Questions? Email vibpulse@gmail.com or get started →