API Documentation
Overview
API Key
MCP Server
SDK
CLI
View available tools and configurations
Overview
Python SDK Reference
End to End example
List custom tools
Get a custom tool
Create a custom tool
Update a custom tool
Delete a custom tool
Create a source upload
Build a custom tool
List build logs
Cancel a custom tool build
Run a custom tool
Publish a custom tool version
List custom tool versions
Validate Job
/api/validate-jobThe POST API endpoint /validate-job runs the same validation as /submit-job, but without submitting the job and at no cost. Use it as a pre-flight check before /submit-job: send the type and settings you plan to submit, and it reports whether the payload is valid, and if not, which fields are missing or wrong.
Parameters:
type
(string, required)
The tool name to validate against, for example "esmfold". Use a name from GET /tools.
settings
(object or array, required)
The settings object you plan to submit. Keys must match the tool's schema. To validate a batch, pass an array of settings objects, up to 1000 per request.
jobName
(string, optional)
If provided, validate-job also checks that the name is not already taken, so you can catch the conflict before submitting.
jobNames
(array, optional)
Batch only. One name per settings object, as you would pass to /submit-batch.
Reading the response: the request returns 200; check the valid field. When valid is true, normalized is your settings with defaults filled in, ready to pass straight to /submit-job. When valid is false, error is the first problem to fix; fix it and validate again until it passes. missing_fields lists required inputs still needed (each with an example), but can be empty when the validator stops at the first error. For a batch, results has one verdict per settings object, in order, and valid is true only if all of them passed.
HTTP Response Status Codes
| Status code | Description |
|---|---|
| 200 | Validation ran - read the "valid" field in the response body |
| 400 | Missing or incorrect API key |
| 405 | Method not allowed |
1import requests
2
3api_key = "***************"
4headers = {'x-api-key': api_key}
5base_url = "https://app.tamarind.bio/api/"
6
7# Same "type" and "settings" you plan to submit. Keys must match the tool's
8# schema from GET /tools. To validate a batch, pass a list of settings instead.
9params = {
10 "type": "esmfold",
11 "settings": {
12 "sequence": "MKTAYIAKQRQISFVKSHFSRQLEERLGLIEVQ"
13 }
14}
15result = requests.post(base_url + "validate-job", headers=headers, json=params).json()
16
17if result["valid"]:
18 # result["normalized"] is exactly what to submit (defaults filled in)
19 requests.post(base_url + "submit-job", headers=headers, json={
20 "jobName": "myJobName",
21 "type": params["type"],
22 "settings": result["normalized"],
23 })
24else:
25 print(result["error"])
26 print([f["name"] for f in result.get("missing_fields", [])])Response Format
1{
2 "valid": true,
3 "normalized": {
4 "sequence": "MKTAYIAKQRQISFVKSHFSRQLEERLGLIEVQ"
5 },
6 "source": "tools-v2-global"
7}