---
title: Batch Jobs
description: Submit up to 100 jobs in one POST, each with its own jobType and parameters, then read up to 200 of them per status call — batch-enabled tools only.
tags:
  - rest
  - batch
  - parallel
---
The Batch Jobs API submits many jobs in one request. Reach for it when you'd otherwise loop the [Jobs API](/docs/api/rest-jobs) over a list of inputs: each entry in `jobs[]` carries its own `jobType` and `parameters`, and the route records every entry as its own job.

  intermediate
  10 min
  [authentication](/docs/api/authentication), [rest-jobs](/docs/api/rest-jobs)

## Batch Jobs API

Submit up to 100 jobs in one request. Each entry names its own tool and parameters, and each becomes an ordinary job you can follow through the [Jobs API](/docs/api/rest-jobs).

**Route:** `https://www.ivybiosciences.com/api/v1/jobs/batch`

Authenticate with `Authorization: Bearer ivy_...` or a Clerk JWT.

---

## Submit Batch

`POST /api/v1/jobs/batch` ([reference](/docs/api/reference/post-v1-jobs-batch))

| Body field | Meaning |
|-----------|---------|
| `jobs` | Required. Array of `{ jobType, parameters, title? }`, 1 to 100 entries |
| `projectId` | Optional project for every job |
| `campaignId` | Optional campaign for every job |
| `batchTag` | Optional label to group the batch |

```bash
curl -X POST https://www.ivybiosciences.com/api/v1/jobs/batch \
  -H "Authorization: Bearer ivy_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "batchTag": "aspirin-analogs",
    "jobs": [
      {"jobType": "admet_ai", "parameters": {"smiles": "CC(=O)Oc1ccccc1C(=O)O"}},
      {"jobType": "admet_ai", "parameters": {"smiles": "CC(=O)Nc1ccc(O)cc1"}}
    ]
  }'
```

The response is `{ submitted, failed, results, batchId }`; each entry in `results` has the request `index`, the new `jobId`, its `jobType` and `status` (`queued` or `failed`).

`jobType` must be one of the batch-enabled tools: `admet_ai`, `deeppurpose`, `rdkit_descriptors`, `esmfold`, `diffdock`, `aizynthfinder`, `pywpem`, `opxrd`, `graphsol`, `reinvent4` or `xtalnet`. Any other type fails the whole request with `400 VALIDATION_ERROR`.

---

## Get Batch Status

`GET /api/v1/jobs/batch?ids=<id1>,<id2>` ([reference](/docs/api/reference/get-v1-jobs-batch)) returns `{ jobs }` with the current record of each job you own, up to 200 IDs per call. `ids` also accepts a JSON array.

---

## Limits

| Limit | Value |
|-------|-------|
| Jobs per request | 100 |
| IDs per status read | 200 |

## Read next

- [Jobs API](/docs/api/rest-jobs) — single job submission
- [Job Types Catalog](/docs/api/job-types) — available tools
- [Rate Limits](/docs/api/rate-limits) — concurrency limits
