Submit a request from your backend
Keep credentials in a server-side secret store. Generate a unique idempotency key for a new logical request and retain it with the exact body. The following example submits work; it does not immediately return the finished page.
curl --request POST "https://api.runharvester.com/api/v1/data/requests" \
--header "X-API-Key: YOUR_API_KEY" \
--header "Idempotency-Key: YOUR_UNIQUE_REQUEST_KEY" \
--header "Content-Type: application/json" \
--data '{"url":"https://example.com/catalog","mode":"auto"}'Poll the state, then retrieve the result
Save the returned id. Poll the status endpoint with backoff and jitter until the request completes or reaches a terminal failure. Pending, running, and solving_captcha are not completed states.
After completed, retrieve the result and validate its content. A successful HTTP response alone does not prove that a target returned the page or records you expected.
GET /api/v1/data/requests/{id}
GET /api/v1/data/requests/{id}/resultChoose acquisition and output independently
Select HTTP if the initial response holds the required data, switch to browser mode for JavaScript execution, or choose auto to let the system handle route selection. Residential modes indicate an egress requirement. Availability depends on account status and deployment details.
To produce typed output, include extraction.fields or reference an active recipe you own. Structured extraction is limited to individual requests; Data API batches process only raw scrape jobs. Browser Workflows serves as a separate API for versioned browser automation.
Handle failures without hiding them
RESULT_NOT_READY means the result was requested before completion. RESULT_EXPIRED means the retained result is no longer available. Inspect public error fields and trace events before deciding whether to retry.
Resubmit the interrupted request using its original idempotency key and payload. Each retry of a failed job generates a new request ID. For bounded retries, retrieve outcomes before expiration and apply the returned billing metadata for cost reconciliation.
Integrate in your existing runtime
Use the documented HTTP interface from your backend. The integration guides contain submission and polling examples; no frontend API key or invented SDK is required.