curl --request GET \
--url https://devs.adaptyvbio.com/api/v1/experiments \
--header 'Authorization: Bearer <token>'import requests
url = "https://devs.adaptyvbio.com/api/v1/experiments"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://devs.adaptyvbio.com/api/v1/experiments', 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://devs.adaptyvbio.com/api/v1/experiments",
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://devs.adaptyvbio.com/api/v1/experiments"
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://devs.adaptyvbio.com/api/v1/experiments")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://devs.adaptyvbio.com/api/v1/experiments")
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{
"count": 123,
"items": [
{
"code": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"experiment_url": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"results_status": "none",
"status": "draft",
"experiment_type": "affinity",
"name": "<string>",
"stripe_invoice_url": "<string>",
"stripe_quote_url": "<string>"
}
],
"offset": 123,
"total": 123
}{
"error": "experiment not found",
"request_id": "req_019462a4-b1c2-7def-8901-23456789abcd"
}{
"error": "experiment not found",
"request_id": "req_019462a4-b1c2-7def-8901-23456789abcd"
}{
"error": "experiment not found",
"request_id": "req_019462a4-b1c2-7def-8901-23456789abcd"
}{
"error": "experiment not found",
"request_id": "req_019462a4-b1c2-7def-8901-23456789abcd"
}List experiments
Lists experiments accessible to the caller, sorted by creation date (newest first). Experiments progress from submission through review, production, and analysis until results are available.
The response includes only experiments within the caller’s organization
scope. Filter by status for specific workflow stages, by state for
broader groupings, or by search for name/code substring matches.
Date operators (lte, gte, lt, gt, eq) accept ISO 8601 dates
or timestamps via filter= s-expression. Paginate with limit and
offset; fetch pages until fewer than limit items return.
curl --request GET \
--url https://devs.adaptyvbio.com/api/v1/experiments \
--header 'Authorization: Bearer <token>'import requests
url = "https://devs.adaptyvbio.com/api/v1/experiments"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://devs.adaptyvbio.com/api/v1/experiments', 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://devs.adaptyvbio.com/api/v1/experiments",
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://devs.adaptyvbio.com/api/v1/experiments"
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://devs.adaptyvbio.com/api/v1/experiments")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://devs.adaptyvbio.com/api/v1/experiments")
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{
"count": 123,
"items": [
{
"code": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"experiment_url": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"results_status": "none",
"status": "draft",
"experiment_type": "affinity",
"name": "<string>",
"stripe_invoice_url": "<string>",
"stripe_quote_url": "<string>"
}
],
"offset": 123,
"total": 123
}{
"error": "experiment not found",
"request_id": "req_019462a4-b1c2-7def-8901-23456789abcd"
}{
"error": "experiment not found",
"request_id": "req_019462a4-b1c2-7def-8901-23456789abcd"
}{
"error": "experiment not found",
"request_id": "req_019462a4-b1c2-7def-8901-23456789abcd"
}{
"error": "experiment not found",
"request_id": "req_019462a4-b1c2-7def-8901-23456789abcd"
}Authorizations
Biscuit-based bearer token. Obtain tokens from the Adaptyv Portal or via the /tokens endpoint. Tokens encode organization membership and role-based capabilities; the API verifies the token's cryptographic signature and authorization claims before processing requests. Use /tokens/attenuate to create restricted tokens for delegation.
Query Parameters
Maximum number of items to return (1-100, default 50).
Number of items to skip (default 0).
Filter expression in s-expression syntax.
Comparison: eq(field,value), neq(field,value), gt(field,value),
lt(field,value), gte(field,value), lte(field,value),
contains(field,substring)
Range/set: between(field,lo,hi), in(field,v1,v2,...)
Logical: and(expr1,expr2,...), or(expr1,expr2,...), not(expr)
Null checks: is_null(field), is_not_null(field)
JSONB access: at(field,key) — e.g. eq(at(metadata,score),42)
Cast functions: float(expr), int(expr), text(expr),
timestamp(expr), date(expr)
Example: and(gte(created_at,2026-01-01),eq(status,draft))
Free-text search term applied to searchable columns.
Sort expression. Supports multi-column sort (comma-separated, up to 8), JSONB path access, and type casts.
Three accepted surface forms produce the same ordering:
- Canonical —
desc(field)/asc(field); also wraps casts andat(...)JSONB path access. Example:asc(date(at(metadata,start_date))). - Prefix short form —
-field(descending),+fieldor barefield(ascending). GitHub / Stripe / Jira convention. Bare field only; no casts. - Suffix short form —
field:asc/field:desc. Also bare field.
Examples: -created_at, -created_at,+name, created_at:desc,
desc(created_at),asc(name), asc(at(metadata,score)).
Response
Experiment list
Paginated list response with offset-based navigation metadata.
All list endpoints return this shape. Use offset and limit query
parameters to page through results; total reports how many items
match the query across all pages.
Number of items in this response.
The page of results.
Show child attributes
Show child attributes
Offset used for this page (mirrors the offset query parameter).
Total number of items matching the query (across all pages).
Was this page helpful?