Making Requests
This page shows complete request/response examples for the core Extralt API workflows. All endpoints are versioned and pipeline-scoped under /v0/extract/... (or /v0/enrich/... for Enrichments and Items). Request bodies and query parameters use snake_case.
Setup
export EXTRALT_API_KEY="your-api-key"
export BASE_URL="https://api.extralt.com/v0/extract"Create a robot build
curl -s -X POST "$BASE_URL/robot-builds" \
-H "Authorization: Bearer $EXTRALT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example-store.com/products/sample",
"country_code": "US"
}' | jqResponse:
{
"id": "bld_xyz789"
}The response status is 202 Accepted when a new build is started, or 200 OK if a robot already exists for that host and country (in which case id is the existing robot ID).
Get run status
curl -s "$BASE_URL/runs/$RUN_ID" \
-H "Authorization: Bearer $EXTRALT_API_KEY" | jqResponse:
{
"_id": "run_def456",
"status": "running",
"robotId": "rbt_abc123",
"robotName": "example-store.com",
"name": "example-store.com run",
"extracted": 42,
"inQueue": 158,
"autoEnrich": false,
"createdAt": 1704067200000,
"startedAt": 1704067205000
}List captures
curl -s "$BASE_URL/captures?run_id=$RUN_ID" \
-H "Authorization: Bearer $EXTRALT_API_KEY" | jqResponse:
{
"rows": [
{
"id": "019d3ec3-cf96-7520-bc31-1474206e06ed",
"url": "https://www.nike.com/t/dna-mens-dri-fit-basketball-shorts-hVGm16/HV1878-350",
"extracted_at": 1774874512.106,
"product_id": "HV1878-350",
"group_id": "hVGm16",
"title": "Nike DNA",
"subtitle": "Men's Dri-FIT Basketball Shorts",
"brand": "Nike",
"description": "Built for the court, ready for anywhere...",
"min_price": 41.97,
"max_price": 41.97,
"currency": "USD",
"available": true,
"sku_count": 7,
"image_url": "https://static.nike.com/a/images/t_default/326dc2d4-a16d-4433-93d7-8d6f8313d4d0/M+NK+DF+DNA+8IN+SHORT+AOP.png",
"options": {
"opt1": { "name": "Color", "values": ["Chlorophyll/Black"] },
"opt2": { "name": "Size", "values": ["S", "M", "L", "XL", "2XL", "3XL", "4XL"] }
},
"skus": [
{
"id": "90c9f2c2-d984-5cc2-a2a0-89deac668eb3",
"opt1": "Chlorophyll/Black",
"opt2": "S",
"identifiers": { "gtin": "00198482162061", "mpn": "HV1878-350" },
"offers": [
{
"price": { "amount": 41.97, "full_amount": 60, "currency": "USD" },
"availability": { "in_stock": true, "quantity": "In stock" },
"condition": "new",
"seller": "Nike",
"seller_type": "1p"
}
]
}
]
}
],
"count": 1,
"next_cursor": "eyJpZCI6...",
"has_more": true
}Create a schedule
curl -s -X POST "$BASE_URL/schedules" \
-H "Authorization: Bearer $EXTRALT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"robot_id": "your-robot-id",
"cadence": {
"interval_amount": 1,
"interval_unit": "day"
},
"start_urls": ["https://example-store.com/products"],
"budget": 50
}' | jqResponse:
{
"id": "sch_xyz789"
}List schedules
curl -s "$BASE_URL/schedules" \
-H "Authorization: Bearer $EXTRALT_API_KEY" | jqResponse:
[
{
"id": "sch_xyz789",
"name": "Daily example-store.com run",
"robotId": "rbt_abc123",
"robotName": "example-store.com",
"enabled": true,
"cadence": {
"intervalAmount": 1,
"intervalUnit": "day"
},
"config": {
"startUrls": ["https://example-store.com/products"],
"budget": 50,
"ignoreRobotsTxt": false
},
"nextRunAt": 1704067200000,
"createdAt": 1704000000000,
"updatedAt": 1704000000000
}
]Authentication
Authenticate API requests with org-scoped Extralt API keys, Bearer tokens, rotation guidance, and safe handling for production integrations.
Common Patterns
Use common Extralt API patterns for polling runs, handling errors, paginating results, respecting rate limits, and exporting captured product data.