Ferro Silicon (FE-SI) - Per Troy Ounce Price API in Multiple Currencies: Developer Guide for 2026
You need to quote, hedge, or benchmark Ferro Silicon (FE-SI) in multiple currencies, and you want a clean, per–troy ounce price you can drop into pricing, risk, or research pipelines. By the end of this guide, you will pull the latest FE-SI price via API, interpret inverted symbols (USD per ounce vs ounces per USD), convert units (grams, kg), and cache results safely for production.
What we’re building: a reliable FE-SI per–troy ounce feed you can ship
We’ll focus on two core endpoints for Ferro Silicon (FE-SI):
- Latest rates: the simplest way to fetch the current FE-SI price in USD terms and as an inverted pair.
- Time-series (optional): request daily history across a date range for charting and backtesting.
We’ll keep everything grounded in the FE-SI symbol, use realistic JSON, and explain how to interpret the “per troy ounce” unit and base currency mechanics so your conversions are accurate. If you’re new to the symbol catalog, you can confirm availability at Metals-API Supported Symbols.
Key concepts you’ll use for FE-SI
- Unit: Metals-API returns metals “per troy ounce” unless stated otherwise. 1 troy ounce = 31.1034768 grams.
- Base currency: Default base is USD. That means rates.FE-SI is “troy ounces of FE-SI per 1 USD,” and rates.USDFE-SI is “USD per 1 troy ounce of FE-SI.”
- Inversion tip: If you request both FE-SI and USDFE-SI, you get both sides of the quote without computing 1/x yourself.
- Timestamps: The API returns a UNIX timestamp (seconds) and a date string (UTC). Treat it as UTC throughout your pipeline.
Latest FE-SI: multi-currency and inverted pairs in one call
The Latest endpoint returns real-time or near real-time data depending on plan. We’ll request three symbols at once:
- FE-SI — troy ounces per USD (oz/USD)
- USDFE-SI — USD per troy ounce (USD/oz)
- USD — included here so your code has a baseline to verify base handling (1.0 when base=USD)
Copy-paste curl
curl "https://metals-api.com/api/latest?access_key=YOUR_API_KEY&symbols=FE-SI,USDFE-SI,USD"
Official sample JSON (interpret this exactly)
{"success":true,"timestamp":1791332340,"date":"2026-10-07","base":"USD","rates":{"FE-SI":36.179925230363,"USD":1,"USDFE-SI":0.027639636998497107}}
How to read these fields in production:
- success: Boolean. Check before using data.
- timestamp: 1791332340. UNIX seconds. Treat as UTC.
- date: 2026-10-07. Also UTC. Useful for day bucketing or cache keys.
- base: USD. All rates are quoted relative to USD by default.
- rates.FE-SI: 36.179925... This is oz per 1 USD. If you multiply USD by this, you get troy ounces.
- rates.USDFE-SI: 0.02763963... This is USD per 1 troy ounce. Use this for pricing and mark-to-market.
- rates.USD: 1. Sanity check for the base.
Field usage patterns that prevent bugs
- Always prefer rates.USDFE-SI when you need a price per ounce in dollars. It eliminates inversion errors and floating-point drift.
- If you only requested FE-SI and need USD/oz, compute price = 1.0 / rates.FE-SI. Validate rate > 0 before inversion.
- Cache the tuple (timestamp, date, USDFE-SI) as an atomic record. This keeps your UIs and reports consistent for a given time window.
Production-grade Python example: FE-SI latest and conversions
This example fetches FE-SI, parses the inverted USD/oz rate, then converts to grams and kilograms. It also demonstrates basic caching semantics and off-hours handling guidelines you can adapt to your stack.
import os
import time
import requests
API_KEY = os.getenv("METALS_API_KEY", "YOUR_API_KEY")
URL = "https://metals-api.com/api/latest"
# Simple in-memory cache for demo purposes
_cache = {"data": None, "ts": 0}
CACHE_TTL_SECONDS = 300 # tune to your update plan
def get_latest_fesi():
global _cache
now = int(time.time())
if _cache["data"] and now - _cache["ts"] < CACHE_TTL_SECONDS:
return _cache["data"]
params = {
"access_key": API_KEY,
"symbols": "FE-SI,USDFE-SI,USD"
}
r = requests.get(URL, params=params, timeout=10)
r.raise_for_status()
data = r.json()
if not data.get("success"):
# Inspect error fields if present; consider backoff or alerting.
raise RuntimeError(f"Metals-API error: {data}")
_cache = {"data": data, "ts": now}
return data
def usd_per_oz_from(data):
# Prefer the direct inverted pair if present
rates = data.get("rates", {})
if "USDFE-SI" in rates:
return float(rates["USDFE-SI"])
# Fallback: invert FE-SI (oz per USD) if needed
fesi_oz_per_usd = float(rates["FE-SI"])
if fesi_oz_per_usd <= 0:
raise ValueError("Invalid FE-SI rate for inversion")
return 1.0 / fesi_oz_per_usd
def convert_units_usd(price_usd_per_oz):
TROY_OZ_TO_G = 31.1034768
usd_per_g = price_usd_per_oz / TROY_OZ_TO_G
usd_per_kg = usd_per_g * 1000.0
return usd_per_g, usd_per_kg
if __name__ == "__main__":
data = get_latest_fesi()
# Example: using the official sample JSON values
# {"success":true,"timestamp":1791332340,"date":"2026-10-07","base":"USD","rates":{"FE-SI":36.179925230363,"USD":1,"USDFE-SI":0.027639636998497107}}
price_usd_per_oz = usd_per_oz_from(data)
usd_per_g, usd_per_kg = convert_units_usd(price_usd_per_oz)
print({
"date": data.get("date"),
"timestamp": data.get("timestamp"),
"usd_per_oz": price_usd_per_oz,
"usd_per_g": usd_per_g,
"usd_per_kg": usd_per_kg,
"unit": "per troy ounce (derived grams/kg provided)"
})
When you run this using the official sample, usd_per_oz will match rates.USDFE-SI. For pricing catalogs or trader GUIs, show USD/oz directly; for industrial cost models, derive USD/kg as shown.
Requesting FE-SI history for charts and models
For backfilling, use the time-series endpoint to retrieve daily FE-SI across a date range. Keep the symbol constrained to FE-SI (and optionally USDFE-SI) to keep payloads small and faster to process. For all parameters and date constraints, see the Documentation.
Time-series curl (FE-SI with inverted USD/oz)
curl "https://metals-api.com/api/timeseries?access_key=YOUR_API_KEY&start_date=2026-09-01&end_date=2026-10-07&symbols=FE-SI,USDFE-SI"
Response fields mirror Latest but grouped under a dates map. Use rates.USDFE-SI for clean USD/oz history. Respect any date limits listed in the docs for your plan.
Symbol mechanics at a glance
Metals-API supports direct and inverted symbols. When base=USD (default), FE-SI and USDFE-SI offer complementary views:
| Symbol | Meaning | Unit | Common usage |
|---|---|---|---|
| FE-SI | Troy ounces of Ferro Silicon per 1 USD | oz/USD | Quantity calculation from USD budget |
| USDFE-SI | USD per 1 troy ounce of Ferro Silicon | USD/oz | Spot pricing, P&L, catalog prices |
| USD | Base currency sanity check | 1.0 (when base=USD) | Validation and joins |
Unit conversions and accuracy notes
- Troy ounce to gram: divide USD/oz by 31.1034768 to get USD/g. Multiply by 1000 for USD/kg.
- Rounding: Keep at least 6–8 significant digits for internal storage; round only at display time. FE-SI can be low-priced per ounce, so rounding too early hides signal.
- Currency conversion: If you need EUR/oz or JPY/oz, combine currency rates and USDFE-SI. You can also use the Convert endpoint; see docs for parameters and examples. Keep your chain in consistent timestamps.
Caching, weekends, and operational details
- Caching: Respect your plan’s update cadence. If your plan updates every N minutes, set cache TTL slightly under N to avoid thrashing while still getting new ticks when available.
- Market hours: Industrial metals can have thinner weekend activity. For weekend or holiday dates, time-series endpoints may return the last available business day’s rate. Always anchor by date field when constructing daily candles.
- Idempotency: For dashboards, cache by the “date” string for daily views; for intraday or quote pages, cache by “timestamp.”
- Error handling: If success=false, inspect error payloads (see docs). Implement exponential backoff and surface telemetry so trading or procurement users see data freshness.
Why FE-SI developers care: digital transformation, analytics, and smarter pipelines
Ferro Silicon data often sits between commodity procurement and product pricing. Embedding an API lets you unify hedging, BOM costing, and quote generation without manual files. Engineers can:
- Drive live catalog prices in USD/oz and derived USD/kg for alloy inputs.
- Alert on daily or intraday changes beyond thresholds and auto-refresh RFQs.
- Feed quant models with normalized, UTC-aligned time-series for FE-SI.
As metal markets become more digitized, FE-SI exposure can plug into alerting, risk, and planning tools via simple JSON. Explore endpoint options and parameters in the Documentation.
Conversion endpoint for FE-SI amounts (optional workflow)
When you need to convert specific amounts (e.g., 2,500 USD to FE-SI ounces, or 10 troy ounces to USD), use the Convert endpoint. Keep requests anchored to FE-SI symbols to avoid mismatched units across metals. Consult parameter details in the Documentation.
Convert curl examples (no sample JSON shown)
- USD to FE-SI ounces:
curl "https://metals-api.com/api/convert?access_key=YOUR_API_KEY&from=USD&to=FE-SI&amount=2500" - FE-SI ounces to USD:
curl "https://metals-api.com/api/convert?access_key=YOUR_API_KEY&from=FE-SI&to=USD&amount=10"
These mirror the meaning of FE-SI and USDFE-SI described earlier. Confirm symbol support and currencies on the Symbols page.
Security, keys, and plan notes
- API key: Pass via access_key in the query string as shown above.
- No free trial: Metals-API does not offer a free trial. Choose a plan that fits your update cadence and symbol needs. As a point of reference, Copper Monthly is $19.99/mo.
- Key hygiene: Do not embed keys in client-side code. Proxy or use server-side calls.
- Monitoring: Log timestamp, date, and symbol set for each fetch so you can reconcile anomalies or backfill if needed.
Related resources
- Register for an API key: Register
- Docs for endpoints, parameters, and errors: Documentation
- Symbol catalog including FE-SI: Symbols
- Modeling and compute partners: MCP
- LME homepage (market context, schedules): London Metal Exchange
- UN Comtrade (macro trade data): UN Comtrade+
- API home: metals-api.com
Beginner gotchas (and how to avoid them)
- Mixing ounce types: Always use troy ounces for precious and many industrial metals. Do not mix with avoirdupois ounces.
- Forgetting the base: When base=USD, FE-SI is oz per 1 USD. If you expect a “price,” you likely want USDFE-SI instead.
- Timezone drift: The date field is UTC. Align your warehouse and scheduled jobs to UTC for clean daily aggregates.
- Weekend artifacts: If your chart shows a flat weekend, check the date index. Consider business-day resampling if the feed aligns with market calendars.
- Over-fetching: Batch symbols (FE-SI and USDFE-SI in one call) and cache by timestamp to reduce load and stay inside plan allowances.
FAQ
Q: What’s the difference between FE-SI and USDFE-SI in the response?
A: FE-SI is troy ounces per USD (oz/USD). USDFE-SI is USD per troy ounce (USD/oz). For pricing, use USDFE-SI directly.
Q: How do I get EUR per troy ounce for FE-SI?
A: Combine USDFE-SI (USD/oz) with a USD→EUR rate to compute EUR/oz, or use the Convert endpoint with from=USD, to=EUR and apply consistently at the same timestamp. See the Documentation for parameters.
Q: Are the timestamps business-time or wall-clock?
A: The API returns a UNIX epoch timestamp (seconds) and a UTC date string. Treat both as UTC. Intraday recency depends on your plan’s update interval.
Q: How should I store FE-SI for analytics?
A: Store the raw JSON or a normalized record with (timestamp, date, base, USDFE-SI, FE-SI). Keep at least 6–8 significant digits and defer rounding to the presentation layer.
Q: Is there a free trial?
A: No. Metals-API does not offer a free trial. Plans vary by features and update cadence; as a reference, Copper Monthly is $19.99/month.
Ready to integrate FE-SI into your trading, pricing, or ERP tooling? Get your key and start with the Latest and Time-series endpoints today: Register. If you’re assembling a broader compute or modeling stack, explore partners on MCP.