Jobs

Submit a single job

Submit a job using an available tool. Protein Solubilization delegates to Jobs and requires submitId; retain it and the unchanged body for retries. Its JSON results contain pipeline run IDs.

This is also how you RUN INFERENCE WITH A FINETUNED MODEL — there is no separate inference endpoint. List your models with GET /finetuned-models; each row's inferenceType is the tool to submit here as type, and its id goes in modelId (or its name in modelName). You can run a model you trained (personalModels) or one a teammate has shared with your organization (organizationModels), and only as its own inferenceType. A name always means your own model when you have one by that name, so send the id to run a teammate's. settings are that inference tool's own inputs, from GET /tools/{name}/schema. For example, a chemprop-finetune model runs as {"jobName": "my-predictions", "type": "chemprop-inference", "modelId": "<id>", "settings": {"smiles": ["CCO"]}}. Training a model is POST /finetune.

post/api/submit-job

Request

  • Base URL: https://app.tamarind.bio
  • URL: https://app.tamarind.bio/api/submit-job
  • Auth: API key in header x-api-key

Request body

submitIdstring

Protein Solubilization requires one new UUID per intent; reuse it with the unchanged request for retries.

jobNamestring required

Name for the job, unique within your account. Characters outside [A-Za-z0-9_.- ] are stripped and whitespace becomes underscores, so a name is sanitised rather than rejected.

typestring required

Tool to run. The available tools are account-scoped — fetch the live list from GET /tools rather than assuming a name.

settingsobject required

Tool-specific settings. The accepted fields differ per tool and per account, so they are not enumerated here: fetch the JSON Schema for the tool you are submitting from GET /tools/{name}/schema and validate against that. POST /validate-job checks a payload for free.

versionstring

Optional custom-tool version returned by the build endpoint, such as v1. Omit it to run the published version.

modelIdstring

Inference with a finetuned model: the model's id from GET /finetuned-models. Read only when type is an inference tool, and type must be that model's inferenceType. Preferred over modelName, because names are not unique: when both are sent, modelId is used. The model must be one you can access and Available; otherwise the submit is refused with a plain-text 400. That is a model you trained, or a teammate's that is shared with your organization (from organizationModels).

modelNamestring

Inference with a finetuned model, by its name from GET /finetuned-models, when you do not have its id. One of modelId or modelName is required when type is an inference tool — except progen2-inference, flowr and helm-gpt, which run their base model when neither is sent.

projectTagstring

An organization project to tag the job(s) with — its project id, or its name. Applies to the whole batch on /submit-batch, and to every job a pipeline creates on /submit-pipeline. Usually optional. It is REQUIRED when your organization has turned on "require a project tag": those accounts get 400 on any submission that does not resolve to an ORGANIZATION project (a personal project does not satisfy the policy). That 400 body carries availableProjects — the projects you may use — so you can retry without looking them up elsewhere.

Example request

{
  "jobName": "my-protein-analysis",
  "type": "alphafold",
  "settings": {
    "sequence": "MKTAYIAKQRQISFVKSHFSRQLEERLGLIEVQ"
  },
  "modelId": "3f6c2a9e-8d41-4b7a-9c55-0e2d7f1a6b90",
  "modelName": "my-solubility-model",
  "projectTag": "8f1c2b64-9a3e-4c77-b0d1-4a2f6e5d8c90"
}

Response

For Protein Solubilization, the JSON body contains success, startedVia="pipeline", and results with each run's Id and handoff. Inspect each handoff; HTTP 200 can be partial. For ordinary tools, the body is PLAIN TEXT, not JSON, and carries no job id — literally <jobName> submitted to queue. A generated client that calls .json() on this response throws on the HAPPY path. POLL THE NAME ECHOED IN THIS BODY, not the one you sent. jobName is NORMALIZED rather than validated: characters outside [A-Za-z0-9_.-] are stripped and whitespace becomes _, so submitting my run! stores my_run and polling my run! afterwards reports an unknown job. Parse the name out of this response and use that as the handle, or pre-normalize before submitting so the two cannot differ.

successboolean required

True only when every expected run handoff is accepted.

startedVia'pipeline' required
resultsobject[] required

Changes

No recorded changes to this operation across all 1 revision of this API.