For Loan Officers & Lenders

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.

Last updated: June 9, 2026
Quick Answer

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

1

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.

{}json
// Subscribe a monitor to one named credit union's published rate
POST https://api.rateapi.dev/v1/monitors
X-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"
}
2

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.

{}json
// 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"
}
3

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.

PYpython
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_8f2a91c0
print(monitor["competitor"]["credit_union_name"]) # Navy Federal Credit Union
print(monitor["current_rate"]) # baseline snapshot at creation
# Save the signing secret — it is shown only once
print(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

$bash
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

PYpython
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_8f2a91c0
print(monitor["competitor"]["credit_union_name"]) # Navy Federal Credit Union
print(monitor["current_rate"]) # baseline snapshot at creation
# Save the signing secret — it is shown only once
print(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/monitors with target_type: "competitor", a credit_union_id or credit_union_name, a product_type, conditions, and an HTTPS webhook_url
  • Alerts fire only when the named credit union publishes a change meeting your change_direction and min_change_bps — not the market-best decision
  • The 201 response includes the monitor id, the resolved competitor descriptor, a current_rate baseline snapshot, and a webhook_signing_secret shown 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.

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.