Skip to content

Quickstart

Install the public SDK and call Skilleo Cloud at https://api.skilleo.org.

Python SDK
    │ HTTPS

api.skilleo.org/v1


Your provider (RunPod)

1. Install

bash
pip install skilleo

2. API key

bash
curl -s -X POST https://api.skilleo.org/v1/account \
  -H "Content-Type: application/json" \
  -d '{"email":"dev@example.com"}'

Save data.api_key (sk_live_…). It is shown only once.

python
from skilleo import Client

client, signup = Client.signup("dev@example.com")
print(signup["data"]["api_key"])

Authentication.

3. Connect a provider

Your GPU and API bills stay with the provider. Skilleo does not store customer provider API keys — you manage keys; Skilleo stores only a pointer (Secrets).

bash
# In your secret store (not sent to Skilleo)
export RUNPOD_API_KEY='rpa_...'

curl -s -X POST https://api.skilleo.org/v1/providers/connections \
  -H "Authorization: Bearer $SKILLEO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"provider":"runpod","connection_type":"environment","secret_ref":"RUNPOD_API_KEY"}'
python
client.providers.connect("runpod")  # registers secret_ref RUNPOD_API_KEY
print(client.providers.list())

Production (AWS Secrets Manager):

bash
curl -s -X POST https://api.skilleo.org/v1/providers/connections \
  -H "Authorization: Bearer $SKILLEO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"provider":"minimax","connection_type":"aws_secrets_manager","secret_ref":"arn:aws:secretsmanager:...:secret/minimax"}'
python
client.providers.register(
    "minimax",
    connection_type="aws_secrets_manager",
    secret_ref="arn:aws:secretsmanager:...:secret/minimax",
)

4. Run a capability

Research (no provider required)

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":"research.gather","version":"1","input":{"topic":"Kenya wildlife"}}'
python
run = client.capabilities.run(
    "research.gather",
    version="1",
    input={"topic": "Kenya wildlife"},
)
done = client.runs.wait(run["id"])
print(done["data"]["output"])

LLM (connect any LLM provider first)

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":{"optimize_for":"cost"}}'
python
client.providers.connect("minimax")  # MINIMAX_API_KEY in your secret store

run = client.capabilities.run(
    "llm.generate",
    version="1",
    input={"objective": "Write a hook about Kenya wildlife"},
    options={"optimize_for": "cost"},
)
client.runs.wait(run["id"])

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"])

Applications depend on research.gather@1 or llm.generate@1, not on a vendor or model name.

5. Infrastructure jobs (optional)

python
gpus = client.catalog.gpus()
compute = client.compute.create(name="lab", gpu_type=gpus["data"]["items"][0]["id"])
job = client.jobs.create(type="image", compute_id=compute["id"], input={"prompt": "a red cube"})
client.jobs.wait(job["id"])
client.jobs.save(job["id"], "out.png")
client.compute.delete(compute["id"])

Prefer runs for application workloads.

Skilleo — /v1 at api.skilleo.org