Poll study status-change events in your workspace
curl --request POST \
--url https://api.rallyuxr.com/api/public/v1/study-status-events/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"filter": {
"from": "2025-01-01T00:00:00Z",
"to": "2025-02-01T00:00:00Z",
"studyIds": [
"<string>"
],
"teamIds": [
"<string>"
],
"studyTypes": []
},
"pageInfo": {
"size": 10
}
}
'import requests
url = "https://api.rallyuxr.com/api/public/v1/study-status-events/search"
payload = {
"filter": {
"from": "2025-01-01T00:00:00Z",
"to": "2025-02-01T00:00:00Z",
"studyIds": ["<string>"],
"teamIds": ["<string>"],
"studyTypes": []
},
"pageInfo": { "size": 10 }
}
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({
filter: {
from: '2025-01-01T00:00:00Z',
to: '2025-02-01T00:00:00Z',
studyIds: ['<string>'],
teamIds: ['<string>'],
studyTypes: []
},
pageInfo: {size: 10}
})
};
fetch('https://api.rallyuxr.com/api/public/v1/study-status-events/search', 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.rallyuxr.com/api/public/v1/study-status-events/search",
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([
'filter' => [
'from' => '2025-01-01T00:00:00Z',
'to' => '2025-02-01T00:00:00Z',
'studyIds' => [
'<string>'
],
'teamIds' => [
'<string>'
],
'studyTypes' => [
]
],
'pageInfo' => [
'size' => 10
]
]),
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.rallyuxr.com/api/public/v1/study-status-events/search"
payload := strings.NewReader("{\n \"filter\": {\n \"from\": \"2025-01-01T00:00:00Z\",\n \"to\": \"2025-02-01T00:00:00Z\",\n \"studyIds\": [\n \"<string>\"\n ],\n \"teamIds\": [\n \"<string>\"\n ],\n \"studyTypes\": []\n },\n \"pageInfo\": {\n \"size\": 10\n }\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.rallyuxr.com/api/public/v1/study-status-events/search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"filter\": {\n \"from\": \"2025-01-01T00:00:00Z\",\n \"to\": \"2025-02-01T00:00:00Z\",\n \"studyIds\": [\n \"<string>\"\n ],\n \"teamIds\": [\n \"<string>\"\n ],\n \"studyTypes\": []\n },\n \"pageInfo\": {\n \"size\": 10\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.rallyuxr.com/api/public/v1/study-status-events/search")
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 \"filter\": {\n \"from\": \"2025-01-01T00:00:00Z\",\n \"to\": \"2025-02-01T00:00:00Z\",\n \"studyIds\": [\n \"<string>\"\n ],\n \"teamIds\": [\n \"<string>\"\n ],\n \"studyTypes\": []\n },\n \"pageInfo\": {\n \"size\": 10\n }\n}"
response = http.request(request)
puts response.read_body{
"results": [
{
"id": "<string>",
"studyId": "<string>",
"changedBy": "<string>",
"changedAt": "2023-11-07T05:31:56Z"
}
],
"total": 123,
"pageInfo": {
"hasNextPage": true,
"hasPreviousPage": true,
"startCursor": "<string>",
"endCursor": "<string>"
}
}{
"errors": [
{
"message": "<string>",
"path": [
"<string>"
]
}
]
}"Unauthorized""Forbidden""Too Many Requests""Internal Server Error"Study Status Events
Poll study status-change events in your workspace
Returns a paginated, time-windowed list of study status-change events (draft, active, paused, closed transitions) across your workspace, most recent first. Poll this endpoint with a moving from/to window to ingest status changes without standing up webhooks.
POST
/
study-status-events
/
search
Poll study status-change events in your workspace
curl --request POST \
--url https://api.rallyuxr.com/api/public/v1/study-status-events/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"filter": {
"from": "2025-01-01T00:00:00Z",
"to": "2025-02-01T00:00:00Z",
"studyIds": [
"<string>"
],
"teamIds": [
"<string>"
],
"studyTypes": []
},
"pageInfo": {
"size": 10
}
}
'import requests
url = "https://api.rallyuxr.com/api/public/v1/study-status-events/search"
payload = {
"filter": {
"from": "2025-01-01T00:00:00Z",
"to": "2025-02-01T00:00:00Z",
"studyIds": ["<string>"],
"teamIds": ["<string>"],
"studyTypes": []
},
"pageInfo": { "size": 10 }
}
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({
filter: {
from: '2025-01-01T00:00:00Z',
to: '2025-02-01T00:00:00Z',
studyIds: ['<string>'],
teamIds: ['<string>'],
studyTypes: []
},
pageInfo: {size: 10}
})
};
fetch('https://api.rallyuxr.com/api/public/v1/study-status-events/search', 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.rallyuxr.com/api/public/v1/study-status-events/search",
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([
'filter' => [
'from' => '2025-01-01T00:00:00Z',
'to' => '2025-02-01T00:00:00Z',
'studyIds' => [
'<string>'
],
'teamIds' => [
'<string>'
],
'studyTypes' => [
]
],
'pageInfo' => [
'size' => 10
]
]),
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.rallyuxr.com/api/public/v1/study-status-events/search"
payload := strings.NewReader("{\n \"filter\": {\n \"from\": \"2025-01-01T00:00:00Z\",\n \"to\": \"2025-02-01T00:00:00Z\",\n \"studyIds\": [\n \"<string>\"\n ],\n \"teamIds\": [\n \"<string>\"\n ],\n \"studyTypes\": []\n },\n \"pageInfo\": {\n \"size\": 10\n }\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.rallyuxr.com/api/public/v1/study-status-events/search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"filter\": {\n \"from\": \"2025-01-01T00:00:00Z\",\n \"to\": \"2025-02-01T00:00:00Z\",\n \"studyIds\": [\n \"<string>\"\n ],\n \"teamIds\": [\n \"<string>\"\n ],\n \"studyTypes\": []\n },\n \"pageInfo\": {\n \"size\": 10\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.rallyuxr.com/api/public/v1/study-status-events/search")
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 \"filter\": {\n \"from\": \"2025-01-01T00:00:00Z\",\n \"to\": \"2025-02-01T00:00:00Z\",\n \"studyIds\": [\n \"<string>\"\n ],\n \"teamIds\": [\n \"<string>\"\n ],\n \"studyTypes\": []\n },\n \"pageInfo\": {\n \"size\": 10\n }\n}"
response = http.request(request)
puts response.read_body{
"results": [
{
"id": "<string>",
"studyId": "<string>",
"changedBy": "<string>",
"changedAt": "2023-11-07T05:31:56Z"
}
],
"total": 123,
"pageInfo": {
"hasNextPage": true,
"hasPreviousPage": true,
"startCursor": "<string>",
"endCursor": "<string>"
}
}{
"errors": [
{
"message": "<string>",
"path": [
"<string>"
]
}
]
}"Unauthorized""Forbidden""Too Many Requests""Internal Server Error"Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
Filter for study status-change events. The from/to time window is required.
Show child attributes
Show child attributes
Pagination arguments. Use startCursor from the result of the endCursor of the response to get the next page. Pagination in reverse is not currently supported
Show child attributes
Show child attributes
Example:
{ "size": 10 }⌘I