curl --request GET \
--url https://api.decimal.ai/api/v1/skills/{skill_name}/body \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.decimal.ai/api/v1/skills/{skill_name}/body"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.decimal.ai/api/v1/skills/{skill_name}/body', 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.decimal.ai/api/v1/skills/{skill_name}/body",
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://api.decimal.ai/api/v1/skills/{skill_name}/body"
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://api.decimal.ai/api/v1/skills/{skill_name}/body")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.decimal.ai/api/v1/skills/{skill_name}/body")
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{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Get the body markdown of a skill for prompt injection / load_skill
Get the body markdown of a skill — the serve path behind load_skill.
Resolver-first: a skill in the caller’s offer set serves the exact version
the menu offered (Use pins + safety veto included), which makes cross-org
public Use targets loadable — pre-topk they surfaced in the menu but this
endpoint 404’d on them. Non-offered org-owned skills stay fetchable as
before, gated by can_view_skill.
content_hash is the version’s identity, not a checksum of body.
It is the value stored on the resolved skill_version row — SHA-256 of that
version’s FULL body_markdown, bare lowercase hex, no sha256: label —
and it is what trace_skill_activation.skill_hash must carry for an
activation to resolve to a version. Echo it verbatim; never recompute it.
max_chars does NOT change it. When truncated is true the body above is
a prefix plus a human-readable marker, so hashing what you received yields a
digest that matches no version anywhere. content_hash_matches_body says
which case you are in without you having to infer it from truncated.
curl --request GET \
--url https://api.decimal.ai/api/v1/skills/{skill_name}/body \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.decimal.ai/api/v1/skills/{skill_name}/body"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.decimal.ai/api/v1/skills/{skill_name}/body', 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.decimal.ai/api/v1/skills/{skill_name}/body",
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://api.decimal.ai/api/v1/skills/{skill_name}/body"
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://api.decimal.ai/api/v1/skills/{skill_name}/body")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.decimal.ai/api/v1/skills/{skill_name}/body")
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{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
Enter your API key (e.g. dai_sk_test_key_001)
Headers
Path Parameters
Query Parameters
Version number (default: the version the menu offers)
Resolve the exact version this agent was offered (agent-scope Use pins).
Trim the body to this many characters (progressive-disclosure body guardrail — the SDK's load_skill passes its per-body limit).
x >= 256The routing decision (routing_id from POST /skills/route or GET /skills/menu) this load belongs to; the SDK's load_skill sends it. With it, a skill you can reach only through the public registry (not owned by your organization, installed in it, or assigned to the agent) is served only if that decision offered it, and answers 404 otherwise. Skills your organization owns, has installed or has assigned are served either way. When agent_name is omitted, or names an agent that does not hold the skill, the load is resolved for the agent the decision was made for, so that agent's pinned version is the one served. Send it empty from a run whose routing call returned no decision. Omit it outside an agent run (export, skills pull).
64Cookies
Response
Successful Response