Skip to main content
POST
/
safari
/
skill
/
upload
Upload skill
curl --request POST \
  --url 'https://api.flashcat.cloud/safari/skill/upload?app_key=' \
  --header 'Content-Type: multipart/form-data' \
  --form team_id=0 \
  --form replace=false \
  --form file='@example-file'
{
  "request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
  "data": {
    "skill_id": "skill_8s7Hn2kLpQ3xYbVc4Wd2m",
    "account_id": 10023,
    "team_id": 0,
    "skill_name": "k8s-triage",
    "description": "Diagnose unhealthy Kubernetes workloads from cluster events and pod logs.",
    "version": "1.2.0",
    "tags": [
      "kubernetes",
      "triage"
    ],
    "author": "sre-team",
    "tools": [
      "bash",
      "mcp:prometheus/query"
    ],
    "status": "enabled",
    "created_by": 80011,
    "created_at": 1716960000000,
    "updated_at": 1717046400000,
    "can_edit": true,
    "update_available": false,
    "is_modified": false,
    "created": true
  }
}

Restrictions

AspectValue
Rate limits30 requests/minute; 3 requests/second per account
PermissionsSkill Manage (ai-sre)

Usage

  • Send as multipart/form-data with a file part. Max archive size is 100MB.
  • Set replace=true to overwrite an existing same-name skill.
  • Every call is recorded in the account audit log.

Authorizations

app_key
string
query
required

App key issued from the Flashduty console. Required on every public API call. Keep it secret — it grants the same access as the owning account.

Body

multipart/form-data

Multipart form for uploading a skill archive.

file
file
required

Skill archive (.skill / .zip / .tar.gz / .tgz). Max 100MB.

team_id
integer<int64>

Team scope for the new skill: 0 = account-wide.

replace
boolean

When true, overwrite an existing same-name skill.

skill_id
string

When replacing a specific skill, its skill ID.

Response

Success

Standard response envelope used by every Flashduty public API. On success data contains the endpoint-specific payload and error is absent. On failure error is present and data is absent. request_id is always present and is also mirrored in the Flashcat-Request-Id response header.

request_id
string
required

Unique ID for this request. Mirrored in the Flashcat-Request-Id header. Include it when reporting issues.

Example:

"01HK8XQE3Z7JM2NTFQ5YJ8P9R4"

error
object

Error payload inside the response envelope. Present only on non-2xx responses.

data
object

An AI SRE skill — a packaged SKILL.md bundle the agent can load.