API to Get the Palladium Mar 2026 (PAH26) - Per Troy Ounce Price using a REST endpoint
You need to fetch the Palladium March 2026 futures price (PAH26) per troy ounce via a REST API and wire it into a pricing model, backfill a chart, or trigger an alert. By the end of this guide, you will call the Metals-API latest endpoint for PAH26, read the response reliably, convert to USD/oz when needed, and handle the “expired symbol” case without breaking your application.
What PAH26 Represents and Why It Matters
PAH26 is the March 2026 palladium futures symbol. Developers building quant screens, hedging dashboards, or ERP cost models often need a single canonical price per troy ounce to normalize quotes, benchmark vendor terms, or value inventory.
Across automotive technology and environmental solutions, palladium is core to catalytic converters and evolving emissions strategies. In digital supply chains and smart manufacturing, consistent unit pricing (USD per troy ounce) lets you translate market data into automated re-order thresholds, BOM recalculations, or dynamic quotes.
This post focuses on the PAH26 symbol specifically. If you need to confirm symbol availability or discover alternates (e.g., nearby futures or spot palladium), use the catalog at Metals-API Supported Symbols.
Endpoints We’ll Use
We’ll keep it tight and practical for PAH26:
- Latest Rates Endpoint: Pull the most recent PAH26 rate. You’ll read both PAH26 (oz per USD) and, when available, USDPAH26 (USD per oz) directly.
- Historical Rates Endpoint: Retrieve a specific date for backfills or to reference prices during the contract’s active period.
- Time-Series Endpoint (optional): Batch daily history for a date range to build charts or run factor models. See the Documentation for query parameters and date constraints.
If you’re just after a live per-oz number, the Latest endpoint is usually enough.
Quick Start: Get PAH26 Per Troy Ounce
Metals-API returns rates relative to the base currency (default USD). For metals, two complementary rates may appear:
- rates.PAH26: This is “per troy ounce per 1 USD” (oz/USD). Invert it to get USD per oz.
- rates.USDPAH26: This is already “USD per troy ounce” (USD/oz) for PAH26. Prefer this if present.
curl request you can run
Request PAH26 and USDPAH26 together so you get USD per ounce directly when available:
curl -s "https://metals-api.com/api/latest?access_key=YOUR_API_KEY&symbols=PAH26,USDPAH26"
Official sample JSON response
Below is an actual Metals-API response for PAH26. Use these values when testing your parsing logic:
{"success":true,"timestamp":1791850080,"date":"2026-10-13","base":"USD","rates":{"PAH26":0.00072202166064982,"USD":1,"USDPAH26":1384.999999999999},"warnings":[{"symbol":"PAH26","code":410,"type":"expired_symbol","info":"The requested symbol has expired and is no longer available."}]}
What to read from this response
- base: "USD" means all rates are quoted relative to 1 USD.
- rates.PAH26: 0.00072202166064982 oz per 1 USD. If USDPAH26 is missing, compute USD/oz = 1 / 0.00072202166064982.
- rates.USDPAH26: 1384.999999999999 USD per troy ounce. Use this directly for pricing, invoicing, or charting.
- timestamp and date: Use these to align with your system’s timezone and caches. The timestamp is UNIX epoch seconds.
- warnings: The array shows code 410 (expired_symbol). Your app should still read available data but must degrade gracefully or switch symbols (see “Handling Expired Symbols”).
Production-Ready Parsing in Python
The snippet below calls the same Latest endpoint, prefers USDPAH26 if present, and otherwise inverts rates.PAH26. It also normalizes to USD per troy ounce and shows a grams conversion for manufacturing workflows.
import os
import requests
API_KEY = os.getenv("METALS_API_KEY", "YOUR_API_KEY")
URL = "https://metals-api.com/api/latest"
def get_pah26_usd_per_oz():
params = {
"access_key": API_KEY,
"symbols": "PAH26,USDPAH26"
}
r = requests.get(URL, params=params, timeout=10)
r.raise_for_status()
data = r.json()
if not data.get("success"):
raise RuntimeError(f"Metals-API error: {data}")
rates = data.get("rates", {})
usd_per_oz = None
# Preferred: USD per troy ounce direct quote
if "USDPAH26" in rates:
usd_per_oz = float(rates["USDPAH26"])
# Fallback: invert oz per USD
elif "PAH26" in rates and float(rates["PAH26"]) > 0:
usd_per_oz = 1.0 / float(rates["PAH26"])
else:
raise ValueError("PAH26 price unavailable from latest endpoint.")
# Optional: check warning for expired symbol
for w in data.get("warnings", []):
if w.get("symbol") == "PAH26" and w.get("type") == "expired_symbol":
# Log or trigger symbol substitution policy here
pass
# Convert to per gram for BOM costing (1 troy ounce = 31.1034768 grams)
usd_per_gram = usd_per_oz / 31.1034768
return {
"date": data.get("date"),
"timestamp": data.get("timestamp"),
"usd_per_oz": usd_per_oz,
"usd_per_gram": usd_per_gram
}
if __name__ == "__main__":
quote = get_pah26_usd_per_oz()
print(quote)
Key behaviors to copy:
- Prefer USDPAH26 when present; it is already the per-oz quote you need.
- Invert PAH26 only when USDPAH26 is absent and PAH26 > 0.
- Honor the warning for expired symbols but don’t crash your pipeline. Decide whether to switch symbols or query a historical date (see below).
Handling Expired Symbols and Backfills
Futures symbols expire. In the sample response, PAH26 returns with a 410 warning: “expired_symbol.” Your logic should:
- Display or store the available price if returned (e.g., USDPAH26). The warning does not invalidate the response fields.
- For historical backfills, request a specific date during the contract’s active window using the Historical endpoint.
- If you need a current tradable proxy, select an alternative active symbol from the catalog. See the Symbols directory to locate current palladium listings.
Historical endpoint for a specific date
Use the date path format shown in the docs (YYYY-MM-DD) to target a day when PAH26 was active. You can request both PAH26 and USDPAH26, then apply the same parsing logic (prefer USDPAH26; invert PAH26 if necessary). See parameter details in the Documentation.
Time-series endpoint for chart backfills
To populate daily series (e.g., month-before-expiry), call the time-series endpoint for PAH26 and USDPAH26. This is well-suited for building charts, calculating rolling vol, or training a model. Review allowed date ranges and parameters in the Documentation.
Units, Base Currency, and Conversions That Trip People Up
- Default base is USD. The field base: "USD" confirms metals are quoted against 1 USD.
- Two directions: PAH26 is “oz per USD” and USDPAH26 is “USD per oz.” If USDPAH26 is not returned, compute USD/oz via 1 / rates.PAH26.
- Troy ounces vs grams: 1 troy ounce = 31.1034768 grams. For BOMs and per-part costing, convert USD/oz to USD/g (divide by 31.1034768).
- Timestamps and timezone: timestamp is UNIX seconds; date is in YYYY-MM-DD. Persist both. If your analytics rely on session boundaries, normalize to UTC midnight and store the epoch for deterministic caching.
Operational Guidance for Robust Integrations
- Caching: Cache successful latest responses keyed by symbol set and round timestamp to your plan’s update cadence. This eliminates redundant calls in busy microservices and protects you from jitter.
- Weekend/holidays: Metals and futures may not trade every calendar day. When requesting historical/time-series, handle missing days and avoid assuming continuous data.
- Graceful degradation: If PAH26 is expired or unavailable, fall back to most recent cached price for read-only displays, and alert your team or trigger a symbol-substitution policy.
- Error handling: Check success and warnings arrays. Don’t infer availability from HTTP 200 alone.
- Precision and formatting: Keep floating-point values as decimals internally. Only format for display at the last moment to avoid rounding artifacts in downstream risk or P&L.
- Batching symbols: Request PAH26 with USDPAH26 together so you can use the direct USD/oz quote when present, reducing the need to invert and avoiding division-by-zero paths.
From Metals Data to Manufacturing and Trading Decisions
Once normalized to USD per troy ounce, you can automate common tasks:
- Trading tools: Show PAH26 per-oz next to other contract months and compute spreads or implied carry.
- Fintech pricing: Convert USD/oz to a target currency using your FX rail, then quote customers in their native currency.
- E-commerce and ERP: Translate USD/oz → USD/g and multiply by palladium weight in your components to update catalog prices or purchase limits.
- Risk and procurement: Trigger alerts if USD/oz crosses thresholds that affect catalyst loadings or substitution strategies.
If you maintain coverage across multiple venues or symbols, see the catalog and coverage page at MCP.
Contract Intel and External References
Futures expirations, roll schedules, and delivery specs can influence symbol availability and settlement behavior. When you implement production rules for symbol changes, align them with the exchange’s calendar. For reference, consult the exchange page where the contract lists (e.g., contract months, last trade date) and cross-check with your internal calendars.
- CME Group Palladium futures overview (general contract information and calendars)
Use these references to decide when to stop requesting PAH26 via Latest and when to rely on historical lookups or roll logic to the next active contract month.
Testing Checklist
- Fetch PAH26 and USDPAH26 together on Latest. Confirm USDPAH26 is used when present.
- Simulate absence of USDPAH26 and verify inversion logic from PAH26’s oz/USD.
- Verify that a 410 expired_symbol warning does not break your pipeline and that you log or alert appropriately.
- Backfill a date range with Time-Series and confirm weekend/holiday gaps are handled without off-by-one errors.
- Verify unit conversions (USD/oz → USD/g) in both display and saved calculations.
Where to Find Parameters and Symbols
For endpoint paths, available query parameters, and date formats, read the official Documentation. To confirm PAH26 support and discover active palladium symbols when contracts roll, check the Symbols directory.
FAQ
Q: The response warns that PAH26 is expired. Can I still use the returned price?
A: Yes. If USDPAH26 or PAH26 is present, you can read the value. The warning indicates the symbol is no longer active; for current trading, switch to an active symbol and use Historical/Time-Series for PAH26 backfills.
Q: How do I get USD per troy ounce if only PAH26 is returned?
A: Compute USD per oz as 1 / rates.PAH26 because rates.PAH26 is oz per USD. Always check for division-by-zero and prefer rates.USDPAH26 when available.
Q: Which unit does Metals-API use for precious and industrial metals?
A: The unit in metals responses is troy ounces unless noted. Convert to grams by dividing USD/oz by 31.1034768.
Q: How should I cache results?
A: Cache by symbol set and timestamp. Respect your plan’s update frequency and avoid pounding the Latest endpoint. For UIs that poll, return cached data until the timestamp advances or your refresh interval elapses.
Q: What if I need other contract months or spot palladium?
A: Discover active palladium symbols in the Symbols directory, then use the same endpoints and parsing logic.
Ready to implement this in your stack? Get your API key and start calling the endpoint in minutes: Register. For endpoint details and response schemas, keep the Documentation open while you code, and review market coverage at MCP.