Skip to content

V1 to V2 Endpoint Mapping

The V1-era public API documented 13 operations: ten under /api/v1 and three public operations without a version prefix. The table below maps all 13 to V2. V2 exposes 34 public operations in total; the other 21 are new capabilities without a direct V1 equivalent. A single V1 body often becomes a combination of a V2 path, query string, and smaller JSON body.

V1 operationV2 replacementRequired changes
GET /api/scraperGET /api/v2/workers/{workerId} and GET /api/v2/workers/{workerId}/input-schemaMove the slug query value to {workerId} and encode owner/name as owner~name. Authentication is now required for Worker detail; read the public input-schema endpoint when only the input contract is needed.
GET /api/storeGET /api/v2/storeChange search to keyword; add zero-based offset when paging. limit now defaults to 20 and cannot exceed 100.
GET /api/proxy/regionGET /api/v2/proxy/regionAdd the /v2 path segment. The optional language query parameter is available in V2.
POST /api/v1/run/result/listGET /api/v2/worker-runs/{runId}/resultMove run_slug to {runId}. Convert page_index and page_size to offset and limit query parameters.
POST /api/v1/run/detailGET /api/v2/worker-runs/{runId}Move run_slug from the body to {runId}. Remove the JSON body.
POST /api/v1/scraper/runPOST /api/v2/workers/{workerId}/runsReplace scraper_slug with a verified {workerId} path value. Keep version, input, callback_url, and is_async in the body. Rename page_index/page_size to offset/limit.
POST /api/v1/rerunPOST /api/v2/worker-runs/{runId}/rerunMove run_slug to {runId}. Keep callback_url in the body; V2 also supports is_async, offset, and limit.
POST /api/v1/run/result/exportGET /api/v2/worker-runs/{runId}/result/exportMove run_slug to {runId}. Send format and comma-separated filter_keys as query parameters. Remove the JSON body.
POST /api/v1/task/runPOST /api/v2/worker-tasks/{workerTaskId}/runsMove task_slug to {workerTaskId}. Keep callback_url in the body; V2 also supports is_async, offset, and limit.
POST /api/v1/run/listGET /api/v2/worker-runsMove filters to query parameters. Rename scraper_slug to worker_id; convert pagination and numeric status values. Omit status to list all statuses.
POST /api/v1/run/last/logGET /api/v2/worker-runs/{runId}/logDespite the V1 path name, the body selected a run by run_slug. Move it to {runId} and remove the body.
POST /api/v1/scraper/abortPOST /api/v2/worker-runs/{runId}/abortMove run_slug to {runId} and remove the body. V2 returns the standard response envelope.
POST /api/v1/account/infoGET /api/v2/users/accountChange POST to GET and remove the empty JSON body. Account response fields changed; update deserialization.
AreaV1V2Migration action
Authenticationapi-key headerBearer recommended; legacy header and query token also supportedSend Authorization: Bearer YOUR_API_KEY.
Resource namescraper in request conceptsworker in paths and request conceptsRename client models and variables, but keep documented scraper_* response fields.
IdentifiersIDs in JSON bodiesworkerId, workerTaskId, and runId in pathsURL-encode path values and verify the V2 Worker identifier.
Paginationpage_index starts at 1; page_sizeoffset starts at 0; limit is at most 100Use offset = (page_index - 1) * page_size.
Run statusIntegers 1 through 5; 0 means all in a filterStrings ready, running, succeeded, failed, abortingReplace numeric comparisons; omit an all-status filter.
Result export fieldsfilter_keys JSON arrayComma-separated filter_keys query stringJoin field names with commas and URL-encode the query.
Export formatscsv, json documentedcsv, json, jsonl, xlsx, xls, xml, html, rssKeep an allowed lowercase value; do not rely on V1 validation.
Response envelopecode, message, datacode, message, request_id, and usually dataAdd request_id to logs and allow success responses without data where documented.
ValidationMainly 400, 401, 429 documentedAlso uses 404, 422, and standardized error envelopesBranch on HTTP status and application code.
Account databalance, traffic, traffic_expiration_atCurrent contract example exposes balance, balance_expiration_atDo not require removed traffic fields; follow the account endpoint schema.
Run logsLog list items were structured objects in V1Current V2 example exposes the log list as stringsTreat data.list according to the V2 endpoint contract, not a V1 log-item model.
// V1 body
{ "run_slug": "RUN_ID", "page_index": 3, "page_size": 20 }
GET /api/v2/worker-runs/RUN_ID/result?offset=40&limit=20
// V1 body: status 3 meant succeeded
{ "page_index": 1, "page_size": 20, "status": 3, "scraper_slug": "WORKER_ID" }
GET /api/v2/worker-runs?offset=0&limit=20&status=succeeded&worker_id=WORKER_ID
// V1 body
{ "run_slug": "RUN_ID", "format": "csv", "filter_keys": ["title", "address"] }
GET /api/v2/worker-runs/RUN_ID/result/export?format=csv&filter_keys=title%2Caddress

V2 capabilities without a direct V1 equivalent

Section titled “V2 capabilities without a direct V1 equivalent”

V2 also exposes Worker discovery and input schemas, Worker task CRUD, account-level and Worker-level latest-run shortcuts, and dedicated endpoints for run logs, results, exports, cancellation, and reruns. Use the public endpoint reference to avoid rebuilding these capabilities from V1-era workarounds.