---
title: "Submit Bulk Export Job"
method: POST
path: "/api/v1/contracts/export-jobs"
tags: ["contracts"]
---

# Submit Bulk Export Job

`POST /api/v1/contracts/export-jobs`

## Request

- Base URL: `http://localhost:8000`
- URL: `http://localhost:8000/api/v1/contracts/export-jobs`
- Auth: none declared

Create a bulk-export job. Returns `{"job_id": "<uuid>"}`.

Scope `asset` is rejected here: single-asset exports use the sync
endpoint and carrying that path through a job would add latency for
no benefit.

## Headers

- `Authorization` string

## Request body

- BulkExportJobRequest: Request body for POST /contracts/export-jobs. `scope_name` is required when `scope == warehouse`. `asset_public_ids` is required (non-empty) when `scope == assets`. `mode` defaults to `extended`; `include` / `exclude` filter the per-asset orchestrator exactly like the single-asset endpoint.
  - `scope` 'asset' | 'assets' | 'warehouse' | 'all', required: Asset-selection scope. Matches the wire names from TECH-976. `ASSET` is listed for completeness so the job handler can reject it with a clear error, pointing callers at the sync single-asset endpoint. `ASSETS` takes an explicit list of asset public ids; it is the scope the UI picks when the user checks rows in the asset list.
  - `scope_name` string, nullable
  - `asset_public_ids` string[], nullable
  - `mode` string
  - `include` string[], nullable
  - `exclude` string[], nullable

## Response `200`

Successful Response

- StandardResponse: Standard API response wrapper.
  - `success` boolean, required
  - `data` unknown
  - `message` string, nullable
  - `error` string, nullable
  - `meta` object, nullable

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/anomalyarmor/apis/anomalyarmor-api.md) · [All operations](https://skmtc.dev/anomalyarmor/apis/anomalyarmor-api/llms.txt) · [OpenAPI document](https://skmtc.dev/anomalyarmor/apis/anomalyarmor-api/revisions/51c755fb5d0b?raw)
