curl --request GET \
--url https://app.base44.com/api/workspace/skills/{skill_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.base44.com/api/workspace/skills/{skill_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.base44.com/api/workspace/skills/{skill_id}', 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://app.base44.com/api/workspace/skills/{skill_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.base44.com/api/workspace/skills/{skill_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.base44.com/api/workspace/skills/{skill_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/workspace/skills/{skill_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "68d2a1f4c9e7b3001f2a5c88",
"name": "brand-voice",
"description": "Use when writing any user-facing copy for our apps.",
"body": "Write in a warm, plain-spoken voice. Use sentence case for headings and keep buttons to two words.",
"enabled": true,
"created_by": "dana@acme.com",
"created_date": "2026-08-01T09:15:00.123000Z",
"updated_date": "2026-08-03T14:02:10.456000Z"
}Get workspace skill
Returns a skill with its instructions.
Skills belong to the workspace your credential is for. With a personal access token, that’s the token’s workspace, and there’s no parameter to choose another one.
Skills need the Builder plan or higher. Below it, this returns a 403.
This is limited to 120 requests per minute, shared with List workspace skills. A signed-in session has its own limit, and every personal access token for the workspace shares one. Some workspaces have a different limit.
curl --request GET \
--url https://app.base44.com/api/workspace/skills/{skill_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.base44.com/api/workspace/skills/{skill_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.base44.com/api/workspace/skills/{skill_id}', 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://app.base44.com/api/workspace/skills/{skill_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.base44.com/api/workspace/skills/{skill_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.base44.com/api/workspace/skills/{skill_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/workspace/skills/{skill_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "68d2a1f4c9e7b3001f2a5c88",
"name": "brand-voice",
"description": "Use when writing any user-facing copy for our apps.",
"body": "Write in a warm, plain-spoken voice. Use sentence case for headings and keep buttons to two words.",
"enabled": true,
"created_by": "dana@acme.com",
"created_date": "2026-08-01T09:15:00.123000Z",
"updated_date": "2026-08-03T14:02:10.456000Z"
}Authorizations
Personal access token, sent as Authorization: Bearer <token>.
Path Parameters
ID of the skill to get. Get it from id in List workspace skills.
Response
The skill.
ID of the skill.
"68d2a1f4c9e7b3001f2a5c88"
Name of the skill.
"brand-voice"
When the skill applies.
"Use when writing any user-facing copy for our apps."
The instructions the AI builder follows once it loads the skill.
"Write in a warm, plain-spoken voice. Use sentence case for headings and keep buttons to two words."
Whether the AI builder can use the skill.
true
Email of the member who created the skill.
"dana@acme.com"
Time the skill was created, in UTC, as an ISO 8601 timestamp.
"2026-08-01T09:15:00.123000Z"
Time the skill last changed, in UTC, as an ISO 8601 timestamp.
"2026-08-03T14:02:10.456000Z"
Was this page helpful?