Using the API

Making Requests

This page shows complete request/response examples for the core Extralt API workflows.

Setup

export EXTRALT_API_KEY="your-api-key"
export BASE_URL="https://api.extralt.com"

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

Response:

{
  "_id": "bld_xyz789",
  "status": "pending",
  "url": "https://example-store.com/products/sample",
  "country": "US"
}

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",
  "extractedCount": 42,
  "queueSize": 158
}

List captures

curl -s "$BASE_URL/captures?runId=$RUN_ID" \
  -H "Authorization: Bearer $EXTRALT_API_KEY" | jq

Response:

[
  {
    "id": "019d3ec3-cf96-7520-bc31-1474206e06ed",
    "url": "https://www.nike.com/t/dna-mens-dri-fit-basketball-shorts-hVGm16/HV1878-350",
    "extracted_at": 1774874512106,
    "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",
    "is_available": true,
    "variant_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"] }
    },
    "variants": [
      {
        "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"
          }
        ]
      }
    ]
  }
]

Create a schedule

curl -s -X POST "$BASE_URL/schedules" \
  -H "Authorization: Bearer $EXTRALT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "robotId": "your-robot-id",
    "cadence": {
      "intervalAmount": 1,
      "intervalUnit": "day"
    },
    "config": {
      "startUrls": ["https://example-store.com/products"],
      "budget": 50
    }
  }' | jq

Response:

{
  "_id": "sch_xyz789",
  "name": "Daily example-store.com run",
  "robotId": "rbt_abc123",
  "enabled": true,
  "cadence": {
    "intervalAmount": 1,
    "intervalUnit": "day"
  },
  "config": {
    "startUrls": ["https://example-store.com/products"],
    "budget": 50
  },
  "nextRunAt": 1704067200000
}

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",
    "enabled": true,
    "cadence": {
      "intervalAmount": 1,
      "intervalUnit": "day"
    },
    "config": {
      "startUrls": ["https://example-store.com/products"],
      "budget": 50
    },
    "nextRunAt": 1704067200000
  }
]