curl --request GET \
--url https://api.moonbounce.ai/v1/review/items \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.moonbounce.ai/v1/review/items"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.moonbounce.ai/v1/review/items', 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.moonbounce.ai/v1/review/items",
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.moonbounce.ai/v1/review/items"
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.moonbounce.ai/v1/review/items")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.moonbounce.ai/v1/review/items")
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{
"environment": "production",
"items": [
{
"environment": "production",
"id": "<string>",
"decision_id": "<string>",
"evaluation_id": "<string>",
"version": {
"structure_hash": "<string>"
},
"lane": "active",
"reason": {
"tag": "uncertain",
"text": "<string>"
},
"tags": [
"uncertain"
],
"blind": true,
"rank": 123,
"queued_at": "2023-11-07T05:31:56Z",
"content": {
"state": "<unknown>",
"attribute_values": {}
},
"outcome_choices": [
{
"outcome": "<string>"
}
],
"questions": [
{
"name": "<string>",
"question": "<string>",
"context": "<string>",
"criteria": {
"true": "<string>",
"false": "<string>"
},
"reads": [
"state.message"
]
}
],
"decision_index": 1,
"shown_at": "2023-11-07T05:31:56Z",
"summary": "<string>",
"cuts": [
{
"at": 123,
"outcome": "<string>"
}
],
"below": "<string>",
"prediction": {
"answers": {},
"aggregations": {},
"status": "computed",
"value": 123,
"via": "<string>",
"outcome": "<unknown>",
"missing": [
"questions.asks_for_refund"
]
},
"handled": {
"status": "confirmed",
"at": "2023-11-07T05:31:56Z",
"feedback_id": "<string>",
"changed_at": "2023-11-07T05:31:56Z",
"outcome": "<string>",
"matched": true
}
}
],
"next_cursor": "<string>",
"has_more": true,
"remaining_today": 1,
"counts": {
"open": 1,
"done": 1,
"done_today": 1,
"by_decision": [
{
"decision_id": "<string>",
"decision_index": 1,
"open": 1,
"done": 1,
"open_versions": 1,
"newest_open_version": {
"structure_hash": "<string>"
}
}
]
}
}{
"error": {
"type": "invalid_request",
"message": "<string>",
"reason": "<string>",
"param": "<string>",
"details": {
"issues": [
{
"param": "<string>",
"code": "<string>",
"message": "<string>"
}
]
}
}
}{
"error": {
"type": "invalid_request",
"message": "<string>",
"reason": "<string>",
"param": "<string>",
"details": {
"issues": [
{
"param": "<string>",
"code": "<string>",
"message": "<string>"
}
]
}
}
}{
"error": {
"type": "invalid_request",
"message": "<string>",
"reason": "<string>",
"param": "<string>",
"details": {
"issues": [
{
"param": "<string>",
"code": "<string>",
"message": "<string>"
}
]
}
}
}{
"error": {
"type": "invalid_request",
"message": "<string>",
"reason": "<string>",
"param": "<string>",
"details": {
"issues": [
{
"param": "<string>",
"code": "<string>",
"message": "<string>"
}
]
}
}
}{
"error": {
"type": "invalid_request",
"message": "<string>",
"reason": "<string>",
"param": "<string>",
"details": {
"issues": [
{
"param": "<string>",
"code": "<string>",
"message": "<string>"
}
]
}
}
}List review items
With status=open (the default), the reviewer’s open items, oldest fill first and in rank order within it. An open listing first tops the queue up to the daily budget (12 per decision, 25 in total, per UTC day), expiring items queued more than 3 days ago. Listing does not count as showing an item (see /shown). Blind items (spot checks) carry no prediction until answered. remaining_today counts every open item matching the filter, not just this page, even for status=done. status=done lists this reviewer’s answered, withdrawn, skipped and expired items, newest settled first, then id descending, without filling or expiring the queue. Settled items carry handled from the reviewer’s latest answer (POST …/change replaces it; a correction through POST /v1/feedback does not). Skipped and expired blind items keep their prediction and summary hidden. With counts=true, a first page (no cursor) of either state also carries counts: the reviewer’s open, done and done-today totals and a per-decision breakdown, ignoring decision_id; cursor pages and pages that don’t ask omit it.
curl --request GET \
--url https://api.moonbounce.ai/v1/review/items \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.moonbounce.ai/v1/review/items"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.moonbounce.ai/v1/review/items', 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.moonbounce.ai/v1/review/items",
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.moonbounce.ai/v1/review/items"
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.moonbounce.ai/v1/review/items")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.moonbounce.ai/v1/review/items")
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{
"environment": "production",
"items": [
{
"environment": "production",
"id": "<string>",
"decision_id": "<string>",
"evaluation_id": "<string>",
"version": {
"structure_hash": "<string>"
},
"lane": "active",
"reason": {
"tag": "uncertain",
"text": "<string>"
},
"tags": [
"uncertain"
],
"blind": true,
"rank": 123,
"queued_at": "2023-11-07T05:31:56Z",
"content": {
"state": "<unknown>",
"attribute_values": {}
},
"outcome_choices": [
{
"outcome": "<string>"
}
],
"questions": [
{
"name": "<string>",
"question": "<string>",
"context": "<string>",
"criteria": {
"true": "<string>",
"false": "<string>"
},
"reads": [
"state.message"
]
}
],
"decision_index": 1,
"shown_at": "2023-11-07T05:31:56Z",
"summary": "<string>",
"cuts": [
{
"at": 123,
"outcome": "<string>"
}
],
"below": "<string>",
"prediction": {
"answers": {},
"aggregations": {},
"status": "computed",
"value": 123,
"via": "<string>",
"outcome": "<unknown>",
"missing": [
"questions.asks_for_refund"
]
},
"handled": {
"status": "confirmed",
"at": "2023-11-07T05:31:56Z",
"feedback_id": "<string>",
"changed_at": "2023-11-07T05:31:56Z",
"outcome": "<string>",
"matched": true
}
}
],
"next_cursor": "<string>",
"has_more": true,
"remaining_today": 1,
"counts": {
"open": 1,
"done": 1,
"done_today": 1,
"by_decision": [
{
"decision_id": "<string>",
"decision_index": 1,
"open": 1,
"done": 1,
"open_versions": 1,
"newest_open_version": {
"structure_hash": "<string>"
}
}
]
}
}{
"error": {
"type": "invalid_request",
"message": "<string>",
"reason": "<string>",
"param": "<string>",
"details": {
"issues": [
{
"param": "<string>",
"code": "<string>",
"message": "<string>"
}
]
}
}
}{
"error": {
"type": "invalid_request",
"message": "<string>",
"reason": "<string>",
"param": "<string>",
"details": {
"issues": [
{
"param": "<string>",
"code": "<string>",
"message": "<string>"
}
]
}
}
}{
"error": {
"type": "invalid_request",
"message": "<string>",
"reason": "<string>",
"param": "<string>",
"details": {
"issues": [
{
"param": "<string>",
"code": "<string>",
"message": "<string>"
}
]
}
}
}{
"error": {
"type": "invalid_request",
"message": "<string>",
"reason": "<string>",
"param": "<string>",
"details": {
"issues": [
{
"param": "<string>",
"code": "<string>",
"message": "<string>"
}
]
}
}
}{
"error": {
"type": "invalid_request",
"message": "<string>",
"reason": "<string>",
"param": "<string>",
"details": {
"issues": [
{
"param": "<string>",
"code": "<string>",
"message": "<string>"
}
]
}
}
}Authorizations
An API key, sent as Authorization: Bearer <key>. Each operation lists the scope its key needs: decisions:evaluate (evaluate and read evaluations), decisions:feedback (your app's feedback) or decisions:develop (everything else, including owner feedback and the review queue). An operation listing no scope takes any scoped key. A key with no scope, or without the operation's, gets 403 INSUFFICIENT_SCOPE.
Query Parameters
open, done ^[a-z][a-z0-9_.-]{0,127}$1 <= x <= 501 - 1024true adds counts to a first page (no cursor). Default false.
Response
The queue
The environment of the key that made the call: production or test. Evaluations, feedback, reviews and suggestions are separate per environment; registered structures are shared.
production, test Show child attributes
Show child attributes
x >= 0The reviewer's queue totals in this organization and environment, for counts and a decision filter. Only when asked for (counts=true) on a first page (no cursor), for either state. They ignore decision_id; items whose evaluation was deleted are not counted.
Show child attributes
Show child attributes