Create the bulk job by POSTing to https://<tenant-ingestion-url>/api/v1/ingest/jobs with a JSON body specifying the object and operation (upsert or delete); the response includes a job id and an upload URL.
Split source data into CSV files no larger than 150 MB; upload each file part with PUT to the upload URL returned in the create response, setting Content-Type: text/csv.
Close the job for processing by PATCHing https://<tenant-ingestion-url>/api/v1/ingest/jobs/<jobId> with body {"state": "UploadComplete"}.
Poll GET https://<tenant-ingestion-url>/api/v1/ingest/jobs/<jobId> until the state transitions to JobComplete or Failed; check successfulRecordCount and failedRecordCount in the response.
Download the failed-records file from the URL provided in the job status response if failedRecordCount is non-zero, and review each row's error message.
Delete completed jobs that are no longer needed to keep the job list manageable, using DELETE on the same job URL.
Known gotchas
CSV files must include a header row whose column names exactly match the data stream field API names; the job fails silently on mismatched headers if the object allows partial ingestion.
The upload URL is time-limited; generate and upload promptly rather than creating the job hours before uploading.
Closing a job with 'UploadComplete' is irreversible — you cannot add more CSV parts after that state transition.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp