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, required)

The settings object you plan to submit. Keys must match the tool's schema. Use a single object here; to check a batch, validate one representative job.

jobName

(string, optional)

If provided, validate-job also checks that the name is not already taken, so you can catch the conflict before submitting.

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.

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. "settings" is a single object,
8# and its keys must match the tool's schema from GET /tools.
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}