Register a therapeutic candidate under a project.
The service creates the candidate row, the baseline variant (v1),
its chain rows, and any source-antibody / antigen junction rows —
atomically. Any failure after the candidate insert rolls the
candidate row back, so the DB is never left with an orphaned
candidate. Cross-org references (source_antibody_ids,
antigen_ids, chain-level source_antibody_id /
constant_region_id) surface as 404 before any mutation.
Plan gate. None — registering candidates is free. Plan gates apply at submit time (humanization / structure / complex endpoints).
Cost: write — burns rate + quota. Does not debit credits.
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body for POST /v1/therapeutic-candidates.
Mirrors :class:app.schemas.candidates.CandidateCreate but annotated
for the /v1 OpenAPI surface. initial_chains is required — the
service auto-creates the baseline variant (v1) and its chains
atomically; failures roll the candidate row back, so the DB never
ends up with a candidate missing its baseline.
Project the candidate belongs to. Must be owned by the caller's org.
"7b4a3c0f-2e6d-4c7a-9e8f-1d3b5a2c4e6f"
Short human label (e.g. anti-HER2 mab).
1 - 120"anti-HER2 mab"
Molecular format — see the envelope's format field.
mab, nanobody, scfv, fc_fusion, bispecific_kih, bispecific_crossmab, bispecific_common_lc, bite, dart, dvd_ig, tandem_scfv, trispecific_tandem_scfv, trispecific_igg_scfv, trispecific_knh_scfv Chain specs used to build the baseline variant (v1). At least one chain is required. References in the chain specs (source_antibody_id, constant_region_id) are scope-checked before insert; custom constant-region rows must belong to the caller's org, but the built-in library (org_id IS NULL) is always accessible.
1Therapeutic modality. Defaults to naked_antibody.
naked_antibody, adc, car, radioconjugate, t_cell_engager Format-specific metadata (bispecific arm assignments, etc.).
Optional freeform note.
IDs of parental antibodies to link at create time. Every id must walk back to the caller's org; cross-org ids return 404.
IDs of antigens this candidate targets. Cross-org ids return 404.
Successful Response
A therapeutic candidate as returned by /v1.
Carries the junction-table IDs (source antibodies, antigens) and the
initial_variant_id surfaced by create_candidate so a caller
can submit pipelines against it without a second round-trip.
Opaque therapeutic-candidate identifier (UUID).
"c0f5e4b1-a7d2-4e0b-9f8c-1b2d3e4f5a6b"
Project this candidate belongs to.
"7b4a3c0f-2e6d-4c7a-9e8f-1d3b5a2c4e6f"
Short human label shown in dashboards and logs.
Molecular format. Single-arm (mab, nanobody, scfv, fc_fusion) require one H+L pair or a single-chain spec. Multi-arm formats require all arms' chain specs at create time.
mab, nanobody, scfv, fc_fusion, bispecific_kih, bispecific_crossmab, bispecific_common_lc, bite, dart, dvd_ig, tandem_scfv, trispecific_tandem_scfv, trispecific_igg_scfv, trispecific_knh_scfv Therapeutic modality. naked_antibody is the default; adc and radioconjugate require a subsequent ADC-design record before payload synthesis.
naked_antibody, adc, car, radioconjugate, t_cell_engager ISO-8601 timestamp (UTC) when the candidate was registered.
ISO-8601 timestamp (UTC) of the most recent mutation.
Polymorphic discriminator. Always therapeutic_candidate.
"therapeutic_candidate"Free-form metadata bag — the bispecific formats use this for arm assignments; other formats leave it empty.
Optional freeform note shown alongside the candidate.
Source (parental) antibodies linked to this candidate. Maintained via the /v1/therapeutic-candidates/{id}/source-antibodies/{sa_id} endpoints.
Antigens this candidate targets. Maintained via the /v1/therapeutic-candidates/{id}/antigens/{antigen_id} endpoints.
The baseline variant (v1) auto-created alongside this candidate. Populated on create responses; null on read responses — to walk variants post-creation, list them via the variants resource (not yet exposed in /v1, Phase 3 follow-up).