Appearance
Capabilities
What work Skilleo can perform. Callers request versioned capabilities (image.generate@1), not model names.
Skilleo routes each capability to a connected provider. You manage provider keys; Skilleo stores connection pointers only. See Providers and Platform availability.
Agentic apps should prefer runs (POST /v1/runs). Infrastructure apps may still map to jobs.
Routing policy
| Capability | Allowed connections | Rule |
|---|---|---|
llm.generate | OpenAI, Anthropic, Gemini, MiniMax, AWS, RunPod | Any connected LLM provider |
speech.generate, voice.clone | MiniMax, ElevenLabs | One of — no other voice backends |
image.generate, GPU | RunPod | RunPod only |
GET /v1/capabilities
List available capabilities.
bash
curl -s https://api.skilleo.org/v1/capabilities \
-H "Authorization: Bearer $SKILLEO_API_KEY"Response data
| Field | Type | Description |
|---|---|---|
items | array | Capability objects |
count | integer | Length of items |
Each capability includes (additive discovery fields):
| Field | Description |
|---|---|
id | Stable identifier (e.g. image.generate) |
name | Same as id for discovery |
title | Human label |
version | Capability version string (e.g. "1") |
description | What the capability does |
status | Capability readiness (available, or planned when documented ahead of launch) |
source.providers[].status | Per-backend readiness in the registry |
async | Whether execution is asynchronous |
estimated_cost | Whether provider usage may incur cost |
input_schema / output_schema | JSON-schema style shapes |
invoke | Preferred invoke: POST /v1/runs |
job | Alternative: POST /v1/jobs with type |
source.providers | Backends and requires_connection ids |
source.routing | allowed_connections, policy, default_provider |
input / output / targets | Older field docs (still present) |
GET /v1/capabilities/{id}
Return one capability (e.g. /v1/capabilities/image.generate or image.generate@1).
bash
curl -s https://api.skilleo.org/v1/capabilities/llm.generate \
-H "Authorization: Bearer $SKILLEO_API_KEY"| Code | When |
|---|---|
NOT_FOUND | Unknown id or unsupported version |
Registered capabilities
| Id | Version | Status | Routing | Notes |
|---|---|---|---|---|
image.generate | 1 | available | RunPod only | GPU pod or serverless endpoint |
research.gather | 1 | available | — | Wikipedia (CPU); optional LLM synthesis when connected |
composition.layout | 1 | available | — | CPU social card layout |
llm.generate | 1 | available | Any LLM; default minimax | MiniMax, OpenAI, Anthropic, Gemini, Bedrock, RunPod |
text.generate | 1 | available | same as llm.generate | Alias for editorial copy |
speech.generate | 1 | available | MiniMax or ElevenLabs; default minimax | MP3 output |
voice.clone | 1 | available | MiniMax or ElevenLabs; default minimax | Reference audio required |
Connect a provider before calling a capability that requires one. Without a matching connection you get CREDENTIALS_MISSING. Pin a backend with options.provider when you have several LLM or voice connections.
Example: LLM — any connected provider
bash
curl -s -X POST https://api.skilleo.org/v1/runs \
-H "Authorization: Bearer $SKILLEO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"target":"capability","name":"llm.generate","version":"1","input":{"objective":"Write a hook about Kenya wildlife"},"options":{"provider":"openai"}}'python
from skilleo import Client
client.providers.connect("openai")
run = client.capabilities.run(
"llm.generate",
version="1",
input={"objective": "Write a hook about Kenya wildlife"},
options={"provider": "openai"},
)
done = client.runs.wait(run["id"])
print(done["data"]["output"])Example: voice — MiniMax or ElevenLabs
bash
curl -s -X POST https://api.skilleo.org/v1/runs \
-H "Authorization: Bearer $SKILLEO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"target":"capability","name":"speech.generate","version":"1","input":{"text":"Earth stops spinning."},"options":{"provider":"elevenlabs"}}'python
client.providers.connect("elevenlabs")
run = client.capabilities.run(
"speech.generate",
version="1",
input={"text": "Earth stops spinning."},
options={"provider": "elevenlabs"},
)
client.runs.wait(run["id"])Example: image — RunPod only
bash
curl -s -X POST https://api.skilleo.org/v1/runs \
-H "Authorization: Bearer $SKILLEO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"target":"capability","name":"image.generate","version":"1","input":{"prompt":"a red cube","steps":8},"options":{"endpoint_id":"ep_..."}}'python
client.providers.connect("runpod")
run = client.runs.create(
name="image.generate",
version="1",
input={"prompt": "a red cube", "steps": 8},
options={"endpoint_id": "ep_..."},
)
client.runs.wait(run["id"])Infrastructure apps may still use client.jobs.create(type="image", ...) — see Jobs.