curl --request POST \
--url https://go-fetch.io/api/v1/jobs/create/ \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '{}'import requests
url = "https://go-fetch.io/api/v1/jobs/create/"
payload = {}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({})
};
fetch('https://go-fetch.io/api/v1/jobs/create/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"organization": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"organization_name": "<string>",
"environment": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"environment_name": "<string>",
"scraper_type": "<string>",
"status": "pending",
"is_terminal": true,
"will_auto_retry": true,
"items_scraped": 123,
"output_dataset_url": "<string>",
"error_message": "<string>",
"error_code": "CANCELLED",
"error_description": "<string>",
"attempt_history": [
{
"attempt": 123,
"status": "<string>",
"error_message": "<string>",
"failed_at": "2023-11-07T05:31:56Z"
}
],
"started_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"duration_seconds": 123,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"retry_count": 123,
"can_retry": true,
"partial_results_count": 123,
"last_progress_at": "2023-11-07T05:31:56Z",
"ad_hoc_webhooks": [
{
"url": "<string>",
"events": [
"<string>"
],
"signing_secret": "<string>"
}
],
"scraper_metadata": {},
"started_from": "2023-12-25",
"is_initial_crawl": true,
"price_per_1000_at_creation": "<string>",
"platform_prices_at_creation": "<unknown>",
"minimum_charge_at_creation": true,
"estimated_cost": "<string>",
"actual_cost": "<string>",
"credits_deducted": true,
"config": "<unknown>",
"max_retries": 123,
"can_resume": true
}Create a job
Starts a scrape: scraper_type picks the scraper and config (or its alias input) holds its input. The job is billed when it completes, at the price locked here. Follow it with GET /api/v1/jobs/{id}/ or a webhook until it reaches a terminal status.
curl --request POST \
--url https://go-fetch.io/api/v1/jobs/create/ \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '{}'import requests
url = "https://go-fetch.io/api/v1/jobs/create/"
payload = {}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({})
};
fetch('https://go-fetch.io/api/v1/jobs/create/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"organization": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"organization_name": "<string>",
"environment": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"environment_name": "<string>",
"scraper_type": "<string>",
"status": "pending",
"is_terminal": true,
"will_auto_retry": true,
"items_scraped": 123,
"output_dataset_url": "<string>",
"error_message": "<string>",
"error_code": "CANCELLED",
"error_description": "<string>",
"attempt_history": [
{
"attempt": 123,
"status": "<string>",
"error_message": "<string>",
"failed_at": "2023-11-07T05:31:56Z"
}
],
"started_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"duration_seconds": 123,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"retry_count": 123,
"can_retry": true,
"partial_results_count": 123,
"last_progress_at": "2023-11-07T05:31:56Z",
"ad_hoc_webhooks": [
{
"url": "<string>",
"events": [
"<string>"
],
"signing_secret": "<string>"
}
],
"scraper_metadata": {},
"started_from": "2023-12-25",
"is_initial_crawl": true,
"price_per_1000_at_creation": "<string>",
"platform_prices_at_creation": "<unknown>",
"minimum_charge_at_creation": true,
"estimated_cost": "<string>",
"actual_cost": "<string>",
"credits_deducted": true,
"config": "<unknown>",
"max_retries": 123,
"can_resume": true
}Authorizations
Body
instagram- instagraminstagram_profile- instagram_profileinstagram_posts- instagram_postsinstagram_comments- instagram_commentsyoutube- youtubetiktok- tiktoktiktok_comments- tiktok_commentsfacebook- facebookfacebook_posts- facebook_postsfacebook_profile- facebook_profilegoogle_serp- google_serptiktok_search- tiktok_searchtiktok_profile- tiktok_profile
instagram, instagram_profile, instagram_posts, instagram_comments, youtube, tiktok, tiktok_comments, facebook, facebook_posts, facebook_profile, google_serp, tiktok_search, tiktok_profile Job timeout in seconds (min 5 min, max 11 hours). Default 8 hours.
Show child attributes
Show child attributes
Response
pending- Pendingrunning- Runningcompleted- Completedfailed- Failedtimed_out- Timed Outcancelled- Cancelled
pending, running, completed, failed, timed_out, cancelled The job's results endpoint, a relative path served with your API key. Empty until the job completes.
Why the job did not complete; null unless it failed, timed out or was cancelled.
CANCELLED- CANCELLEDTIMEOUT- TIMEOUTPLATFORM_ERROR- PLATFORM_ERRORPROFILE_EXCLUDED- PROFILE_EXCLUDEDINPUT_ERROR- INPUT_ERRORINFRA_TERMINATED- INFRA_TERMINATEDRATE_LIMITED- RATE_LIMITEDBLOCKED- BLOCKEDUNKNOWN- UNKNOWN
CANCELLED, TIMEOUT, PLATFORM_ERROR, PROFILE_EXCLUDED, INPUT_ERROR, INFRA_TERMINATED, RATE_LIMITED, BLOCKED, UNKNOWN Why the job ended, in words for a person: what happened and what to do next. Empty when error_message is. Show this one; error_message is the scraper's own technical text.
Show child attributes
Show child attributes
Number of times this job has been retried
Items stored so far while the job runs.
Last time progress was reported by the scraper
The per-run webhooks sent with the create request.
Show child attributes
Show child attributes
What the scraper reported about how complete the collection is, when it reported anything: for example coverage, restrictions, targets_failed and dataAsOf. The keys vary by scraper type.
Show child attributes
Show child attributes
Scrape posts newer than this date. NULL = all-time / initial crawl.
True if this is a deep historical scrape; False for date-bounded regular crawls.
Price per 1,000 items at job creation (USD) - locked for historical reporting
^-?\d{0,6}(?:\.\d{0,4})?$Rates per 1,000 rows by platform, locked at creation, for scraper types billed per platform; null when the job bills at price_per_1000_at_creation.
Whether this job's scraper type has a minimum charge per job that returned results.
The estimate the credit check used when the job was created (USD): estimated items × the locked rate. Not a forecast; see actual_cost.
^-?\d{0,8}(?:\.\d{0,4})?$Actual cost based on items_scraped (USD) - set on completion
^-?\d{0,8}(?:\.\d{0,4})?$Whether credits have been deducted for this job
Scraper configuration/input parameters
Maximum number of retries allowed for this job
Whether the job can resume from partial state