# 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. - [OpenAPI 3.1 reference](https://app.trytenure.co/api/openapi.json): every REST endpoint, schema, error code and webhook event. - [Full documentation in one file](https://app.trytenure.co/llms-full.txt): all pages below, concatenated. ## Pages - [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 (
), 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.…