| Level | Fires When | Use Case |
|---|---|---|
| Sheet-level | A product in that specific sheet is enriched | Different endpoints for different workflows |
| Org-level | Fallback if no sheet webhook exists | Default/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
Payload Fields
| Field | Type | Description |
|---|---|---|
event | string | Always product.enriched |
sheet_id | string | The sheet ID |
product.id | string | The product ID |
product.name | string | Product name |
product.sku | string | Product SKU |
product.status | string | READY or NO_RESULTS |
product.source_urls | array | URLs where data was scraped from |
product.attributes | object | Enriched data (same shape as /feed) |
Signature Verification
If you provided asecret when configuring your webhook, Anglera includes an HMAC-SHA256 signature in the X-Webhook-Signature header.
Python Verification Example
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 secretHandle Duplicates
Use
product_id for idempotency
