> For the complete documentation index, see [llms.txt](https://www.bluegamma.io/documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://www.bluegamma.io/documentation/reference/validating-bluegamma-api-data-against-bloomberg-or-other-platforms.md).

# How do I compare BlueGamma data with Bloomberg or other platforms?

Match payment frequency, day count and valuation time, then compare par swap rates from /swap\_rate. Default conventions and API parameters for SOFR, CORRA, ESTR, SONIA and EURIBOR.

To compare BlueGamma with Bloomberg or another platform, match the payment frequency, day count convention and valuation time on both sides, and compare par swap rates from the `/swap_rate` endpoint using the per-index conventions below. Most mismatches come down to one of those three settings or to snapshots taken at different times.

**Who is this for?**\
You're using BlueGamma, in the web app, over the API, or through the Excel Add-in, and want to check that the data lines up with platforms you already use like Bloomberg or online sources.

This guide walks you through how to make those comparisons accurately, using consistent quoting conventions for USD SOFR, CAD CORRA, EUR ESTR, GBP SONIA, and EUR EURIBOR.

{% hint style="warning" %}
**Comparing rates from the Excel Add-in?**\
Swap rates pulled with the Excel add-in's `SWAP_RATE` function often won't match Bloomberg exactly. The add-in takes a single payment frequency, applied to the fixed leg, and doesn't currently let you customise day count conventions or set a different payment frequency for each leg. For example, Bloomberg quotes a EUR swap vs 6M EURIBOR with an annual 30/360 fixed leg against a semi-annual Actual/360 floating leg. If the frequency entered in Excel puts the fixed leg on 6M instead of annual, or your reference screen uses different day counts, the two rates can differ by several basis points. To reproduce another platform's conventions exactly, call the API directly with the parameters in this guide.
{% endhint %}

***

### 🔑 Key Things to Keep in Mind

Before comparing rates, make sure to:

* ✅ Match **payment frequencies** and **day count conventions**
* ✅ Use the same **valuation date/time** (and time zone)
* ✅ Align on **swap structure** (e.g. OIS vs IBOR-based)
* ✅ Use the `/swap_rate` endpoint when comparing to par swap quotes (not `/forward_rate` or `/discount_factor`)

***

### 📐 Default Conventions by Index

These are the day count and payment frequency conventions behind BlueGamma's quoted swap curves for each index:

| Currency | Index       | Fixed Leg Day Count | Floating Leg Day Count | Fixed Leg Frequency | Floating Leg Frequency |
| -------- | ----------- | ------------------- | ---------------------- | ------------------- | ---------------------- |
| USD      | SOFR        | Actual/360          | Actual/360             | Annual              | Annual                 |
| GBP      | SONIA       | Actual/365 (Fixed)  | Actual/365 (Fixed)     | Annual              | Annual                 |
| EUR      | ESTR        | Actual/360          | Actual/360             | Annual              | Annual                 |
| EUR      | 1M EURIBOR  | 30/360 (Bond Basis) | Actual/360             | Annual              | Monthly                |
| EUR      | 3M EURIBOR  | 30/360 (Bond Basis) | Actual/360             | Annual              | Quarterly              |
| EUR      | 6M EURIBOR  | 30/360 (Bond Basis) | Actual/360             | Annual              | Semi-annual            |
| EUR      | 12M EURIBOR | 30/360 (Bond Basis) | Actual/360             | Annual              | Annual                 |
| CAD      | CORRA       | Actual/365 (Fixed)  | Actual/365 (Fixed)     | Semi-annual         | Semi-annual            |
| CHF      | SARON       | Actual/360          | Actual/360             | Annual              | Annual                 |

You can also retrieve these programmatically: every `/get_swap_curve` response includes the `fixed_leg_day_count`, `floating_leg_day_count` and leg frequency fields alongside the rates. See [Fetching a Swap Curve](/documentation/integrations/api/how-to-guides/fetching-a-swap-curve.md).

{% hint style="info" %}
**EURIBOR fixed leg day count:** the web app swap pricer and the Excel add-in's `SWAP_RATE` price EURIBOR fixed legs on Actual/360, not the 30/360 shown above. This comes out around 5bp lower at current rates. Over the API, `/swap_rate` uses the conventions in the table above when you leave out `fixed_leg_frequency`. If you pass `fixed_leg_frequency` without a day count, the fixed leg is priced on Actual/360, so add `fixed_leg_day_count=Thirty360BondBasis` to match 30/360.
{% endhint %}

***

### 🇺🇸 USD SOFR (Overnight Indexed Swap)

#### ✅ Market Convention (and BlueGamma UI default)

* Fixed leg: **Annual**, Actual/360
* Floating leg: **Annual**, Actual/360

#### 🔧 API Parameters

```bash
index=SOFR
start_date=0D
maturity_date=10Y
fixed_leg_frequency=1Y
floating_leg_frequency=1Y
fixed_leg_day_count=Actual360
```

#### 🔎 Notes

* Bloomberg and other providers may use **Semi vs Semi** with different stub assumptions. Adjust accordingly if you're trying to match another screen exactly.

***

### 🇨🇦 CAD CORRA (Overnight Indexed Swap)

#### ✅ Market Convention

* Fixed leg: **Annual**, Actual/365
* Floating leg: **Annual**, Actual/365

#### 🔧 API Parameters

```bash
index=CORRA
start_date=0D
maturity_date=10Y
fixed_leg_frequency=1Y
floating_leg_frequency=1Y
fixed_leg_day_count=Actual365Fixed
floating_leg_day_count=Actual365Fixed
```

***

### 🇪🇺 EUR ESTR (Overnight Indexed Swap)

#### ✅ Market Convention

* Fixed leg: **Annual**, Actual/360
* Floating leg: **Annual**, Actual/360

#### 🔧 API Parameters

```bash
index=ESTR
start_date=0D
maturity_date=10Y
fixed_leg_frequency=1Y
floating_leg_frequency=1Y
fixed_leg_day_count=Actual360
floating_leg_day_count=Actual360
```

#### 🔎 Notes

* Bloomberg quotes EUR ESTR OIS with **T+2 settlement**. Use `start_date=SPOT` to start the swap on the spot date and match it. `start_date=0D` prices a swap starting today, which can cause a small difference for short maturities.

***

### 🇬🇧 GBP SONIA (Overnight Indexed Swap)

#### ✅ Market Convention

* Fixed leg: **Annual**, Actual/365
* Floating leg: **Annual**, Actual/365

#### 🔧 API Parameters

```bash
index=SONIA
start_date=0D
maturity_date=10Y
fixed_leg_frequency=1Y
floating_leg_frequency=1Y
fixed_leg_day_count=Actual365Fixed
floating_leg_day_count=Actual365Fixed
```

#### 🔎 Notes

* SONIA swaps settle **T+0**, so `start_date=0D` matches the standard quote.

***

### 🇪🇺 EUR EURIBOR

#### ✅ Market Convention

* Fixed leg: **Annual**, 30/360
* Floating leg: **6M EURIBOR**, Actual/360

> 💡 If your reference source uses 3M or 1M EURIBOR instead, update the `index` and `floating_leg_frequency` accordingly.

#### 🔧 API Parameters

```bash
index=6M EURIBOR
start_date=0D
maturity_date=10Y
fixed_leg_frequency=1Y
floating_leg_frequency=6M
fixed_leg_day_count=Thirty360BondBasis
floating_leg_day_count=Actual360
```

***

### ⏰ Close of Business & Time Zones

Even with matching conventions, two sources can differ simply because they captured the market at different moments. This applies whether you compare in the web app or over the API.

* **"End of day" isn't one global instant.** Rates move through the trading day, so two snapshots taken at different times can differ even when everything else matches. A gap between two sources can just mean their snapshots were taken at different moments, not that either is wrong.
* **Local time can shift the value date.** The same calendar date in local time versus UTC can be two different observations near the day boundary, leaving you comparing different value dates. It is also worth checking whether the other source is labelled by fixing date or value date, as these are not always the same.
* **In the web app, times are read in your local time zone by default.** A time picked near midnight can therefore land on a different day's curve than you expect, so convert the other platform's close into your local time before entering it.

**To line them up:** the API and Excel Add-in both read timestamps in **UTC**, so give your valuation time in UTC (over the API, for example `2026-09-18T16:00:00Z`; in the Excel Add-in a date on its own is taken as 23:59:59 UTC). Either way, confirm both sides use the same cut-off and value date.

***

### 🧪 Summary Checklist: If Rates Don't Match

This summary checklist pulls the guide together, conventions, structure, and timing. Work down it to track down a mismatch:

| ✅ Check This...       | 🔍 What To Look For                                                                                                                   |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| Frequency             | Are fixed/floating legs aligned (e.g. 1Y vs 6M)?                                                                                      |
| Day count conventions | Are you using the same as your reference (e.g. 30/360 vs ACT/360)?                                                                    |
| Valuation time/date   | Align the exact timestamp. The web app reads times in your local time zone; the API and Excel Add-in read them in UTC                 |
| Close of business     | Are both snapshots from the same cut-off, and on the same value date? See Close of Business & Time Zones above                        |
| Stub periods          | Although BlueGamma's API doesn't allow you to adjust stub periods this may cause slight differences                                   |
| Settlement            | `start_date=SPOT` starts the swap on the index's spot date (e.g. T+2 for EUR), as standard quotes do. `start_date=0D` starts it today |
| Structure             | Confirm you're comparing a par swap rate (not forward or zero rates)                                                                  |

📩 **Still unsure?** Email <support@bluegamma.io> with the values or screenshots you're comparing and we'll be happy to help.

***

**Need an API key?**\
📩 <support@bluegamma.io> | 📅 [Book a call](https://app.lemcal.com/@alivohra/website-demo?back=1)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://www.bluegamma.io/documentation/reference/validating-bluegamma-api-data-against-bloomberg-or-other-platforms.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
