---
title: "Receive Stripe Webhook"
method: POST
path: "/api/v1/webhooks/stripe"
tags: ["webhooks"]
---

# Receive Stripe Webhook

`POST /api/v1/webhooks/stripe`

## Request

- Base URL: `https://api.teaflask.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.teaflask.com/api/v1/webhooks/stripe`
- Auth: none declared

The one write path for Stripe-moved dollars, both directions.
Every dollar that lands — manual Checkout or the auto-top-up
charge — arrives as a succeeded payment intent, keyed by the event
id; every dollar Stripe pulls back — a refund, or a dispute we
lost — arrives as a clawback, keyed by the refund or dispute id so
partial refunds land separately. A $0 card check arrives as a
succeeded setup intent and unlocks the welcome credit, and a manual
top-up unlocks it too (the card is proven either way; an auto charge
reuses a card already checked). A fraud signal — the card network's
early fraud warning, or a dispute lost on a card payment — forfeits
the welcome credit of the charged org and of the org that card
unlocked, and blocks the card. Redeliveries are clean no-ops on
every key; RPC trouble on the resume start or Stripe trouble on the
card read propagates as a 5xx so Stripe redelivers and retries it.

## Response `204`

Successful Response

## Other responses

- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not found
- `405`: Method not allowed
- `422`: Validation error
- `500`: Internal server error

---

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