---
title: "PUT /api/v3/submissions/{id}/rows"
method: PUT
path: "/api/v3/submissions/{id}/rows"
tags: ["Submissions"]
---

# PUT /api/v3/submissions/{id}/rows

`PUT /api/v3/submissions/{id}/rows`

## Request

- Base URL: `/` (relative, and the document was published on a file host, not at the API’s origin)
- URL: `/api/v3/submissions/{id}/rows`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/wildmeorg/apis/wildbook-v3-api/docs/api/v3/submissions/:id/rows/put.ts> (a function with typed inputs; its response is checked against the schema)

Replaces all rows; unique clientRowId values required. Invalidates prior validation.

## Path parameters

- `id` string, uuid, required

## Headers

- `If-Match` string, required

## Request body

- SubmissionApiRows
  - `rows` SubmissionApiRow[], required
    - `clientRowId` string, required
    - `fields` object, required: Normalized bulk-import field names. Actual supported fields, required values and types are supplied by capabilities. Nulls and unknown fields are rejected in this contract.

## Response `200`

Success

- SubmissionApiSubmission
  - `id` string, uuid, required
  - `contractVersion` '1', required
  - `revision` integer, required
  - `state` 'draft' | 'validated' | 'queued' | 'importing' | 'imported' | 'failed' | 'needs_reconciliation' | 'cancelled' | 'expired', required
  - `source` SubmissionApiSource, required
    - `name` string, required
    - `batchId` string
  - `processing` SubmissionApiProcessing, required: Omit the entire processing object to select detect-and-identify. Explicit import-only skips detection and identification. When provided, mode is required.
    - `mode` 'import-only' | 'detect-and-identify', required
  - `createdAt` string, date-time, required
  - `expiresAt` string, date-time, required
  - `importTaskId` string, uuid
  - `validationId` string, uuid
  - `rowsDigest` string: Server-generated informational SHA-256 digest. Clients reconcile by GET rows and JSON value equality, not by reproducing this digest.
  - `rowCount` integer, required
  - `errors` SubmissionApiIssue[]
    - `code` string, required
    - `message` string, required
    - `clientRowId` string
    - `rowIndex` integer
    - `field` string
    - `reason` string: Present on INVALID_VALUE issues: why the value was rejected. One of REQUIRED, REQUIRES_FIELD, UNPARSEABLE, OUT_OF_RANGE, FUTURE_DATE, NOT_CONFIGURED, INVALID. New reasons may be added; treat an unknown reason as INVALID.
    - `limit` number
  - `derivatives` SubmissionApiPhase
    - `state` 'pending' | 'running' | 'not_started' | 'dispatching' | 'dispatched' | 'complete' | 'failed' | 'skipped' | 'unknown', required: Indexing unknown means submitted to the existing async indexing queue; no completion acknowledgment is available. Derivatives unknown requires operator reconciliation.
    - `message` string

## Other responses

- `400`: Malformed request
- `401`: Authentication required or invalid
- `403`: Not enrolled or not permitted
- `404`: Not found or not visible
- `405`: Method not allowed; Allow header lists supported methods
- `409`: State, key or content conflict
- `412`: Stale revision
- `413`: Input too large
- `422`: Input or validation unacceptable
- `428`: Required revision precondition missing
- `429`: Quota or concurrency limit
- `500`: Internal failure; retry only according to operation idempotency rules
- `503`: Feature temporarily unavailable

## Changes

- **2026-09-28** `e22b05e67794`: 13 info
  - added the optional property `errors/items/reason` to the response with the `200` status
  - added the optional property `issues/items/reason` to the response with the `400` status
  - added the optional property `issues/items/reason` to the response with the `401` status
  - added the optional property `issues/items/reason` to the response with the `403` status
  - …9 more
- **2026-09-28** `c06d47557af5`: 4 warning, 1 info
  - added the new `detect-and-identify` enum value to the `processing/mode` response property for the response status `200`
  - added the new `dispatched` enum value to the `derivatives/state` response property for the response status `200`
  - added the new `dispatching` enum value to the `derivatives/state` response property for the response status `200`
  - added the new `not_started` enum value to the `derivatives/state` response property for the response status `200`
  - …1 more
- **2026-09-28** `2918ab3fac48`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/wildmeorg/apis/wildbook-v3-api/changes/api/v3/submissions/:id/rows/put.md)

---

[API](https://skmtc.dev/wildmeorg/apis/wildbook-v3-api.md) - [All operations](https://skmtc.dev/wildmeorg/apis/wildbook-v3-api/llms.txt) - [OpenAPI document](https://skmtc.dev/wildmeorg/apis/wildbook-v3-api/revisions/e22b05e67794?raw)
