For the Fed meeting on Wednesday, 28 October 2026, prediction markets put a cut at 0.7%, no change at 91.9% and a rise at 7.5%. Kalshi and Polymarket quote the same Fed question separately, and Narwhal returns both venues' quotes next to the blended probability in one response.
Do it with the API
Read the Fed question through GET /v1/predictions/scalar/usa-fed-2026-10. Each entry in outcomes[] has a blended probability and venue entries in quotes[]. Those entries carry venue, probability and market_ids, so the comparison can stay attached to the same outcome while retaining the venue's market references.
- Set your API key Get a free key and keep it in the environment variable
NARWHAL_API_KEY. The request sends that key in theAuthorization: Bearer YOUR_KEYheader; REST and MCP share the same key. - Read the question and its quotes Use this Python script to print the question, then place the blended probability and each venue's probability beside the outcome label. It also prints the absolute gap in percentage points and the venue weights from the response.Python, venue quotes side by side
import os import requests event = requests.get("https://api.narwhalapi.com/v1/predictions/scalar/usa-fed-2026-10", headers={"Authorization": f"Bearer {os.environ['NARWHAL_API_KEY']}"}, timeout=10).json() print(event["question"]) print(f"{'outcome':26}{'blend':>8}{'kalshi':>8}{'polymarket':>12}{'gap':>7}") for o in event["outcomes"]: q = {x["venue"]: float(x["probability"]) for x in o["quotes"]} k, p = q.get("kalshi"), q.get("polymarket") gap = f"{abs(k - p) * 100:.1f}pt" if k is not None and p is not None else "-" print(f"{o['label']:26}{float(o['probability']):8.1%}{k or 0:8.1%}{p or 0:12.1%}{gap:>7}") print("venue weights:", {v["venue"]: v["weight"] for v in event["venues"]}) - Compare matching outcomes Read across the row for the outcome you want to compare. The blend column contains the outcome's
probability; the venue columns come from that outcome'squotes[], so the gap compares Kalshi with Polymarket for the same outcome. - Keep the comparison with its date For a gap tracker, save the script's output daily with the date of its figures. The Free plan has end-of-day values, so describe those saved comparisons as end-of-day quotes when you use them. Keep each outcome label with its venue quotes, gap and blend in the saved output. When comparing saved dates, use the same outcome on each date so a change in the selected outcome does not enter the gap comparison.
Read the gap column together with the venue columns. The script prints a dash when either venue quote is absent. In that case, the displayed venue value can be zero because of the script's formatting; look at quotes[] to distinguish an absent quote from a quoted probability. An outcome needs both venue quotes for the script to calculate its gap.
Do it in a sheet or without code
Open the prediction pages and select the question to see each venue's price. For a quick look, read the Kalshi and Polymarket quotes there. A spreadsheet comparison starts with the quotes for the same outcome pasted into separate cells; use the same date for both figures.
Put the Kalshi quote in B2 and the Polymarket quote in C2, with both cells entered as percentages. The absolute difference gives the gap regardless of which venue has the higher quote. Keep the question, outcome and date alongside the pasted values so the sheet retains the context of the comparison.
=ABS(B2-C2)With percentage inputs, the result is the difference between the probabilities. Express that difference in percentage points when you describe the venue gap. The worked example uses the no-change outcome; use the corresponding pair of quotes if you compare another outcome from the question.
Which option to use when
| Situation | Best option | Why |
|---|---|---|
| A quick look | The prediction page | Each venue's price appears on the question page |
| A gap tracker | The script, with output saved daily | It prints the venue quotes and their gap for each outcome |
| Trading decisions | Read each venue's rules and fees first | Contract wording and fees can differ |
This is information, not advice.
Why do Kalshi and Polymarket disagree?
Different traders, fees and contract wording can produce different quotes. A gap of a point or two is common on a liquid question. Each venue quotes the question separately, so the comparison preserves both probabilities even when the outcome labels refer to the same Fed decision.
What does the blended probability use?
The blend uses the venue weights in the response. On 24 October 2026, the weights were 0.5785 for Kalshi and 0.4215 for Polymarket. Read those values from venues[] when interpreting the blend alongside the separate quotes.
The same venue entries include volume_24h_usd, open_interest_usd, rules text and URLs. The response places that venue information alongside the outcomes, while each outcome carries its own blended probability and venue quotes. Keep the weights with the dated comparison if you want to retain the inputs behind that blend.
Are the contracts identical?
The contracts are not always identical. Compare each venue's rules_text before treating the contracts as the same bet, and use the venue URLs in the response to read the corresponding rules. Similar wording in a question or outcome label does not establish that the contracts have identical rules.
Compare resolves_at values as dates, rather than comparing strings containing the full timestamps. Read the resolution dates together with the rules text when deciding whether the venue quotes belong in the comparison you want to make.
Worked example: no change at the Fed in October 2026
The figures in this example are from 24 October 2026. They refer to the Fed's 28 October 2026 decision. Start with the no-change row: Kalshi quoted 91.1% and Polymarket quoted 92.9%. Subtract the lower quote from the higher quote to calculate the absolute gap.
92.9 - 91.1 = 1.8 percentage points
Blended probability: 91.9%For the same dated comparison, the other outcomes retain their own venue quotes and blended probabilities. Read each row separately when comparing a cut, no change or a hike.
| Outcome on 24 October 2026 | Blend | Kalshi | Polymarket |
|---|---|---|---|
| Cut of 50 bps or more | 0.3% | 0.5% | 0.1% |
| Cut of 25 bps | 0.4% | 0.5% | 0.1% |
| No change | 91.9% | 91.1% | 92.9% |
| Hike of 25 bps | 7.0% | 7.4% | 6.5% |
| Hike of 50 bps or more | 0.4% | 0.5% | 0.4% |
On 24 October 2026, the hike-of-25-bps quotes differed by 0.9 percentage points. For no change on that date, applying the venue weights to the more precise probabilities gives 0.9189, while the response's blended probability is 0.9188. Use the returned blended probability when reporting the response's blend. Keep the separate venue quotes for the gap calculation, since that calculation compares the venues directly and does not use their weights.
0.5785 x 0.9114 + 0.4215 x 0.9292 = 0.9189
Response probability: 0.9188Published .
