Skip to main content
POST
/
skills
/
v1
Create a Skill
curl --request POST \
  --url https://api.langdock.com/skills/v1 \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "name": "<string>",
  "instructions": "<string>",
  "slug": "<string>",
  "description": "<string>",
  "integrationIds": [
    "3c90c3cc-0d44-4b50-8888-8dd25736052a"
  ]
}
'
import requests

url = "https://api.langdock.com/skills/v1"

payload = {
"name": "<string>",
"instructions": "<string>",
"slug": "<string>",
"description": "<string>",
"integrationIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
instructions: '<string>',
slug: '<string>',
description: '<string>',
integrationIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a']
})
};

fetch('https://api.langdock.com/skills/v1', 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://api.langdock.com/skills/v1",
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>',
'instructions' => '<string>',
'slug' => '<string>',
'description' => '<string>',
'integrationIds' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
]
]),
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;
}
package main

import (
"fmt"
"strings"
"net/http"
"io"
)

func main() {

url := "https://api.langdock.com/skills/v1"

payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"instructions\": \"<string>\",\n \"slug\": \"<string>\",\n \"description\": \"<string>\",\n \"integrationIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n}")

req, _ := http.NewRequest("POST", 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))

}
HttpResponse<String> response = Unirest.post("https://api.langdock.com/skills/v1")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"instructions\": \"<string>\",\n \"slug\": \"<string>\",\n \"description\": \"<string>\",\n \"integrationIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.langdock.com/skills/v1")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"instructions\": \"<string>\",\n \"slug\": \"<string>\",\n \"description\": \"<string>\",\n \"integrationIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n}"

response = http.request(request)
puts response.read_body
{
  "skill": {
    "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
    "name": "<string>",
    "slug": "<string>",
    "description": "<string>",
    "instructions": "<string>",
    "integrationIds": [
      "3c90c3cc-0d44-4b50-8888-8dd25736052a"
    ],
    "createdAt": "2023-11-07T05:31:56Z",
    "updatedAt": "2023-11-07T05:31:56Z"
  }
}
Using our API via a dedicated deployment? Just replace api.langdock.com with your deployment’s base URL: <deployment-url>/api/public
Creates a Skill in your workspace. The API key creator becomes the Skill owner and can manage it in the UI. System Skills, templates, and Skill Packs are excluded.

Required Scopes

This endpoint requires the SKILL_API scope.
Requires the createSkills workspace permission.

Request Parameters

ParameterTypeRequiredDescription
namestringYesSkill name. Maximum: 64 characters.
slugstringNoStable Skill slug. Must use lowercase letters, numbers, and dashes. Maximum: 100 characters.
descriptionstringNoDescription used to explain when the Skill should apply. Maximum: 1024 characters.
instructionsstringYesSkill instructions. Maximum: 50000 characters.
integrationIdsstring[]NoIntegration UUIDs to attach to the Skill. Each integration must be enabled in your workspace.

Example

const axios = require("axios");

async function createSkill() {
  const response = await axios.post(
    "https://api.langdock.com/skills/v1",
    {
      name: "Support Reply Style",
      slug: "support-reply-style",
      description: "Applies the support team's tone and escalation rules.",
      instructions: "Write concise replies, include the next best action, and escalate billing issues to the account owner.",
      integrationIds: []
    },
    {
      headers: {
        Authorization: "Bearer YOUR_API_KEY",
        "Content-Type": "application/json"
      }
    }
  );

  console.log("Created Skill:", response.data.skill.id);
}

createSkill();

Response Format

Success Response (201 Created)

{
  skill: {
    id: string;
    name: string;
    slug: string;
    description: string;
    instructions: string;
    integrationIds: string[];
    createdAt: string;
    updatedAt: string;
  };
}

Error Handling

Status CodeDescription
400Invalid request body or inaccessible integrationIds
401Invalid or missing API key
403Missing SKILL_API scope, Skills product access, or create permission
409Skill slug conflict
429Rate limit exceeded
500Internal server error
Langdock intentionally blocks browser-origin requests to protect your API key and ensure your applications remain secure. For more information, please see our guide on API Key Best Practices.

Authorizations

Authorization
string
header
required

API key as Bearer token. Format "Bearer YOUR_API_KEY"

Body

application/json
name
string
required

Skill name.

Required string length: 1 - 64
instructions
string
required

Skill instructions.

Required string length: 1 - 50000
slug
string

Stable Skill slug.

Maximum string length: 100
Pattern: ^[a-z0-9-]+$
description
string

Description used to explain when the Skill should apply.

Maximum string length: 1024
integrationIds
string<uuid>[]

Integration IDs to attach to the Skill.

Response

Skill created successfully

skill
object
required