curl --request POST \
--url https://api.example.com/api/decisions/{workspace}/export \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"keys": [
"<string>"
],
"published_only": false,
"versions": {},
"suggest_publish": false
}
'import requests
url = "https://api.example.com/api/decisions/{workspace}/export"
payload = {
"keys": ["<string>"],
"published_only": False,
"versions": {},
"suggest_publish": False
}
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({
keys: ['<string>'],
published_only: false,
versions: {},
suggest_publish: false
})
};
fetch('https://api.example.com/api/decisions/{workspace}/export', 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.example.com/api/decisions/{workspace}/export",
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([
'keys' => [
'<string>'
],
'published_only' => false,
'versions' => [
],
'suggest_publish' => false
]),
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.example.com/api/decisions/{workspace}/export"
payload := strings.NewReader("{\n \"keys\": [\n \"<string>\"\n ],\n \"published_only\": false,\n \"versions\": {},\n \"suggest_publish\": false\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.example.com/api/decisions/{workspace}/export")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"keys\": [\n \"<string>\"\n ],\n \"published_only\": false,\n \"versions\": {},\n \"suggest_publish\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/decisions/{workspace}/export")
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 \"keys\": [\n \"<string>\"\n ],\n \"published_only\": false,\n \"versions\": {},\n \"suggest_publish\": false\n}"
response = http.request(request)
puts response.read_body{
"error": "<string>",
"code": 500
}{
"error": "<string>",
"code": 500
}{
"error": "<string>",
"code": 500
}{
"error": "<string>",
"code": 500
}{
"error": "<string>",
"code": 500
}Export decisions as a signed bundle
Build a zip bundle for transfer to another installation.
Sub-decisions are pulled in automatically, so the bundle is always self-contained — one that imports cleanly and then fails at first evaluation is worse than none. Anything that cannot travel, such as an external HTTP node, is recorded so the target refuses the bundle rather than discovering it at runtime.
Version selection is versions, else published_only, else the
latest approved version. The publication pointer, membership and
audit history are never exported — they are target-instance state.
This is not how you make a rule live here; publish does that, and keeps the audit chain intact.
Required roles: author, approver or workspace_admin
curl --request POST \
--url https://api.example.com/api/decisions/{workspace}/export \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"keys": [
"<string>"
],
"published_only": false,
"versions": {},
"suggest_publish": false
}
'import requests
url = "https://api.example.com/api/decisions/{workspace}/export"
payload = {
"keys": ["<string>"],
"published_only": False,
"versions": {},
"suggest_publish": False
}
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({
keys: ['<string>'],
published_only: false,
versions: {},
suggest_publish: false
})
};
fetch('https://api.example.com/api/decisions/{workspace}/export', 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.example.com/api/decisions/{workspace}/export",
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([
'keys' => [
'<string>'
],
'published_only' => false,
'versions' => [
],
'suggest_publish' => false
]),
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.example.com/api/decisions/{workspace}/export"
payload := strings.NewReader("{\n \"keys\": [\n \"<string>\"\n ],\n \"published_only\": false,\n \"versions\": {},\n \"suggest_publish\": false\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.example.com/api/decisions/{workspace}/export")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"keys\": [\n \"<string>\"\n ],\n \"published_only\": false,\n \"versions\": {},\n \"suggest_publish\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/decisions/{workspace}/export")
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 \"keys\": [\n \"<string>\"\n ],\n \"published_only\": false,\n \"versions\": {},\n \"suggest_publish\": false\n}"
response = http.request(request)
puts response.read_body{
"error": "<string>",
"code": 500
}{
"error": "<string>",
"code": 500
}{
"error": "<string>",
"code": 500
}{
"error": "<string>",
"code": 500
}{
"error": "<string>",
"code": 500
}Authorizations
The access token received from the authorization server in the OAuth 2.0 flow.
Path Parameters
Workspace slug.
64^[a-z0-9][a-z0-9-]{0,63}$Body
Decisions to export. Empty exports every decision in the workspace. Sub-decisions are always added automatically — a bundle that imports cleanly and then fails at first evaluation is worse than no bundle.
Export whichever version is currently live for each decision. Mutually exclusive with versions.
Explicit version per decision key. Mutually exclusive with published_only. Anything omitted falls back to the latest approved version.
Show child attributes
Show child attributes
Record in the manifest that the target should publish these decisions. Advice only — import never publishes, so applying it is an explicit second step on the target.
Response
A signed bundle containing the selected decisions.
Was this page helpful?

