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>",
"requestedByUserId": "<string>",
"requestedByName": "<string>",
"steps": [
{
"id": "<string>",
"name": "<string>",
"reviewers": {
"kind": "<string>",
"userIds": [
"<string>"
]
},
"decision": {
"decision": "<string>",
"decidedByUserId": "<string>",
"decidedByName": "<string>",
"decidedAt": "<string>",
"comment": "<string>"
}
}
],
"status": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>",
"reviewersByStepId": {},
"agentName": "<string>",
"agentGroupId": "<string>",
"message": "<string>",
"resolvedAt": "<string>",
"cancelReason": "<string>",
"cancelledByUserId": "<string>",
"completedByUserId": "<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 private 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>",
"requestedByUserId": "<string>",
"requestedByName": "<string>",
"steps": [
{
"id": "<string>",
"name": "<string>",
"reviewers": {
"kind": "<string>",
"userIds": [
"<string>"
]
},
"decision": {
"decision": "<string>",
"decidedByUserId": "<string>",
"decidedByName": "<string>",
"decidedAt": "<string>",
"comment": "<string>"
}
}
],
"status": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>",
"reviewersByStepId": {},
"agentName": "<string>",
"agentGroupId": "<string>",
"message": "<string>",
"resolvedAt": "<string>",
"cancelReason": "<string>",
"cancelledByUserId": "<string>",
"completedByUserId": "<string>"
}
]
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Authorizations
Workspace API key (wk_). GET endpoints require the Workspace read API scope, POST endpoints the Workspace write API scope.
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

