Jobs
26 endpoints from the published OpenAPI import.
Submit Job
Submit a new scraping job to SpiderIQ distributed scraping platform
Supported Job Types
1. SpiderMaps (type: "spiderMaps")
Scrape business listings from maps services.
- Required: Either
urlORsearch_queryin payload - AI Usage: None (0 tokens)
- Processing Time: 30-90 seconds for 20 results
- Features: Reviews, photos, multi-language support
2. SpiderSite (type: "spiderSite")
Intelligent website crawling with AI-powered lead generation.
- Required:
urlin payload - AI Usage: Opt-in (0 tokens by default, ~500-3,800 tokens if AI enabled)
- Processing Time: 5-60 seconds depending on pages and AI features
- Features:
- v2.7.0: AI Context Engine (smart markdown compendiums + R2 storage)
- v2.4.0: SPA auto-detection with Playwright
- v2.3.0: Sitemap-first crawling
- v2.2.1: AI opt-in defaults (zero cost unless enabled)
- v2.1.0: Multilingual (36+ European languages)
SpiderIQ Features
- Automatic deduplication: Returns cached job if submitted within 24 hours
- Distributed processing: Jobs queued to RabbitMQ, processed by workers across multiple VPS servers
- Priority support: 0-10 (higher number = processed first)
- Async processing: Returns job ID immediately (<100ms), poll for results
Authentication
Requires Bearer token: Authorization: Bearer <client_id>:<api_key>:<api_secret>
Contact admin to register a client and receive credentials.
Queue Limits
- SpiderMaps queue: 10,000 jobs maximum
- SpiderSite queue: 5,000 jobs maximum
Returns
Job ID and initial status. Use /jobs/{job_id}/status to check progress.
YAML Input (v2.60.0): Accepts Content-Type: text/yaml for AI agent submissions.
Try it
Examples
cURL
curl -X POST 'https://spideriq.ai/api/v1/jobs/submit' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{
"type": "spiderMaps",
"payload": {},
"priority": 0
}'Python
import httpx
resp = httpx.post(
"https://spideriq.ai/api/v1/jobs/submit",
headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
json={"type": "spiderMaps", "payload": {}, "priority": 0},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/jobs/submit", {
method: "POST",
headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
body: JSON.stringify({"type": "spiderMaps", "payload": {}, "priority": 0})
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{"type": "spiderMaps", "payload": {}, "priority": 0}`)
req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/jobs/submit", body)
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
201 | Successful Response |
422 | Validation Error |
Get status of a single job
Retrieve queue/processing/completion status for a job owned by the authenticated client. Does NOT return results — use /jobs/{job_id}/results for completed data. Supports ?format=json|yaml|md|llm for AI-agent-friendly output.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
job_id | path | string | true | |
format | query | any | false | Response format. json (default) and llm return JSON; yaml returns text/yaml; md returns text/markdown. Any other value is a 422. |
Try it
Examples
cURL
curl -X GET 'https://spideriq.ai/api/v1/jobs/{job_id}/status' \
-H 'Authorization: Bearer <token>'Python
import httpx
resp = httpx.get(
"https://spideriq.ai/api/v1/jobs/{job_id}/status",
headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/jobs/{job_id}/status", {
method: "GET",
headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://spideriq.ai/api/v1/jobs/{job_id}/status", nil)
req.Header.Set("Authorization", "Bearer <token>")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
200 | Job status retrieved successfully |
400 | Invalid job ID format |
401 | Authentication failed |
403 | Client account is inactive |
404 | Job not found, or it doesn't belong to the authenticated client. If the id you sent is this client's INTERNAL jobs.id rather than the public jobs.job_id, the response names the public id in error.public_job_id -- the internal id is never accepted on a client route. A job belonging to another client returns the plain form, with no hint. |
422 | Validation error in query parameters |
429 | Rate limit exceeded |
Get results for a completed job
Retrieve the results payload for a job owned by the authenticated client. Returns 200 with data when the job is completed, 202 while queued/processing (poll again), 410 when failed or cancelled. Response shape is flat (v2.7.6+) — social platforms live at data.linkedin, data.twitter, etc. Supports ?format=json|yaml|md|llm for AI-agent-friendly output.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
job_id | path | string | true | |
format | query | any | false | Response format. json (default) and llm return JSON; yaml returns text/yaml; md returns text/markdown. Any other value is a 422. |
Try it
Examples
cURL
curl -X GET 'https://spideriq.ai/api/v1/jobs/{job_id}/results' \
-H 'Authorization: Bearer <token>'Python
import httpx
resp = httpx.get(
"https://spideriq.ai/api/v1/jobs/{job_id}/results",
headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/jobs/{job_id}/results", {
method: "GET",
headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://spideriq.ai/api/v1/jobs/{job_id}/results", nil)
req.Header.Set("Authorization", "Bearer <token>")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
200 | Job completed successfully - results are available |
202 | Job is queued or processing - results not ready yet. Poll this endpoint to check for completion. |
400 | Invalid job ID format |
401 | Authentication failed |
403 | Client account is inactive |
404 | Job not found, or it doesn't belong to the authenticated client. If the id you sent is this client's INTERNAL jobs.id rather than the public jobs.job_id, the response names the public id in error.public_job_id -- the internal id is never accepted on a client route. A job belonging to another client returns the plain form, with no hint. |
410 | Job failed or was cancelled - no results available |
422 | Internal validation error - Response serialization failed. This should NOT occur in normal operation. If you encounter this error, please contact support as it indicates a bug in the API. |
429 | Rate limit exceeded |
Get workflow results for SpiderMaps job
Get complete workflow results for a SpiderMaps job submitted with workflow configuration.
Returns aggregated data from SpiderMaps → SpiderSite → SpiderVerify chain.
Query Parameters:
wait=true(default): Block until all businesses complete or timeoutwait=false: Return current status immediately (for polling)
Note: Only works for SpiderMaps jobs submitted with workflow configuration. For jobs without workflow, use the regular /jobs/{job_id}/results endpoint.
Timeouts:
- SpiderSite: 5 minutes per business
- SpiderVerify: 2 minutes per business
- Maximum total: 10 minutes
Formats: ?format=json (default) / llm -> JSON; yaml -> text/yaml; md -> text/markdown. Any other value is a 422. Before SDS-26 this route declared no format at all, so FastAPI DROPPED it silently.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
job_id | path | string | true | |
wait | query | boolean | false | Wait for completion (blocking). If false, returns current state immediately. |
format | query | any | false | Response format. json (default) and llm return JSON; yaml returns text/yaml; md returns text/markdown. Any other value is a 422. |
Try it
Examples
cURL
curl -X GET 'https://spideriq.ai/api/v1/jobs/{job_id}/workflow-results' \
-H 'Authorization: Bearer <token>'Python
import httpx
resp = httpx.get(
"https://spideriq.ai/api/v1/jobs/{job_id}/workflow-results",
headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/jobs/{job_id}/workflow-results", {
method: "GET",
headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://spideriq.ai/api/v1/jobs/{job_id}/workflow-results", nil)
req.Header.Set("Authorization", "Bearer <token>")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
List jobs for the authenticated client
Return a paginated list of jobs belonging to the authenticated client. Filter by status_filter (queued/processing/completed/failed/cancelled) and/or type_filter (spiderMaps/spiderSite/...). Supports ?format=json|yaml|md|llm for AI-agent-friendly output. status / type / per_page are accepted as DEPRECATED aliases of status_filter / type_filter / page_size — see the handler docstring.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
status_filter | query | any | false | Filter by job status |
type_filter | query | any | false | Filter by job type |
page | query | integer | false | Page number |
page_size | query | any | false | Items per page (default 50) |
format | query | any | false | Response format. json (default) and llm return JSON; yaml returns text/yaml; md returns text/markdown. Any other value is a 422. |
status | query | any | false | DEPRECATED alias of status_filter. |
type | query | any | false | DEPRECATED alias of type_filter. |
per_page | query | any | false | DEPRECATED alias of page_size. |
Try it
Examples
cURL
curl -X GET 'https://spideriq.ai/api/v1/jobs/list' \
-H 'Authorization: Bearer <token>'Python
import httpx
resp = httpx.get(
"https://spideriq.ai/api/v1/jobs/list",
headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/jobs/list", {
method: "GET",
headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://spideriq.ai/api/v1/jobs/list", nil)
req.Header.Set("Authorization", "Bearer <token>")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
200 | Paginated list of jobs for the authenticated client |
401 | Authentication failed |
403 | Client account is inactive |
422 | Invalid query parameters (status, type, page, page_size, format) |
429 | Rate limit exceeded |
Cancel a queued or processing job
Cancel a job owned by the authenticated client. Only jobs in queued or processing state can be cancelled; completed, failed, or already-cancelled jobs return 400. Cancellation is best-effort — a worker that has already claimed the job may still complete it before seeing the flag.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
job_id | path | string | true |
Try it
Examples
cURL
curl -X DELETE 'https://spideriq.ai/api/v1/jobs/{job_id}' \
-H 'Authorization: Bearer <token>'Python
import httpx
resp = httpx.delete(
"https://spideriq.ai/api/v1/jobs/{job_id}",
headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/jobs/{job_id}", {
method: "DELETE",
headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
)
func main() {
req, _ := http.NewRequest("DELETE", "https://spideriq.ai/api/v1/jobs/{job_id}", nil)
req.Header.Set("Authorization", "Bearer <token>")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
200 | Job cancelled successfully |
400 | Invalid job ID format or job cannot be cancelled in its current state |
401 | Authentication failed |
403 | Client account is inactive |
404 | Job not found, or it doesn't belong to the authenticated client. If the id you sent is this client's INTERNAL jobs.id rather than the public jobs.job_id, the response names the public id in error.public_job_id -- the internal id is never accepted on a client route. A job belonging to another client returns the plain form, with no hint. |
429 | Rate limit exceeded |
422 | Validation Error |
Submit company registry lookup job
Look up company records in US (SEC EDGAR), UK (Companies House), and EU business registries. Returns officers, filings, registered address, and structured metadata. Returns a job_id — poll /api/v1/jobs/{job_id}/results for the aggregated registry payload.
Try it
Examples
cURL
curl -X POST 'https://spideriq.ai/api/v1/jobs/spiderCompanyData/submit' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{
"payload": {
"mode": "search",
"name": "Apple Inc",
"identifier": "0000320193",
"country": "US",
"vat_number": "GB123456789",
"limit": 10,
"include_financials": false,
"financials_mode": "url_only",
"test": false
},
"priority": 5
}'Python
import httpx
resp = httpx.post(
"https://spideriq.ai/api/v1/jobs/spiderCompanyData/submit",
headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
json={"payload": {"mode": "search", "name": "Apple Inc", "identifier": "0000320193", "country": "US", "vat_number": "GB123456789", "limit": 10, "include_financials": false, "financials_mode": "url_only", "test": false}, "priority": 5},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/jobs/spiderCompanyData/submit", {
method: "POST",
headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
body: JSON.stringify({"payload": {"mode": "search", "name": "Apple Inc", "identifier": "0000320193", "country": "US", "vat_number": "GB123456789", "limit": 10, "include_financials": false, "financials_mode": "url_only", "test": false}, "priority": 5})
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{"payload": {"mode": "search", "name": "Apple Inc", "identifier": "0000320193", "country": "US", "vat_number": "GB123456789", "limit": 10, "include_financials": false, "financials_mode": "url_only", "test": false}, "priority": 5}`)
req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/jobs/spiderCompanyData/submit", body)
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
201 | Job created and queued successfully |
401 | Authentication failed |
403 | Client account is inactive |
422 | Validation error - Invalid payload |
429 | Rate limit exceeded |
500 | Internal server error |
503 | Queue service unavailable |
Submit VayaPin profile / outreach job
Create or update VayaPin business profiles from extracted leads. Triggers the VayaPin automation stack (profile enrichment, outreach scheduling). Returns a job_id — poll /api/v1/jobs/{job_id}/results for per-profile outcomes.
Try it
Examples
cURL
curl -X POST 'https://spideriq.ai/api/v1/jobs/spiderVayapin/submit' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{
"payload": {
"business_name": "Restaurant Tight",
"country_code": "DK",
"gmaps_coordinates": {
"latitude": 0.0,
"longitude": 0.0
},
"place_id": "string",
"markdown_url": "https://media.spideriq.ai/crawls/abc123.md",
"markdown_compendium": "# Company Name\n\nDescription of the business...",
"business_phone": "+4533116996",
"business_address": "string",
"original_website": "https://restauranttight.dk",
"domain": "restauranttight.dk",
"street": "string",
"city": "string",
"postal_code": "string",
"state": "string",
"country": "string",
"emails_verified": [
{
"email": {},
"status": {},
"is_deliverable": {}
}
],
"facebook": "string",
"instagram": "string",
"linkedin": "string",
"twitter": "string"
},
"priority": 5
}'Python
import httpx
resp = httpx.post(
"https://spideriq.ai/api/v1/jobs/spiderVayapin/submit",
headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
json={"payload": {"business_name": "Restaurant Tight", "country_code": "DK", "gmaps_coordinates": {"latitude": 0.0, "longitude": 0.0}, "place_id": "string", "markdown_url": "https://media.spideriq.ai/crawls/abc123.md", "markdown_compendium": "# Company Name\n\nDescription of the business...", "business_phone": "+4533116996", "business_address": "string", "original_website": "https://restauranttight.dk", "domain": "restauranttight.dk", "street": "string", "city": "string", "postal_code": "string", "state": "string", "country": "string", "emails_verified": [{"email": {}, "status": {}, "is_deliverable": {}}], "facebook": "string", "instagram": "string", "linkedin": "string", "twitter": "string"}, "priority": 5},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/jobs/spiderVayapin/submit", {
method: "POST",
headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
body: JSON.stringify({"payload": {"business_name": "Restaurant Tight", "country_code": "DK", "gmaps_coordinates": {"latitude": 0.0, "longitude": 0.0}, "place_id": "string", "markdown_url": "https://media.spideriq.ai/crawls/abc123.md", "markdown_compendium": "# Company Name\n\nDescription of the business...", "business_phone": "+4533116996", "business_address": "string", "original_website": "https://restauranttight.dk", "domain": "restauranttight.dk", "street": "string", "city": "string", "postal_code": "string", "state": "string", "country": "string", "emails_verified": [{"email": {}, "status": {}, "is_deliverable": {}}], "facebook": "string", "instagram": "string", "linkedin": "string", "twitter": "string"}, "priority": 5})
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{"payload": {"business_name": "Restaurant Tight", "country_code": "DK", "gmaps_coordinates": {"latitude": 0.0, "longitude": 0.0}, "place_id": "string", "markdown_url": "https://media.spideriq.ai/crawls/abc123.md", "markdown_compendium": "# Company Name\n\nDescription of the business...", "business_phone": "+4533116996", "business_address": "string", "original_website": "https://restauranttight.dk", "domain": "restauranttight.dk", "street": "string", "city": "string", "postal_code": "string", "state": "string", "country": "string", "emails_verified": [{"email": {}, "status": {}, "is_deliverable": {}}], "facebook": "string", "instagram": "string", "linkedin": "string", "twitter": "string"}, "priority": 5}`)
req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/jobs/spiderVayapin/submit", body)
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
201 | Job created and queued successfully |
401 | Authentication failed |
403 | Client account is inactive |
422 | Validation error - Invalid payload |
429 | Rate limit exceeded |
500 | Internal server error |
503 | Queue service unavailable |
Submit mail send / reply job
Send an email or reply to an existing thread through the SpiderMail worker. Delivery goes through the client's configured mailbox (SMTP or provider API). Returns a job_id — poll /api/v1/jobs/{job_id}/results for the delivery outcome and message ID.
Try it
Examples
cURL
curl -X POST 'https://spideriq.ai/api/v1/jobs/spiderMail/submit' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{
"payload": {
"action": "send",
"from_email": "alice@company.com",
"to": [
"bob@prospect.com"
],
"cc": [
"string"
],
"subject": "Quick question about your services",
"body_text": "string",
"body_html": "string",
"attachments": [
{
"filename": {},
"content_base64": {},
"mime_type": {}
}
],
"reply_to_message_id": 0,
"reply_all": false,
"test": false
},
"priority": 0
}'Python
import httpx
resp = httpx.post(
"https://spideriq.ai/api/v1/jobs/spiderMail/submit",
headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
json={"payload": {"action": "send", "from_email": "alice@company.com", "to": ["bob@prospect.com"], "cc": ["string"], "subject": "Quick question about your services", "body_text": "string", "body_html": "string", "attachments": [{"filename": {}, "content_base64": {}, "mime_type": {}}], "reply_to_message_id": 0, "reply_all": false, "test": false}, "priority": 0},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/jobs/spiderMail/submit", {
method: "POST",
headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
body: JSON.stringify({"payload": {"action": "send", "from_email": "alice@company.com", "to": ["bob@prospect.com"], "cc": ["string"], "subject": "Quick question about your services", "body_text": "string", "body_html": "string", "attachments": [{"filename": {}, "content_base64": {}, "mime_type": {}}], "reply_to_message_id": 0, "reply_all": false, "test": false}, "priority": 0})
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{"payload": {"action": "send", "from_email": "alice@company.com", "to": ["bob@prospect.com"], "cc": ["string"], "subject": "Quick question about your services", "body_text": "string", "body_html": "string", "attachments": [{"filename": {}, "content_base64": {}, "mime_type": {}}], "reply_to_message_id": 0, "reply_all": false, "test": false}, "priority": 0}`)
req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/jobs/spiderMail/submit", body)
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
201 | Job created and queued successfully |
401 | Authentication failed |
403 | Client account is inactive |
422 | Validation error - Invalid payload |
429 | Rate limit exceeded |
500 | Internal server error |
503 | Queue service unavailable |
Submit Google Maps scraping job
Scrape Google Maps business listings by search query or direct Maps URL. Optionally enrich via an attached workflow (chain SpiderSite + SpiderVerify). Returns a job_id — poll /api/v1/jobs/{job_id}/results for the flat response. Per-VPS rate limit applies (10 jobs/min).
Try it
Examples
cURL
curl -X POST 'https://spideriq.ai/api/v1/jobs/spiderMaps/submit' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{
"payload": {
"url": "https://www.google.com/maps/place/...",
"search_query": "coffee shops in San Francisco",
"max_results": 20,
"extract_reviews": false,
"extract_photos": false,
"lang": "en",
"country": "string",
"headless": true,
"test": false,
"store_images": true,
"validate_phones": true,
"fuzziq_enabled": true,
"fuzziq_unique_only": true,
"skip_proxy": false,
"maps_source": "maps",
"workflow": {
"spidersite": {},
"spiderverify": {},
"vayapin": {},
"social_media_enrichment": {},
"smartlead": {},
"filter_social_media": {},
"filter_review_sites": {},
"filter_directories": {},
"filter_maps": {}
}
},
"priority": 0
}'Python
import httpx
resp = httpx.post(
"https://spideriq.ai/api/v1/jobs/spiderMaps/submit",
headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
json={"payload": {"url": "https://www.google.com/maps/place/...", "search_query": "coffee shops in San Francisco", "max_results": 20, "extract_reviews": false, "extract_photos": false, "lang": "en", "country": "string", "headless": true, "test": false, "store_images": true, "validate_phones": true, "fuzziq_enabled": true, "fuzziq_unique_only": true, "skip_proxy": false, "maps_source": "maps", "workflow": {"spidersite": {}, "spiderverify": {}, "vayapin": {}, "social_media_enrichment": {}, "smartlead": {}, "filter_social_media": {}, "filter_review_sites": {}, "filter_directories": {}, "filter_maps": {}}}, "priority": 0},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/jobs/spiderMaps/submit", {
method: "POST",
headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
body: JSON.stringify({"payload": {"url": "https://www.google.com/maps/place/...", "search_query": "coffee shops in San Francisco", "max_results": 20, "extract_reviews": false, "extract_photos": false, "lang": "en", "country": "string", "headless": true, "test": false, "store_images": true, "validate_phones": true, "fuzziq_enabled": true, "fuzziq_unique_only": true, "skip_proxy": false, "maps_source": "maps", "workflow": {"spidersite": {}, "spiderverify": {}, "vayapin": {}, "social_media_enrichment": {}, "smartlead": {}, "filter_social_media": {}, "filter_review_sites": {}, "filter_directories": {}, "filter_maps": {}}}, "priority": 0})
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{"payload": {"url": "https://www.google.com/maps/place/...", "search_query": "coffee shops in San Francisco", "max_results": 20, "extract_reviews": false, "extract_photos": false, "lang": "en", "country": "string", "headless": true, "test": false, "store_images": true, "validate_phones": true, "fuzziq_enabled": true, "fuzziq_unique_only": true, "skip_proxy": false, "maps_source": "maps", "workflow": {"spidersite": {}, "spiderverify": {}, "vayapin": {}, "social_media_enrichment": {}, "smartlead": {}, "filter_social_media": {}, "filter_review_sites": {}, "filter_directories": {}, "filter_maps": {}}}, "priority": 0}`)
req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/jobs/spiderMaps/submit", body)
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
201 | Job created and queued successfully |
401 | Authentication failed |
403 | Client account is inactive |
422 | Validation error - Invalid payload |
429 | Rate limit exceeded |
500 | Internal server error |
503 | Queue service unavailable |
Submit website crawl job
Crawl a website and extract contact information, company vitals, social links, and AI-enriched lead data. Supports single-URL and multi-page crawls (best-first / BFS / DFS). Returns a job_id — poll /api/v1/jobs/{job_id}/results for the flat (v2.7.6+) response.
Try it
Examples
cURL
curl -X POST 'https://spideriq.ai/api/v1/jobs/spiderSite/submit' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{
"payload": {
"url": "https://example.com",
"mode": "contacts",
"overrides": {},
"max_pages": 10,
"crawl_strategy": "bestfirst",
"target_pages": [
"contact",
"about",
"team",
"news",
"blog"
],
"enable_spa": true,
"spa_timeout": 30,
"extract_team": false,
"extract_company_info": false,
"extract_pain_points": false,
"product_description": "string",
"icp_description": "string",
"timeout": 30,
"compendium": {
"enabled": {},
"max_chars": {},
"cleanup_level": {},
"separator": {},
"include_in_response": {},
"remove_duplicates": {},
"priority_sections": {}
},
"custom_ai_prompt": {
"enabled": {},
"system_prompt": {},
"user_prompt": {},
"json_schema": {},
"output_field_name": {},
"model": {},
"temperature": {},
"max_tokens": {}
},
"test": false,
"fuzziq_enabled": true,
"fuzziq_unique_only": true,
"extraction": {}
},
"priority": 0
}'Python
import httpx
resp = httpx.post(
"https://spideriq.ai/api/v1/jobs/spiderSite/submit",
headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
json={"payload": {"url": "https://example.com", "mode": "contacts", "overrides": {}, "max_pages": 10, "crawl_strategy": "bestfirst", "target_pages": ["contact", "about", "team", "news", "blog"], "enable_spa": true, "spa_timeout": 30, "extract_team": false, "extract_company_info": false, "extract_pain_points": false, "product_description": "string", "icp_description": "string", "timeout": 30, "compendium": {"enabled": {}, "max_chars": {}, "cleanup_level": {}, "separator": {}, "include_in_response": {}, "remove_duplicates": {}, "priority_sections": {}}, "custom_ai_prompt": {"enabled": {}, "system_prompt": {}, "user_prompt": {}, "json_schema": {}, "output_field_name": {}, "model": {}, "temperature": {}, "max_tokens": {}}, "test": false, "fuzziq_enabled": true, "fuzziq_unique_only": true, "extraction": {}}, "priority": 0},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/jobs/spiderSite/submit", {
method: "POST",
headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
body: JSON.stringify({"payload": {"url": "https://example.com", "mode": "contacts", "overrides": {}, "max_pages": 10, "crawl_strategy": "bestfirst", "target_pages": ["contact", "about", "team", "news", "blog"], "enable_spa": true, "spa_timeout": 30, "extract_team": false, "extract_company_info": false, "extract_pain_points": false, "product_description": "string", "icp_description": "string", "timeout": 30, "compendium": {"enabled": {}, "max_chars": {}, "cleanup_level": {}, "separator": {}, "include_in_response": {}, "remove_duplicates": {}, "priority_sections": {}}, "custom_ai_prompt": {"enabled": {}, "system_prompt": {}, "user_prompt": {}, "json_schema": {}, "output_field_name": {}, "model": {}, "temperature": {}, "max_tokens": {}}, "test": false, "fuzziq_enabled": true, "fuzziq_unique_only": true, "extraction": {}}, "priority": 0})
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{"payload": {"url": "https://example.com", "mode": "contacts", "overrides": {}, "max_pages": 10, "crawl_strategy": "bestfirst", "target_pages": ["contact", "about", "team", "news", "blog"], "enable_spa": true, "spa_timeout": 30, "extract_team": false, "extract_company_info": false, "extract_pain_points": false, "product_description": "string", "icp_description": "string", "timeout": 30, "compendium": {"enabled": {}, "max_chars": {}, "cleanup_level": {}, "separator": {}, "include_in_response": {}, "remove_duplicates": {}, "priority_sections": {}}, "custom_ai_prompt": {"enabled": {}, "system_prompt": {}, "user_prompt": {}, "json_schema": {}, "output_field_name": {}, "model": {}, "temperature": {}, "max_tokens": {}}, "test": false, "fuzziq_enabled": true, "fuzziq_unique_only": true, "extraction": {}}, "priority": 0}`)
req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/jobs/spiderSite/submit", body)
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
201 | Job created and queued successfully |
401 | Authentication failed |
403 | Client account is inactive |
422 | Validation error - Invalid payload |
429 | Rate limit exceeded |
500 | Internal server error |
503 | Queue service unavailable |
Submit email verification job
Verify one or more email addresses against SMTP, MX, DNSBL, disposable-domain, catch-all, and Gravatar checks. Accepts email (single) or emails (bulk, up to payload limit). Returns a job_id — poll /api/v1/jobs/{job_id}/results for per-address verdicts.
Try it
Examples
cURL
curl -X POST 'https://spideriq.ai/api/v1/jobs/spiderVerify/submit' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{
"payload": {
"email": "john@example.com",
"emails": [
"john@example.com",
"jane@example.com"
],
"from_email": "string",
"hello_name": "string",
"check_gravatar": false,
"smtp_timeout_secs": 45,
"check_dnsbl": false,
"test": false,
"fuzziq_enabled": true,
"fuzziq_unique_only": true
},
"priority": 0
}'Python
import httpx
resp = httpx.post(
"https://spideriq.ai/api/v1/jobs/spiderVerify/submit",
headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
json={"payload": {"email": "john@example.com", "emails": ["john@example.com", "jane@example.com"], "from_email": "string", "hello_name": "string", "check_gravatar": false, "smtp_timeout_secs": 45, "check_dnsbl": false, "test": false, "fuzziq_enabled": true, "fuzziq_unique_only": true}, "priority": 0},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/jobs/spiderVerify/submit", {
method: "POST",
headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
body: JSON.stringify({"payload": {"email": "john@example.com", "emails": ["john@example.com", "jane@example.com"], "from_email": "string", "hello_name": "string", "check_gravatar": false, "smtp_timeout_secs": 45, "check_dnsbl": false, "test": false, "fuzziq_enabled": true, "fuzziq_unique_only": true}, "priority": 0})
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{"payload": {"email": "john@example.com", "emails": ["john@example.com", "jane@example.com"], "from_email": "string", "hello_name": "string", "check_gravatar": false, "smtp_timeout_secs": 45, "check_dnsbl": false, "test": false, "fuzziq_enabled": true, "fuzziq_unique_only": true}, "priority": 0}`)
req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/jobs/spiderVerify/submit", body)
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
201 | Job created and queued successfully |
401 | Authentication failed |
403 | Client account is inactive |
422 | Validation error - Invalid payload |
429 | Rate limit exceeded |
500 | Internal server error |
503 | Queue service unavailable |
Submit people-search / enrichment job
Search for people by name, title, or company, or enrich an existing lead with email/phone/social. Operates in search or enrich mode depending on the payload. Returns a job_id — poll /api/v1/jobs/{job_id}/results for aggregated people records.
Try it
Examples
cURL
curl -X POST 'https://spideriq.ai/api/v1/jobs/spiderPeople/submit' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{
"payload": {
"mode": "profile",
"linkedin_url": "https://www.linkedin.com/in/john-doe",
"search_query": "5 AI engineers in Israel",
"search_limit": 10,
"country_code": "string",
"company_url": "https://www.linkedin.com/company/pleo",
"max_employees": 100,
"profile_mode": "short",
"person_name": "string",
"test": false,
"fuzziq_enabled": true,
"fuzziq_unique_only": true
},
"priority": 0
}'Python
import httpx
resp = httpx.post(
"https://spideriq.ai/api/v1/jobs/spiderPeople/submit",
headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
json={"payload": {"mode": "profile", "linkedin_url": "https://www.linkedin.com/in/john-doe", "search_query": "5 AI engineers in Israel", "search_limit": 10, "country_code": "string", "company_url": "https://www.linkedin.com/company/pleo", "max_employees": 100, "profile_mode": "short", "person_name": "string", "test": false, "fuzziq_enabled": true, "fuzziq_unique_only": true}, "priority": 0},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/jobs/spiderPeople/submit", {
method: "POST",
headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
body: JSON.stringify({"payload": {"mode": "profile", "linkedin_url": "https://www.linkedin.com/in/john-doe", "search_query": "5 AI engineers in Israel", "search_limit": 10, "country_code": "string", "company_url": "https://www.linkedin.com/company/pleo", "max_employees": 100, "profile_mode": "short", "person_name": "string", "test": false, "fuzziq_enabled": true, "fuzziq_unique_only": true}, "priority": 0})
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{"payload": {"mode": "profile", "linkedin_url": "https://www.linkedin.com/in/john-doe", "search_query": "5 AI engineers in Israel", "search_limit": 10, "country_code": "string", "company_url": "https://www.linkedin.com/company/pleo", "max_employees": 100, "profile_mode": "short", "person_name": "string", "test": false, "fuzziq_enabled": true, "fuzziq_unique_only": true}, "priority": 0}`)
req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/jobs/spiderPeople/submit", body)
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
201 | Job created and queued successfully |
401 | Authentication failed |
403 | Client account is inactive |
422 | Validation error - Invalid payload |
429 | Rate limit exceeded |
500 | Internal server error |
503 | Queue service unavailable |
Submit phone lookup / outreach job
Look up phone numbers from Google Maps listings or trigger phone-based outreach actions via the iPhone bridge. platform and action in the payload select the behaviour. Returns a job_id — poll /api/v1/jobs/{job_id}/results for the result set.
Try it
Examples
cURL
curl -X POST 'https://spideriq.ai/api/v1/jobs/spiderPhone/submit' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{
"payload": {
"platform": "linkedin",
"action": "string",
"params": {},
"config": {
"action_timeout": 30.0,
"max_retries": 3,
"max_items": 100,
"capture_screenshots": true,
"behavior": {}
},
"test": false
},
"priority": 0
}'Python
import httpx
resp = httpx.post(
"https://spideriq.ai/api/v1/jobs/spiderPhone/submit",
headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
json={"payload": {"platform": "linkedin", "action": "string", "params": {}, "config": {"action_timeout": 30.0, "max_retries": 3, "max_items": 100, "capture_screenshots": true, "behavior": {}}, "test": false}, "priority": 0},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/jobs/spiderPhone/submit", {
method: "POST",
headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
body: JSON.stringify({"payload": {"platform": "linkedin", "action": "string", "params": {}, "config": {"action_timeout": 30.0, "max_retries": 3, "max_items": 100, "capture_screenshots": true, "behavior": {}}, "test": false}, "priority": 0})
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{"payload": {"platform": "linkedin", "action": "string", "params": {}, "config": {"action_timeout": 30.0, "max_retries": 3, "max_items": 100, "capture_screenshots": true, "behavior": {}}, "test": false}, "priority": 0}`)
req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/jobs/spiderPhone/submit", body)
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
201 | Job created and queued successfully |
401 | Authentication failed |
403 | Client account is inactive |
422 | Validation error - Invalid payload |
429 | Rate limit exceeded |
500 | Internal server error |
503 | Queue service unavailable |
Submit Google Maps business-data enrichment job
Enrich an existing Google Maps business (by place_id or search) with reviews, photos, opening hours, and extended attributes. Use when /spiderMaps results need deeper detail. Returns a job_id — poll /api/v1/jobs/{job_id}/results for the enriched record.
Try it
Examples
cURL
curl -X POST 'https://spideriq.ai/api/v1/jobs/spiderMapsEnrich/submit' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{
"payload": {
"google_place_id": "string",
"google_cid": "string",
"place_url": "string",
"original_data": {},
"exclude_vps": [
"string"
],
"use_proxy": true,
"enrich_options": {
"reviews": {},
"photos": {},
"popular_times": true,
"store_images": true
},
"snowball": {
"enabled": false,
"max_depth": 2,
"max_places_per_seed": 10
},
"test": false
},
"priority": 5
}'Python
import httpx
resp = httpx.post(
"https://spideriq.ai/api/v1/jobs/spiderMapsEnrich/submit",
headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
json={"payload": {"google_place_id": "string", "google_cid": "string", "place_url": "string", "original_data": {}, "exclude_vps": ["string"], "use_proxy": true, "enrich_options": {"reviews": {}, "photos": {}, "popular_times": true, "store_images": true}, "snowball": {"enabled": false, "max_depth": 2, "max_places_per_seed": 10}, "test": false}, "priority": 5},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/jobs/spiderMapsEnrich/submit", {
method: "POST",
headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
body: JSON.stringify({"payload": {"google_place_id": "string", "google_cid": "string", "place_url": "string", "original_data": {}, "exclude_vps": ["string"], "use_proxy": true, "enrich_options": {"reviews": {}, "photos": {}, "popular_times": true, "store_images": true}, "snowball": {"enabled": false, "max_depth": 2, "max_places_per_seed": 10}, "test": false}, "priority": 5})
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{"payload": {"google_place_id": "string", "google_cid": "string", "place_url": "string", "original_data": {}, "exclude_vps": ["string"], "use_proxy": true, "enrich_options": {"reviews": {}, "photos": {}, "popular_times": true, "store_images": true}, "snowball": {"enabled": false, "max_depth": 2, "max_places_per_seed": 10}, "test": false}, "priority": 5}`)
req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/jobs/spiderMapsEnrich/submit", body)
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
201 | Job created and queued successfully |
401 | Authentication failed |
403 | Client account is inactive |
422 | Validation error - Invalid payload |
429 | Rate limit exceeded |
500 | Internal server error |
503 | Queue service unavailable |
Submit Facebook page scraping job
Scrape a public Facebook Page for posts, about info, contact details, and engagement metadata. Accepts the page URL or numeric page ID. Returns a job_id — poll /api/v1/jobs/{job_id}/results for the structured page payload.
Try it
Examples
cURL
curl -X POST 'https://spideriq.ai/api/v1/jobs/spiderFacebookPage/submit' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{
"payload": {
"url": "https://www.facebook.com/instagram",
"test": false
},
"priority": 0
}'Python
import httpx
resp = httpx.post(
"https://spideriq.ai/api/v1/jobs/spiderFacebookPage/submit",
headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
json={"payload": {"url": "https://www.facebook.com/instagram", "test": false}, "priority": 0},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/jobs/spiderFacebookPage/submit", {
method: "POST",
headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
body: JSON.stringify({"payload": {"url": "https://www.facebook.com/instagram", "test": false}, "priority": 0})
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{"payload": {"url": "https://www.facebook.com/instagram", "test": false}, "priority": 0}`)
req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/jobs/spiderFacebookPage/submit", body)
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
201 | Job created and queued successfully |
401 | Authentication failed |
403 | Client account is inactive |
422 | Validation error - Invalid payload |
429 | Rate limit exceeded |
500 | Internal server error |
503 | Queue service unavailable |
Submit Instagram profile scraping job
Scrape a public Instagram profile for bio, recent posts, follower counts, and contact fields exposed via the business_contact schema. Accepts the profile URL or handle. Returns a job_id — poll /api/v1/jobs/{job_id}/results for the structured profile payload.
Try it
Examples
cURL
curl -X POST 'https://spideriq.ai/api/v1/jobs/spiderPublicInstagram/submit' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{
"payload": {
"username": "natgeo",
"instagram_url": "https://www.instagram.com/natgeo/",
"extract_contact_from_bio": true,
"store_profile_image": true,
"test": false
},
"priority": 0
}'Python
import httpx
resp = httpx.post(
"https://spideriq.ai/api/v1/jobs/spiderPublicInstagram/submit",
headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
json={"payload": {"username": "natgeo", "instagram_url": "https://www.instagram.com/natgeo/", "extract_contact_from_bio": true, "store_profile_image": true, "test": false}, "priority": 0},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/jobs/spiderPublicInstagram/submit", {
method: "POST",
headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
body: JSON.stringify({"payload": {"username": "natgeo", "instagram_url": "https://www.instagram.com/natgeo/", "extract_contact_from_bio": true, "store_profile_image": true, "test": false}, "priority": 0})
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{"payload": {"username": "natgeo", "instagram_url": "https://www.instagram.com/natgeo/", "extract_contact_from_bio": true, "store_profile_image": true, "test": false}, "priority": 0}`)
req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/jobs/spiderPublicInstagram/submit", body)
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
201 | Job created and queued successfully |
401 | Authentication failed |
403 | Client account is inactive |
422 | Validation error - Invalid payload |
429 | Rate limit exceeded |
500 | Internal server error |
503 | Queue service unavailable |
Submit LinkedIn scraping job
Scrape LinkedIn profiles and companies using Voyager API. Requires mobile proxy.
Try it
Examples
cURL
curl -X POST 'https://spideriq.ai/api/v1/jobs/spiderPublicLinkedin/submit' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{
"payload": {
"mode": "get_company",
"public_id": "microsoft",
"linkedin_url": "https://www.linkedin.com/company/microsoft/",
"keywords": "AI startup funding",
"max_results": 10,
"location": "string",
"company": "string",
"title": "string",
"industry": "string",
"store_logo": true,
"include_posts": false,
"test": false,
"skip_proxy": false
},
"priority": 0
}'Python
import httpx
resp = httpx.post(
"https://spideriq.ai/api/v1/jobs/spiderPublicLinkedin/submit",
headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
json={"payload": {"mode": "get_company", "public_id": "microsoft", "linkedin_url": "https://www.linkedin.com/company/microsoft/", "keywords": "AI startup funding", "max_results": 10, "location": "string", "company": "string", "title": "string", "industry": "string", "store_logo": true, "include_posts": false, "test": false, "skip_proxy": false}, "priority": 0},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/jobs/spiderPublicLinkedin/submit", {
method: "POST",
headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
body: JSON.stringify({"payload": {"mode": "get_company", "public_id": "microsoft", "linkedin_url": "https://www.linkedin.com/company/microsoft/", "keywords": "AI startup funding", "max_results": 10, "location": "string", "company": "string", "title": "string", "industry": "string", "store_logo": true, "include_posts": false, "test": false, "skip_proxy": false}, "priority": 0})
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{"payload": {"mode": "get_company", "public_id": "microsoft", "linkedin_url": "https://www.linkedin.com/company/microsoft/", "keywords": "AI startup funding", "max_results": 10, "location": "string", "company": "string", "title": "string", "industry": "string", "store_logo": true, "include_posts": false, "test": false, "skip_proxy": false}, "priority": 0}`)
req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/jobs/spiderPublicLinkedin/submit", body)
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
201 | Job created and queued successfully |
401 | Authentication failed |
403 | Client account is inactive |
422 | Validation error - Invalid payload |
429 | Rate limit exceeded |
500 | Internal server error |
503 | Queue service unavailable |
Submit landing page capture job
Capture landing pages with screenshots, HTML bundles, and AI-extracted marketing content.
Try it
Examples
cURL
curl -X POST 'https://spideriq.ai/api/v1/jobs/spiderLanding/submit' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{
"payload": {
"url": "https://tracking.example.com/redirect?ad_id=123",
"ad_id": "string",
"options": {
"capture_screenshot": true,
"capture_full_page": true,
"capture_html_bundle": true,
"extract_content": true,
"dismiss_popups": true,
"scroll_for_lazy_load": true,
"viewport": {},
"timeout_seconds": 60,
"max_redirects": 10
},
"test": false
},
"priority": 0
}'Python
import httpx
resp = httpx.post(
"https://spideriq.ai/api/v1/jobs/spiderLanding/submit",
headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
json={"payload": {"url": "https://tracking.example.com/redirect?ad_id=123", "ad_id": "string", "options": {"capture_screenshot": true, "capture_full_page": true, "capture_html_bundle": true, "extract_content": true, "dismiss_popups": true, "scroll_for_lazy_load": true, "viewport": {}, "timeout_seconds": 60, "max_redirects": 10}, "test": false}, "priority": 0},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/jobs/spiderLanding/submit", {
method: "POST",
headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
body: JSON.stringify({"payload": {"url": "https://tracking.example.com/redirect?ad_id=123", "ad_id": "string", "options": {"capture_screenshot": true, "capture_full_page": true, "capture_html_bundle": true, "extract_content": true, "dismiss_popups": true, "scroll_for_lazy_load": true, "viewport": {}, "timeout_seconds": 60, "max_redirects": 10}, "test": false}, "priority": 0})
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{"payload": {"url": "https://tracking.example.com/redirect?ad_id=123", "ad_id": "string", "options": {"capture_screenshot": true, "capture_full_page": true, "capture_html_bundle": true, "extract_content": true, "dismiss_popups": true, "scroll_for_lazy_load": true, "viewport": {}, "timeout_seconds": 60, "max_redirects": 10}, "test": false}, "priority": 0}`)
req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/jobs/spiderLanding/submit", body)
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
201 | Job created and queued successfully |
401 | Authentication failed |
403 | Client account is inactive |
422 | Validation error - Invalid payload |
429 | Rate limit exceeded |
500 | Internal server error |
503 | Queue service unavailable |
Submit video stitching job
Stitch AI-generated video scenes into final video using Remotion.
Try it
Examples
cURL
curl -X POST 'https://spideriq.ai/api/v1/jobs/spiderVideo/submit' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{
"payload": {
"projectName": "string",
"aspectRatio": "9:16",
"scenes": [
{
"videoUrl": "string",
"durationInSeconds": 0.0
}
],
"transitionDurationInFrames": 15,
"musicUrl": "string",
"musicVolume": 0.3,
"preprocess": {
"enabled": false
},
"upload": {
"enabled": false
},
"test": false
},
"priority": 5
}'Python
import httpx
resp = httpx.post(
"https://spideriq.ai/api/v1/jobs/spiderVideo/submit",
headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
json={"payload": {"projectName": "string", "aspectRatio": "9:16", "scenes": [{"videoUrl": "string", "durationInSeconds": 0.0}], "transitionDurationInFrames": 15, "musicUrl": "string", "musicVolume": 0.3, "preprocess": {"enabled": false}, "upload": {"enabled": false}, "test": false}, "priority": 5},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/jobs/spiderVideo/submit", {
method: "POST",
headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
body: JSON.stringify({"payload": {"projectName": "string", "aspectRatio": "9:16", "scenes": [{"videoUrl": "string", "durationInSeconds": 0.0}], "transitionDurationInFrames": 15, "musicUrl": "string", "musicVolume": 0.3, "preprocess": {"enabled": false}, "upload": {"enabled": false}, "test": false}, "priority": 5})
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{"payload": {"projectName": "string", "aspectRatio": "9:16", "scenes": [{"videoUrl": "string", "durationInSeconds": 0.0}], "transitionDurationInFrames": 15, "musicUrl": "string", "musicVolume": 0.3, "preprocess": {"enabled": false}, "upload": {"enabled": false}, "test": false}, "priority": 5}`)
req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/jobs/spiderVideo/submit", body)
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
201 | Job created and queued successfully |
401 | Authentication failed |
403 | Client account is inactive |
422 | Validation error - Invalid payload |
429 | Rate limit exceeded |
500 | Internal server error |
503 | Queue service unavailable |
Extract numbered image sequence from a video (scroll-sequence pipeline)
Run ffmpeg against a source video to produce a numbered sequence of web-optimized WebP/JPEG frames suitable for canvas + GSAP ScrollTrigger scroll-linked image sequences. Output manifest plugs directly into the sys-scroll-sequence system component as {base_url, pattern, count}.
Try it
Examples
cURL
curl -X POST 'https://spideriq.ai/api/v1/jobs/spiderVideo/extract-frames/submit' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{
"payload": {
"aspectRatio": "9:16",
"musicUrl": "https://example.com/music.mp3",
"musicVolume": 0.3,
"projectName": "my-video",
"scenes": [
{
"durationInSeconds": 5,
"videoUrl": "https://example.com/scene1.mp4"
},
{
"durationInSeconds": 3,
"videoUrl": "https://example.com/scene2.mp4"
}
],
"transitionDurationInFrames": 15,
"upload": {
"enabled": true
}
},
"priority": 5
}'Python
import httpx
resp = httpx.post(
"https://spideriq.ai/api/v1/jobs/spiderVideo/extract-frames/submit",
headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
json={"payload": {"aspectRatio": "9:16", "musicUrl": "https://example.com/music.mp3", "musicVolume": 0.3, "projectName": "my-video", "scenes": [{"durationInSeconds": 5, "videoUrl": "https://example.com/scene1.mp4"}, {"durationInSeconds": 3, "videoUrl": "https://example.com/scene2.mp4"}], "transitionDurationInFrames": 15, "upload": {"enabled": true}}, "priority": 5},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/jobs/spiderVideo/extract-frames/submit", {
method: "POST",
headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
body: JSON.stringify({"payload": {"aspectRatio": "9:16", "musicUrl": "https://example.com/music.mp3", "musicVolume": 0.3, "projectName": "my-video", "scenes": [{"durationInSeconds": 5, "videoUrl": "https://example.com/scene1.mp4"}, {"durationInSeconds": 3, "videoUrl": "https://example.com/scene2.mp4"}], "transitionDurationInFrames": 15, "upload": {"enabled": true}}, "priority": 5})
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{"payload": {"aspectRatio": "9:16", "musicUrl": "https://example.com/music.mp3", "musicVolume": 0.3, "projectName": "my-video", "scenes": [{"durationInSeconds": 5, "videoUrl": "https://example.com/scene1.mp4"}, {"durationInSeconds": 3, "videoUrl": "https://example.com/scene2.mp4"}], "transitionDurationInFrames": 15, "upload": {"enabled": true}}, "priority": 5}`)
req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/jobs/spiderVideo/extract-frames/submit", body)
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
201 | Job created and queued successfully |
401 | Authentication failed |
403 | Client account is inactive |
422 | Validation error - Invalid payload |
429 | Rate limit exceeded |
500 | Internal server error |
503 | Queue service unavailable |
Submit a Social Media Enrichment (contact recovery) job
Recover a missing email, phone, real website, or social links for ONE business from its known social handles. If the business already has a usable email, the job self-skips. Returns a job_id — poll /api/v1/jobs/{job_id}/results for the recovered fields (or the skip reason). Access is entitlement-gated (Social Media Enrichment plan).
Try it
Examples
cURL
curl -X POST 'https://spideriq.ai/api/v1/jobs/spiderSocial/submit' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{
"payload": {
"social_media": {},
"website": "string",
"email": "string",
"phone": "string",
"place_id": "string",
"campaign_id": "string",
"business_name": "string",
"country_code": "string",
"test": false
},
"priority": 0
}'Python
import httpx
resp = httpx.post(
"https://spideriq.ai/api/v1/jobs/spiderSocial/submit",
headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
json={"payload": {"social_media": {}, "website": "string", "email": "string", "phone": "string", "place_id": "string", "campaign_id": "string", "business_name": "string", "country_code": "string", "test": false}, "priority": 0},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/jobs/spiderSocial/submit", {
method: "POST",
headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
body: JSON.stringify({"payload": {"social_media": {}, "website": "string", "email": "string", "phone": "string", "place_id": "string", "campaign_id": "string", "business_name": "string", "country_code": "string", "test": false}, "priority": 0})
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{"payload": {"social_media": {}, "website": "string", "email": "string", "phone": "string", "place_id": "string", "campaign_id": "string", "business_name": "string", "country_code": "string", "test": false}, "priority": 0}`)
req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/jobs/spiderSocial/submit", body)
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
201 | Job created and queued successfully |
401 | Authentication failed |
403 | Client account is inactive |
422 | Validation error - Invalid payload |
429 | Rate limit exceeded |
500 | Internal server error |
503 | Queue service unavailable |
Submit a press-release wire-distribution job
Distribute a press release over the newswire. Submit a release (title + body, plus optional summary/category/tags/contact); returns a job_id — poll /api/v1/jobs/{job_id}/results for the published URL and wire report once the release goes live.
Try it
Examples
cURL
curl -X POST 'https://spideriq.ai/api/v1/jobs/spiderPR/submit' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{
"payload": {
"title": "Acme Corp launches AI-powered widget",
"body": "string",
"summary": "string",
"category": "string",
"tags": [
"string"
],
"contact": {
"name": "Jane Doe",
"email": "press@example.com",
"phone": "+1-555-123-4567"
},
"provider": "prnow",
"scheduled_release_at": "2026-01-01T00:00:00Z",
"test": false
},
"priority": 5
}'Python
import httpx
resp = httpx.post(
"https://spideriq.ai/api/v1/jobs/spiderPR/submit",
headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
json={"payload": {"title": "Acme Corp launches AI-powered widget", "body": "string", "summary": "string", "category": "string", "tags": ["string"], "contact": {"name": "Jane Doe", "email": "press@example.com", "phone": "+1-555-123-4567"}, "provider": "prnow", "scheduled_release_at": "2026-01-01T00:00:00Z", "test": false}, "priority": 5},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/jobs/spiderPR/submit", {
method: "POST",
headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
body: JSON.stringify({"payload": {"title": "Acme Corp launches AI-powered widget", "body": "string", "summary": "string", "category": "string", "tags": ["string"], "contact": {"name": "Jane Doe", "email": "press@example.com", "phone": "+1-555-123-4567"}, "provider": "prnow", "scheduled_release_at": "2026-01-01T00:00:00Z", "test": false}, "priority": 5})
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{"payload": {"title": "Acme Corp launches AI-powered widget", "body": "string", "summary": "string", "category": "string", "tags": ["string"], "contact": {"name": "Jane Doe", "email": "press@example.com", "phone": "+1-555-123-4567"}, "provider": "prnow", "scheduled_release_at": "2026-01-01T00:00:00Z", "test": false}, "priority": 5}`)
req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/jobs/spiderPR/submit", body)
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
201 | Job created and queued successfully |
401 | Authentication failed |
403 | Client account is inactive |
422 | Validation error - Invalid payload |
429 | Rate limit exceeded |
500 | Internal server error |
503 | Queue service unavailable |
Convert a document to markdown (async)
Convert PDF / DOCX / XLSX / PPTX / CSV / HTML / image documents to markdown. Returns 202 + a job_id — poll GET /api/v1/jobs/{job_id}/results for the conversion.
This endpoint is asynchronous by design. Extraction runs OCR and office-suite conversion that can take minutes on large scanned documents; it is not a request-cycle operation. Submit, then poll.
Supply exactly one of media_id (a SpiderMedia upload) or content_base64 (inline, small files). To POST a file directly, use /api/v1/jobs/spiderConvert/upload.
Try it
Examples
cURL
curl -X POST 'https://spideriq.ai/api/v1/jobs/spiderConvert/submit' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{
"payload": {
"media_id": "med_01J9X2QK7B8",
"content_base64": "string",
"filename": "safety-data-sheet.pdf",
"mime_type": "application/pdf",
"full_text": false,
"ocr": "auto",
"test": false
},
"priority": 0
}'Python
import httpx
resp = httpx.post(
"https://spideriq.ai/api/v1/jobs/spiderConvert/submit",
headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
json={"payload": {"media_id": "med_01J9X2QK7B8", "content_base64": "string", "filename": "safety-data-sheet.pdf", "mime_type": "application/pdf", "full_text": false, "ocr": "auto", "test": false}, "priority": 0},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/jobs/spiderConvert/submit", {
method: "POST",
headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
body: JSON.stringify({"payload": {"media_id": "med_01J9X2QK7B8", "content_base64": "string", "filename": "safety-data-sheet.pdf", "mime_type": "application/pdf", "full_text": false, "ocr": "auto", "test": false}, "priority": 0})
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{"payload": {"media_id": "med_01J9X2QK7B8", "content_base64": "string", "filename": "safety-data-sheet.pdf", "mime_type": "application/pdf", "full_text": false, "ocr": "auto", "test": false}, "priority": 0}`)
req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/jobs/spiderConvert/submit", body)
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
202 | Successful Response |
201 | Job created and queued successfully |
401 | Authentication failed |
403 | Client account is inactive |
422 | Validation error - Invalid payload |
429 | Rate limit exceeded |
500 | Internal server error |
503 | Queue service unavailable |
Upload a document for markdown conversion (async, multipart)
Multipart variant of /spiderConvert/submit — POST the file itself. Returns 202 + a job_id.
Maximum 10 MB. This is the nginx client_max_body_size for /api/v1/, not an arbitrary application choice; a larger body is rejected by the proxy before it reaches the API. For bigger documents, upload to SpiderMedia and submit the media_id instead.
Try it
Examples
cURL
curl -X POST 'https://spideriq.ai/api/v1/jobs/spiderConvert/upload' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{
"file": "string",
"full_text": false,
"ocr": "auto",
"test": false
}'Python
import httpx
resp = httpx.post(
"https://spideriq.ai/api/v1/jobs/spiderConvert/upload",
headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
json={"file": "string", "full_text": false, "ocr": "auto", "test": false},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/jobs/spiderConvert/upload", {
method: "POST",
headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
body: JSON.stringify({"file": "string", "full_text": false, "ocr": "auto", "test": false})
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{"file": "string", "full_text": false, "ocr": "auto", "test": false}`)
req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/jobs/spiderConvert/upload", body)
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
202 | Successful Response |
201 | Job created and queued successfully |
401 | Authentication failed |
403 | Client account is inactive |
422 | Validation error - Invalid payload |
429 | Rate limit exceeded |
500 | Internal server error |
503 | Queue service unavailable |
Fetch the full markdown of a conversion stored in object storage
When a conversion's markdown exceeds the inline threshold (256 KB by default — DOCUMENT_STORAGE_THRESHOLD_KB) it is written to object storage and the job result carries a storage_key instead of a body (SpiderMail LEARNINGS §11). This is where you follow that key.
🔑 There is only a key to follow if the conversion was submitted with full_text=true. That flag is evaluated before the size threshold, so an over-threshold document requested without it is never stored and this route 404s — correctly. Check truncation_notice on the result before reading a 404 here as a storage failure.
Returns text/markdown, not JSON — the payload is by definition large and wrapping it in a JSON string helps nobody.
This is not a way around extraction_truncated. If that flag is true the missing text was never extracted, so it is not here either.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
job_id | path | string | true |
Try it
Examples
cURL
curl -X GET 'https://spideriq.ai/api/v1/jobs/spiderConvert/{job_id}/content' \
-H 'Authorization: Bearer <token>'Python
import httpx
resp = httpx.get(
"https://spideriq.ai/api/v1/jobs/spiderConvert/{job_id}/content",
headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/jobs/spiderConvert/{job_id}/content", {
method: "GET",
headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://spideriq.ai/api/v1/jobs/spiderConvert/{job_id}/content", nil)
req.Header.Set("Authorization", "Bearer <token>")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
200 | The complete markdown. |
404 | No such job for this client, or it has no stored content. |
503 | Object storage is unreachable. |
422 | Validation Error |