# Changelog

> What changed in the Revnu API, CLI, MCP server and these docs, newest first.

Canonical: https://revnu.com/docs/changelog
Last updated: 2026-11-05

Most changes are additive. An entry that changes how an existing route or tool behaves says so.

## 2026-11-05

- **Create leads and save contacts.** New [`POST /leads`](https://revnu.com/docs/lead-create.md) saves a company as a lead, or returns the one you already have for that domain, and [`POST /leads/{id}/contacts`](https://revnu.com/docs/lead-contacts-save.md) adds or updates people on it, with a name alone if that's all you know. MCP: `lead_create` and `lead_contacts_save`.
- **Search finds run-together names.** `q` on [`GET /leads`](https://revnu.com/docs/leads.md) matches a company name or domain typed without its spaces or dashes, so `microagi` finds Micro AGI.

## 2026-11-03

- **Everything the dashboard does to a lead.** New [`PATCH`](https://revnu.com/docs/lead-note-edit.md) and [`DELETE /leads/{id}/notes/{noteId}`](https://revnu.com/docs/lead-note-delete.md) for notes written through the API; [`POST`](https://revnu.com/docs/lead-take-over.md) and [`DELETE /leads/{id}/handling`](https://revnu.com/docs/lead-hand-back.md) to take a lead over and hand it back; [`POST /leads/{id}/people/remove`](https://revnu.com/docs/lead-people-remove.md); and [`DELETE /leads/{id}`](https://revnu.com/docs/lead-delete.md) for a lead Revnu never worked. MCP tools: `lead_note_edit`, `lead_note_delete`, `lead_take_over`, `lead_hand_back`, `lead_people_remove` and `lead_delete`. CLI 1.10.0.
- **MCP errors name their code once.** A failed tool call reads `revnu API 409: rejected: <reason>`, not `rejected: rejected: <reason>`. CLI 1.10.0.

## 2026-10-30

- **One length limit for agent messages.** [`POST /agent/messages`](https://revnu.com/docs/agent-messages.md) takes `text` of up to 4,000 characters in any language (UTF-16 code units, so some emoji count as two), counted after trimming, so Chinese, Japanese and Korean messages now get the full length too. A longer one gets `400`. Changed behaviour: a too-long message is now always `400`, where it used to be `409` with `error: "rejected"`.
- **Follow-ups report their replies.** A message the agent picked up inside a turn that was already running now reads `replied` on [`GET /agent/messages/{requestId}`](https://revnu.com/docs/agent-message-status.md), with that turn's replies.
- **Remove a deal.** [`PATCH /leads/{id}`](https://revnu.com/docs/lead-update.md) takes `stage: null` to remove a lead's deal. [`GET /leads/{id}`](https://revnu.com/docs/lead.md) adds `handling` when your team has taken the lead over.
- **Where a note came from.** Notes carry `source`, such as `granola:<meeting id>` when your Revnu agent filed a call on the lead. `null` for other notes.

## 2026-10-28

- **Send conversions from PostHog.** [`POST /api/measurement/posthog`](https://revnu.com/docs/posthog-events.md) takes PostHog's HTTP Webhook destination body as is, with your event key, and records each conversion like the [Event API](https://revnu.com/docs/event-api.md) does. Both now add `not_matchable_reason` when an event carries nothing an ad platform can match.
- **Smaller default MCP pages.** The `leads_list` and `blocklist_list` MCP tools return 10 rows when `limit` is left out, down from 50. Pass `limit` for more. The REST defaults are unchanged. CLI 1.8.2.
- **Deals on leads.** [`PATCH /leads/{id}`](https://revnu.com/docs/lead-update.md) sets a lead's `owner` and its deal: `stage` (`interested`, `meeting`, `proposal`, `won`, `lost`), `dealValue`, `currency`, `closeDate` and `lostReason`. It also fills your own lead columns with `customFields`. The `lead_update` MCP tool takes the same fields.
- **Lead notes.** New [`POST /leads/{id}/notes`](https://revnu.com/docs/lead-notes.md) and `lead_note_add` MCP tool. [`GET /leads/{id}`](https://revnu.com/docs/lead.md) returns the newest 10 timeline entries in `notes`, the `deal`, and `interactions`: last send and reply, days since each, `waitingOn` and `connectionStrength`.
- **Search and sort leads.** [`GET /leads`](https://revnu.com/docs/leads.md) takes `q` (company, domain or primary contact), `stage`, and `sort` (`newest`, `last_interaction`, `recently_updated`). Each lead carries `deal`, `lastInteractionAt`, `lastReplyAt` and `waitingOn`. All additive.

## 2026-10-24

- **Proposed workflows and Ask Me First.** When the account's Proposed Workflows setting is Ask Me First, a workflow the agent proposed doesn't run until someone approves it. [`POST /workflows/{id}/runs`](https://revnu.com/docs/workflow-run.md) then answers `409` with `error: "not_approved"`, and [resume](https://revnu.com/docs/workflow-resume.md) approves it. Under Just Do It, the default, proposed workflows run on their schedule as before. [`GET /workflows`](https://revnu.com/docs/workflows.md) documents `status: "proposed"`, and the `workflows_list` MCP tool adds a `statusExplanation`.

## 2026-10-23

- **Connecting an app again adds a token.** A new OAuth sign-in from an MCP host or `revnu login` mints its own token, labelled with the app's name plus a number if that label is taken. Changed behaviour: tokens from earlier connections of the same app stay live. Revoke tokens you no longer use in **Settings → Developers**; an account holds up to 20.

## 2026-10-21

- **LinkedIn state on leads.** Each lead from [`GET /leads`](https://revnu.com/docs/leads.md) and [`GET /leads/{id}`](https://revnu.com/docs/lead.md) carries `linkedin`: its LinkedIn sequence status, invite, accept, message, seen and reply times, and the next step, or `null` outside a LinkedIn sequence. A `GET /leads` page holds at most 30 leads that are in a LinkedIn sequence.
- **Outbound webhooks.** Revnu can POST a signed event to your URL when a LinkedIn invite is sent (`linkedin.invite_sent`), accepted (`linkedin.invite_accepted`) or replied to (`linkedin.replied`). Set them up in **Settings → Developers**. See [Outbound Webhooks](https://revnu.com/docs/outbound-webhooks.md).

## 2026-10-20

- **Agent status counts every turn.** `running` and `lastTurnAt` on [`GET /agent/status`](https://revnu.com/docs/agent-status.md) include wake and workflow turns, and a turn counts as running while it has shown activity in the last 20 minutes.
- **Background research in message status.** [`GET /agent/messages/{requestId}`](https://revnu.com/docs/agent-message-status.md) adds `backgroundTasks` (each research task the message started, with its `state`) and `done`, which is `true` only once the turn has ended and every task's result has been reported. The report joins `replies`. `waitSeconds` on `POST /agent/messages` now waits for `done`. The `agent_message_status` MCP tool takes `waitSeconds` to wait here too.

## 2026-10-19

- **Search review history.** [`GET /review/search`](https://revnu.com/docs/review-search.md) checks up to 10 names or topics in one call across every card status, including resolved cards, without returning full drafts. Also the `review_search` MCP tool.
- **Message status stays `running` while the turn works.** On [`GET /agent/messages/{requestId}`](https://revnu.com/docs/agent-message-status.md), a started turn stays `running` while it has shown activity in the last 20 minutes, for up to 2 hours. Changed behaviour: this replaces the earlier 30-minute limit on started turns.

## 2026-10-18

- **Sync existing customers.** [`POST /customers`](https://revnu.com/docs/customer-sync.md) records a signup, trial, customer or former customer from your app or CRM and keeps them out of cold outreach. Needs `leads:write`. Removing such an entry with [`DELETE /blocklist/{id}`](https://revnu.com/docs/blocklist-remove.md) answers `409` with `error: "customer_relationship"`. Also `revnu customers sync`, `revnu customers import` for up to 5,000 records, and the `customer_sync` MCP tool. CLI 1.7.0.
- **People a run found on an existing company.** A workflow run that adds people to a company's research list without saving them as contacts now lists that company under [`GET /leads?workflowRunId=`](https://revnu.com/docs/leads.md), with those people in `runPeople`. Runs count them in `found.people`.
- **Roles and already-known people in `runPeople`.** Each person carries `role` (`economic` for the buyer, `champion`, `technical`, `user` or `null`). A run that returns people a company already had now lists that company too, with those people marked `alreadyKnown: true`, so the run's list matches what it reported.

## 2026-10-17

- **Longer workflow steps, and a size check.** On [`POST /workflows`](https://revnu.com/docs/workflow-create.md) and [`PATCH /workflows/{id}`](https://revnu.com/docs/workflow-update.md), a step's `title` and each `details` line take up to 1,000 characters, up from 400. Changed behaviour: a workflow whose steps don't fit in one run, about 6,500 characters in total (fewer with emoji or non-Latin text), now gets a `400` that says how far over it is, so you can trim it before saving.

## 2026-10-15

- **Docs.** New pages: [Developers](https://revnu.com/docs/developers.md), the start of the developer docs; [API, CLI, MCP or Chat](https://revnu.com/docs/api-cli-mcp-or-chat.md), on which to use when; and [Inbound Webhooks](https://revnu.com/docs/webhooks.md), on sending Revnu events from your own systems. [Authentication](https://revnu.com/docs/authentication.md) lists the smallest scope sets for read-only and status tokens, and [MCP Server Setup](https://revnu.com/docs/mcp.md) covers reconnecting a broken connector and which tools send, publish or spend.
- **Claude Code.** The documented command is now `claude mcp add --transport http --scope user revnu https://revnu.com/api/mcp`, so Revnu is available in every project rather than only the directory it was added in.

## 2026-10-14

- **Sign up from a terminal.** `npx @revnu/cli setup` signs a person up (or in) in the browser and runs the same setup as the `setup_*` tools, so a coding agent can set someone up without restarting to load the MCP server. `--json` gives agents one object with `stage`, `next` and `command`. `revnu login` signs in on its own. See [Install the CLI](https://revnu.com/docs/cli.md).

## 2026-10-10

- **Run a workflow now.** [`POST /workflows/{id}/runs`](https://revnu.com/docs/workflow-run.md) starts a workflow's next run within about a minute and returns its id, without changing the schedule. Runs gain a `queued` status. Also `revnu workflows run <id>` and the `workflow_run` MCP tool.

## 2026-10-06

- **Sign up through your agent.** Connecting the MCP server can now create the account, and the setup routes take it through onboarding: [`GET /setup`](https://revnu.com/docs/setup-status.md), [`POST /setup/website`](https://revnu.com/docs/setup-website.md), [`POST /setup/confirm`](https://revnu.com/docs/setup-confirm.md), [`POST /setup/checkout`](https://revnu.com/docs/setup-checkout.md) and [`POST /setup/finish`](https://revnu.com/docs/setup-finish.md), plus the matching `setup_*` MCP tools. Until the first subscription, other routes answer `402` with `error: "setup_pending"`. `GET /me` reports `inSetup`. The recipe agents follow is at [revnu.com/setup.md](https://revnu.com/setup.md).

## 2026-10-02

- **Workflow runs.** Each run reports `found: { leads, contacts }`, every lead and contact carries the `workflowRunId` that found it, and [`GET /leads?workflowRunId=`](https://revnu.com/docs/leads.md) lists one run's leads with `runContactIds`. Also `revnu leads list --workflow-run <id>`.

## 2026-10-01

- **LinkedIn.** [`GET /linkedin/person`](https://revnu.com/docs/linkedin-person.md) reads one person's LinkedIn relationship with each connected account: connected or not, any pending invite and when it was sent, and the conversation. Read-only. Also `revnu linkedin person` and the `linkedin_person` MCP tool.

## 2026-09-29

- **OpenAPI.** [`/openapi.json`](https://revnu.com/openapi.json) describes every route with its scope, parameters and error statuses.
- **Docs.** New pages: [How Revnu Works](https://revnu.com/docs/concepts.md), [Errors](https://revnu.com/docs/errors.md) and this changelog. Every page now shows when it was last updated.

## 2026-09-28

- **Agent messages.** `queue: true` on [`POST /agent/messages`](https://revnu.com/docs/agent-messages.md) hands the agent another job without stopping the one it is running.
- **Block list.** [`POST /blocklist`](https://revnu.com/docs/blocklist-add.md) accepts LinkedIn profile links as well as domains and email addresses.

## 2026-09-25

- **Remote MCP server.** Connect Claude, ChatGPT or Cursor to `https://revnu.com/api/mcp` with OAuth, no install. On hosts that support MCP Apps, the review queue opens as cards with buttons. See [MCP Server Setup](https://revnu.com/docs/mcp.md).
- **CLI.** `revnu` and its local MCP server cover every public API route.

## 2026-09-24

- **Measurement.** Docs for the [Revnu Tag](https://revnu.com/docs/revnu-tag.md) and the server-side [Event API](https://revnu.com/docs/event-api.md).
- **Content API.** Canonical URLs follow your site's trailing-slash convention.

## 2026-09-22

- **Leads.** [`GET /leads/{id}`](https://revnu.com/docs/lead.md) returns your columns, the surfaced draft and the research behind each value. [`PATCH /leads/{id}`](https://revnu.com/docs/lead-update.md) sets vertical, archetype and tags.
- **Block list.** [Read](https://revnu.com/docs/blocklist.md), [add](https://revnu.com/docs/blocklist-add.md) and [remove](https://revnu.com/docs/blocklist-remove.md) do-not-contact entries.
- **Workflows.** [Create](https://revnu.com/docs/workflow-create.md), [update](https://revnu.com/docs/workflow-update.md), [pause](https://revnu.com/docs/workflow-pause.md), [resume](https://revnu.com/docs/workflow-resume.md) and [delete](https://revnu.com/docs/workflow-delete.md) recurring workflows.

## 2026-09-20

- **Docs.** revnu.com/docs launched: every page as markdown, an [llms.txt](https://revnu.com/docs/llms.txt) index and search.

## 2026-09-19

- **Public API.** Personal tokens with scopes; the review queue, agent messages, results, workflows and leads over `https://revnu.com/api/v1`. [`GET /me`](https://revnu.com/docs/me.md) verifies a token, and `waitSeconds` holds a message request open for the reply.
- **CLI.** The `@revnu/cli` package with a local MCP server.

## Frequently asked questions

### Is the API versioned?

Yes, by path: everything lives under `/api/v1`. New fields and routes arrive without a version change, so ignore fields you do not recognise.

### How do I hear about changes?

This page and [`/openapi.json`](https://revnu.com/openapi.json) change together. The docs index at [`/docs/llms.txt`](https://revnu.com/docs/llms.txt) and the sitemap carry each page's last-updated date.
