Delete a therapeutic candidate
curl --request DELETE \
--url https://api.example.com/v1/therapeutic-candidates/{candidate_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.example.com/v1/therapeutic-candidates/{candidate_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.delete(url, headers=headers)
print(response.text)const options = {method: 'DELETE', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.example.com/v1/therapeutic-candidates/{candidate_id}', 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.example.com/v1/therapeutic-candidates/{candidate_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "DELETE",
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://api.example.com/v1/therapeutic-candidates/{candidate_id}"
req, _ := http.NewRequest("DELETE", 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.delete("https://api.example.com/v1/therapeutic-candidates/{candidate_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/therapeutic-candidates/{candidate_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"code": "insufficient_credits",
"credit_balance": 0,
"credit_cost": 1,
"detail": "Humanization costs 1 credit; balance is 0.",
"instance": "/v1/jobs",
"request_id": "req_01JBX6Y6ZK6N8Q7YJ0F5VX2C3D",
"status": 402,
"title": "Insufficient credits",
"type": "https://docs.kallima.bio/errors/insufficient_credits"
}{
"code": "insufficient_credits",
"credit_balance": 0,
"credit_cost": 1,
"detail": "Humanization costs 1 credit; balance is 0.",
"instance": "/v1/jobs",
"request_id": "req_01JBX6Y6ZK6N8Q7YJ0F5VX2C3D",
"status": 402,
"title": "Insufficient credits",
"type": "https://docs.kallima.bio/errors/insufficient_credits"
}{
"code": "insufficient_credits",
"credit_balance": 0,
"credit_cost": 1,
"detail": "Humanization costs 1 credit; balance is 0.",
"instance": "/v1/jobs",
"request_id": "req_01JBX6Y6ZK6N8Q7YJ0F5VX2C3D",
"status": 402,
"title": "Insufficient credits",
"type": "https://docs.kallima.bio/errors/insufficient_credits"
}{
"code": "insufficient_credits",
"credit_balance": 0,
"credit_cost": 1,
"detail": "Humanization costs 1 credit; balance is 0.",
"instance": "/v1/jobs",
"request_id": "req_01JBX6Y6ZK6N8Q7YJ0F5VX2C3D",
"status": 402,
"title": "Insufficient credits",
"type": "https://docs.kallima.bio/errors/insufficient_credits"
}therapeutic-candidates
Delete a therapeutic candidate
Delete a therapeutic candidate.
Cascade. variants.candidate_id is ON DELETE CASCADE, and
variant_chains / jobs / pipeline result tables cascade from
there — so deleting a candidate drops the full tree underneath it:
every variant, every chain row, every submitted pipeline job, and
every emitted result. The junction rows in
candidate_source_antibodies and candidate_antigens also
cascade; the linked source antibodies and antigens themselves stay
because they’re scoped to the project, not the candidate.
Callers that want to keep pipeline history should archive the candidate at the application layer (rename, tag, stop submitting against it) rather than deleting.
Cost: write — burns rate + quota. Does not debit credits.
DELETE
/
v1
/
therapeutic-candidates
/
{candidate_id}
Delete a therapeutic candidate
curl --request DELETE \
--url https://api.example.com/v1/therapeutic-candidates/{candidate_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.example.com/v1/therapeutic-candidates/{candidate_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.delete(url, headers=headers)
print(response.text)const options = {method: 'DELETE', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.example.com/v1/therapeutic-candidates/{candidate_id}', 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.example.com/v1/therapeutic-candidates/{candidate_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "DELETE",
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://api.example.com/v1/therapeutic-candidates/{candidate_id}"
req, _ := http.NewRequest("DELETE", 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.delete("https://api.example.com/v1/therapeutic-candidates/{candidate_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/therapeutic-candidates/{candidate_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"code": "insufficient_credits",
"credit_balance": 0,
"credit_cost": 1,
"detail": "Humanization costs 1 credit; balance is 0.",
"instance": "/v1/jobs",
"request_id": "req_01JBX6Y6ZK6N8Q7YJ0F5VX2C3D",
"status": 402,
"title": "Insufficient credits",
"type": "https://docs.kallima.bio/errors/insufficient_credits"
}{
"code": "insufficient_credits",
"credit_balance": 0,
"credit_cost": 1,
"detail": "Humanization costs 1 credit; balance is 0.",
"instance": "/v1/jobs",
"request_id": "req_01JBX6Y6ZK6N8Q7YJ0F5VX2C3D",
"status": 402,
"title": "Insufficient credits",
"type": "https://docs.kallima.bio/errors/insufficient_credits"
}{
"code": "insufficient_credits",
"credit_balance": 0,
"credit_cost": 1,
"detail": "Humanization costs 1 credit; balance is 0.",
"instance": "/v1/jobs",
"request_id": "req_01JBX6Y6ZK6N8Q7YJ0F5VX2C3D",
"status": 402,
"title": "Insufficient credits",
"type": "https://docs.kallima.bio/errors/insufficient_credits"
}{
"code": "insufficient_credits",
"credit_balance": 0,
"credit_cost": 1,
"detail": "Humanization costs 1 credit; balance is 0.",
"instance": "/v1/jobs",
"request_id": "req_01JBX6Y6ZK6N8Q7YJ0F5VX2C3D",
"status": 402,
"title": "Insufficient credits",
"type": "https://docs.kallima.bio/errors/insufficient_credits"
}