Back to Claude Scientific Skills

Adaptyv Bio Foundry API — Complete Endpoint Reference

scientific-skills/adaptyv/references/api-endpoints.md

2.38.019.6 KB
Original Source

Adaptyv Bio Foundry API — Complete Endpoint Reference

Base URL: https://foundry-api-public.adaptyvbio.com/api/v1 OpenAPI spec: GET /openapi.json

Table of Contents


Experiments

POST /experiments — Create experiment

Creates a new experiment. Starts in Draft status by default.

Request body:

FieldTypeRequiredDescription
namestringYesHuman-readable name
experiment_specExperimentSpecYesExperiment definition (see below)
skip_draftbooleanNo (default false)Bypass Draft, go straight to WaitingForConfirmation
auto_accept_quotebooleanNo (default false)Auto-accept quote and create invoice
webhook_urlstring/nullNoURL for status-change POST notifications

ExperimentSpec:

FieldTypeRequiredDescription
experiment_typestringYesaffinity, screening, thermostability, fluorescence, or expression
methodstringRequired for binding typesbli or spr
target_iduuidRequired for binding typesTarget UUID from catalog
sequencesobjectYesMap of name → amino acid string or rich object
n_replicatesintegerRecommended (default 3)Technical replicates (min 1)
antigen_concentrationsnumber[]No (affinity only)Defaults to [1000.0, 316.2, 100.0, 31.6, 0.0] nM
parametersobjectNoExperiment-specific settings

Field requirements by experiment type:

FieldAffinityScreeningThermostabilityFluorescenceExpression
experiment_typerequiredrequiredrequiredrequiredrequired
methodrequiredrequired
target_idrequiredrequired
sequencesrequiredrequiredrequiredrequiredrequired
n_replicatesrecommendedrecommendedoptionaloptionaloptional
antigen_concentrationsoptional

Response (201):

FieldTypeDescription
experiment_idstringUUID of new experiment
errorstring/nullError message if validation fails
stripe_hosted_invoice_urlstring/nullPresent when auto_accept_quote created an invoice
stripe_invoice_idstring/nullStripe invoice ID

Status codes: 201, 400, 401, 403, 404


GET /experiments — List experiments

Lists experiments accessible to caller, sorted by creation date (newest first).

Query params: limit, offset, filter, search, sort

Response item:

FieldTypeDescription
iduuidUnique identifier
codestringe.g., "EXP-2024-001"
namestring/nullHuman-readable name
statusExperimentStatusCurrent lifecycle status
experiment_typeExperimentTypeaffinity/screening/thermostability/fluorescence/expression
results_statusResultsStatusnone/partial/all
created_atdatetimeISO 8601
experiment_urlstringURL to Foundry portal
stripe_invoice_urlstring/nullInvoice URL
stripe_quote_urlstring/nullQuote URL

Status codes: 200, 401


GET /experiments/{experiment_id} — Get experiment

Returns full metadata for a single experiment.

Path param: experiment_id (uuid)

Response:

FieldTypeDescription
iduuidUnique identifier
codestringExperiment code
statusExperimentStatusCurrent status
experiment_specExperimentSpecFull experiment definition
results_statusResultsStatusnone/partial/all
created_atdatetimeISO 8601
experiment_urlstringPortal URL
costsobjectCost breakdown

Status codes: 200, 401, 404, 500


PATCH /experiments/{experiment_id} — Update experiment

Modify an existing experiment. Draft experiments allow full edits; after quote generation, only name, description, and webhook_url are editable.

Path param: experiment_id (uuid)

Request body: All fields optional — only provided fields are updated.

Status codes: 200, 400, 401, 404, 409


POST /experiments/{experiment_id}/submit — Submit experiment

Submits a draft experiment for review. Advances from Draft to WaitingForConfirmation.

Path param: experiment_id (uuid)

Response:

FieldTypeDescription
experiment_idstringExperiment UUID

Status codes: 200, 401, 403, 404, 409, 500


POST /experiments/cost-estimate — Estimate cost

Calculates cost without creating an experiment.

Request body:

