curl --request GET \
--url https://app.base44.com/api/workspace/skills \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.base44.com/api/workspace/skills"
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', 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",
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"
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")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/workspace/skills")
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{
"items": [
{
"created_by": "dana@acme.com",
"created_date": "2026-08-01T09:15:00.123000Z",
"description": "Use when writing any user-facing copy for our apps.",
"enabled": true,
"id": "68d2a1f4c9e7b3001f2a5c88",
"name": "brand-voice",
"updated_date": "2026-08-03T14:02:10.456000Z"
}
],
"total": 1
}List workspace skills
Returns every skill in a workspace, newest first, without their instructions. The list isn’t paginated. A workspace has at most 100 skills. Get a skill’s instructions with Get workspace skill.
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.
The AI builder sees the name and description of every enabled skill in the workspace, and loads a skill’s instructions when its description fits the task.
Skills need the Builder plan or higher. Below it, this returns a 403.
This is limited to 120 requests per minute, shared with Get workspace skill. 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 \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.base44.com/api/workspace/skills"
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', 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",
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"
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")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/workspace/skills")
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{
"items": [
{
"created_by": "dana@acme.com",
"created_date": "2026-08-01T09:15:00.123000Z",
"description": "Use when writing any user-facing copy for our apps.",
"enabled": true,
"id": "68d2a1f4c9e7b3001f2a5c88",
"name": "brand-voice",
"updated_date": "2026-08-03T14:02:10.456000Z"
}
],
"total": 1
}Authorizations
Personal access token, sent as Authorization: Bearer <token>.
Response
The workspace's skills.
Every skill in the workspace, newest first.
Show child attributes
Show child attributes
[
{
"created_by": "dana@acme.com",
"created_date": "2026-08-01T09:15:00.123000Z",
"description": "Use when writing any user-facing copy for our apps.",
"enabled": true,
"id": "68d2a1f4c9e7b3001f2a5c88",
"name": "brand-voice",
"updated_date": "2026-08-03T14:02:10.456000Z"
}
]
Number of skills in items.
1
Was this page helpful?