curl --request GET \
--url https://service.abundly.ai/workspaceapi/promotion-requests \
--header 'Authorization: Bearer <token>'import requests
url = "https://service.abundly.ai/workspaceapi/promotion-requests"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://service.abundly.ai/workspaceapi/promotion-requests', 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://service.abundly.ai/workspaceapi/promotion-requests",
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://service.abundly.ai/workspaceapi/promotion-requests"
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://service.abundly.ai/workspaceapi/promotion-requests")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://service.abundly.ai/workspaceapi/promotion-requests")
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": [
{
"id": "<string>",
"customerId": "<string>",
"agentId": "<string>",
"requestedByName": "<string>",
"steps": [
{
"id": "<string>",
"name": "<string>",
"reviewers": {
"kind": "<string>",
"userIds": [
"<string>"
],
"agentId": "<string>"
},
"decision": {
"decision": "<string>",
"decidedByName": "<string>",
"decidedAt": "<string>",
"decidedByUserId": "<string>",
"decidedByAgentId": "<string>",
"comment": "<string>"
}
}
],
"status": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>",
"reviewersByStepId": {},
"agentName": "<string>",
"agentGroupId": "<string>",
"kind": "<string>",
"requestedByUserId": "<string>",
"message": "<string>",
"trigger": "<string>",
"changes": [
{
"category": "<string>",
"change": "<string>",
"key": "<string>",
"label": "<string>",
"reason": "<string>"
}
],
"deadlineAt": "<string>",
"resolvedAt": "<string>",
"cancelReason": "<string>",
"cancelledByUserId": "<string>",
"completedByUserId": "<string>",
"completedByWorkspaceKeyId": "<string>"
}
]
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}List agent promotion requests
Promotion requests across the workspace, newest first, each with its review steps and the decisions taken so far. Unlike the portal’s review page this is not filtered by reviewer — a workspace key sees every request, including those for restricted and personal agents. reviewersByStepId is only resolved for pending requests, since a settled request is waiting for nobody. Decisions are made in the portal; this API reads the review, it does not take part in it.
curl --request GET \
--url https://service.abundly.ai/workspaceapi/promotion-requests \
--header 'Authorization: Bearer <token>'import requests
url = "https://service.abundly.ai/workspaceapi/promotion-requests"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://service.abundly.ai/workspaceapi/promotion-requests', 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://service.abundly.ai/workspaceapi/promotion-requests",
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://service.abundly.ai/workspaceapi/promotion-requests"
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://service.abundly.ai/workspaceapi/promotion-requests")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://service.abundly.ai/workspaceapi/promotion-requests")
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": [
{
"id": "<string>",
"customerId": "<string>",
"agentId": "<string>",
"requestedByName": "<string>",
"steps": [
{
"id": "<string>",
"name": "<string>",
"reviewers": {
"kind": "<string>",
"userIds": [
"<string>"
],
"agentId": "<string>"
},
"decision": {
"decision": "<string>",
"decidedByName": "<string>",
"decidedAt": "<string>",
"decidedByUserId": "<string>",
"decidedByAgentId": "<string>",
"comment": "<string>"
}
}
],
"status": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>",
"reviewersByStepId": {},
"agentName": "<string>",
"agentGroupId": "<string>",
"kind": "<string>",
"requestedByUserId": "<string>",
"message": "<string>",
"trigger": "<string>",
"changes": [
{
"category": "<string>",
"change": "<string>",
"key": "<string>",
"label": "<string>",
"reason": "<string>"
}
],
"deadlineAt": "<string>",
"resolvedAt": "<string>",
"cancelReason": "<string>",
"cancelledByUserId": "<string>",
"completedByUserId": "<string>",
"completedByWorkspaceKeyId": "<string>"
}
]
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Authorizations
Workspace API key (wk_). GET endpoints require the Workspace read API scope, POST, PUT, PATCH and DELETE endpoints the Workspace write API scope, and sending or revoking invitations (POST and DELETE /workspaceapi/invites) the Invite members scope. A key stops working when it expires or is disabled.
Query Parameters
Only this agent's promotion requests.
open = pending or approved, resolved = rejected, cancelled or completed. Default all.
open, resolved, all Maximum requests to return. Default 100.
1 <= x <= 500Response
Success. Empty result sets are also 200.
Promotion requests, newest first.
Show child attributes
Show child attributes