json
{
  "experiment_spec": {
    "experiment_type": "screening",
    "method": "bli",
    "target_id": "...",
    "sequences": {"seq1": "MKTL..."},
    "n_replicates": 3
  }
}

Response:

FieldTypeDescription
pricing_versionstringe.g., "v1_2026-01-20"
assayobjectPer-type costs with base and replicate pricing
materialsobjectTarget material costs (binding experiments)
total_centsintegerSum in USD cents

All prices exclude VAT; taxes calculated at invoicing. Targets without self-service pricing return incomplete estimates.

Status codes: 200, 400, 401


GET /experiments/{experiment_id}/quote — Get quote

Returns quote metadata (totals, currency, status, expiration).

Path param: experiment_id (uuid)

Response:

FieldTypeDescription
experiment_idstringExperiment UUID
stripe_quote_urlstringStripe quote URL
amount_totalint64Total in smallest currency unit
amount_subtotalint64Subtotal
currencystringISO currency code (e.g., "usd")
statusstringQuote status
expires_atdatetime/nullExpiration time

Status codes: 200, 401, 403, 404, 500


GET /experiments/{experiment_id}/quote/pdf — Get quote PDF

Returns the quote as a PDF file (application/pdf).

Path param: experiment_id (uuid)

Status codes: 200, 401, 403, 404, 500


POST /experiments/{experiment_id}/quote/confirm — Accept quote (by experiment)

Accepts Stripe quote, creates draft invoice, transitions to WaitingForMaterials.

Path param: experiment_id (uuid)

Request body:

FieldTypeRequiredDescription
purchase_order_numberstring/nullNoPO number for your records
notesstring/nullNoReserved

Response:

FieldTypeDescription
idstringQuote ID
statusStripeQuoteStatusNew status
hosted_invoice_urlstring/nullStripe payment URL
invoice_idstring/nullGenerated invoice ID

Status codes: 200, 401, 403, 404, 409


GET /experiments/{experiment_id}/invoice — Get invoice

Returns invoice metadata including hosted payment URL.

Path param: experiment_id (uuid)

Status codes: 200, 401, 403, 404, 500


GET /experiments/{experiment_id}/results — List results for experiment

Returns all analysis results for a specific experiment.

Path param: experiment_id (uuid) Query params: limit, offset, filter, sort

Status codes: 200, 400, 401, 403, 404


GET /experiments/{experiment_id}/sequences — List sequences for experiment

Returns all sequences for a specific experiment, sorted newest first.

Path param: experiment_id (uuid) Query params: limit, offset, search, sort

Status codes: 200, 400, 401, 403, 404


GET /experiments/{experiment_id}/updates — List experiment updates

Returns updates for one experiment, oldest first. Types: status_change, progress, error.

Path param: experiment_id (uuid) Query params: limit, offset, filter, sort

Filter example: filter=eq(type,status_change)


Sequences

GET /sequences — List sequences

Returns sequences from all experiments, sorted newest first.

Query params: limit, offset, search, sort, experiment_id (filter by experiment UUID)

Response item:

FieldTypeDescription
iduuidUnique identifier
namestring/nullOptional name
aa_previewstring/nullTruncated preview (first 50 chars)
lengthint32Sequence length in amino acids
experiment_iduuidParent experiment
experiment_codestringHuman-readable experiment code
is_controlbooleanWhether this is a control
created_atdatetimeCreation timestamp

Status codes: 200, 401


GET /sequences/{sequence_id} — Get sequence

Returns full details including complete amino acid string.

Path param: sequence_id (uuid)

Response:

FieldTypeDescription
iduuidUnique identifier
aa_stringstring/nullComplete amino acid sequence
lengthint32Length in amino acids
is_controlbooleanControl flag
metadataobjectSequence-level annotations
experimentobjectParent experiment reference
created_atdatetimeCreation timestamp

Status codes: 200, 401, 403, 404, 500


POST /sequences — Add sequences to experiment

Appends sequences to a Draft experiment identified by its human-readable code.

Request body:

FieldTypeRequiredDescription
experiment_codestringYese.g., "PROJ-001"
sequencesarrayYesArray of sequence entries

