curl --request POST \
--url https://connie.ai/api/skills \
--header 'Content-Type: application/json' \
--header 'Cookie: <api-key>' \
--data '
{
"name": "<string>",
"description": "<string>",
"instructions": "<string>",
"command": "<string>",
"tool_ids": [
"<string>"
],
"icon": "<string>",
"metadata": {},
"source_skill_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'import requests
url = "https://connie.ai/api/skills"
payload = {
"name": "<string>",
"description": "<string>",
"instructions": "<string>",
"command": "<string>",
"tool_ids": ["<string>"],
"icon": "<string>",
"metadata": {},
"source_skill_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
headers = {
"Cookie": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Cookie: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
description: '<string>',
instructions: '<string>',
command: '<string>',
tool_ids: ['<string>'],
icon: '<string>',
metadata: {},
source_skill_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://connie.ai/api/skills', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://connie.ai/api/skills",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'description' => '<string>',
'instructions' => '<string>',
'command' => '<string>',
'tool_ids' => [
'<string>'
],
'icon' => '<string>',
'metadata' => [
],
'source_skill_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Cookie: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://connie.ai/api/skills"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"instructions\": \"<string>\",\n \"command\": \"<string>\",\n \"tool_ids\": [\n \"<string>\"\n ],\n \"icon\": \"<string>\",\n \"metadata\": {},\n \"source_skill_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Cookie", "<api-key>")
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))
}HttpResponse<String> response = Unirest.post("https://connie.ai/api/skills")
.header("Cookie", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"instructions\": \"<string>\",\n \"command\": \"<string>\",\n \"tool_ids\": [\n \"<string>\"\n ],\n \"icon\": \"<string>\",\n \"metadata\": {},\n \"source_skill_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://connie.ai/api/skills")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Cookie"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"instructions\": \"<string>\",\n \"command\": \"<string>\",\n \"tool_ids\": [\n \"<string>\"\n ],\n \"icon\": \"<string>\",\n \"metadata\": {},\n \"source_skill_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}"
response = http.request(request)
puts response.read_body{
"skill": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"workspace_id": "<string>",
"name": "<string>",
"description": "<string>",
"instructions": "<string>",
"command": "<string>",
"category": "sales",
"trigger_mode": "auto",
"tool_ids": [
"<string>"
],
"is_system": true,
"enabled": true,
"icon": "<string>",
"is_shared": true,
"download_count": 123,
"source_skill_id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}Create a skill
Creates a workspace skill. If command is omitted it is derived from the name (“Email Triage” becomes email-triage). Commands are unique per workspace; a duplicate returns 409. Pass source_skill_id to copy another skill, including its files.
curl --request POST \
--url https://connie.ai/api/skills \
--header 'Content-Type: application/json' \
--header 'Cookie: <api-key>' \
--data '
{
"name": "<string>",
"description": "<string>",
"instructions": "<string>",
"command": "<string>",
"tool_ids": [
"<string>"
],
"icon": "<string>",
"metadata": {},
"source_skill_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'import requests
url = "https://connie.ai/api/skills"
payload = {
"name": "<string>",
"description": "<string>",
"instructions": "<string>",
"command": "<string>",
"tool_ids": ["<string>"],
"icon": "<string>",
"metadata": {},
"source_skill_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
headers = {
"Cookie": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Cookie: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
description: '<string>',
instructions: '<string>',
command: '<string>',
tool_ids: ['<string>'],
icon: '<string>',
metadata: {},
source_skill_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://connie.ai/api/skills', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://connie.ai/api/skills",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'description' => '<string>',
'instructions' => '<string>',
'command' => '<string>',
'tool_ids' => [
'<string>'
],
'icon' => '<string>',
'metadata' => [
],
'source_skill_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Cookie: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://connie.ai/api/skills"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"instructions\": \"<string>\",\n \"command\": \"<string>\",\n \"tool_ids\": [\n \"<string>\"\n ],\n \"icon\": \"<string>\",\n \"metadata\": {},\n \"source_skill_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Cookie", "<api-key>")
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))
}HttpResponse<String> response = Unirest.post("https://connie.ai/api/skills")
.header("Cookie", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"instructions\": \"<string>\",\n \"command\": \"<string>\",\n \"tool_ids\": [\n \"<string>\"\n ],\n \"icon\": \"<string>\",\n \"metadata\": {},\n \"source_skill_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://connie.ai/api/skills")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Cookie"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"instructions\": \"<string>\",\n \"command\": \"<string>\",\n \"tool_ids\": [\n \"<string>\"\n ],\n \"icon\": \"<string>\",\n \"metadata\": {},\n \"source_skill_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}"
response = http.request(request)
puts response.read_body{
"skill": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"workspace_id": "<string>",
"name": "<string>",
"description": "<string>",
"instructions": "<string>",
"command": "<string>",
"category": "sales",
"trigger_mode": "auto",
"tool_ids": [
"<string>"
],
"is_system": true,
"enabled": true,
"icon": "<string>",
"is_shared": true,
"download_count": 123,
"source_skill_id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}Authorizations
The full Cookie header copied from a signed-in connie.ai browser request. See the Authentication page.
Query Parameters
Your workspace ID. Also accepted as workspaceId, the x-workspace-id header, or in a JSON body. If you leave it out, the request silently runs against the first workspace you joined.
Body
100When Connie should use the skill. Auto skills are matched on this.
500The SKILL.md body, in Markdown.
20000Slash command, without the /.
^[a-z0-9][a-z0-9-]{1,63}$sales, marketing, crm, communication, analytics, outreach, research, support, general auto lets Connie pick the skill when your request matches its description. manual (Command only) runs it only through its slash command.
auto, manual Tools the skill uses. They are loaded when the command runs.
Copy this skill (used by Duplicate).
Response
Skill created.
Show child attributes
Show child attributes