---
title: "POST /api/v3/submissions"
method: POST
path: "/api/v3/submissions"
tags: ["Submissions"]
---

# POST /api/v3/submissions

`POST /api/v3/submissions`

## Request

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

Creates a private draft. Replays return the original 201 body and resource URL. Omitted processing is detect-and-identify. The replayed body/ETag may be old: GET the resource before any mutation.

## Headers

- `Idempotency-Key` string, required

## Request body

- SubmissionApiCreate
  - `contractVersion` '1', required
  - `source` SubmissionApiSource, required
    - `name` string, required
    - `batchId` string
  - `processing` SubmissionApiProcessing: 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

## Response `201`

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
- `405`: Method not allowed; Allow header lists supported methods
- `409`: State, key or content conflict
- `413`: Input too large
- `422`: Input or validation unacceptable
- `429`: Quota or concurrency limit
- `500`: Internal failure; retry only according to operation idempotency rules
- `503`: Feature temporarily unavailable

## Changes

- **2026-09-28** `e22b05e67794`: 10 info
  - added the optional property `errors/items/reason` to the response with the `201` 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
  - …6 more
- **2026-09-28** `c06d47557af5`: 4 warning, 3 info
  - added the new `detect-and-identify` enum value to the `processing/mode` response property for the response status `201`
  - added the new `dispatched` enum value to the `derivatives/state` response property for the response status `201`
  - added the new `dispatching` enum value to the `derivatives/state` response property for the response status `201`
  - added the new `not_started` enum value to the `derivatives/state` response property for the response status `201`
  - …3 more
- **2026-09-28** `2918ab3fac48`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/wildmeorg/apis/wildbook-v3-api/changes/api/v3/submissions/post.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)
