---
title: "POST /v1/jobs/{jobId}/plate-config"
description: "Save a job's plate type"
full: true
---

**Auth:** required. Send an `ivy_` API key (`Authorization: Bearer ivy_…` or `X-Ivy-Api-Key`), a Clerk session JWT (`Authorization: Bearer …`) or the Clerk `__session` cookie (browser sessions). See [Authentication](/docs/api/authentication).

Records the plate type (and optionally the assay use case) chosen for a job you can write to. The values are written to the `plate_config` entry of the provenance in the job's manifest, together with the time and the user who saved them, and the job's latest-manifest pointer is moved to the new manifest. A second call overwrites the previous `plate_type_id` and `use_case`.

`plate_type_id` is stored as sent; it is not checked against the plate catalogue. A project viewer cannot save; saving returns 404 for them, the same as for a job that does not exist. Only `POST` is served on this path.

## Request

#### Path parameters

- `jobId` (string (uuid)) —
UUID of the job.

#### Request body

- `plate_type_id` (string) —
Plate type identifier, stored as sent.

- `use_case` (string) —
Assay use case, stored as sent. Stored as `null` when omitted.

##### Example

```json
{
  "plate_type_id": "corning-3570",
  "use_case": "fluorescence_imaging"
}
```

## Responses

### `200` OK

The plate configuration was saved

Response shape:

- `success` (enum (true)) —

### `400` Bad Request

The job id is missing, or `plate_type_id` is missing or empty

Response shape: `object`

### `401` Unauthorized

Authentication required

Response shape: `object`

### `404` Not Found

The job does not exist, you cannot write to it (a project viewer cannot), it is outside your API key's project scope, or the id is not a job UUID. All of these return the same body.

Response shape: `object`

### `409` Conflict

The job's current manifest pointer names an object this caller may not use, so nothing was written (`code` is `MANIFEST_POINTER_REFUSED`)

Response shape: `object`

### `429` Too Many Requests

Rate limit exceeded

Response shape: `object`

### `500` Internal Server Error

The job row could not be loaded, or saving failed

Response shape: `object`

**curl**

```bash
curl -X POST 'https://ivybiosciences.com/api/v1/jobs/{jobId}/plate-config' \
  -H "Authorization: Bearer $IVY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
  "plate_type_id": "corning-3570",
  "use_case": "fluorescence_imaging"
}'
```

**JavaScript**

```js
const res = await fetch('https://ivybiosciences.com/api/v1/jobs/{jobId}/plate-config', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${process.env.IVY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
  "plate_type_id": "corning-3570",
  "use_case": "fluorescence_imaging"
}),
});
const data = await res.json();
```

**Python**

```python
import os, requests

res = requests.post(
    "https://ivybiosciences.com/api/v1/jobs/{jobId}/plate-config",
    headers={"Authorization": f"Bearer {os.environ['IVY_API_KEY']}"},
    json={
  "plate_type_id": "corning-3570",
  "use_case": "fluorescence_imaging"
},
)
data = res.json()
```
