# Tenure developer docs

Tenure puts an AI retention flow in front of the cancel button and gives support agents a Recommend/Enable API. These pages are the developer documentation, served as Markdown; 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).

| Page | About |
|---|---|
| [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. Everything below is served from your Tenure deployment (APPURL, e.g.… |
| [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,… |
| [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 internalerror (quote it when reporting). |
| [Verifying host webhooks](https://app.trytenure.co/docs/webhooks.md) | When you configure a host webhook (Integrations), Tenure POSTs JSON events to your URL. Every delivery is signed so you can reject forgeries and replays. When no billing provider is selected (or… |
| [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 52 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 in sdk-mobile/, at 1.0.0. They provide native presentation, loading, close/error handling, navigation… |
| [Standalone cancellation flows](https://app.trytenure.co/docs/standalone.md) | Tenure now includes a pinned @churnkey/react 0.8.0 integration, under its MIT license. The component, headless hook, and framework-independent machine run without a Churnkey account or vendor… |
| [Changelog (widget / SDK)](https://app.trytenure.co/docs/changelog.md) | - Custom browser events. Tenure.track(name, data) accepts any event name (1-64 chars, a-z 0-9  . -) with a flat data object (≤ 2 KB) when identity is signed; stored like POST /api/v1/events/track.… |
| [Widget configuration delivery](https://app.trytenure.co/docs/config-performance.md) | The public config endpoint sends an ETag and supports conditional GET (If-None-Match). An unchanged representation returns HTTP 304 with no response body. Both 200 and 304 responses carry CORS and… |
| [Automatic contact and billing sync](https://app.trytenure.co/docs/connector-sync.md) | HubSpot, Mailchimp, Salesforce, Stripe and Chargebee have durable inbound synchronization. Configure credentials in Integrations, then enable Automatic sync for each provider and choose a… |
| [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. Schema defaults exist for compatibility; they are not observations.… |
