Submit an expected manifest (CSV upload)
File-upload alternative to POST /manifests for teams that live in
spreadsheets. Expected columns: external_ref, description, sku,
grader, cert_number, quantity. Product rows provide a catalog sku;
slab rows provide grader and cert_number; a row never mixes both forms.
One row per expected item. Valid rows are accepted into one manifest and invalid
rows are returned independently.
POST
/manifests/csvAuthorization
X-API-KeyAPI key · headerrequiredAPI key in format `sk_*`. Scoped to your partner account; server-side use only.
Header parameters
Idempotency-KeystringrequiredUnique key for safe retries. Reusing a key on the same endpoint returns the original result.
max length 255
Request body
requiredmultipart/form-datafilestringrequiredCSV file, UTF-8, header row required.
referencestringrequiredYour reference for this purchase batch.
sourceManifestSourceWhere this purchase batch came from.
Allowed:
card_showmarketplacedistributorotherResponses
201Rows processed independently into one manifest.
manifestManifestrequiredShow propertiesHide properties
idstring<uuid>requiredreferencestringrequiredsourceManifestSourceWhere this purchase batch came from.
Allowed:
card_showmarketplacedistributorotherstatusManifestStatusrequired`submitted` — open, nothing matched yet; `receiving` — items are arriving and matching; `reconciled` — the reconciliation report has been finalized.
Allowed:
submittedreceivingreconciledexpected_arrival_startstring<date> | nullexpected_arrival_endstring<date> | nullline_countintegerrequiredcreated_atstring<date-time>requiredcreatedManifestLine[]requiredShow propertiesHide properties
Array of
ManifestLineidstring<uuid>requiredexternal_refstring | nulldescriptionstringrequiredgraderstring | nullcert_numberstring | nullquantityintegerrequiredstatusstringrequired`expected` — not yet arrived; `matched` — arrived and verified; `missing` — reconciliation closed without it arriving; `condition_mismatch` — arrived but intake verification flagged it.
Allowed:
expectedmatchedmissingcondition_mismatchmatched_qidsQID[]requiredskustring | nullerrorsCsvRowError[]requiredShow propertiesHide properties
Array of
CsvRowErrorcodeErrorCoderequiredStable machine-readable error vocabulary for v1.
Allowed:
validation_errorstate_conflictenvironment_mismatchunsupported_destinationinvalid_api_keynot_foundrate_limitedfieldsobjectrequiredmessagestringrequiredrowintegerrequiredOne-based CSV data-row number, excluding the header.
min 1
totalsCsvBatchTotalsrequiredShow propertiesHide properties
createdintegerrequiredmin 0
failedintegerrequiredmin 0
submittedintegerrequiredmin 0
400Validation failed.
codeErrorCoderequiredStable machine-readable error vocabulary for v1.
Allowed:
validation_errorstate_conflictenvironment_mismatchunsupported_destinationinvalid_api_keynot_foundrate_limitedextraobjectrequiredStructured details such as field errors or SKU availability.
messagestringrequiredHuman-readable summary.
401Missing, invalid, expired, or environment-mismatched API key.
codeErrorCoderequiredStable machine-readable error vocabulary for v1.
Allowed:
validation_errorstate_conflictenvironment_mismatchunsupported_destinationinvalid_api_keynot_foundrate_limitedextraobjectrequiredStructured details such as field errors or SKU availability.
messagestringrequiredHuman-readable summary.
429Rate limit exceeded for this API key.
codeErrorCoderequiredStable machine-readable error vocabulary for v1.
Allowed:
validation_errorstate_conflictenvironment_mismatchunsupported_destinationinvalid_api_keynot_foundrate_limitedextraobjectrequiredStructured details such as field errors or SKU availability.
messagestringrequiredHuman-readable summary.
Try it
Server
Authorization
Parameters
Bodymultipart/form-data
Request
curl -X POST "https://api.vault.stashtab.gg/v1/manifests/csv" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Idempotency-Key: string" \
-H "Content-Type: multipart/form-data" \
-d '{
"file": "string",
"reference": "string",
"source": "card_show"
}'const response = await fetch("https://api.vault.stashtab.gg/v1/manifests/csv", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Idempotency-Key": "string",
"Content-Type": "multipart/form-data"
},
body: JSON.stringify({
"file": "string",
"reference": "string",
"source": "card_show"
})
});Response
{
"manifest": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"reference": "string",
"source": "card_show",
"status": "submitted",
"expected_arrival_start": "2019-08-24",
"expected_arrival_end": "2019-08-24",
"line_count": 0,
"created_at": "2019-08-24T14:15:22Z"
},
"created": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"external_ref": "string",
"description": "string",
"grader": "string",
"cert_number": "string",
"quantity": 0,
"status": "expected",
"matched_qids": [
"7c9e6679-7425-40de-944b-e07fc1f90ae7"
],
"sku": "string"
}
],
"errors": [
{
"code": "validation_error",
"fields": {
"property1": [
"string"
],
"property2": [
"string"
]
},
"message": "string",
"row": 1
}
],
"totals": {
"created": 0,
"failed": 0,
"submitted": 0
}
}{
"code": "validation_error",
"extra": {},
"message": "string"
}{
"code": "validation_error",
"extra": {},
"message": "string"
}{
"code": "validation_error",
"extra": {},
"message": "string"
}