Savings gap
What is my bank costing me?
Compare a balance with current market rates and quantify the annual gap.
SwitchWize for AI
Give agents live rates, savings-gap answers, card offer intelligence, and CD maturity rules through18 read-only tools. Every response includes source, freshness, and attribution context.
Useful before technical
Savings gap
Compare a balance with current market rates and quantify the annual gap.
Best next move
Surface current rates and card offers with timestamps and source links.
Maturity decision
Explain rollover defaults, grace periods, and verified opt-out instructions.
Live playground
These examples call the same read-only tools available through our hosted MCP server. No account, API key, or financial credentials are required.
Choose a workflow
Tool call
get_bank_gap{
"name": "get_bank_gap",
"arguments": {
"bank": "Chase",
"balance": 25000
}
}Results include freshness, attribution, and source metadata so an agent can explain where its answer came from.
60-second proof
Connect the public read-only endpoint, ask one decision question, and check that the answer includes a source and freshness context.
1. ChatGPT
In ChatGPT, turn on Developer mode under Settings → Security & login. Then open Plugins, choose Add, and enter this public MCP URL.
https://www.switchwize.com/api/mcp2. Verify the connection
“What could $25,000 at Chase be missing each year? Include the source and freshness of the rates you use.”
Success looks like a quantified answer backed by current rate observations, with source and freshness metadata—not an unsupported recommendation.
Versions and changes
Every tool has a version number. 10 of 18 are stable: the fields in the answer will not change without a new major version and 30 days of notice here. The rest are beta: the data is still being filled in, so the shape of the answer may change. Every answer also carries asOf (the date of the data, or null), source, attribution and toolMeta (this version and stability).
| Tool | Version | Status | Where the data comes from |
|---|---|---|---|
get_top_ratesTop Rates | 1.2.0 | stable | Editor-approved deposit snapshots; mortgage from tracked rate observations |
get_top_hysa_ratesHigh-Yield Savings Rates | 1.2.0 | stable | Editor-approved high-yield savings snapshot |
get_bank_gapBank Savings Gap | 1.0.0 | stable | Tracked savings rates and the national savings benchmark |
compare_switch_savingsCompare Savings Rates | 1.0.0 | stable | Tracked savings rates |
get_rate_freshnessData Freshness | 1.0.0 | stable | SwitchWize collection logs per data category |
get_index_datasetIndex Dataset | 1.0.0 | stable | SwitchWize monthly index series |
get_bank_gap_indexBank Gap Index | 1.0.0 | stable | Bank Gap Index monthly release |
get_reality_scoreCard Reality Score | 1.0.0 | beta | Card Reality Index (SwitchWize model over issuer-published terms) |
get_card_offersCard Offers | 1.0.0 | stable | Issuer pages, with a verification timestamp on every row |
get_transfer_bonusesTransfer Bonuses | 1.0.0 | stable | Issuer and program pages, with best-ever-for-route history |
get_card_changesCard Changes | 1.0.0 | stable | Detected fee and APR changes on issuer pages |
get_reward_valuationsReward Valuations | 1.0.0 | beta | Award Scout observations; values stay provisional until 60 observations per currency |
best_move_this_weekBest Move This Week | 1.0.0 | beta | Combines card, transfer bonus and savings data for one person's inputs |
get_cd_rollover_rulesCD Rollover Rules | 1.0.0 | beta | Each bank's own CD disclosure; unverified fields are null, never guessed |
get_card_downgrade_pathCard Downgrade Path | 1.0.0 | beta | Each issuer's own product-change disclosure; unverified cards are not listed |
get_fed_hike_pass_throughFed Hike Pass-Through | 1.0.0 | beta | Bank savings rates before and after the latest Federal Reserve move |
compare_accountsCompare Accounts | 1.0.0 | beta | Editor-approved deposit snapshots |
business_card_costBusiness Card Cost | 1.0.0 | beta | Issuer pages read and quoted by a reviewer |
get_top_rates v1.2.0get_top_hysa_rates v1.2.0get_bank_gap v1.0.0compare_switch_savings v1.0.0get_rate_freshness v1.0.0get_index_dataset v1.0.0get_bank_gap_index v1.0.0get_reality_score v1.0.0get_card_offers v1.0.0get_transfer_bonuses v1.0.0get_card_changes v1.0.0get_reward_valuations v1.0.0best_move_this_week v1.0.0get_cd_rollover_rules v1.0.0get_card_downgrade_path v1.0.0get_fed_hike_pass_through v1.0.0compare_accounts v1.0.0business_card_cost v1.0.0Limits and the Data API
The hosted MCP endpoint allows 60 requests a minute from one address. Go over and you get a 429 reply with a Retry-After header: wait that long and try again. No key is needed. The public rates API is cached for about an hour, so calling it more often than that returns the same numbers.
| Way in | Key | Limit |
|---|---|---|
MCP: /api/mcp | None | 60 per minute per address |
Data API, public datasets: /api/v1 | None | 60 per minute per address |
| Data API, partner key | swk_... | 600 per minute |
The Data API is for programs that need a steady feed. See the dataset catalog and the OpenAPI file. Every reply has the same shape: apiVersion, asOf, attribution and the data. Partner keys are issued by email to editorial@switchwize.com.
Citing our data
Use the wording below in articles, reports and AI answers. Replace the bracket with the day you viewed the page.
Reference list
SwitchWize, "Citibank CD rates," https://www.switchwize.com/banks/citibank/cd-rates, accessed [date you viewed the page].
Inside a sentence
Citibank CD rates (SwitchWize, accessed [date you viewed the page])
Web link
<a href="https://www.switchwize.com/banks/citibank/cd-rates">SwitchWize: Citibank CD rates</a>, accessed [date you viewed the page]
Copy-paste prompts
Paste any of these into an agent connected to the hosted MCP endpoint or npm package above. Each maps to one or two of the 16 tools.
“Compare the best current savings rates and tell me how fresh each observation is.”
“Estimate my annual loss from keeping $25,000 at Chase.”
“Which of my cards should I use for dining, groceries, and travel this week?”
“Show active transfer bonuses, but only make best-ever claims when enough history exists.”
“What happens if I let my CD renew automatically?”
Connect in minutes
The hosted endpoint is the no-setup path: rate-limited, no secrets, works for anyone. The stdio package and Claude Desktop config below are for running against your own SwitchWize checkout.
Hosted MCP
https://www.switchwize.com/api/mcpIn Claude, open Settings → Connectors → Add custom connector, then paste this URL. Tool discovery and calls use the standard Streamable HTTP transport.
Local clients
{
"mcpServers": {
"switchwize": {
"command": "npx",
"args": ["-y", "switchwize-mcp"]
}
}
}This published package is a thin stdio proxy to SwitchWize's public API. It needs only Node.js and network access—no SwitchWize account, API key, repository checkout, or database credentials. Use the hosted endpoint above when your client supports remote Streamable HTTP; use this configuration when it supports local stdio servers.
Coding clients
// .cursor/mcp.json
{
"mcpServers": {
"switchwize": {
"url": "https://www.switchwize.com/api/mcp"
}
}
}Cursor connects directly to the hosted Streamable HTTP endpoint, no npm install needed. Other MCP-aware coding clients (Windsurf, Cline) use the same config shape.
OpenAI Responses API
const response = await client.responses.create({
model: "gpt-5",
tools: [{
type: "mcp",
server_label: "switchwize",
server_url: "https://www.switchwize.com/api/mcp",
require_approval: "never",
allowed_tools: ["get_bank_gap", "get_top_rates"]
}],
input: "What could $25,000 at Chase be missing each year?"
})The MCP tools are built on the public endpoints below. Use the REST API, datasets, spreadsheet integrations, or embeds directly with attribution as “SwitchWize (switchwize.com).” Commercial use is subject to our terms.
Top live rates as JSON. Auth-free, CORS-open, edge-cached (~1 hour). Categories: savings, cds, money-market, checking, mortgage. Optional ?limit= (1–25, default 8). The same contract is also available at /savings.json, /cds.json, /money-market.json, /checking.json, and /mortgage.json.
GET https://www.switchwize.com/api/public/rates/savings?limit=5
{
"schemaVersion": "2026-07-01",
"id": "rates:savings",
"category": "savings",
"rate_type": "APY",
"count": 5,
"asOf": "2026-07-02T14:31:00.644Z",
"generatedAt": "2026-07-02T14:58:28.955Z",
"freshnessStatus": "fresh",
"attribution": "SwitchWize (https://www.switchwize.com)",
"attributionDetails": {
"requiredText": "SwitchWize (switchwize.com)"
},
"sourceDetails": {
"method": "rate_observations"
},
"rates": [
{ "rank": 1, "institution": "...", "product": "...", "rate": 4.40, "rate_type": "APY", "observed_at": "2026-07-02T14:31:00.644Z", "verified_at": null, "source_url": null, "source_type": "aggregator", "fdic_insured": null }
]
}Pull live rates straight into a spreadsheet instead of copying numbers by hand. Both approaches call the same rates API above, so they stay live on every refresh.
Excel & Power BI (Power Query)
Data tab → Get Data → From Other Sources → Blank Query, then open the Advanced Editor and paste:
let
Source = Json.Document(Web.Contents("https://www.switchwize.com/api/public/rates/savings")),
rates = Source[rates],
Table1 = Table.FromRecords(rates)
in
Table1Swap savings for cds, money-market, checking, or mortgage. Set the query to refresh on open (Query Properties → Refresh data when opening the file) to keep it live.
Google Sheets (Apps Script)
Sheets’ built-in IMPORTDATA only reads flat CSV/TSV, not JSON, so this needs a short custom function instead. Extensions → Apps Script, paste this, save, then use =SWITCHWIZE_RATES("savings") in any cell:
function SWITCHWIZE_RATES(category, limit) {
var url = "https://www.switchwize.com/api/public/rates/" + category + "?limit=" + (limit || 5);
var data = JSON.parse(UrlFetchApp.fetch(url).getContentText());
var rows = data.rates.map(function(r) {
return [r.rank, r.institution, r.product, r.rate, r.rate_type];
});
return [["Rank", "Institution", "Product", "Rate", "Type"]].concat(rows);
}Agent-callable helper tools expose the same public data contracts. Tools are read-only and return freshness, source, and attribution metadata.
GET https://www.switchwize.com/api/public/tools
POST https://www.switchwize.com/api/public/tools/get_top_rates
{ "category": "savings", "limit": 5 }
POST https://www.switchwize.com/api/public/tools/compare_switch_savings
{ "currentApy": 0.01, "balance": 25000 }
POST https://www.switchwize.com/api/public/tools/get_bank_gap_index
{}
POST https://www.switchwize.com/api/public/tools/get_reality_score
{ "card": "platinum-card", "segment": "small-business-owner" }The same tools are also available as a hosted MCP (Model Context Protocol) server at https://www.switchwize.com/api/mcp — add it as a remote MCP server in any MCP-compatible client, no local setup required. For local clients, the repository also ships a stdio MCP server inpackages/mcp-server. Start it with npm run mcp:start and verify the protocol handshake with npm run mcp:smoke.
The MCP server also exposes two stable resources for rate methodology and the public-data contract, plus guided prompts for verifying a current rate and comparing a savings-account switch. Prompts direct clients to fetch live tool results rather than treating a static prompt as rate evidence.
Drop a live rate table or index figure into any page with an iframe. Widgets are self-contained and carry a backlink to SwitchWize.
<!-- Top rates table -->
<iframe src="https://www.switchwize.com/embed/rates/savings"
width="440" height="320" style="border:0" loading="lazy"></iframe>
<!-- Index figure -->
<iframe src="https://www.switchwize.com/embed/indices/cd-spread"
width="440" height="200" style="border:0" loading="lazy"></iframe>
<!-- Optional: auto-fit iframe heights to their content -->
<script>(function(){window.addEventListener("message",function(e){if(e.origin!=="https://www.switchwize.com")return;var d=e.data;if(!d||d.type!=="sw-embed-resize")return;var f=document.getElementsByTagName("iframe");for(var i=0;i<f.length;i++){if(f[i].contentWindow===e.source){f[i].style.height=d.height+"px";break;}}});})();</script>Dated monthly time series for each SwitchWize index, as machine-readable JSON with Dataset schema. JSON datasets include schemaVersion, asOf, freshnessStatus, and a series array.
Current-state and event feeds for SwitchWize's tracked credit card catalog, refreshed hourly. Every row carries a real verification timestamp (verifiedAt or observedAt) and a sourceUrl.
What happens automatically at CD maturity, and which credit cards have a verified no-fee downgrade path — sourced directly from each institution's own disclosure, refreshed hourly. A field or card not listed has been checked and not confirmed, never assumed absent.
Rates are collected from official provider pages where available and cross-checked against trusted sources. Data is provided as-is for informational use; verify with the provider before acting. Questions: editorial@switchwize.com.