Skip to main content
Webhooks allow you to receive real-time notifications when product enrichment completes. Anglera supports two levels with inheritance:
LevelFires WhenUse Case
Sheet-levelA product in that specific sheet is enrichedDifferent endpoints for different workflows
Org-levelFallback if no sheet webhook existsDefault/catch-all for all sheets
Inheritance: Sheet-level takes precedence. If no sheet webhook is configured, the org-level webhook fires instead. Only one webhook fires per enrichment.

Webhook Payload

When product enrichment completes, Anglera POSTs to your webhook URL(s). The payload shape matches the /feed endpoint.
Example Payload
{
  "event": "product.enriched",
  "sheet_id": "100",
  "product": {
    "id": "12345",
    "name": "Frigidaire 36-in Side-by-side Fridge",
    "sku": "FRSS26L3AF",
    "status": "READY",
    "source_urls": [
      "https://www.costco.ca/frigidaire-refrigerator.product.html"
    ],
    "attributes": {
      "brand_name": "Frigidaire",
      "formatted_title": "Frigidaire 36 in 25.6 cu ft. Stainless Steel Side-by-Side Refrigerator",
      "key_features": ["EvenTemp™ Cooling System", "Fresh storage crispers"],
      "image": ["https://example.com/image1.jpg"]
    }
  }
}

Payload Fields

FieldTypeDescription
eventstringAlways product.enriched
sheet_idstringThe sheet ID
product.idstringThe product ID
product.namestringProduct name
product.skustringProduct SKU
product.statusstringREADY or NO_RESULTS
product.source_urlsarrayURLs where data was scraped from
product.attributesobjectEnriched data (same shape as /feed)

Signature Verification

If you provided a secret when configuring your webhook, Anglera includes an HMAC-SHA256 signature in the X-Webhook-Signature header.
Python Verification Example
import hmac
import hashlib
import json

def verify_signature(payload: dict, signature: str, secret: str) -> bool:
    expected = hmac.new(
        secret.encode(),
        json.dumps(payload, sort_keys=True).encode(),
        hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(expected, signature)

Best Practices

Respond Quickly

Return a 2xx status within 5 seconds

Process Async

Queue payloads for background processing

Verify Signatures

Use X-Webhook-Signature if you set a secret

Handle Duplicates

Use product_id for idempotency