View as Markdown

Webhooks

Category: Public Base URL: /webhooks/cartrover Authentication: Mixed Routes: 5 routes documented

Overview#

This section documents 5 API routes for webhooks.

Quick Reference#

Method Endpoint Description
POST /webhooks/cartrover CartRover (Extensiv Integration Manager) Webhook Handler — `...
POST /webhooks/quickbox No description
POST /webhooks/resend No description
POST /webhooks/shipstation/:event No description
POST /webhooks/stripe-tolerant Custom Stripe webhook handler with extended tolerance This e...

POST Webhooks Cartrover#

Endpoint: POST /webhooks/cartrover Authentication: Public (Optional)

Description#

CartRover (Extensiv Integration Manager) Webhook Handler — order_update ========================================================================== CartRover posts an order_update event ("Order Shipped by Warehouse") carrying the same response-style shipment object documented for GET /v1/cart/orders/status/{CUST_REF} (carrier, tracking_no, cust_ref, order_status). CONTRACT: this endpoint MUST answer HTTP 200 or CartRover retries up to 10x with exponential backoff (and may eventually disable the webhook). Rollout: CAPTURE-FIRST (mirrors src/api/webhooks/quickbox/route.ts). CARTROVER_WEBHOOK_RECORD_ENABLED (default false) gates whether we ACT on the webhook. Until a real payload/auth scheme is confirmed, this route runs in CAPTURE mode: capture the full body BEFORE any validation, never reject, always return 200. Auth: CartRover uses Basic auth / a shared credential for its own API; no documented request-signing scheme for outbound webhooks was found in the Postman collection. No raw-body middleware is registered for this route (see src/api/middlewares.ts's quickbox/resend/etc. entries for the pattern to add if a body-signature scheme is confirmed later — that middleware registration is out of this track's scope). We do NOT call process-fulfillment directly here — emit an event and let the subscriber (cartrover-shipment-status.ts) do the work, mirroring the QuickBox webhook -> event bus -> subscriber -> process-fulfillment chain.

Request Body#

This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body.

Response#

Success (200):

{
  received,
  mode,
}

Also returns (200):

{
  received,
  mode,
  routed,
}

Also returns (200):

{
  received,
  mode,
}

Also returns (200):

{
  received,
  mode,
  routed,
}

Example Request#

curl -X POST 'https://your-store.omnicart.cc/webhooks/cartrover' \
  -H 'Content-Type: application/json'

POST Webhooks Quickbox#

Endpoint: POST /webhooks/quickbox Authentication: Public (Optional)

Request Body#

This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body.

Response#

Success (200):

{
  received,
  mode,
  signature_checked,
  signature_valid,
}

Also returns (200):

{
  received,
  mode,
}

Error (401):

{
  error,
}

Error (500):

{
  error,
}

Example Request#

curl -X POST 'https://your-store.omnicart.cc/webhooks/quickbox' \
  -H 'Content-Type: application/json'

POST Webhooks Resend#

Endpoint: POST /webhooks/resend Authentication: Public (Optional)

Request Body#

This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body.

Response#

Success (200):

{
  received,
  mode,
}

Also returns (200):

{
  received,
  handled,
}

Also returns (200):

{
  received,
  correlated,
}

Also returns (200):

{
  received,
  duplicate,
}

Also returns (200):

{
  received,
  duplicate,
}

Also returns (200):

{
  received,
  recorded,
  order_id,
}

Error (401):

{
  error,
}

Error (401):

{
  error,
}

Error (500):

{
  error,
}

Example Request#

curl -X POST 'https://your-store.omnicart.cc/webhooks/resend' \
  -H 'Content-Type: application/json'

POST Webhooks Shipstation :event#

Endpoint: POST /webhooks/shipstation/:event Authentication: Public (Optional)

URL Parameters#

Parameter Type Required Description
event string Yes Event identifier

Request Body#

This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body.

Response#

Success (200):

{
  received,
  mode,
}

Also returns (200):

{
  received,
  mode,
  routed,
}

Also returns (200):

{
  received,
  mode,
}

Also returns (200):

{
  received,
  mode,
  routed,
}

Error (404):

{
  error,
}

Error (401):

{
  error,
}

Error (401):

{
  error,
}

Example Request#

curl -X POST 'https://your-store.omnicart.cc/webhooks/shipstation/:event' \
  -H 'Content-Type: application/json'

POST Webhooks Stripe-tolerant#

Endpoint: POST /webhooks/stripe-tolerant Authentication: Public (Optional)

Description#

Custom Stripe webhook handler with extended tolerance This endpoint replaces the default /webhooks/payment/pp_stripe_stripe to handle webhook events with a 10-minute tolerance window instead of 5 minutes. Use this URL in Stripe Dashboard: https://your-domain.com/webhooks/stripe-tolerant

Request Body#

This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body.

Response#

Success (200):

{
  received,
  skipped,
  reason,
  eventId,
  action,
  sessionId,
}

Also returns (200):

{
  received,
  skipped,
  reason,
  eventId,
  action,
  sessionId,
}

Also returns (200):

{
  received,
  skipped,
  reason,
  eventId,
  action,
  sessionId,
}

Also returns (200):

{
  received,
  eventId,
  action,
}

Also returns (200):

{
  received,
  error,
}

Error (500):

{
  error,
}

Error (500):

{
  error,
}

Error (400):

{
  error,
}

Error (400):

{
  error,
}

Example Request#

curl -X POST 'https://your-store.omnicart.cc/webhooks/stripe-tolerant' \
  -H 'Content-Type: application/json'