Developer

Webhooks

Receive real-time event notifications in your own systems when products are processed, jobs complete, or subscription status changes.

📌 Full documentation coming soon

Webhook delivery logs and endpoint management are available in Settings → Developer. Detailed integration guides for each event type are being added here.

Overview

AvidiaTech webhooks let you trigger automation in your own systems the moment something happens in the pipeline. Instead of polling our API, register an HTTPS endpoint and we'll POST a signed JSON payload whenever a relevant event occurs.

All webhook requests are signed with an HMAC-SHA256 signature in the X-Avadia-Signature header so you can verify authenticity before processing the payload.

Registering a Webhook Endpoint

  1. Go to Settings → Developer → Webhooks.
  2. Click Add endpoint and enter your HTTPS URL.
  3. Select the event types you want to receive.
  4. Save — we'll immediately send a test ping to verify reachability.
  5. Copy your signing secret and store it securely. Use it to verify the X-Avadia-Signature header on incoming requests.

Event Types

product.extracted

Fired when AvidiaExtract successfully processes a product URL.

{ "product_id": "...", "sku": "...", "status": "extracted" }

product.described

Fired when AvidiaDescribe generates descriptions for a product.

{ "product_id": "...", "sku": "...", "status": "described" }

product.seo_complete

Fired when AvidiaSEO generates titles and meta for a product.

{ "product_id": "...", "sku": "...", "status": "seo_complete" }

bulk_job.complete

Fired when an entire bulk pipeline job finishes processing.

{ "job_id": "...", "total": 500, "succeeded": 498, "failed": 2 }

subscription.updated

Fired when a plan change or renewal updates your subscription status.

{ "plan": "growth", "status": "active", "period_end": "..." }

Verifying Signatures

Every webhook request includes an X-Avadia-Signature header containing an HMAC-SHA256 hash of the raw request body, signed with your endpoint's secret. Always verify this before processing:

import crypto from "crypto";

function verifyWebhook(rawBody: string, signature: string, secret: string) {
  const expected = crypto
    .createHmac("sha256", secret)
    .update(rawBody)
    .digest("hex");
  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expected)
  );
}

Related

AvidiaTech | Product Data Automation