---
title: "Receive a provider webhook"
method: POST
path: "/v1/webhooks/{provider}"
tags: ["Public"]
---

# Receive a provider webhook

`POST /v1/webhooks/{provider}`

## Request

- Base URL: `https://api.finalpos.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.finalpos.com/v1/webhooks/{provider}`
- Auth: none required

Ingress endpoint for third-party provider webhooks (e.g. Shopify). Captures the raw request body and republishes it, unmodified, to an internal message queue for asynchronous processing. Publicly accessible — no API key required; the provider authenticates via its own signature header, which is verified downstream. Returns `200` only once the message has been accepted for delivery; a transient queue failure returns `503` so the provider retries.

## Path parameters

- `provider` string, required

## Response `200`

Webhook accepted for processing.

- WebhookAckDto
  - `status` 'accepted', required: Acknowledgement that the raw webhook was captured and published for downstream processing. Always `accepted` when a 200 is returned.

## Other responses

- `400`: Empty request body.
- `401`: Missing provider signature header.
- `404`: Unknown / unsupported provider.
- `429`: Rate limit exceeded for the caller IP. Back off and retry after the `retry-after` header.
- `503`: Temporarily unable to accept the webhook; the provider should retry.

---

[API](https://skmtc.dev/finalpos/apis/final-pos-public-api.md) · [All operations](https://skmtc.dev/finalpos/apis/final-pos-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/finalpos/apis/final-pos-public-api/revisions/6a6842dcb479?raw)
