# Preview a Plan Without an Account

> POST a website to /api/v1/preview with no token and Revnu researches the business, returns what it learned with sources, and hands back a claim link that turns the research into an account. Caps, 429s, reuse and the claim flow.

Canonical: https://revnu.com/docs/preview
Last updated: 2026-10-15

Send Revnu a business's website with no account and no token, and it researches the business the same way onboarding does: what it sells, who buys it, where those buyers are, with a source for each answer. The response carries a claim link. When the person opens it and signs in, the research becomes their new account, already at the review step.

It is built for AI assistants. Someone asks "could Revnu get me customers?", the assistant previews their site, shows them what Revnu found, and gives them the link if they want to keep going.

## 1. Request a preview

```bash
curl -X POST -H "content-type: application/json" \
  -d '{"website":"acme.com"}' \
  https://revnu.com/api/v1/preview
```

```json
{ "previewId": "pv_…", "status": "researching", "poll": "https://revnu.com/api/v1/preview/pv_…" }
```

### Body

| Field | Type | Meaning |
|---|---|---|
| `website` | string, required | The business's own website, such as `acme.com`. Up to 300 characters. Revnu researches the homepage of the host that answers, whatever path you give. No other fields are allowed. |

### Responses

| Code | Meaning |
|---|---|
| 202 | `{ previewId, status, poll }`. `status` is `researching`, or `ready` when someone previewed the same site in the last day. Poll `poll`. |
| 400 | The body isn't JSON, `website` is missing or too long, or there is an extra field. |
| 422 | `invalid_website` with a `message`: the address isn't a public website, the site doesn't exist or isn't answering, it is a social network profile rather than the business's own site, or it is revnu.com. |
| 429 | `rate_limited` with a `message`. Wait for `Retry-After` (seconds) before trying again. |
| 503 | Something failed on Revnu's side. Honour `Retry-After` and retry the same call. |

## 2. Read the preview

```bash
curl https://revnu.com/api/v1/preview/pv_…
```

Research takes about a minute. Poll every 20 seconds or so until `status` changes. The response is `{ "preview": { … } }` with `previewId`, `website`, `businessName`, `expiresAt`, `status` and `next`. `next` is one sentence saying what to do now, so an assistant can follow it without reading this page.

| `status` | What it means | What else is in it |
|---|---|---|
| `researching` | Still reading the site. Poll again. | `claim_url`, and `research` with the current `step` and the `findings` so far. |
| `ready` | Done. Show the person what Revnu learned. | `claim_url`, and `review.rows`: each row has `id`, `kind`, `label`, what research `found`, and the `sources` it came from. A row with a `question` is something research couldn't answer. |
| `failed` | Revnu couldn't read enough of the site to say anything with a source. Research that runs past four minutes also ends here. | `claim_url`. The person can still claim; Revnu asks them the questions instead. |
| `claimed` | Someone opened the claim link and signed in. | Nothing more. They carry on in their Revnu account. |
| `expired` | The preview is more than a day old. | Request a new one. |

### Responses

| Code | Meaning |
|---|---|
| 200 | `{ preview }` in any status but `expired`. |
| 404 | `not_found`: no preview has that id. Expired previews are deleted daily, so an old id ends up here too. |
| 410 | The preview expired. The body still says so in `preview.status`. |

## 3. Hand over the claim link

Every open preview carries `claim_url`, a `https://revnu.com/claim/…` link. Give it to the person, not to anyone else: it is theirs to open.

When they open it and sign in (Google, or a code sent to their email):

- **No Revnu account yet.** Revnu creates one with this research and puts them at the review step. They confirm or correct each row before anything runs, then reach the payment step like any new account. What that step asks for depends on the offer their account gets, so don't promise a trial length.
- **An account still waiting for its website**, such as one a connector opened. The research becomes that account's draft.
- **An account that is already set up.** Nothing changes, so nobody's confirmed details get overwritten. The link stays unused.

A link works once and lasts as long as the preview, a day from the request. It can't be claimed while research is still running.

## Limits

Research costs Revnu money and anyone can call this route, so it is capped. Every cap answers `429` with `Retry-After` when it is hit.

| Cap | Limit |
|---|---|
| Requests from one caller | 20 an hour |
| Fresh research runs from one caller | 3 a day |
| Fresh research runs for one site | 2 a day, so a failed run can be retried once |
| All previews, for everyone | A daily budget. When it is spent, the `message` says to try again tomorrow or to sign up at revnu.com, where research runs at once. |

Asking about a site Revnu researched in the last day doesn't start a fresh run and doesn't spend the run caps. You get your own `previewId` and claim link with the existing research, `ready` at once or `researching` if the first run is still going. `www.acme.com` and `acme.com` count as the same site.

The caller is the address the request comes from. Revnu keeps only a hash of it.

## What a preview can't do

- It can't send, publish, connect anything or spend. It only reads the website.
- There is no MCP tool for it. An MCP host that isn't signed in gets the sign-in prompt instead, and signing in creates the account directly, so use the [setup flow](/docs/setup-status) there.
- It holds nothing after a day. To keep the research, the person claims it.

## Next step

Once the person has an account, an assistant carries on with the setup tools: [Setup status](/docs/setup-status), or `npx @revnu/cli setup --json` from a terminal ([Install the CLI](/docs/cli)). The full recipe for assistants is at [revnu.com/setup.md](https://revnu.com/setup.md).

## Frequently asked questions

### Can I try Revnu without signing up?

Yes. POST the website to `https://revnu.com/api/v1/preview` with no token, then poll the `poll` URL. About a minute later you get what Revnu learned about the business, with sources, and a claim link that turns it into an account.

### Do I need an API key for /api/v1/preview?

No. Both preview routes take no token. They are capped per caller, per site and per day instead.

### Why did I get a 429 from the preview API?

One of the caps was hit: 20 requests an hour or 3 fresh research runs a day from your address, 2 runs a day for that site, or the daily budget for all previews. Wait for the number of seconds in `Retry-After`. A site researched in the last day is reused rather than researched again, so asking about it again doesn't spend a run.

### How long does a preview last?

A day. After that the preview, its research and its claim link are gone. Claiming it moves the research into the account, where it stays.

### What happens when someone opens the claim link?

They sign in. With no account, Revnu creates one already at the review step with this research, and they confirm or correct each row. If they already have a set-up account, nothing changes.

### Does a preview cost anything?

No. The person only pays if they claim it and start a plan at the payment step.
