Overview
Changelog
Customer-visible changes to the Wealthnow REST API, MCP server and dashboard, newest first. Dates are UTC; changes before 2026-09-19 are listed by month. Within each date or month, breaking changes and deprecations come first.
Follow this page in a feed reader at https://app.wealthnow.io/docs/changelog.xml (Atom). Live health for each service is on the status page.
2026-09-23#
Breaking: malformed JSON returns 400#
A request body that is not valid JSON now returns 400 invalid_json ("request body is not valid JSON"). It used to return 422.
Breaking: OpenAPI operation ids use the new tool names#
The OpenAPI spec now uses the new tool names as operationId, so an SDK regenerated from it gets new method names: for example fundamentals_full instead of tengu_v3_fundamentals_full. Calling an unknown MCP tool now returns JSON-RPC error -32602, as the MCP specification expects, instead of -32601.
Breaking: internal and unavailable tools removed from MCP#
39 internal operations tools and tools with no data behind them are no longer listed in tools/list or the OpenAPI spec, and can no longer be called over MCP. The 12 server-sent-event stream tools stay on REST only, because MCP cannot relay a stream. The public API has 282 operations; the MCP server lists the 270 that are not streams, plus account_status.
Breaking: ops routes need an admin key#
GET /api/logs and GET /api/cache/stats now require the platform's admin key and are gone from tools/list, the OpenAPI spec and /api/capabilities.
Breaking: a key reads only its own daily briefing#
GET /api/v3/briefing/daily and the briefing status route return 403 forbidden unless user_id is the caller's own.
MCP tool names drop the brand prefix#
Tools have plain names: tengu_v3_fundamentals_full is now fundamentals_full, tengu_v2_short_interest is short_interest and tengu_ml_predict is ml_predict. The old names, and the names of tools retired earlier, still work in tools/call, so agents built against them keep working. Every tool now carries an MCP title and the annotations readOnlyHint, destructiveHint, idempotentHint and openWorldHint.
The MCP starter list matches your plan#
Without a catalog option, tools/list returns account_status plus the first 12 tools your plan and add-ons can call, so no first call answers 402. tools/call accepts any public tool, listed or not. Use ?catalog=full to list every tool. Each OpenAPI operation names its lowest plan in x-wealthnow-min-plan.
Listed in the MCP Registry as io.wealthnow/mcp#
The server is in the official MCP Registry as io.wealthnow/mcp: Streamable HTTP at https://mcp.wealthnow.io/mcp, with OAuth sign-in or an X-API-Key header. The old io.github.Hlobo-dev/tengu-firm entry is deprecated and points to it. The server card at https://mcp.wealthnow.io/.well-known/mcp/server-card.json now lists all 271 tools with full descriptions and input schemas.
Rate-limit headers#
Authenticated responses carry X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (Unix time in seconds), read from your key's budget. A 429 now carries the real Retry-After in seconds, at least 1, instead of a fixed 60. X-RateLimit-Remaining and X-RateLimit-Reset are left out when the count came from a cache. See response headers.
Deprecation headers (RFC 9745)#
Deprecated routes now answer with a Deprecation header in RFC 9745 form (Deprecation: @1790121600, the date the signal was first sent). When a route has a replacement, they also send Link: </api/...>; rel="successor-version". Look for the header in your client to find the calls to move. No route has a Sunset date. See response headers.
Error bodies link the docs and name the bad parameter#
Every error body carries doc_url, a link to the error table. A 422 validation error names the offending parameter in param (for example "limit") and says what is wrong: invalid 'limit': Input should be greater than or equal to 1. The 401 body links the quickstart.
Settlement headers on every metered call#
Failed calls are never charged: every non-2xx response is refunded and says so in X-Credits-Settlement. The same applies to a paid response that could not be delivered and to a stream that aborts. Metered responses carry X-Credits-Receipt, and JSON responses also carry X-Credits-Settlement (consumed or refunded). A stream settles after its last byte. See response headers and how credits work.
Usage alerts at 80% and 100% of included credits#
A workspace gets one email when it has used 80% of the credits included in its billing cycle (the plan's grant plus credits bought this cycle), and one at 100%. The 100% email says what happens next: on Free, calls return 402 usage_exceeded until the cycle resets; on paid plans, calls keep working and overage is billed at the plan's per-credit price. Each alert is sent at most once per cycle.
Team members and roles#
Invite people from Settings, Team as Admin or Member. Every plan has 20 Basic Seats for members; Full Seats for admins are 1 on Free and Starter and 10 on plans that include a team. A pending invitation holds a seat and expires after 7 days. Members open the workspace from the workspace switcher, and can see and create named keys. Only admins can buy plans, add-ons and top-ups, open the billing portal, rotate, revoke or reveal keys, and disconnect agents. Only the owner can delete the workspace.
Docs at /docs, readable by agents#
The docs live at https://app.wealthnow.io/docs, and old /tengu-docs links redirect there. Agents can read them as plain text: /llms.txt, /docs/llms-full.txt, and every page as markdown at /docs/<page>.md.
2026-09-22#
Tengu is now Wealthnow#
The API has a new name and new hosts:
| Service | Host |
|---|---|
| Dashboard | https://app.wealthnow.io |
| REST API | https://firm.wealthnow.io |
| MCP server | https://mcp.wealthnow.io/mcp |
| Key service | https://keys.wealthnow.io |
The tengu.co hosts still answer, so existing integrations and connectors added as firm.tengu.co/mcp keep working. Keys keep the tengu_ prefix. The OpenAPI spec is titled "Wealthnow API" and lists https://firm.wealthnow.io first. The Claude Desktop extension is now wealthnow.mcpb, and the old tengu.mcpb link redirects to it.
Connect an agent by signing in#
Claude (web, Desktop and mobile), Claude Code, Cursor and ChatGPT connect to https://mcp.wealthnow.io/mcp with Sign in to Wealthnow (OAuth 2.1 with PKCE), with no key to paste. In Claude Code, run claude mcp add --transport http wealthnow https://mcp.wealthnow.io/mcp, then /mcp. A connection holds a one-hour access token (tengu_at_…) with a rotating refresh token, never your API key. Clients revoke a token with POST https://mcp.wealthnow.io/oauth/revoke (RFC 7009), and GET https://mcp.wealthnow.io/oauth/userinfo returns the connection's plan and credits_remaining. The dashboard lists connected agents on the Overview page and can disconnect them. See MCP and SDKs.
Fixed intermittent 502 errors on key verification#
Metered calls verify your key and reserve credits reliably. A 502 unkey_unreachable is a transient key-service error: it carries Retry-After, is never charged, and is safe to retry. See error responses.
September 2026#
Breaking: private-markets search is a paid call#
/api/v3/private_markets/search needs Pro or the Private Markets add-on and costs 5 credits. On other plans it returns 402 plan_required. MCP tools accept companyid as an alias for company_id.
Breaking: price history is daily#
/api/v3/prices/history serves daily bars and interval defaults to 1d. An intraday interval returns 422 interval_not_daily, pointing to /api/v3/tape/bars?date=. /api/v3/prices/* needs Starter or above.
Data fixes#
/api/data/freshness adds as_of_period, the fiscal period a dataset covers, next to pipeline freshness. /api/market/quote fills prev_close and change_pct when it falls back to a second vendor, and reports the pre-market, after-hours or closed session outside market hours.
August 2026#
Breaking: plan changes for older routes#
Some older routes were reachable on plans that did not include their data. /api/snapshot/{ticker} now needs Quant Signals (Starter). /api/v3/prices/history, /api/v3/prices/corporate_actions, /api/v3/fundamentals/segments and the street-estimates routes need Starter. Check each route's plan in the API reference.
Breaking: rate-limited calls return 429#
A billable call over your rate limit is refused with 429 rate_limited instead of being served. When the credit check cannot complete, the answer is 429 billing_unavailable with Retry-After.
Crypto derivatives, events and on-chain flows#
New on every plan: /api/v3/crypto/derivatives/funding, /api/v3/crypto/derivatives/open_interest, /api/v3/crypto/derivatives/basis and /api/v3/crypto/derivatives/vol_surface; /api/v3/crypto/events/announcements (listings, delistings and trading-caution flags from the exchanges' own announcements) and /api/v3/crypto/events/headlines (breaking crypto-native headlines, mapped to coins); and /api/v3/crypto/onchain/flows (stablecoin issuance and lending liquidations, read from the chain).
Refuse stale data with freshness#
/api/v3/intel/macro_snapshot and the options-flow and dark-pool routes accept freshness=off|live|strict. The default, off, serves the data with its age. live returns 503 data_stale when a live-market field is stale, and strict when any field is past its own update cadence.
Price fixes#
When every price source fails, price routes return 503 price_feed_unavailable instead of a 200 with no items. A limit without dates returns the most recent bars, not the oldest. asset_class=crypto returns real crypto prices and bars.
Failed calls are not charged#
A call that fails (any status of 400 or above) is refunded and reports X-Credits-Cost: 0.
New research routes#
New: /api/v3/origin/* (short activity, whale holdings, insider flow, macro pulse and the IPO pipeline), /api/v3/workforce/* (hiring momentum and WARN-Act layoffs), /api/v3/supply_chain/* (customers, suppliers and revenue exposure) and /api/v3/fundamentals/pit/* (point-in-time fundamentals, as known on a date). /api/v3/credit/indices serves credit-index composites (Pro), and /api/v3/intel/macro_snapshot adds a credit block with CDX IG and HY spreads.
Live 1-minute bars stream#
/api/v3/stream/bars streams live 1-minute bars as server-sent events, on Starter and above. See Streaming.