> ## Documentation Index
> Fetch the complete documentation index at: https://docs.joinmarkt.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Incoming Webhooks

> How payment gateways notify Join Markt when money settles.

Join Markt listens for **inbound** payment webhooks. Sellers do not register arbitrary outbound webhook URLs through a public API today (unlike Komerza’s user webhook CRUD).

## Purpose

Gateways POST to `/api/{gateway}/webhook`. Handlers verify signatures, locate the order, and call `completeOrderFromGateway` → fulfillment.

## Gateways with webhook routes

`adyen`, `amazon-ps`, `authorizenet`, `cryptomus`, `lemon-squeezy`, `misticpay`, `mollie`, `nowpayments`, `paypal`, `revolut`, `shopify`, `skrill`, `square`, `stripe`, `sumup`, `whop`.

PayPal also exposes `/api/paypal/ipn`.

## Integrator checklist

1. Configure the webhook URL in the gateway dashboard to your deployment (`https://YOUR_APP_ORIGIN/api/stripe/webhook`, etc.).
2. Store the signing secret in server env / seller payment settings — never in embed JS.
3. Expect retries from the gateway; handlers should be idempotent with respect to already-paid orders.
4. CSRF is exempt for these prefixes; signature verification is the auth layer.

## Outbound webhooks

Not available as a first-class public API in the current deployment. If you need order events in your own system, poll delivery endpoints with a checkout token you issued, or build on gateway-side notifications.

## Manual confirm paths

Cash App / PayPal F\&F / Venmo F\&F / custom payments settle through seller **confirm** routes (session required), not external gateway webhooks.
