6. Managing jobs

Request What it does
POST https://mp.dvocorp.com/api/v1/jobs/upload submit with the file (the main one) — multipart
POST https://mp.dvocorp.com/api/v1/jobs/api submit by URL — JSON, for files already in storage
GET https://mp.dvocorp.com/api/v1/jobs/{job_id} status of one job
GET https://mp.dvocorp.com/api/v1/jobs?limit=50&offset=0 your recent jobs — a JSON array, newest first
POST https://mp.dvocorp.com/api/v1/jobs/{job_id}/repeat run it again, same params — billed as a fresh submit, returns a new job
POST https://mp.dvocorp.com/api/v1/jobs/{job_id}/cancel cancel and refund

All take X-Api-Key.

Listing bounds. GET /jobs takes limit (1..200, default 50) and offset (≥ 0). A limit outside that range — including 0 or a negative — is a 422 with a pydantic detail array ("Input should be less than or equal to 200" / "…greater than or equal to 1"), not a clamp. The response is a bare JSON array of job objects (same shape as GET /jobs/{id}), newest first.

Billing: the tariff base is debited at submit and automatically refunded if the job fails or is canceled. Every job is then charged for its processing time when it finishes — 1 more bonus per further started minute, capped at 30 per file — and a failed or canceled job is never charged for time. See The tariff: you pay for processing time in section 3.

Priority: "high_priority": true is honored only on premium plans; on other plans it is silently ignored and the job runs at normal priority.