Each sequence entry:

FieldTypeRequiredDescription
aa_stringstringYesAmino acid sequence
namestringNoHuman-readable name
controlbooleanNoWhether this is a control
metadataobjectNoAnnotations

Response (201):

FieldTypeDescription
added_countint32Number of sequences added
experiment_idstringExperiment UUID
experiment_codestringExperiment code
sequence_idsarrayIDs of added sequences

Status codes: 201, 400, 404, 409 (experiment not in Draft), 500


Results

GET /results — List results

Lists completed analysis results, sorted newest first. Results appear when results_status reaches partial or all.

Query params: limit, offset, filter, search, sort

Response item:

FieldTypeDescription
iduuidResult identifier
titlestringHuman-readable title
experiment_iduuidAssociated experiment
result_typestringe.g., "affinity", "thermostability"
summaryarrayKey results (type-specific, see below)
metadataobjectExtended metadata (e.g., instrument info)
data_package_urlstring/nullDownload URL for raw data package
created_atdatetimeWhen result was generated

AffinityResult summary fields: kd_mean, kd_std, kon_mean, kon_log_std, koff_mean, koff_std, replicates (array with per-replicate kd, kon, koff, binding_strength, kon_method, koff_method, replicate index), sequence, target_id

ThermostabilityResult summary fields: Tm values and melting curves

Status codes: 200, 401


GET /results/{result_id} — Get result

Returns detailed result data including full summary array.

Path param: result_id (uuid)

Status codes: 200, 401, 403, 404, 500


Targets

GET /targets — List targets

Lists validated antigens available for experiments.

Query params:

ParameterTypeDescription
limitintMax items (1-100, default 50)
offsetintSkip count
searchstringFree-text search on product name
sortstringSort expression
selfservice_onlybooleanOnly targets with self-service pricing
show_conjugatedbooleanInclude conjugated targets (default: unconjugated only)
detailedbooleanPopulate details block with enrichment data

Response item:

FieldTypeDescription
iduuidTarget UUID (use as experiment_spec.target_id)
namestringTarget name
vendor_namestringVendor name
catalog_numberstringVendor catalog/SKU number
urlstringTarget URL
pricingobject/nullSelf-service pricing (null = custom quote required)
detailsobject/nullEnrichment data (gene names, structures, sequence, bioactivity)

Status codes: 200, 401


GET /targets/{target_id} — Get target

Returns catalog record for a single target.

Path param: target_id (uuid)

Status codes: 200, 400, 401, 403, 404, 500


POST /targets/request-custom — Submit custom target request

Submit a new custom target for staff review. At least one of sequence or pdb_id must be provided.

Request body:

FieldTypeRequiredDescription
namestringYesDisplay name
product_idstringYesMust be unique within organization
sequencestring/nullAt least oneAmino acid sequence
pdb_idstring/nullAt least onePDB identifier
pdb_filestring/nullNoPDB file content
molecular_weightnumber/nullNoWeight in kDa
notestring/nullNoAdditional notes

Status codes: 201, 400, 401, 403, 500


GET /targets/request-custom — List custom target requests

Returns custom target requests for your organization, sorted newest first.

Query params: limit, offset, filter, sort

Filter example: filter=eq(status,pending_review)


GET /targets/request-custom/{request_id} — Get custom target request

Path param: request_id (uuid)

Response:

FieldTypeDescription
iduuidRequest identifier
namestringTarget name
product_idstringYour product ID
statusstringe.g., "pending_review"
material_idstring/nullLinked catalog ID if approved
molecular_weightnumber/nullWeight in kDa
notestring/nullUser notes
created_atdatetimeCreated
updated_atdatetimeLast updated

Status codes: 200, 401, 403, 404, 500


Quotes

GET /quotes — List quotes

Returns all quotes for caller's organization.

Query params: limit, offset, filter, sort

Response item:

FieldTypeDescription
idstringQuote identifier
quote_numberstringHuman-readable quote number
organization_iduuidOrganization
amount_centsintAmount in cents
currencystringISO 4217 code
statusStripeQuoteStatusQuote status
valid_untildatetimeExpiration
created_atdatetimeCreation timestamp

