ProductListings

Ingest a WooCommerce product webhook (Partner API)

Changed on

Accepts a single WooCommerce product webhook event for a partnership using bearer authentication. This endpoint is intended for partnerships and accepts:

  • a Cognito bearer token for the partner user linked to the listing source, or
  • an Aura Historia access token owned by that partner user.

The caller must provide:

  • the bearer token in the Authorization header,
  • the WooCommerce topic in x-wc-webhook-topic, and
  • the base64-encoded HMAC-SHA256 signature over the exact, untouched request body bytes in x-wc-webhook-signature, and
  • optionally, the WooCommerce delivery identifier in x-wc-webhook-delivery-id.

A supplied delivery identifier applies only when an event maps to raw capture. Its provider receipt retains only a canonical semantic source-payload SHA-256 evidence digest for 90 days. A captured-observation retry with the same digest may be deduplicated during downstream capture; reuse with different evidence fails in the consumer, not as an immediate HTTP 409. Logical receipt expiry permits a new receipt but never removes or rewrites a captured raw revision or its provenance. A timestamp-free DELETE establishes a restore barrier. A later UPSERT without a provably newer date_modified_gmt fails during downstream capture (WOOCOMMERCE_PROVIDER_SOURCE_ORDER_AMBIGUOUS), not as an immediate HTTP 409. Admission does not create a provider receipt or raw revision; investigate the failed FIFO command before reconciliation or redrive. The service verifies the signature over untouched body bytes before JSON parsing, then submits mapped observations as CAPTURE_RAW to the shared FIFO after bearer/capability checks and source configuration lookup. The consumer checks the current partner/source grant for mapped observations; ignored no-ops check it immediately. Only a matching, confirmed queue acceptance permits 204; rejected, oversized, unconfirmed, and not-attempted submissions are not acknowledged. The FIFO consumer later commits raw capture with the command receipt; provider receipt and source-order decisions occur during that capture. Authorized ignored create/update events are no-op 204 without queue send or receipt, even when they include a delivery identifier. Retry an uncertain submission with the same signed body, topic, source, actor and delivery identifier where provided; without a delivery identifier, retries cannot recover the original command identity after a lost reply and have no provider receipt-based deduplication guarantee. A lost reply may already have enqueued work; never infer rollback from a non-204.

Topic-specific payload requirements:

  • every topic requires id
  • product.created and product.updated with status: publish capture an UPSERT and require nonblank name and permalink
  • product.created and product.updated with status: trash, draft, pending, or private capture a DELETE and require only id; missing or unsupported statuses are authorized ignored events and also require only id
  • product.deleted captures a DELETE and requires only id

The listing source identified by listingSourceId must have a WooCommerce ingestion configuration with a nonblank write-only webhookSecret and a configured language. A nonblank price maps to a SET and requires the listing source to have woocommerceCurrency configured.

post/api/v1/webhooks/woocommerce/{listingSourceId}

Request

  • Base URL: https://api.stage.aura-historia.com
  • URL: https://api.stage.aura-historia.com/api/v1/webhooks/woocommerce/{listingSourceId}
  • Auth: one of:
    • HTTP bearer
    • HTTP bearer

Path parameters

listingSourceIdstring required
Example:ls_6rd827eqfefsva9teecmwa3ate

Unique identifier of the target ListingSource that should receive the WooCommerce webhook

Headers

x-wc-webhook-topic'product.created' | 'product.updated' | 'product.deleted' required

WooCommerce webhook topic that determines how the payload is interpreted. Only the listed topic values are accepted.

x-wc-webhook-signaturestring required

Base64-encoded HMAC-SHA256 signature of the raw HTTP request body, calculated with the WooCommerce ingestion configuration's webhookSecret.

x-wc-webhook-delivery-idstring

Optional WooCommerce delivery identifier. For an event that maps to raw capture, its downstream provider receipt retains only a canonical semantic source-payload SHA-256 evidence digest for 90 days and deduplicates retries when applied. Reuse with different evidence fails during consumer capture, not as an immediate HTTP conflict. Logical receipt expiry permits a new receipt but never removes or rewrites a captured raw revision or its provenance. Authorized ignored create/update status events persist no receipt and receive no receipt-based retry-deduplication, even when this header is supplied. When absent, no provider receipt or receipt-based retry-deduplication guarantee is made.

Request body

OR

Example request

{
  "id": 17,
  "name": "Test Produkt Titel",
  "permalink": "http://aura-historia-test.local/product/test-produkt-titel/",
  "description": "<p>Hayde yallah test beschreibung</p>\n",
  "short_description": "<p>Hayde yallah kurze test beschreibung</p>\n",
  "price": "42.69",
  "status": "publish",
  "stock_status": "instock",
  "date_modified_gmt": "2026-09-06T12:34:56",
  "images": []
}

Response

Webhook bearer/capability, source configuration, and exact-body signature are validated. Current partner/source grant authorization for mapped commands happens at consumer execution; ignored no-ops check it before response. A 204 acknowledges either an authorized ignored create/update status (no queue send or receipt) or matching confirmed acceptance of one CAPTURE_RAW command by the shared ProductListing FIFO. It does not confirm raw capture, provider receipt persistence, source-order checks, canonical normalization, or search visibility. Those decisions occur when the consumer executes the command. Ignored events do not parse date_modified_gmt or construct a provider receipt. When a delivery ID or source timestamp is omitted, no corresponding receipt or source-ordering guarantee is made. The backend returns no response body on success.

Changes

    • info

      added the non-success response with the status

    • info

      removed the non-success response with the status

    • info

      added the non-success response with the status

    • info

      removed the non-success response with the status