API referenceAgents APISkillsCreate a skill

Create a skill

⚠️
Preview — this feature is being built; the design below is the spec.
POST https://app.syntic.ai/v1/skills

Register a skill from a ZIP you uploaded with purpose: "skill". The package needs a SKILL.md at its top level whose header gives the skill’s name and description; the model decides when to load the skill from that description alone.

For how this fits into a full workflow, see Agent skills.

Headers

HeaderRequiredValue
AuthorizationYesBearer <key>: a private inference key (sk_live_...). See Authentication.
syntic-betaYes, while in previewagents-2026-11-01. Without it the call fails with 400 beta_required. See Versioning.
Content-TypeYesapplication/json
Idempotency-KeyNoUp to 255 characters. Retrying with the same key within 24 hours returns the first result instead of creating a duplicate. See Idempotency.

Body parameters

ParameterTypeRequiredNotes
file_idstringYesThe uploaded ZIP.
display_titlestringNoShown in the Console.

Response

201 Created, Content-Type: application/json

{
  "id": "skill_01JBXM4",
  "object": "skill",
  "name": "finance-pack",
  "description": "Build the monthly finance pack from the ledger export. Use when asked for month-end reporting.",
  "display_title": "Finance pack",
  "latest_version": "1",
  "created_at": 1791820800,
  "updated_at": 1792425600
}

Examples

curl -sS https://app.syntic.ai/v1/skills \
  -H "Authorization: Bearer $SYNTIC_API_KEY" \
  -H "syntic-beta: agents-2026-11-01" \
  -H "Idempotency-Key: 8d6f0c1e-4b2a-4a57-9f0e-2f1d3c4b5a69" \
  -H "Content-Type: application/json" \
  -d '{
      "file_id": "file_01JCD2F4H6K8M0P2R4T6",
      "display_title": "Finance pack"
    }'

Errors

Errors use the error envelope and carry a request_id. Codes specific to this operation:

StatustypecodeWhen
400invalid_request_errorbeta_requiredThe syntic-beta header is missing.
400invalid_request_errorinvalid_skill_packageNot a ZIP, no SKILL.md, or a bad header; message says which.
413invalid_request_errorskill_too_largeOver 30 MB unzipped or 500 files.
409conflict_errorskill_name_takenA skill with this name exists; upload a new version instead.
401authentication_errorinvalid_api_keyThe key is missing, unknown, revoked or expired.
429rate_limit_errorrate_limitedToo many requests; wait for Retry-After. See Rate-limit headers.
Was this page helpful?