POST /v1/jobs/{jobId}/readouts
Save readouts for a job
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.Saves readout rows for a job you can write to. By default each row is upserted into the job's legacy readouts table, keyed by row, column and channel; a row needs a row and col, or a well name they can be derived from, and is dropped otherwise. channel defaults to primary. The endpoint name, if you send endpointName or it can be inferred from the job's parameters, is stored in each row's meta.endpoint.
With useNew: true, rows are instead inserted into the newer readouts table, which requires an endpoint name (from endpointName or inferred from the job's parameters); value is stored as the response and meta as the raw payload. A row without a well or a row and col is dropped.
Rows are stored under the job's own project. If you send projectId and it differs from the job's project, the request returns 400 and nothing is saved. A project viewer cannot save; saving returns 403 for them.
Request
Path parameters
UUID of the job.
Request body
Readouts to save. Must not be empty.
Optional. If sent, it must equal the job's project; it does not choose the project.
Insert into the newer readouts table instead of upserting into the legacy one.
Assay endpoint name. Inferred from the job's parameters when omitted; required with useNew if it cannot be inferred.
Example
Responses
200 OK
upserted or inserted is set according to the target tableResponse shape:
Rows upserted. Present when target is job_outputs_readouts.
Rows inserted. Present when target is readouts.
400 Bad Request
rows is missing or empty; projectId does not match the job's project; useNew is set and no endpoint name was given or could be inferred; or no row was valid. code is INVALID_REQUEST.Response shape: object
401 Unauthorized
Response shape: object
403 Forbidden
code is FORBIDDENResponse shape: object
429 Too Many Requests
Response shape: object
500 Internal Server Error
Response shape: object
Was this page helpful?