Skip to main content
POST
/
orders
/
bulk
/
validate
Validate Bulk Upload
curl --request POST \
  --url https://api.zinc.com/orders/bulk/validate \
  --header 'Authorization: <api-key>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "filename": "<string>",
  "rows": [
    {}
  ]
}
'
{
  "total_rows": 123,
  "valid_rows": 123,
  "invalid_rows": 123,
  "estimated_total_cents": 123,
  "wallet_balance_cents": 123,
  "sufficient_funds": true,
  "filename": "<string>",
  "rows": [
    {
      "index": 123,
      "ok": true,
      "errors": [
        "<string>"
      ],
      "product_urls": [
        "<string>"
      ],
      "quantities": [
        123
      ],
      "recipient": "<string>",
      "destination": "<string>",
      "max_price": 123,
      "retailer_credentials_id": "<string>",
      "passthrough": {}
    }
  ]
}
Dry-run a CSV upload: every row is validated and the estimated spend is calculated, but no orders are placed. Use this to show a confirmation preview before calling Create Bulk Upload.

Request

Send the parsed CSV as JSON:
  • filename (optional) — Original uploaded filename, for display.
  • rows — Array of objects, one per CSV row, mapping column header to cell value.
{
  "filename": "may-orders.csv",
  "rows": [
    {
      "product_url": "https://www.amazon.com/dp/B08N5WRWNW",
      "quantity": "2",
      "name": "Jane Doe",
      "address1": "123 Main St",
      "city": "Portland",
      "state": "OR",
      "zip": "97201",
      "max_price": "4999",
      "internal_ref": "PO-1042"
    }
  ]
}
Columns that don’t map to a known order field are echoed back as passthrough data on each row and included in the results CSV.

Response

The summary tells you whether the batch is safe to place:
  • total_rows / valid_rows / invalid_rows — Row counts.
  • estimated_total_cents — Estimated spend across all valid rows.
  • wallet_balance_cents — Your current wallet balance.
  • sufficient_funds — Whether your balance covers the estimate.
  • rows — Per-row validation results, each with ok and any errors.
Surface rows[].errors to the user so they can fix the CSV and re-validate. Only call Create Bulk Upload once invalid_rows is 0 and sufficient_funds is true.

Authorizations

Authorization
string
header
required

Zinc API key (Bearer zn_...)

Headers

authorization
string | null

Body

application/json

Raw CSV rows (header -> cell) posted from the dashboard.

filename
string | null

Original uploaded filename, for display.

rows
Rows · object[]

Parsed CSV rows, each a mapping of column header to cell value.

Response

Successful Response

Dry-run summary returned before any orders are placed.

total_rows
integer
required
valid_rows
integer
required
invalid_rows
integer
required
estimated_total_cents
integer
required
wallet_balance_cents
integer
required
sufficient_funds
boolean
required
filename
string | null
rows
BulkRowValidation · object[]