Skip to main content
PATCH
/
api
/
v1
/
skills
/
{id}
curl --request PATCH \
  --url https://api.staging.getmodus.com/api/v1/skills/{id} \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "name": "Customer Churn Analyzer v2"
}
'
{
  "id": 42,
  "slug": "customer-churn-analyzer-a3f",
  "name": "Customer Churn Analyzer",
  "status": "active",
  "orgUuid": "00000000-0000-0000-0000-000000000001",
  "hasUnpublishedChanges": false,
  "accessConfig": {
    "visibility": "shared",
    "groupPermissions": {
      "group_eng_uuid": {
        "use": true,
        "manage": false
      }
    },
    "guardrails": [],
    "sharedWith": [],
    "ownerUserId": "user_2abc",
    "ownerEmail": "alice@example.com"
  },
  "createdAt": "2026-05-01T10:00:00.000Z",
  "updatedAt": "2026-05-11T10:00:00.000Z",
  "description": "Predicts churn risk for a customer given a 90-day usage window.",
  "activeVariationId": "00000000-0000-4000-a000-000000000100",
  "draftVariationId": "00000000-0000-4000-a000-000000000101",
  "pendingOwnershipTransfer": {
    "pendingOwnerUserId": "user_2abc123def456",
    "requestedByUserId": "user_2xyz789ghi012",
    "requestedAt": "2026-06-05T12:00:00.000Z",
    "pendingOwnerEmail": "newowner@example.com"
  },
  "variation": {
    "expectedOutput": "A 3-bullet summary highlighting churn risk drivers.",
    "instructions": [
      "Be concise.",
      "Always justify the score."
    ],
    "model": "anthropic/claude-sonnet-4.6",
    "toolset": {
      "web_search": {
        "enabled": true
      },
      "calculator": {
        "enabled": true
      }
    },
    "connectionSet": [
      {}
    ],
    "contextSelections": [
      {}
    ],
    "evaluations": [
      {}
    ],
    "interfaces": [
      {}
    ],
    "supervisionSubordinateIds": [
      "12",
      "17"
    ],
    "supervisionSubordinateDescriptions": {
      "12": "Reads warehouse facts",
      "17": "Drafts the report"
    }
  },
  "deletedAt": null
}

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Path Parameters

id
number
required

Numeric skill id.

Example:

42

Query Parameters

updateMask
string

AIP-134 comma-separated field paths to update.

Example:

"name,description"

Body

application/json
name
string

New display name for the skill.

Required string length: 1 - 200
Example:

"Customer Churn Analyzer v2"

description
string

Updated description.

Example:

"Predicts churn risk over a 180-day window."

expectedOutput
string

Updated expected-output summary, used when this skill is supervised.

Example:

"JSON: { churn_probability: number }"

instructions
string[]

Updated instruction fragments. Replaces the prior list when present.

Example:
["You are a senior data analyst."]
toolset
object

Updated toolset configuration.

model
string | null

Updated model id. Pass null (explicit) to clear and use the org default.

Example:

"claude-sonnet-4-5"

connectionSet
object[]

Updated connection set. Shape is integration-specific.

Example:
[]
contextSelections
object[]

Updated context selections (sources / docs the skill may read).

Example:
[]
interfaces
object[]

Updated interface configuration.

Example:
[]
evaluations
object[]

Updated evaluation entries (task + expected-output pairs) saved for the draft variation. Replaces the prior list when present.

Example:
[]
supervisionSubordinateDescriptions
object

Map of subordinate skill id (stringified) to the manager-provided description blurb. Replaces the prior map when present.

Example:
{
"12": "Reads warehouse facts",
"17": "Drafts the report"
}
accessConfig
object

Updated access configuration. The service rejects changes that would lock the caller out of use + manage.

managerId
number | null

Re-parent the skill under a new manager (or remove its current manager when null). When this field is present, all other fields are ignored.

Example:

17

Response

id
number
required

Numeric skill id (stable per-org; not reused after delete).

Example:

42

slug
string
required

URL-safe slug used in human-readable links. Unique per org.

Example:

"customer-churn-analyzer-a3f"

name
string
required

Display name of the skill. Shown in the builder and in run logs.

Example:

"Customer Churn Analyzer"

status
enum<string>
required

Lifecycle status. draft = never deployed. active = deployed. deleted = soft-deleted.

Available options:
draft,
active,
deleted
Example:

"active"

orgUuid
string
required

Org UUID this skill belongs to. Matches the caller’s principal.

Example:

"00000000-0000-0000-0000-000000000001"

hasUnpublishedChanges
boolean
required

True when the draft variation differs from the active variation (deploy would publish changes).

Example:

false

accessConfig
object
required

Access configuration — who in the org can use / manage this skill.

createdAt
string
required

Creation timestamp.

Example:

"2026-05-01T10:00:00.000Z"

updatedAt
string
required

Most recent update timestamp.

Example:

"2026-05-11T10:00:00.000Z"

description
string | null

Optional one-paragraph description of what this skill does.

Example:

"Predicts churn risk for a customer given a 90-day usage window."

activeVariationId
string | null

Active (deployed) variation id. Null until the skill is first deployed.

Example:

"00000000-0000-4000-a000-000000000100"

draftVariationId
string | null

Most recent draft variation id. Null when there is no draft pending.

Example:

"00000000-0000-4000-a000-000000000101"

pendingOwnershipTransfer
object

Pending ownership transfer awaiting recipient acceptance. Absent when no request is in flight.

variation
object

Variation-detail payload (toolset, instructions, model, etc.) for the requested view. Populated by GET /api/v1/skills/:id; absent on list rows.

deletedAt
string | null

Soft-delete timestamp. Null for active skills.

Example:

null