Loading...
Loading...
A single read-only endpoint that returns FD interest rates across every partner bank and NBFC template, bucketed by tenure and benchmarked against a reference bank — plus a set of curated “quick pick” recommendations with all the comparison logic already computed server-side. This is the data engine behind the Digital FD rate-comparison screen.
GET /api/core/v1/templates/compare-ratesCalled from your own whitelisted partner domain — see Authentication.
One call returns everything a comparison screen needs: the reference bank's rates, the best rate available in each tenure bracket, every partner template's rates, and curated “quick pick” recommendations — so you don't have to compute best-rate or ranking logic client-side.
24 Reference Banks
Public, private & NBFC/housing finance
5 Response Sections
reference bank, buckets, partner banks, picks
Server-computed
Best-rate & quick-pick logic done for you
Get your domain whitelisted
There's no API key — access is gated by a whitelisted Referer domain. Contact our team to register yours.
Call the endpoint from your domain
GET /api/core/v1/templates/compare-rates, optionally with a referenceBank query param.
Render the response directly
tenureBuckets, banks, and quickPicks already carry best-rate and ranking logic — no client-side computation needed.
There is no API key. Access is gated by a whitelisted Referer domain — requests must originate from your registered partner domain. A request from an unrecognized or missing referer receives 403 Forbidden.
curl -X GET \
'https://<your-partner-domain>/api/core/v1/templates/compare-rates' \
-H 'referer: <your-partner-domain>'To get your domain whitelisted, contact our team.
/v1/templates/compare-rates(gateway prefixes /api/core)Content-Type: application/json
| Field | Type | Description |
|---|---|---|
| referenceBank | string, optional | The mainstream bank to compare partner rates against. Default SBI. Pass a value from the response's availableReferenceBanks array. Unrecognized values silently fall back to the default. |
availableReferenceBanks field in the response — never hardcode the list. Names must be passed exactly as they appear there (e.g. HDFC Bank, ICICI Bank).availableReferenceBanks currently lists the 24 institutions below, grouped by type. This list changes over time — always read it from the live response.
| Public sector banks | Private sector banks | NBFC / Housing finance |
|---|---|---|
| Bank of Baroda | Axis Bank | KTDFC |
| Bank of India | Bandhan Bank | LIC Housing Finance |
| Bank of Maharashtra | Federal Bank | PNB Housing Finance |
| Canara Bank | HDFC Bank | Shriram Finance |
| Central Bank of India | ICICI Bank | |
| Indian Bank | IDBI Bank | |
| Indian Overseas Bank | IDFC First Bank | |
| PNB | IndusInd Bank | |
| SBI | Kotak Mahindra Bank | |
| RBL Bank | ||
| South Indian Bank |
referenceBank=Bank%20of%20Baroda. Note the example below uses the short token HDFC while the displayed name is HDFC Bank — confirm the exact token a bank expects before relying on it; don't assume the token is always the display name with “Bank” stripped.curl -X GET \
'https://<your-partner-domain>/api/core/v1/templates/compare-rates?referenceBank=HDFC' \
-H 'referer: <your-partner-domain>'All successful responses are wrapped:
{
"success": true,
"data": { ... }
}data has five top-level sections:
| Field | Type | Description |
|---|---|---|
| availableReferenceBanks | string[] | All bank names that can be passed as referenceBank. Use to build the comparison selector. |
| referenceBank | object | The currently selected reference bank and its rates per tenure bucket. |
| tenureBuckets | object[] | The tenure brackets, with the best rate available in each (across all partner banks + the reference bank). |
| banks | object[] | One entry per partner FD template, with its rates per tenure bucket. |
| quickPicks | object[] | Curated "best rate per tenure category" recommendations. |
referenceBank{
"name": "SBI",
"peakRate": 6.8,
"bucketRates": [
{ "label": "7 Days - 90 Days", "rate": 4.9, "seniorCitizenRate": 5.4 }
// ... one per tenure bucket
]
}| Field | Type | Description |
|---|---|---|
| name | string | Selected reference bank name. |
| peakRate | number | Highest rate this bank offers across all tenure buckets. |
| bucketRates[] | object[] | Rate per tenure bucket. |
| bucketRates[].label | string | Tenure bucket label (e.g. "7 Days - 90 Days"). |
| bucketRates[].rate | number | null | General (non-senior) rate for the bucket. |
| bucketRates[].seniorCitizenRate | number | null | Senior-citizen rate for the bucket. |
tenureBuckets{
"label": "366 Days - 730 Days",
"minTenure": 366,
"maxTenure": 730,
"bestRate": 8.1,
"isBestDeal": true
}| Field | Type | Description |
|---|---|---|
| label | string | Human-readable tenure range. |
| minTenure / maxTenure | number | Tenure bracket bounds, in days. |
| bestRate | number | null | Highest rate available in this bracket across all partner banks and the reference bank. null if no bank offers this bracket. |
| isBestDeal | boolean | true for the single bracket with the overall highest bestRate. Use to highlight the standout tenure. |
banksOne object per partner FD template.
{
"templateId": "968d34fe-cf88-464c-8722-c7a032d3602d",
"displayName": "Utkarsh Small Finance Bank",
"organization": {
"id": "013962ad-42b0-4e30-9cd5-789104a6686a",
"name": "utkarsh",
"logo": "https://.../utkarsh_logo.png",
"fullName": "Utkarsh Small Finance Bank"
},
"peakRate": 8.1,
"bucketRates": [
{ "label": "7 Days - 90 Days", "rate": 4.5, "seniorCitizenRate": 5 },
{ "label": "1096 Days - 1825 Days", "rate": null, "seniorCitizenRate": null }
// ... one per tenure bucket, same order as tenureBuckets
]
}| Field | Type | Description |
|---|---|---|
| templateId | string (uuid) | FD template id. Use this to deep-link to the booking/template flow. |
| displayName | string | Template display name. |
| organization | object | Issuer info: id, name (slug), logo (URL), fullName. |
| peakRate | number | null | Highest rate this bank offers across its buckets. null if no rates. |
| bucketRates[] | object[] | Rate per tenure bucket, in the same order as tenureBuckets. |
| bucketRates[].rate | number | null | General rate for the bucket; null if the bank does not offer this tenure. |
| bucketRates[].seniorCitizenRate | number | null | Senior-citizen rate; null if not offered. |
quickPicksCurated recommendations — the best rate in each tenure category, plus a tax-saver “Max Safety” pick.
{
"label": "Medium-term",
"tenureRange": "366 Days - 730 Days",
"minTenure": 366,
"maxTenure": 730,
"rate": 8.1,
"bankNames": ["Utkarsh Small Finance Bank"],
"templateId": "968d34fe-cf88-464c-8722-c7a032d3602d",
"isBestDeal": true
}| Field | Type | Description |
|---|---|---|
| label | string | Category label: Ultra short-term, Short-term, Medium-term, Long-term, Extended, Max Safety. |
| tenureRange | string | Tenure description for display. |
| minTenure / maxTenure | number | Tenure bounds in days. For Max Safety, both are 1826 (5-year tax saver). |
| rate | number | null | Best rate for this category. |
| bankNames | string[] | Bank(s) offering this best rate (can be more than one on a tie). |
| templateId | string | null | Template id of the first winning bank — use to link straight into booking. null if no rate available. |
| isBestDeal | boolean | true for the standout pick (highest rate overall). |
Every field above, consolidated into one type — paste directly into a TS project.
interface CompareRatesResponse {
success: true;
data: {
availableReferenceBanks: string[];
referenceBank: {
name: string;
peakRate: number;
bucketRates: BucketRate[];
};
tenureBuckets: {
label: string;
minTenure: number;
maxTenure: number;
bestRate: number | null;
isBestDeal: boolean;
}[];
banks: {
templateId: string;
displayName: string;
organization: { id: string; name: string; logo: string; fullName: string };
peakRate: number | null;
bucketRates: BucketRate[];
}[];
quickPicks: {
// Known category values today: 'Ultra short-term' | 'Short-term' | 'Medium-term' |
// 'Long-term' | 'Extended' | 'Max Safety'. Typed as string, not a literal union — this
// is documentation prose, not a contractual enum, and a new category added server-side
// shouldn't silently fail to type-check on the client.
label: string;
tenureRange: string;
minTenure: number;
maxTenure: number;
rate: number | null;
bankNames: string[];
templateId: string | null;
isBestDeal: boolean;
}[];
};
}
interface BucketRate {
label: string;
rate: number | null;
seniorCitizenRate: number | null;
}peakRate — max(rate) over a bank's non-null bucket rates; null if none.tenureBuckets[].bestRate — max(rate) for that bucket across all partner banks and the reference bank.isBestDeal — set on the single tenure bucket / quick pick with the highest bestRate across the whole response. At most one is true.seniorCitizenRate — the max senior-citizen (cumulative) rate within the tenure bracket; null when the bank has no senior-citizen offering for it.rate: null / seniorCitizenRate: null for that bucket. Render these as “—” / “N/A” rather than 0. A bank with no rates at all has peakRate: null.referenceBank.bucketRates, banks[].bucketRates, and tenureBuckets are all in the same order. You can index across them by position, but matching on label is safer.availableReferenceBanks; do not hardcode it. Passing a name not in that list silently falls back to the default reference bank.banks[] and quickPicks[] expose templateId; use it to deep-link into the FD booking flow.tenureBuckets and one in quickPicks.| HTTP Status | When | Body |
|---|---|---|
| 200 OK | Success | { "success": true, "data": { ... } } |
| 403 Forbidden | The request could not be associated with a partner — the Referer domain is missing or not whitelisted | { "code": 403, "message": "Invalid referer" } |
| 500 Internal Server Error | Unexpected server/data error | { "code": 500, "message": "..." } |
GET /api/core/v1/templates/compare-rates?referenceBank=HDFC
{
"success": true,
"data": {
"availableReferenceBanks": ["Axis Bank", "Bandhan Bank", "..."],
"referenceBank": {
"name": "SBI",
"peakRate": 6.8,
"bucketRates": [
{ "label": "7 Days - 90 Days", "rate": 4.9, "seniorCitizenRate": 5.4 },
{ "label": "91 Days - 365 Days", "rate": 6.55, "seniorCitizenRate": 7.05 },
{ "label": "366 Days - 730 Days", "rate": 6.8, "seniorCitizenRate": 7.3 }
]
},
"tenureBuckets": [
{ "label": "366 Days - 730 Days", "minTenure": 366, "maxTenure": 730, "bestRate": 8.1, "isBestDeal": true }
],
"banks": [
{
"templateId": "968d34fe-cf88-464c-8722-c7a032d3602d",
"displayName": "Utkarsh Small Finance Bank",
"organization": {
"id": "013962ad-42b0-4e30-9cd5-789104a6686a",
"name": "utkarsh",
"logo": "https://blostem-assets.s3.ap-south-1.amazonaws.com/assets/utkarsh_logo.png",
"fullName": "Utkarsh Small Finance Bank"
},
"peakRate": 8.1,
"bucketRates": [
{ "label": "366 Days - 730 Days", "rate": 8.1, "seniorCitizenRate": 8.25 },
{ "label": "1096 Days - 1825 Days", "rate": null, "seniorCitizenRate": null }
]
}
],
"quickPicks": [
{
"label": "Medium-term",
"tenureRange": "366 Days - 730 Days",
"minTenure": 366,
"maxTenure": 730,
"rate": 8.1,
"bankNames": ["Utkarsh Small Finance Bank"],
"templateId": "968d34fe-cf88-464c-8722-c7a032d3602d",
"isBestDeal": true
}
]
}
}The full set of 24 supported institutions, alphabetically — the same banks as the grouped reference-bank table above.
Axis Bank
Bandhan Bank
Bank of Baroda
Bank of India
Bank of Maharashtra
Canara Bank
Central Bank of India
Federal Bank
HDFC Bank
ICICI Bank
IDBI Bank
IDFC First Bank
Indian Bank
Indian Overseas Bank
IndusInd Bank
KTDFC
Kotak Mahindra Bank
LIC Housing Finance
PNB
PNB Housing Finance
RBL Bank
SBI
Shriram Finance
South Indian Bank
Get your partner domain whitelisted and start powering your own FD rate-comparison screen.
Talk to Our Team