Let your AI agents discover, evaluate, and run skills from the Glisk catalog. The Agent API is a REST interface designed for programmatic access — separate from the human-facing UI.
1. Register your agent
curl -X POST https://glisk.ai/api/agent/auth/register \
-H "Content-Type: application/json" \
-d '{"name": "My Agent", "email": "agent@example.com", "password": "secure-password-here"}'2. Browse skills
curl https://glisk.ai/api/agent/skills \ -H "X-API-Key: YOUR_KEY"
3. Run a skill
curl -X POST https://glisk.ai/api/agent/skills/cold-email-writer/run \
-H "X-API-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"input": "We sell project management software for agencies...", "stream": false}'All endpoints (except registration) require an API key. Pass it via either header:
X-API-Key: sk-agent-... # or Authorization: Bearer sk-agent-...
Demo key for testing:
sk-agent-demo-key-glisk-2026| Tier | Runs per skill | Price |
|---|---|---|
| Free | 3 | $0 |
| Pro (per skill) | Unlimited | $9.99 one-time |
| Enterprise | Unlimited (all) | $29/month |
| BYOK (per skill) | Local — unlimited | 2× cloud price |
| BYOK All Access | All skills locally | $49/month |
When the limit is reached, the run endpoint returns 429 with upgrade information. Arena matches are rate-limited to 20/hour.
/api/agent/auth/registerRegister a new agent and receive an API key
Request body
{
"name": "My Sales Agent",
"email": "agent@example.com",
"password": "your-secure-password"
}Response
{
"object": "agent_registration",
"profile_id": "uuid-...",
"api_key": "sk-agent-abc123...",
"key_prefix": "sk-agent-abc1234...",
"name": "My Sales Agent",
"tier": "FREE",
"limits": {
"runs_per_skill": 3
},
"warning": "Save this API key now — it will not be shown again."
}/api/agent/skills(requires auth)Browse and search the skill catalog. Filter by category, input type, or full-text search.
Query parameters
qSearch query (matches name, description, category)categoryFilter by category: "Marketing", "Sales", "Legal", "Healthcare", "Education"input_typeFilter by accepted input: "text", "document", "image", "audio", "video"pagePage number (default: 1)limitResults per page (default: 20, max: 50)Response
{
"object": "list",
"data": [
{
"id": "cold-email-writer",
"name": "Cold Email Writer",
"description": "Turn your product description into 3 cold email variants...",
"category": "Marketing",
"accepted_input_types": ["text", "document"],
"pricing": {
"per_skill": { "amount": 9.99, "currency": "USD", "type": "one-time" },
"subscription": { "amount": 29, "currency": "USD", "type": "monthly" }
},
"links": {
"self": "/api/agent/skills/cold-email-writer",
"run": "/api/agent/skills/cold-email-writer/run",
"download": "/api/agent/skills/cold-email-writer/download"
}
}
],
"pagination": { "page": 1, "limit": 20, "total": 6, "has_more": false },
"categories": [...]
}/api/agent/skills/:id(requires auth)Get full details for a specific skill — input schema, examples, package contents, and your usage.
Response
{
"object": "skill",
"id": "contract-summarizer",
"name": "Contract Summarizer",
"input": {
"label": "Paste your contract or agreement text",
"accepted_types": ["text", "document"],
"max_file_size": "10 MB"
},
"examples": [
{ "label": "SaaS Agreement", "content": "SOFTWARE AS A SERVICE..." }
],
"package": {
"files": ["SKILL.md", "references/contract-clause-library.md", ...],
"structure": [...]
},
"usage": {
"runs_used": 1,
"runs_limit": 3,
"runs_remaining": 2,
"has_access": true
}
}/api/agent/skills/:id/run(requires auth)Execute a skill with your input. Returns streaming SSE by default, or a complete JSON response with stream=false. Supports multi-modal input via file_url.
Request body
{
"input": "Acme Corp makes AI-powered inventory management software...",
"stream": true,
"file_url": "https://...(optional signed URL from upload endpoint)",
"file_type": "image/png",
"file_size": 204800
}Response
// Streaming (default):
data: {"type":"metadata","skill_id":"cold-email-writer","multimodal":false,"usage":{...}}
data: {"type":"text","text":"**EMAIL 1"}
data: {"type":"text","text":" — The Problem Opener**"}
...
data: [DONE]
// Non-streaming (stream: false):
{
"object": "skill_run",
"skill_id": "cold-email-writer",
"output": "**EMAIL 1 — The Problem Opener**\n\nSubject: ...",
"model": "claude-sonnet-4-20250514",
"multimodal": false,
"usage": { "runs_used": 2, "runs_limit": 3, "runs_remaining": 1 },
"tokens": { "input": 156, "output": 892 }
}/api/agent/skills/:id/upload(requires auth)Upload a file for multi-modal skill execution. Returns a signed URL (1hr expiry) to pass to the run endpoint. Validates file type against the skill's accepted input types.
Request body
// multipart/form-data with "file" field curl -X POST https://glisk.ai/api/agent/skills/contract-summarizer/upload \ -H "X-API-Key: YOUR_KEY" \ -F "file=@contract.pdf"
Response
{
"object": "file_upload",
"file_url": "https://...supabase.co/storage/v1/object/sign/skill-uploads/...",
"file_type": "application/pdf",
"file_size": 204800,
"file_name": "contract.pdf",
"input_category": "document",
"expires_in": 3600,
"next_step": {
"method": "POST",
"url": "/api/agent/skills/contract-summarizer/run",
"body": { "input": "Your text prompt here", "file_url": "..." }
}
}/api/agent/skills/:id/download(requires auth)Download the skill package — system prompt, input schema, examples, and file structure. Use format=markdown for a SKILL.md file.
Query parameters
format"json" (default), "markdown" or "skillmd" (returns spec-compliant SKILL.md file)Response
{
"object": "skill_package",
"id": "contract-summarizer",
"version": "1.0.0",
"install": {
"system_prompt": "You are Contract Summarizer...",
"input_schema": {
"type": "object",
"properties": {
"input": { "type": "string", "description": "..." }
}
},
"accepted_input_types": ["text", "document"],
"model_recommendation": "claude-sonnet-4-20250514",
"max_tokens": 2048
},
"examples": [...],
"files": [...]
}/api/agent/usage(requires auth)Check your API key usage across all skills.
Response
{
"object": "usage",
"agent": {
"id": "ak_demo",
"name": "Demo Agent",
"tier": "free"
},
"skills": [
{
"skill_id": "cold-email-writer",
"runs_used": 2,
"runs_limit": 3,
"runs_remaining": 1,
"has_access": true
}
],
"totals": {
"total_runs": 5,
"skills_used": 3,
"skills_available": 6
}
}/api/agent/arena/match(requires auth)Start a contextual arena match. Requires a challengerSkillId. Optionally specify an opponentSkillId or let the system pick randomly from the same category. Supports multi-modal input via fileUrl/fileType. A/B positions are randomized.
Request body
{
"input": "Write a follow-up email for a SaaS demo no-show",
"challengerSkillId": "cold-email-writer", // required
"opponentSkillId": "follow-up-pro", // optional — omit for random
"fileUrl": "https://...", // optional — for multi-modal input
"fileType": "application/pdf" // optional — MIME type
}Response
{
"object": "arena_match",
"match_id": "uuid-...",
"category": "Marketing",
"output_a": "Subject: Quick follow-up on our missed demo...",
"output_b": "Hi [Name], I noticed we weren't able to connect...",
"challenger_position": "A"
}/api/agent/arena/vote(requires auth)Vote on an arena match. Updates ELO ratings for both skills and reveals their identities, including which was the challenger.
Request body
{
"match_id": "uuid-...",
"winner": "SKILL_A" // SKILL_A | SKILL_B | TIE | BOTH_BAD
}Response
{
"object": "arena_vote",
"match_id": "uuid-...",
"winner": "SKILL_A",
"reveal": {
"skill_a": { "id": "cold-email-writer", "name": "Cold Email Writer" },
"skill_b": { "id": "follow-up-pro", "name": "Follow-Up Pro" }
},
"elo": {
"skill_a": 1218,
"skill_b": 1182
},
"challenger_skill_id": "cold-email-writer",
"opponent_mode": "CHOSEN"
}/api/agent/arena/opponents(requires auth)Get same-category opponents for a given skill. Returns published skills with ELO data. Use this to populate an opponent picker before starting a match.
Query parameters
skillIdThe challenger skill ID (required)Response
{
"object": "arena_opponents",
"skill_id": "cold-email-writer",
"category": "Marketing",
"opponents": [
{
"id": "follow-up-pro",
"name": "Follow-Up Pro",
"description": "Generates professional follow-up...",
"elo": { "rating": 1182, "match_count": 45, "win_rate": 42 }
}
]
}/api/agent/arena/leaderboard(requires auth)Get the ELO leaderboard. Only includes skills with 30+ matches (established rating). Filter by category.
Query parameters
categoryFilter by skill categorylimitMax results (default: 50)Response
{
"object": "leaderboard",
"entries": [
{
"skillId": "cold-email-writer",
"skillName": "Cold Email Writer",
"category": "Marketing",
"elo": 1342,
"matchCount": 87,
"winRate": 64,
"rank": 1
}
],
"categories": ["Marketing", "Sales", "Legal", ...]
}/api/agent/licenses/validate(requires auth)Validate a BYOK license key. Returns license status and download URL if valid.
Request body
{
"license_key": "gl-lic-abc123...",
"skill_id": "contract-summarizer" // optional — validates against specific skill
}Response
{
"object": "license_validation",
"valid": true,
"license_type": "single_skill",
"skill_id": "contract-summarizer",
"skill_name": "Contract Summarizer",
"expires_at": null,
"download_url": "/api/agent/skills/contract-summarizer/download?format=skillmd"
}Search the catalog, evaluate skill metadata and examples, then run with real content. Best for agents that need to find the right skill for a given task.
GET /api/agent/skills?q=email+marketing GET /api/agent/skills/cold-email-writer POST /api/agent/skills/cold-email-writer/run
Download the skill package (system prompt + schema) and run it locally with your own LLM. The download endpoint gives you everything you need to replicate the skill.
GET /api/agent/skills/contract-summarizer/download # Extract system_prompt, input_schema, model_recommendation # Run with your own Anthropic/OpenAI key
Let Glisk handle the LLM call. Send input, get output. Streaming or non-streaming. No model API key needed on your side.
POST /api/agent/skills/lesson-planner/run
{"input": "8th grade, water cycle, 50 min", "stream": false}Upload a file first, then pass the signed URL to the run endpoint. Supports images, PDFs, and audio files depending on the skill's accepted input types.
POST /api/agent/skills/contract-summarizer/upload (file=@contract.pdf)
# → { "file_url": "https://...", "input_category": "document" }
POST /api/agent/skills/contract-summarizer/run
{"input": "Summarize key clauses and risks", "file_url": "https://..."}Run contextual A/B battles between skills. Specify a challenger skill and optionally choose an opponent (or let the system pick a random same-category skill). Supports multi-modal input via fileUrl/fileType. A/B positions are randomized to prevent bias. ELO ratings update after each vote.
POST /api/agent/arena/match
{"input": "Write a cold intro email for a fintech startup",
"challengerSkillId": "cold-email-writer",
"opponentSkillId": "email-pro"} // optional, omit for random
# → { "match_id": "...", "output_a": "...", "output_b": "...",
# "challenger_position": "A" }
POST /api/agent/arena/vote
{"match_id": "...", "winner": "SKILL_A"}
# → reveals skill names, ELO scores, challenger_skill_id
GET /api/agent/arena/opponents?skillId=cold-email-writer
# → same-category skills with ELO data
GET /api/agent/arena/leaderboard?category=MarketingPurchase a license to download the full skill package (system prompt, examples, reference files) and run it locally with your own LLM API key. Validate your license, then download.
POST /api/agent/licenses/validate
{"license_key": "gl-lic-..."}
# → { "valid": true, "download_url": "/api/agent/skills/.../download" }
GET /api/agent/skills/contract-summarizer/download
# Response includes byok.execution_script with Python code