---
title: "Ingest Marks Batch"
method: POST
path: "/v1/cron/ingest-marks-batch"
tags: ["cron", "cron"]
---

# Ingest Marks Batch

`POST /v1/cron/ingest-marks-batch`

## Request

- Base URL: `https://api.etymolt.com`
- URL: `https://api.etymolt.com/v1/cron/ingest-marks-batch`
- Auth: none declared

Idempotent chunked-ingest endpoint. See services/bulk_ingest.py for design.

Body (JSON):
  {
    "kind": "uspto" | "euipo" | "wipo" | "test",
    "run_id": str,             # unique per backfill session
    "batch_number": int,       # 0-indexed monotonic within run
    "rows": [ {marks row}, ... ]
  }

Response (JSON):
  {
    "ok": true,
    "batch_hash": "sha256hex",
    "rows_seen": int,
    "rows_committed": int,
    "skipped_duplicate_batch": bool,
    "committed_at": "iso8601" | null
  }

Idempotency: same (kind, batch_number, first serial, last serial,
row count) produces the same batch_hash. Duplicate submissions
are no-ops that return skipped_duplicate_batch=true.

## Headers

- `authorization` string, nullable
- `X-Etymolt-Key` string, nullable

## Response `200`

Successful Response

- object

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/etymolt/apis/etymolt-verify-ai-generated-brand-names.md) · [All operations](https://skmtc.dev/etymolt/apis/etymolt-verify-ai-generated-brand-names/llms.txt) · [OpenAPI document](https://skmtc.dev/etymolt/apis/etymolt-verify-ai-generated-brand-names/revisions/7228ffa1efa7?raw)