GET /quotes/{quote_id} — Get quote

Returns full quote document with itemized pricing.

Path param: quote_id (string, e.g., "qt_1Abc2DefGhi")

Response:

FieldTypeDescription
idstringQuote identifier
quote_numberstringReference number
organization_iduuidOrganization
organization_namestringOrganization name
line_itemsarrayItemized pricing
subtotal_centsintSubtotal in cents
tax_centsintTax in cents
total_centsintTotal in cents
currencystringISO 4217
statusStripeQuoteStatusCurrent status
valid_untildatetimeExpiration
notesstringSpecial pricing info
terms_and_conditionsstringTerms
stripe_quote_urlstringStripe URL
created_atdatetimeCreated

Status codes: 200, 401, 403, 404, 500


POST /quotes/{quote_id}/confirm — Accept quote

Finalizes quote, creates draft invoice, advances experiment to WaitingForMaterials.

Path param: quote_id (string)

Request body:

FieldTypeRequiredDescription
purchase_order_numberstring/nullNoPO number
notesstring/nullNoReserved

Response: id, status, hosted_invoice_url, invoice_id

Status codes: 200, 403, 404, 409, 500


POST /quotes/{quote_id}/reject — Reject quote

Cancels quote; linked experiment reverts to Draft.

Path param: quote_id (string)

Request body:

FieldTypeRequiredDescription
reasonQuoteRejectionReasonYesPrimary reason
feedbackstring/nullNoAdditional feedback

Response: id, status (canceled)

Status codes: 200, 403, 404, 409, 500


Tokens

GET /tokens — List tokens

Returns all tokens (root and attenuated) the caller owns.

Query params: limit, offset

Response item:

FieldTypeDescription
idstringToken identifier
namestringHuman-readable label
kindstring"root" or "attenuated"
created_atdatetimeCreated
expires_atdatetime/nullExpiration (null = no expiry)
revoked_atdatetime/nullRevocation timestamp
parent_token_idstring/nullParent (null for root)
root_token_idstring/nullRoot of derivation tree
attenuation_specobject/nullRestrictions (null for root)

POST /tokens/attenuate — Attenuate token

Creates a restricted version of an existing token using Biscuit cryptographic attenuation.

Request body:

FieldTypeRequiredDescription
tokenstringYesExisting token (abs0_{slug}{biscuit_base64})
attenuationAttenuationSpecYesRestrictions to apply
namestringYesHuman-readable label
attenuated_parent_token_iduuid/nullNoParent ID for chained attenuation

Restriction types: Organization, Resource (experiments/results), Action (read/create/update), Expiry

Response (201): id (database ID), token (new attenuated token string)

Status codes: 201, 400, 401, 403


POST /tokens/revoke — Revoke token and lineage

Revokes the calling token's root and all attenuated descendants. Idempotent.

Response:

FieldTypeDescription
token_idstringRoot token ID revoked
revoked_atdatetimeRevocation timestamp
children_revokedint64Child tokens newly revoked

Status codes: 200, 403, 404


Updates

GET /updates — List updates

Returns the experiment update feed (newest first): status changes, progress, errors.

Query params: limit, offset, filter, sort

Filter examples:

  • filter=eq(experiment_id,<uuid>)
  • filter=in(experiment_id,uuid1,uuid2)
  • filter=eq(type,status_change)

Response item:

FieldTypeDescription
idstringUpdate identifier
experiment_iduuidAssociated experiment
experiment_codestringHuman-readable code
namestringUpdate description
timestampdatetimeWhen the update occurred

Feedback

POST /feedback/submit — Submit feedback

For bug reports, feature requests, or general feedback.

Request body:

FieldTypeRequiredDescription
request_uuiduuidYesUUID from the problematic API request
feedback_typeFeedbackTypeYesfeature_request, feedback, or bug_report
titlestring/nullNoShort title
json_bodyobject/nullAt least oneStructured error details
human_notestring/nullAt least oneFree-form description

Response (201): reference (feedback reference), message (confirmation)

Status codes: 201, 400, 401, 500