curl --request PATCH \
--url https://{customer-tenant}.nuwacom.ai/api/v1/spaces/{spaceId}/skills/{skillId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"description": "<string>",
"instructions": "<string>"
}
'const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: '<string>', description: '<string>', instructions: '<string>'})
};
fetch('https://{customer-tenant}.nuwacom.ai/api/v1/spaces/{spaceId}/skills/{skillId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{customer-tenant}.nuwacom.ai/api/v1/spaces/{spaceId}/skills/{skillId}"
payload = {
"name": "<string>",
"description": "<string>",
"instructions": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{customer-tenant}.nuwacom.ai/api/v1/spaces/{spaceId}/skills/{skillId}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"instructions\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{customer-tenant}.nuwacom.ai/api/v1/spaces/{spaceId}/skills/{skillId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'description' => '<string>',
'instructions' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}HttpResponse<String> response = Unirest.patch("https://{customer-tenant}.nuwacom.ai/api/v1/spaces/{spaceId}/skills/{skillId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"instructions\": \"<string>\"\n}")
.asString();{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"spaceId": "<string>",
"name": "<string>",
"description": "<string>",
"slug": "<string>",
"source": "manual",
"sourceUrl": "<string>",
"enabled": true,
"createdAt": "<string>",
"updatedAt": "<string>",
"instructions": "<string>"
}Update a skill
Update a skill. Omitted fields keep their current value. When instructions is provided it fully replaces the body of the skill’s SKILL.md file; name/description changes are also synced into the SKILL.md frontmatter. Built-in nuwacom skills cannot be updated.
curl --request PATCH \
--url https://{customer-tenant}.nuwacom.ai/api/v1/spaces/{spaceId}/skills/{skillId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"description": "<string>",
"instructions": "<string>"
}
'const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: '<string>', description: '<string>', instructions: '<string>'})
};
fetch('https://{customer-tenant}.nuwacom.ai/api/v1/spaces/{spaceId}/skills/{skillId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{customer-tenant}.nuwacom.ai/api/v1/spaces/{spaceId}/skills/{skillId}"
payload = {
"name": "<string>",
"description": "<string>",
"instructions": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{customer-tenant}.nuwacom.ai/api/v1/spaces/{spaceId}/skills/{skillId}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"instructions\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{customer-tenant}.nuwacom.ai/api/v1/spaces/{spaceId}/skills/{skillId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'description' => '<string>',
'instructions' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}HttpResponse<String> response = Unirest.patch("https://{customer-tenant}.nuwacom.ai/api/v1/spaces/{spaceId}/skills/{skillId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"instructions\": \"<string>\"\n}")
.asString();{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"spaceId": "<string>",
"name": "<string>",
"description": "<string>",
"slug": "<string>",
"source": "manual",
"sourceUrl": "<string>",
"enabled": true,
"createdAt": "<string>",
"updatedAt": "<string>",
"instructions": "<string>"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
ID of the space the skill belongs to.
2 - 6Unique ID of the skill.
Body
Display name of the skill.
1 - 64^[\p{L}\p{N}][\p{L}\p{N} -]*[\p{L}\p{N}]$|^[\p{L}\p{N}]$Short description of what the skill does. The AI uses it to decide when to load the skill.
1 - 1024Markdown instructions for the AI, stored as the body of the skill's SKILL.md file.
50000Response
Skill updated successfully.
Unique ID of the skill. Use it to attach the skill to agents.
ID of the space the skill belongs to.
2 - 6URL-safe, immutable identifier generated from the initial name.
How the skill was created. Skills created via this API have source "manual".
manual, upload, github, ai_generated Source URL for skills imported from GitHub, null otherwise.
Space-wide activation state. Disabled skills are not loaded by the AI for anyone in the space (users can still override this for themselves in the nuwacom app). Toggle it via Enable a skill and Disable a skill.
Markdown instructions from the body of the skill's SKILL.md file. null when the file cannot be read.