Create experiment
Creates a new experiment request for the Adaptyv Foundry platform.
The payload captures the target (from the catalog), antibody sequences, replicate plan, assay parameters, optional metadata, and an optional webhook for notifications. By default, experiments are created in Draft status so clients can review inputs before submission.
Set skip_draft: true to bypass Draft status and submit directly for processing.
This is useful for automated pipelines with pre-validated payloads that
don’t require manual review. The experiment will be created in
“Waiting for confirmation” status instead of Draft.
API-originated experiments are automatically assigned to the organization’s API submissions project for traceability.
ExperimentSpec fields
Validation is strict: fields that are not applicable to a given experiment
type (e.g., method on a non-binding type) cause a 400 rejection. Multiple
validation errors are accumulated and returned together so callers can fix
everything in one round-trip.
| Field | Type | Description |
|---|---|---|
experiment_type | string | Required. One of affinity, screening, thermostability, fluorescence, expression, epitope_binning, enzyme_activity. |
method | string | Required for affinity/screening (bli or spr). Rejected for all other types. |
target_id | string | Target UUID from the catalog. Required for affinity, screening, and epitope_binning. Rejected for non-binding types. |
sequences | object | Required. Map of sequence name to amino acid string. epitope_binning requires exactly 4-28 sequences in multiples of 4. |
n_replicates | integer | Optional for most types (default 3, range 1-5). Rejected for epitope_binning. |
antigen_concentrations | array | affinity only; optional, defaults to [1000.0, 316.2, 100.0, 31.6, 0.0] nM. |
parameters | object | Optional. Experiment-specific settings |
Sequence Formats
The sequences field accepts two formats:
Simple format — amino acid string only:
"sequences": {
"seq1": "EVQLVESGGGLVQPGGSLRLSCAAS"
}
Object format — with metadata:
"sequences": {
"seq1": {
"aa_string": "EVQLVESGGGLVQPGGSLRLSCAAS",
"control": false,
"metadata": { "type": "scfv", "tag_location": "C" }
}
}
Example: Affinity (BLI)
Full kinetic characterization measuring on/off rates and KD.
Target ID 019a03da-b87f-7e15-8b02-cef171c9871d is Human PD-L1 from the catalog.
{
"name": "PD-L1 affinity panel",
"experiment_spec": {
"experiment_type": "affinity",
"method": "bli",
"target_id": "019a03da-b87f-7e15-8b02-cef171c9871d",
"sequences": {
"pembrolizumab_vh": "QVQLVQSGVEVKKPGASVKVSCKASGYTFTNYYMYWVRQAPGQGLEWMGGINPSNGGTNFNEKFKNRVTLTTDSSTTTAYMELKSLQFDDTAVYYCARRDYRFDMGFDYWGQGTTVTVSS",
"pembrolizumab_vl": "EIVLTQSPATLSLSPGERATLSCRASKGVSTSGYSYLHWYQQKPGQAPRLLIYLASYLESGVPARFSGSGSGTDFTLTISSLEPEDFAVYYCQHSRDLPLTFGGGTKVEIK"
},
"n_replicates": 3,
"antigen_concentrations": [1000.0, 316.2, 100.0, 31.6, 0.0]
},
"webhook_url": "https://example.com/webhook"
}
Example: Screening (SPR)
High-throughput yes/no binding assessment using SPR.
{
"name": "Library screening round 1",
"experiment_spec": {
"experiment_type": "screening",
"method": "spr",
"target_id": "019a03da-b87f-7e15-8b02-cef171c9871d",
"sequences": {
"clone_A1": "EVQLVESGGGLVQPGGSLRLSCAASGFTFSSYAMSWVRQAPGKGLEWVSAISGSGGSTYYADSVKGRFTISRDNSKNTLYLQMNSLRAEDTAVYYCAKDRLSITIRPRYYGLDVWGQGTLVTVSS",
"clone_A2": "QVQLVQSGAEVKKPGASVKVSCKASGYTFTSYGISWVRQAPGQGLEWMGWISAYNGNTNYAQKLQGRVTMTTDTSTSTAYMELRSLRSDDTAVYYCARDVGYCTDYSCYFDYWGQGTLVTVSS",
"clone_A3": "EVQLLESGGGLVQPGGSLRLSCAASGFTFSTYAMSWVRQAPGKGLEWVSSISSGGSYIYYADSVKGRFTISRDNAKNSLYLQMNSLRAEDTAVYYCARRPWGYYALDIWGQGTTVTVSS"
},
"n_replicates": 2
}
}
Example: Thermostability
Measures melting temperature (Tm) via differential scanning fluorimetry. No target required.
{
"name": "Lead candidates stability",
"experiment_spec": {
"experiment_type": "thermostability",
"sequences": {
"candidate_1": "QVQLVQSGAEVKKPGASVKVSCKASGYTFTSYAMHWVRQAPGQRLEWMGWINAGNGNTKYSQKFQGRVTITRDTSASTAYMELSSLRSEDTAVYYCARAKFGATGAFDIWGQGTMVTVSS",
"candidate_2": "EVQLVESGGGLVQPGGSLRLSCAASGFNIKDTYIHWVRQAPGKGLEWVARIYPTNGYTRYADSVKGRFTISADTSKNTAYLQMNSLRAEDTAVYYCSRWGGDGFYAMDYWGQGTLVTVSS"
},
"n_replicates": 3,
"parameters": {
"buffer": "PBS",
"ph": 7.4
}
}
}
Example: Fluorescence
Fluorescence-based protein characterization measuring intrinsic properties. No target required.
{
"name": "Fluorescence characterization",
"experiment_spec": {
"experiment_type": "fluorescence",
"sequences": {
"variant_1": "QVQLVQSGAEVKKPGASVKVSCKASGYTFTSYDINWVRQATGQGLEWMGWMNPNSGNTGYAQKFQGRVTMTRDTSISTAYMELRSLRSDDTAVYYCARGGFYGSTIWFDYWGQGTLVTVSS",
"variant_2": "EVQLVESGGGLVQPGGSLRLSCAASGFTFSSYWMSWVRQAPGKGLEWVANIKQDGSEKYYVDSVKGRFTISRDNAKNSLYLQMNSLRAEDTAVYYCARDRYGNYVDYWGQGTLVTVSS"
},
"n_replicates": 3
}
}
Example: Expression
Protein expression screening measuring yield and quality. No target required.
{
"name": "Expression screening",
"experiment_spec": {
"experiment_type": "expression",
"sequences": {
"construct_A": "QVQLVQSGAEVKKPGASVKVSCKASGYTFTSYGISWVRQAPGQGLEWMGWISAYNGNTNYAQKLQGRVTMTTDTSTSTAYMELRSLRSDDTAVYYCARDVGYCTDYSCYFDYWGQGTLVTVSS",
"construct_B": "EVQLVESGGGLVQPGGSLRLSCAASGFNIKDTYIHWVRQAPGKGLEWVARIYPTNGYTRYADSVKGRFTISADTSKNTAYLQMNSLRAEDTAVYYCSRWGGDGFYAMDYWGQGTLVTVSS"
},
"n_replicates": 2
}
}
Example: With skip_draft=true (Auto-Submit)
Bypass Draft status and submit directly for processing:
{
"name": "Pre-validated batch",
"skip_draft": true,
"experiment_spec": {
"experiment_type": "thermostability",
"sequences": {
"seq1": "EVQLVESGGGLVQPGGSLRLSCAASGFTFSSYAMSWVRQAPGKGLEWVSAISGSGGSTYYADSVKGRFTISRDNSKNTLYLQMNSLRAEDTAVYYCAKDRLSITIRPRYYGLDVWGQGTLVTVSS"
},
"n_replicates": 2
}
}
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.
Body
Request payload for creating a new experiment.
Created experiments start in Draft status. Use PATCH /experiments/{id}
to modify existing experiments.
Structured experiment definition (type, target, sequences, parameters)
Human-readable name for the experiment
"PD-L1 affinity panel"
Atomic create-and-pay: accept the quote and initiate payment in the same request.
When true, after creating the experiment and its Stripe quote the
server immediately accepts the quote and finalizes the invoice. It is
non-settling for machine rails: create-and-pay never settles or
emits a payment 402; the client settles at /invoices/{id}/pay.
- No header /
async_invoice— the quote is accepted and a draft invoice is created (today's behaviour). Responds201 Createdwithstripe_invoice_idandstripe_hosted_invoice_url. - A machine rail (
mpp-spt/x402-exact) — the (open, unpaid) invoice is finalized and the response is200 OKwith the accepted-quote body plus a HATEOASpaymentpointer to/invoices/{invoice_id}/pay. Follow it to answer the402challenge and settle.
On a failure after the invoice was created, the invoice is
compensated (voided) so the experiment can be retried. Implies
skip_draft: true. A quote must be creatable (target_id + full pricing
available), otherwise the request is rejected with 400.
Optional create-time payment-method selector — the request-body
equivalent of the X-Adaptyv-Payment-Method header.
Absent (the default) selects nothing here; the method is then resolved
from the header, or from the caller's payment policy, exactly as before.
When present it pins the experiment's payment rail (and Stripe account
tier) for its whole lifetime. If the header is also present, the two
must agree, otherwise the request is rejected 400
(payment_method_selector_conflict).
Bypass Draft status and submit directly for processing.
When true, the experiment is created in "Waiting for confirmation"
status instead of Draft, skipping the manual review step. Use this for
automated pipelines with pre-validated payloads.
When an experiment is submitted with skip_draft: true and the target
has existing inventory materials, those materials are automatically
linked to expedite processing.
HTTPS URL for push notifications. Once set, Adaptyv POSTs an
experiment_update event to this URL for every customer-facing update on
the experiment — the same updates that trigger an email notification.
Deliveries are signed with X-Adaptyv-Signature (HMAC-SHA256).
"https://example.com/webhook"
Response
Atomic create-and-pay for a machine rail (auto_accept_quote): the (open, unpaid) invoice is finalized and the payment block points at /invoices/{id}/pay where the client settles. Never settles or challenges at create.
Response after accepting a quote
Confirms the quote acceptance and provides invoice information if applicable.
Quote ID that was accepted
New status (accepted after confirmation)
draft, open, accepted, canceled, stale Stripe-hosted URL where the customer can view and pay the generated invoice
"https://invoice.stripe.com/i/acct_1234/test_5678"
ID of the invoice generated from this quote (if applicable)
Hypermedia pointer to where and how to pay the finalized (open, unpaid)
invoice. Present on the non-settling confirm response — hosted_invoice
for an async-invoice quote, machine for a machine rail. Absent on
other uses of this DTO (e.g. an already-settled response).