---
title: "Get setup status"
method: GET
path: "/api/v1/setup"
tags: ["API Reference"]
---

# Get setup status

`GET /api/v1/setup`

## Request

- Base URL: `https://revnu.com`
- URL: `https://revnu.com/api/v1/setup`
- Auth: HTTP bearer

Where a new account is in setup (website, researching, review, payment, start or done) and the exact next step. Works before the account has paid.

**Response.** ```json
{ "setup": { "stage": "review", "next": "Show the customer what Revnu understood…", "account": { "name": "Acme", "website": "https://acme.com" }, "dashboardUrl": "https://revnu.com/dashboard", "review": { "businessName": "Acme", "researchFailed": false, "rows": [{ "id": "sells", "kind": "fact", "label": "What You Sell", "found": "Invoicing for agencies", "sources": ["https://acme.com"], "required": true }] } } }
```

`stage` is one of `website`, `researching`, `review`, `payment`, `start` and `done`. Every stage carries `next`, the step to take in words. Follow it.

| Stage | Extra fields | Next step |
|---|---|---|
| `website` | none | [`POST /setup/website`](/docs/setup-website) |
| `researching` | `research`: the current `step`, `findings` so far, `startedAt` | Poll again in about 20 seconds |
| `review` | `review`: `businessName`, `researchFailed`, and `rows` of `{ id, kind, label, question?, found, sources, required }` | Show the customer every row, then [`POST /setup/confirm`](/docs/setup-confirm) |
| `payment` | `payment`: `priceUsdPerMonth`, `trialDays`, `freeMonths`, `cardAtCheckout`, `status` | [`POST /setup/checkout`](/docs/setup-checkout), then poll until `start` |
| `start` | `payment`: `status`, `trialEndsAt` | [`POST /setup/finish`](/docs/setup-finish) |
| `done` | `payment`: `status` | Nothing; Revnu is working |

Offers differ by account, so read `payment` before telling the customer what checkout means: `trialDays` is the free period (0 for none), `freeMonths` covers invite offers with free months, and `cardAtCheckout` says whether Stripe's page asks for a card. An account with a YC deal has no `payment` at the `payment` stage; `next` sends the customer to the dashboard to add a card. When research failed, `review.researchFailed` is `true` and a corrected address can go to [`POST /setup/website`](/docs/setup-website) again.

The CLI runs this whole flow: `npx @revnu/cli setup --json`. See [Install the CLI](/docs/cli).

## Response `200`

``json { "setup": { "stage": "review", "next": "Show the customer what Revnu understood…", "account": { "name": "Acme", "website": "https://acme.com" }, "dashboardUrl": "https://revnu.com/dashboard", "review": { "businessName": "Acme", "researchFailed": false, "rows": [{ "id": "sells", "kind": "fact

- object
  - `setup` union, required
    - object
      - `next` string, required
      - `stage` 'done' | 'payment' | 'researching' | 'review' | 'start' | 'website', required
      - `account` object, required
        - `name` string, nullable, required
        - `website` string, nullable, required
      - `dashboardUrl` string, required
    - object
      - `payment` object, nullable, required
        - `status` string, required
        - `trialEndsAt` number, nullable, required
      - `next` string, required
      - `stage` 'done' | 'payment' | 'researching' | 'review' | 'start' | 'website', required
      - `account` object, required
        - `name` string, nullable, required
        - `website` string, nullable, required
      - `dashboardUrl` string, required
    - object
      - `payment` object, nullable, required
        - `status` string, required
      - `next` string, required
      - `stage` 'done' | 'payment' | 'researching' | 'review' | 'start' | 'website', required
      - `account` object, required
        - `name` string, nullable, required
        - `website` string, nullable, required
      - `dashboardUrl` string, required
    - object
      - `payment` object, required
        - `priceUsdPerMonth` number, required
        - `trialDays` number, required
        - `freeMonths` number, required
        - `cardAtCheckout` boolean, required
        - `status` string, nullable, required
      - `next` string, required
      - `stage` 'done' | 'payment' | 'researching' | 'review' | 'start' | 'website', required
      - `account` object, required
        - `name` string, nullable, required
        - `website` string, nullable, required
      - `dashboardUrl` string, required
    - object
      - `research` object, required
        - `step` string, nullable, required
        - `findings` string[], required
        - `startedAt` number, nullable, required
      - `next` string, required
      - `stage` 'done' | 'payment' | 'researching' | 'review' | 'start' | 'website', required
      - `account` object, required
        - `name` string, nullable, required
        - `website` string, nullable, required
      - `dashboardUrl` string, required
    - object
      - `review` object, required
        - `businessName` string, required
        - `researchFailed` boolean, required
        - `rows` object[], required
          - `found` string, required
          - `sources` string[], required
          - `required` boolean, required
          - `question` string
          - `id` string, required
          - `kind` 'fact' | 'question' | 'value', required
          - `label` string, required
      - `next` string, required
      - `stage` 'done' | 'payment' | 'researching' | 'review' | 'start' | 'website', required
      - `account` object, required
        - `name` string, nullable, required
        - `website` string, nullable, required
      - `dashboardUrl` string, required

## Other responses

- `401`: Missing, malformed, unknown or revoked token.
- `429`: Rate limited.
- `503`: Temporarily unavailable; retry the same call.

---

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