---
title: "One-click payment-method update (from billing email link)"
method: GET
path: "/v1/billing/update-payment"
tags: ["Account"]
---

# One-click payment-method update (from billing email link)

`GET /v1/billing/update-payment`

## Request

- Base URL: `https://api.winnr.app`
- URL: `https://api.winnr.app/v1/billing/update-payment`
- Auth: none required

Public endpoint (no authentication required). The link is minted into
Winnr billing emails (payment failure, upcoming-renewal and
expiring-card notices, domains disabled). `t` is a signed token bound
to the account and its Stripe customer that expires after 30 days.
A valid token redirects (302) to a Stripe Billing Portal session
limited to adding a payment method, which returns to Settings when
done. Opening the link changes nothing by itself, so mail scanners
that prefetch it are harmless. Rate limited per IP.

## Query parameters

- `t` string, required

## Other responses

- `302`: Redirect to the Stripe Billing Portal payment-method form
- `400`: Invalid or expired link (HTML page pointing to Settings)
- `429`: Too many requests from this IP
- `502`: The payment page could not be opened (HTML page pointing to Settings)

---

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