Skip to main content
This walks through a full API workflow with curl and jq. Replace $LYCEUM_API_KEY with an API key from API Keys.
export LYCEUM_API_KEY="lk_..."
export BASE="https://api.lyceum.technology/api/v2/external"

1. Verify the key works

curl -s "$BASE/billing/credits" \
  -H "Authorization: Bearer $LYCEUM_API_KEY" | jq

2. List the hardware profiles you can use

curl -s "$BASE/user/quotas/available-hardware" \
  -H "Authorization: Bearer $LYCEUM_API_KEY" | jq
For pricing too:
curl -s "$BASE/machine-types" \
  -H "Authorization: Bearer $LYCEUM_API_KEY" | jq

3. Submit a run

EXEC=$(curl -s -X POST "$BASE/execution/streaming/start" \
  -H "Authorization: Bearer $LYCEUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "code": "import sys; print(sys.version)",
    "machine_type": "cpu"
  }' | jq -r .execution_id)

echo "execution: $EXEC"

4. Poll status until done

while :; do
  STATUS=$(curl -s "$BASE/execution/streaming/$EXEC/status" \
    -H "Authorization: Bearer $LYCEUM_API_KEY" | jq -r .status)
  echo "$STATUS"
  case "$STATUS" in
    completed|failed|aborted|cancelled|system_failure) break ;;
  esac
  sleep 2
done

5. Fetch the full record

curl -s "$BASE/execution/$EXEC" \
  -H "Authorization: Bearer $LYCEUM_API_KEY" | jq

6. Fetch logs

curl -s "$BASE/logs/execution/$EXEC" \
  -H "Authorization: Bearer $LYCEUM_API_KEY" | jq

7. Fetch GPU metrics

For GPU runs, per-execution GPU and system metrics are available:
curl -s "$BASE/execution/$EXEC/metrics?step=15s" \
  -H "Authorization: Bearer $LYCEUM_API_KEY" | jq

8. Aborting a run

curl -X POST "$BASE/execution/streaming/abort/$EXEC" \
  -H "Authorization: Bearer $LYCEUM_API_KEY"
Use /execution/image/abort/... for Docker runs and /execution/compose/abort/... for Compose stacks.