ExtraltExtralt

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"
  }' | jq

Response:

{
  "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" | jq

Response:

{
  "_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" | jq

Response:

{
  "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
  }' | jq

Response:

{
  "id": "sch_xyz789"
}

List schedules

curl -s "$BASE_URL/schedules" \
  -H "Authorization: Bearer $EXTRALT_API_KEY" | jq

Response:

[
  {
    "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
  }
]