Skip to content
RagextractAPIStart freeSign-up and sign-in are temporarily unavailable — please check back shortly.

Rows

A row names the thing being asked about. Usually that is one document; when a subject is spread across several — a contract and its amendments — it is a bundle instead.

What a row points at

Two kinds, and the field is subjectType:

  • "file"subjectId is a ds_… id. One document, one row.
  • "bundle"subjectId is a bndl_… id. Several documents answering as one subject, and charged accordingly.

The stored column says dataset where the wire says file. Send "file""dataset" is rejected.

Adding a row computes nothing

A new row on a table with ten columns creates no cells and costs nothing. The cells come into existence when a run creates them, which is also when they are charged.

If the table has standing (auto mode) on, adding documents to the workspace is what triggers a run — not adding a row here.

The document has to be ready

A row can point at a file whose ingest job is still running. Nothing stops you. But a run skips rows whose subject is not readable yet and reports them in skippedRowIds rather than failing — so upload, poll the job to SUCCESS, then run.

List rows

GET/v2/workspaces/:workspaceId/tables/:tableId/rows

Requires Read on the workspace

Every row in the table. Unpaged — there are no offset or limit parameters here.

Rows carry no answer data. Pair this with GET …/cells and join on rowId, or fetch the whole grid in one call from GET …/tables/:tableId.

Request
curl https://api.ragextract.com/v2/workspaces/wks_7Kq2mB4nR8vXpL3d/tables/rev_Qm5xC9bV3nK7sAeR/rows \
  -H "x-api-key: $RAGEXTRACT_API_KEY"
Response
{
  "success": true,
  "total": 1,
  "data": [  {
    "id": "rrow_G3pL8qZ5tN1cH7yU",
    "tableId": "rev_Qm5xC9bV3nK7sAeR",
    "subjectType": "file",
    "subjectId": "ds_M3xJ8pQ1vK5nB7wT",
    "createdAt": 1756108800000,
    "updatedAt": 1756108800000
  }]
}

Add a row

POST/v2/workspaces/:workspaceId/tables/:tableId/rows

Requires Read & write on the workspace

One row per call. Free — no cells, no charge, until a run.

Building a 200-row table means 200 calls, and the write limit is 15 a minute. Pace it, or build the table in the app and drive the runs from here.

Parameters

subjectTypestring · required"file" or "bundle". Anything else is a 400.
subjectIdstring · requiredA ds_… or bndl_… id, matching subjectType, in this workspace.
Request
curl -X POST https://api.ragextract.com/v2/workspaces/wks_7Kq2mB4nR8vXpL3d/tables/rev_Qm5xC9bV3nK7sAeR/rows \
  -H "x-api-key: $RAGEXTRACT_API_KEY" \
  -H "content-type: application/json" \
  -d '{"subjectType": "file", "subjectId": "ds_M3xJ8pQ1vK5nB7wT"}'
Response
{
  "success": true,
  "total": 1,
  "data": {
  "id": "rrow_G3pL8qZ5tN1cH7yU",
  "tableId": "rev_Qm5xC9bV3nK7sAeR",
  "subjectType": "file",
  "subjectId": "ds_M3xJ8pQ1vK5nB7wT",
  "createdAt": 1756108800000,
  "updatedAt": 1756108800000
}
}

Delete a row

DELETE/v2/workspaces/:workspaceId/tables/:tableId/rows/:rowId

Requires Read & write on the workspace

This one really deletes. Columns, tables and bundles archive; a row does not. Its cells go with it, and so do their citations, their confidence scores and the override history underneath them.

The credits that produced those answers are not refunded, and re-adding the same document as a new row means running it again at full cost. The document itself is untouched — it stays in the workspace and stays indexed.

Request
curl -X DELETE https://api.ragextract.com/v2/workspaces/wks_7Kq2mB4nR8vXpL3d/tables/rev_Qm5xC9bV3nK7sAeR/rows/rrow_G3pL8qZ5tN1cH7yU \
  -H "x-api-key: $RAGEXTRACT_API_KEY"
Response
{
  "success": true,
  "total": 1
}