API Documentation

Validate Job

POST/api/validate-job

The 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 codeDescription
200Validation ran - read the "valid" field in the response body
400Missing or incorrect API key
405Method 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}