# Tenure docs

Tenure runs the cancel flow, plan changes and win-back for subscription products. Agents draft and humans publish. The founder guides explain how Tenure works for the person running it. For an integration, start with install.md; the developer pages are served as Markdown, and the machine-readable API reference is the OpenAPI document.

Agents: [llms.txt](https://app.trytenure.co/llms.txt) lists these pages; [llms-full.txt](https://app.trytenure.co/llms-full.txt) is all of them in one file; the API reference is [openapi.json](https://app.trytenure.co/api/openapi.json).

## For founders

| Page | About |
|---|---|
| [Getting started](https://app.trytenure.co/docs/getting-started.md) | Setup is five steps. Your site, billing and data can wait: skip them and finish them later from Setup. Your plan needs your approval, and nothing reaches real customers until you switch to live. |
| [How Tenure picks an offer](https://app.trytenure.co/docs/how-offers-are-picked.md) | A customer who clicks Cancel sees one offer at most, or none. Tenure picks it from the offers you approved, for the reason they gave, inside your limits. Every pick is recorded on Decisions with why. |
| [Limits and safety](https://app.trytenure.co/docs/limits-and-safety.md) | Tenure only makes an offer that fits the limits you approve in Settings › Spending and safety. Until you approve them, it makes no offer that changes billing. Owners and admins set these limits. |
| [Reading your results](https://app.trytenure.co/docs/reading-results.md) | Overview shows the last 7 days (switch to 30). Results opens on the last 30 days; pick 7 days, this month, 90 days, all time or your own dates. Overview, Results and the weekly email read the same… |
| [What your customers see](https://app.trytenure.co/docs/what-customers-see.md) | When a customer clicks Cancel, Tenure shows a short cancel flow in your look. They can always cancel, on every screen, in one click. |
| [Upsells and how often they show](https://app.trytenure.co/docs/upsells.md) | Upsells offer a better fit to paying customers at four moments. They offer only your own plans, seats, add-ons, packs and yearly billing, at full price. Never a discount or a credit. |
| [What's new](https://app.trytenure.co/docs/whats-new.md) | Changes you can see in Tenure, newest first. Developers: the developer changelog lists API and widget changes. |

## For developers

| Page | About |
|---|---|
| [Install Tenure](https://app.trytenure.co/docs/install.md) | Three ways to install Tenure, with readiness checks matched to the experiences you enable: the hosted page with no code, the one-line widget, or a coding agent that proposes, wires and tests the… |
| [MCP install profile](https://app.trytenure.co/docs/mcp.md) | Connect a coding agent to POST /api/mcp?profile=install with Authorization: Bearer <key>. Use a test key (ck_test_…) with the read, decide and draft_write scopes; the step-by-step install is in… |
| [Lifecycle fact events](https://app.trytenure.co/docs/events.md) | Send product facts to POST /api/v1/events with an API key carrying the decide scope. Fact names and value types come from the confirmed app definition. Events with unknown names are stored as… |
| [Tenure developer quickstart](https://app.trytenure.co/docs/quickstart.md) | Tenure adds an AI retention flow in front of your cancel button and a Recommend/Enable API for support agents. Every address below is your Tenure app’s own, ready to copy. Versions: widget/SDK… |
| [Widget API reference (`widget.js` v1.5.0)](https://app.trytenure.co/docs/widget.md) | The widget is a single IIFE script. It renders inside a Shadow DOM (<div data-tenure>), so host CSS cannot break it and vice versa. It talks only to its own origin (/api/v1/config/:key,… |
| [Build your own cancel screens](https://app.trytenure.co/docs/headless.md) | createCancelFlow() from @tenure/sdk/headless runs the cancel flow without drawing anything: you render the screens in plain JavaScript, Vue, Svelte or anything else, and Tenure still decides the… |
| [REST API summary](https://app.trytenure.co/docs/rest.md) | Base URL: your deployment origin. Full machine-readable reference: GET /api/openapi.json (OpenAPI 3.1). |
| [Error codes](https://app.trytenure.co/docs/errors.md) | All non-2xx responses share one envelope. code is stable and safe to branch on; message is for humans and may change; ref appears on internal_error (quote it when reporting). |
| [Verifying host webhooks](https://app.trytenure.co/docs/webhooks.md) | When you configure a host webhook (Settings › Developer › Webhooks), Tenure POSTs JSON events to your URL. Every delivery is signed so you can reject forgeries and replays. Tenure carries out… |
| [Styling the cancel flow](https://app.trytenure.co/docs/styling.md) | An orientation page: which of the four ways to restyle the flow you want. The complete reference — all 53 part names, every CSS variable, and two copy-paste themes — is widget-styling.md. |
| [Widget styling reference](https://app.trytenure.co/docs/widget-styling.md) | Everything the cancel flow exposes to your CSS: the part names, the CSS variables, and two complete themes you can paste in. For the shorter "which of the four ways do I want?" overview, see… |
| [Mobile SDKs](https://app.trytenure.co/docs/mobile.md) | Tenure includes iOS/Swift, Android/Java (Kotlin-compatible), React Native and Flutter packages, at 1.0.0. They provide native presentation, loading, close/error handling, navigation validation and… |
| [Changelog (widget / SDK)](https://app.trytenure.co/docs/changelog.md) | The Results exports (/api/v1/export?dataset=ledger|decisions and the Results page download) now start with the header row; the # note that used to be the first line is gone (a loader set to skip… |
| [Appearance API](https://app.trytenure.co/docs/appearance.md) | These endpoints use the signed-in workspace member’s session cookie. API keys and MCP credentials do not authorize them. Reads support active workspace members; writes require an active owner or… |
| [Automatic billing sync](https://app.trytenure.co/docs/connector-sync.md) | Stripe and Chargebee have durable inbound synchronization. |
| [Customer data and evidence](https://app.trytenure.co/docs/customer-data-provenance.md) | A customer record can be created by a signed widget identity without receiving any billing or usage facts. Column defaults are not observations. Tenure records which fields were explicitly… |
| [Your own billing](https://app.trytenure.co/docs/own-billing.md) | For subscriptions you bill in your own system rather than Stripe or Chargebee. Choose one of two ways in Settings › Connections › Billing › Your own billing. Either way, Tenure only shows an offer… |
| [Published cancellation sessions](https://app.trytenure.co/docs/published-sessions.md) | Reference for the published cancellation session endpoints. For a new integration, start with Install Tenure, then the widget or headless guide. Those guides describe the supported public… |
| [Server telemetry heartbeat](https://app.trytenure.co/docs/telemetry-heartbeat.md) | POST /api/v1/telemetry/heartbeat records independent telemetry health. It does not create product events, increment usage, or establish that an individual customer was measured. Authenticate with… |
