---
title: "Webhook"
method: POST
path: "/api/billing/webhook"
---

# Webhook

`POST /api/billing/webhook`

## Request

- Base URL: `https://api.drillflow.de` (the document declares no server; this is the origin it was published from)
- URL: `https://api.drillflow.de/api/billing/webhook`
- Auth: none declared

Stripe's side of the conversation.

No rate limit on purpose: the limiter carries no default limits (see
`api/rate.py`), and putting one here would turn a burst of renewals into
429s, which Stripe reads as an outage and answers with more retries.

The signature IS the authentication — the raw body must be verified before
anything in it is believed. An unknown event type, an unknown price and an
unknown customer are all 200: a non-2xx makes Stripe retry for days, and
none of those three will ever succeed on a second try.

## Response `200`

Successful Response

- object

---

[API](https://skmtc.dev/drillflow/apis/drillflow-api.md) · [All operations](https://skmtc.dev/drillflow/apis/drillflow-api/llms.txt) · [OpenAPI document](https://skmtc.dev/drillflow/apis/drillflow-api/revisions/c892102e97b0?raw)
