curl --request GET \
--url https://app.solya.app/api/business-knowledge \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.solya.app/api/business-knowledge"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.solya.app/api/business-knowledge', 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.solya.app/api/business-knowledge",
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.solya.app/api/business-knowledge"
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.solya.app/api/business-knowledge")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.solya.app/api/business-knowledge")
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{
"guidance": [
{
"actionFamilies": [
"MARKDOWN_PLAN"
],
"body": "Les démarques sont appliquées par vague : -20% à J+30 après entrée en stock, -40% à J+60, puis arbitrage manuel au-delà.",
"createdAt": "2026-01-10T09:00:00.000Z",
"id": "bk-guidance-politique-soldes",
"isActive": true,
"scope": null,
"source": "ORG",
"tags": [
"markdown",
"soldes",
"pricing"
],
"title": "Politique de soldes et démarques",
"updatedAt": null
},
{
"actionFamilies": [
"RESTOCK_PLAN"
],
"body": "Les boutiques flagship bénéficient d'un coefficient de priorité x1.5 lors des allocations en cas de tension stock.",
"createdAt": "2026-01-15T11:00:00.000Z",
"id": "bk-guidance-priority-boutiques",
"isActive": true,
"scope": null,
"source": "ORG",
"tags": [
"restock",
"allocation",
"boutiques"
],
"title": "Priorité de réassort par type de boutique",
"updatedAt": null
}
],
"skills": [
{
"id": "bk-skill-process-reassort",
"title": "Processus de réassort Polaris",
"whenToUse": "Utilise ce skill quand l'utilisateur demande à réassortir une boutique ou à créer un plan de réassort."
},
{
"id": "bk-skill-rebalancing-region",
"title": "Rééquilibrage inter-boutiques région",
"whenToUse": "Utilise ce skill quand l'utilisateur souhaite rééquilibrer le stock entre boutiques ou créer un transfert inter-boutiques."
}
]
}List business knowledge entries for the authenticated organization
Returns all active business knowledge entries for the caller’s organization. The response is split into two arrays: guidance (full bodies — declarative knowledge injected as ambient context by the agent) and skills (lightweight stubs without body — activatable procedures the agent loads on demand). Both arrays support optional filtering by actionFamily and tags using transversal semantics: entries with an empty list on a dimension match any value for that dimension. Call GET /business-knowledge/ to retrieve the full body of a skill after matching its whenToUse trigger. Requires businessKnowledge.read permission. Compatible with service-account tokens (solya_sa_*).
curl --request GET \
--url https://app.solya.app/api/business-knowledge \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.solya.app/api/business-knowledge"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.solya.app/api/business-knowledge', 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.solya.app/api/business-knowledge",
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.solya.app/api/business-knowledge"
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.solya.app/api/business-knowledge")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.solya.app/api/business-knowledge")
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{
"guidance": [
{
"actionFamilies": [
"MARKDOWN_PLAN"
],
"body": "Les démarques sont appliquées par vague : -20% à J+30 après entrée en stock, -40% à J+60, puis arbitrage manuel au-delà.",
"createdAt": "2026-01-10T09:00:00.000Z",
"id": "bk-guidance-politique-soldes",
"isActive": true,
"scope": null,
"source": "ORG",
"tags": [
"markdown",
"soldes",
"pricing"
],
"title": "Politique de soldes et démarques",
"updatedAt": null
},
{
"actionFamilies": [
"RESTOCK_PLAN"
],
"body": "Les boutiques flagship bénéficient d'un coefficient de priorité x1.5 lors des allocations en cas de tension stock.",
"createdAt": "2026-01-15T11:00:00.000Z",
"id": "bk-guidance-priority-boutiques",
"isActive": true,
"scope": null,
"source": "ORG",
"tags": [
"restock",
"allocation",
"boutiques"
],
"title": "Priorité de réassort par type de boutique",
"updatedAt": null
}
],
"skills": [
{
"id": "bk-skill-process-reassort",
"title": "Processus de réassort Polaris",
"whenToUse": "Utilise ce skill quand l'utilisateur demande à réassortir une boutique ou à créer un plan de réassort."
},
{
"id": "bk-skill-rebalancing-region",
"title": "Rééquilibrage inter-boutiques région",
"whenToUse": "Utilise ce skill quand l'utilisateur souhaite rééquilibrer le stock entre boutiques ou créer un transfert inter-boutiques."
}
]
}Authorizations
User session token issued by NextAuth. For human users accessing Solya via the web application.
Query Parameters
Filter by action family. Entries with an empty actionFamilies list (transversal) always match. Allowed values: RESTOCK_PLAN, REBALANCE_PLAN, MARKDOWN_PLAN, PRE_SEASON_PLAN, RECOMMENDATION, WORKFLOW, SUPPLIER_RETURN_PLAN, SUPPLIER_EXCHANGE_PLAN
RESTOCK_PLAN, REBALANCE_PLAN, MARKDOWN_PLAN, PRE_SEASON_PLAN, RECOMMENDATION, WORKFLOW, SUPPLIER_RETURN_PLAN, SUPPLIER_EXCHANGE_PLAN Filter by tags. Accepts multiple values (?tags=restock&tags=pricing). Entries with an empty tags list (transversal) always match. Optional.

