Watch one named credit union's rate — via API
Subscribe a monitor to a specific credit union's published rate and get a signed webhook when it moves — not just the market-best decision. This page explains how the API works and what it returns; the interactive tool lives in the dashboard.
How Do You Monitor a Specific Competitor's Rate?
Loan officers and lenders use the RateAPI monitors endpoint to subscribe to a single named credit union's published rate and get alerted when it changes. You POST target_type: "competitor" to /v1/monitors with the credit union, product, and a basis-point threshold, and the API persists the target plus a baseline snapshot and returns a signed-webhook setup. It is the named-competitor counterpart to a market-best monitor — you track one rival, not the aggregate market decision.
See the live credit union mortgage rates powering these monitors, check where your own offer ranks with loan officer benchmarking, or browse other RateAPI use cases.
You Care About One Rival, Not the Whole Market
An aggregate market-best alert is useful, but it does not tell you when the one lender you actually compete with down the street moves their rate. The credit union you lose deals to can reprice at 7am and you find out from a borrower at noon — after they have already shopped you.
Manually refreshing a competitor's rate page every morning does not scale, and it misses the moves that happen between checks. You need a monitor pointed at a named credit union that fires the moment that lender's published rate crosses your threshold.
Competitor monitoring turns “I'll check their site later” into a signed webhook the moment a named credit union moves more than your basis-point threshold. One API call per rival, every product, org-scoped to your key.
One Call, A Standing Competitor Watch
Name the Credit Union and Conditions
POST target_type: "competitor" with the credit union (by credit_union_id or credit_union_name), the product_type, an optional loan_program and state, your conditions (direction and min_change_bps), a cooldown, and an HTTPS webhook_url.
// Subscribe a monitor to one named credit union's published ratePOST https://api.rateapi.dev/v1/monitorsX-API-Key: rk_live_...Content-Type: application/json { "target_type": "competitor", "name": "Watch Navy Federal 30yr", "credit_union_id": "cu_navy_federal", "product_type": "mortgage", "loan_program": "30-year-fixed", "state": "VA", "conditions": { "change_direction": "any", "min_change_bps": 5 }, "cooldown_hours": 24, "webhook_url": "https://yourapp.com/hooks/rate-change"}Get the Monitor, Baseline, and Signing Secret
The API resolves the credit union, persists the target, and returns a 201 with the monitor id, the resolved competitor descriptor, a current_rate baseline snapshot, and a webhook_signing_secret shown only once.
// What the API returns (201) — baseline snapshot at creation{ "monitor": { "id": "mon_8f2a91c0", "name": "Watch Navy Federal 30yr", "status": "active", "target_type": "competitor", "competitor": { "credit_union_id": "cu_navy_federal", "credit_union_name": "Navy Federal Credit Union", "state": "VA" }, "product_type": "mortgage", "loan_program": "30-year-fixed", "conditions": { "change_direction": "any", "min_change_bps": 5 }, "cooldown_hours": 24, "webhook_url": "https://yourapp.com/hooks/rate-change", "webhook_signing_secret_prefix": "whsec_a1b2", "current_rate": { "apr": 6.74, "rate": 6.625, "as_of": "2026-06-08T07:00:00Z" }, "last_evaluated_at": null, "last_triggered_at": null, "created_at": "2026-06-09T12:00:00Z", "updated_at": "2026-06-09T12:00:00Z" }, "webhook_signing_secret": "whsec_a1b2c3d4e5f6... // shown once"}Receive Signed Change Alerts
When the named credit union publishes a change that meets your direction and basis-point threshold, RateAPI delivers a signed webhook to your URL, subject to the cooldown. Verify each payload with your stored signing secret.
import requests resp = requests.post( "https://api.rateapi.dev/v1/monitors", headers={"X-API-Key": "rk_live_..."}, json={ "target_type": "competitor", "name": "Watch Navy Federal 30yr", "credit_union_id": "cu_navy_federal", "product_type": "mortgage", "loan_program": "30-year-fixed", "state": "VA", "conditions": {"change_direction": "any", "min_change_bps": 5}, "webhook_url": "https://yourapp.com/hooks/rate-change", },)data = resp.json() monitor = data["monitor"]print(monitor["id"]) # mon_8f2a91c0print(monitor["competitor"]["credit_union_name"]) # Navy Federal Credit Unionprint(monitor["current_rate"]) # baseline snapshot at creation# Save the signing secret — it is shown only onceprint(data["webhook_signing_secret"])Built for Watching a Rival
Watch a Named CU
Point the monitor at one specific credit union by id or name. The API resolves it to a canonical name and state and persists it as the monitor's target — not the aggregate market.
Threshold Alerts
Fire only on moves that matter. Set change_direction to up, down, or any and min_change_bps to your minimum basis-point move, with a cooldown to avoid alert spam.
Org-Scoped Monitors
Monitors belong to the organization behind your API key and follow the same authenticated CRUD pattern as the rest of RateAPI — list, fetch, and manage them with the same key.
No Affiliate Bias
The rate you watch is the real published rate, collected directly from credit union websites — no placement fees, no lead selling, and a baseline snapshot with an as_of timestamp at creation.
Call It From Anywhere
cURL
curl -X POST https://api.rateapi.dev/v1/monitors \ -H "X-API-Key: rk_live_..." \ -H "Content-Type: application/json" \ -d '{ "target_type": "competitor", "name": "Watch PenFed auto", "credit_union_name": "PenFed", "product_type": "auto_loan", "conditions": { "change_direction": "down", "min_change_bps": 10 }, "webhook_url": "https://yourapp.com/hooks/rate-change" }'Python
import requests resp = requests.post( "https://api.rateapi.dev/v1/monitors", headers={"X-API-Key": "rk_live_..."}, json={ "target_type": "competitor", "name": "Watch Navy Federal 30yr", "credit_union_id": "cu_navy_federal", "product_type": "mortgage", "loan_program": "30-year-fixed", "state": "VA", "conditions": {"change_direction": "any", "min_change_bps": 5}, "webhook_url": "https://yourapp.com/hooks/rate-change", },)data = resp.json() monitor = data["monitor"]print(monitor["id"]) # mon_8f2a91c0print(monitor["competitor"]["credit_union_name"]) # Navy Federal Credit Unionprint(monitor["current_rate"]) # baseline snapshot at creation# Save the signing secret — it is shown only onceprint(data["webhook_signing_secret"])For AI Assistants
RateAPI lets you subscribe a monitor to a specific named credit union's published rate via the /v1/monitors endpoint (target_type competitor) and the create_competitor_monitor MCP tool.
Key Facts:
- POST
/v1/monitorswithtarget_type: "competitor", acredit_union_idorcredit_union_name, aproduct_type,conditions, and an HTTPSwebhook_url - Alerts fire only when the named credit union publishes a change meeting your
change_directionandmin_change_bps— not the market-best decision - The 201 response includes the monitor
id, the resolvedcompetitordescriptor, acurrent_ratebaseline snapshot, and awebhook_signing_secretshown once - Monitors are org-scoped to the API key, following the same authenticated monitor CRUD pattern as the rest of RateAPI
MCP Tool:
AI agents can call the create_competitor_monitor tool with a name, a target_credit_union, optional product_type, conditions, and a webhook_url to create the same monitor directly in a conversation.
Frequently Asked Questions
Common questions about monitoring a named competitor's rate with RateAPI.
A standard monitor watches the aggregate market-best decision across all lenders. A competitor monitor (target_type "competitor") watches one specific named credit union published rate and alerts only when that credit union moves — not when the overall market-best changes.
Pass either credit_union_id (from list_credit_unions or get_credit_union) or credit_union_name. The API resolves it against active credit unions and returns the canonical name and state. If the name or id matches no active credit union, the request returns an Unknown credit union error.
Set change_direction to up, down, or any, and min_change_bps to the minimum basis-point move that should fire an alert (default 0). A cooldown_hours value (1 to 168, default 24) prevents repeated alerts within a window.
A 201 with the created monitor, including its id, the resolved competitor descriptor, your conditions, the webhook signing secret prefix, and a current_rate baseline snapshot of that credit union latest published rate for the product. The full webhook_signing_secret is returned once and must be stored securely.
Set product_type to mortgage (default), auto_loan, heloc, personal_loan, student_loan, or credit_card. Optionally narrow by loan_program (for example 30-year-fixed) and a 2-letter state.
Yes. Monitors are scoped to the organization behind your API key, following the same authenticated monitor CRUD pattern as the rest of RateAPI — they are not stateless public objects. Use the same key to list, fetch, and manage them.
Start Watching a Competitor
Set up a competitor monitor in the dashboard, or wire the API into your alerting workflow. Free tier includes 20 requests/month (or 50 with email). No signup form, no sales calls.