How to Get the LME Steel Scrap CFR Turkey (STEEL-SC) - Per Troy Ounce Price using the LME API for 2026
You need to quote, hedge, or reconcile contracts to the LME Steel Scrap CFR Turkey price (symbol: STEEL-SC) in USD per troy ounce, and wire that number into your pricing engine or ERP. In this guide you’ll fetch the live LME STEEL-SC rate, convert it to USD/oz, and optionally scale it to grams, kilograms, or metric tons—using two Metals-API endpoints you can ship today.
What STEEL-SC represents and why USD per troy ounce matters
LME Steel Scrap CFR Turkey (STEEL-SC) is a benchmark price for imported steel scrap into Turkey on a CFR basis. Developers often need a normalized unit—USD per troy ounce—for consistent comparisons, analytics, and downstream conversions (grams/kg/ton), even if a business process ultimately quotes per metric ton.
Metals-API standardizes metal units to troy ounces. When the base is USD, the “rates” map expresses how many troy ounces you get for 1 USD; the inverse pair (USDSTEEL-SC) provides USD per troy ounce. This symmetry lets you calculate both inventory quantities (oz you can buy per budget) and clean USD/oz for dashboards and P&L.
Before you code, confirm the symbol on the official list: Metals-API Supported Symbols. If you are setting up your credentials, get an API key here: Register.
The minimal set of endpoints you’ll use
- Latest rates: to fetch current STEEL-SC with its inverse (USDSTEEL-SC).
- Convert: to translate a quantity between USD and STEEL-SC (e.g., 1 oz to USD, or a USD budget to ounces).
For other tasks (historical backfill, OHLC, bid/ask), see the Metals-API Documentation.
Get the current STEEL-SC price and USD per troy ounce
Request the STEEL-SC quote and its inverse in the same call. With base=USD, you’ll receive: - rates.STEEL-SC = troy ounces per 1 USD. - rates.USDSTEEL-SC = USD per 1 troy ounce.
curl "https://metals-api.com/api/latest?access_key=YOUR_API_KEY&symbols=STEEL-SC,USDSTEEL-SC&base=USD"
Example JSON (official response):
{"success":true,"timestamp":1792886880,"date":"2026-10-25","base":"USD","rates":{"STEEL-SC":91.990557939914,"USD":1,"USDSTEEL-SC":0.010870680887196877}}
What these fields mean for implementation
- success: Boolean; check before using the payload.
- timestamp: Unix epoch (seconds). Use to cache and to avoid over-polling.
- date: Coordinated date stamp for the rates (UTC-aligned).
- base: The base is USD. Metals-API expresses metals as amounts per base or inverses thereof.
- rates.STEEL-SC: 91.990557939914 oz per 1 USD (how many troy ounces one USD buys).
- rates.USDSTEEL-SC: 0.010870680887196877 USD per troy ounce (the USD/oz you likely want for pricing).
If you only receive rates.STEEL-SC in a plan/response, you can compute USD per oz as 1 / rates.STEEL-SC.
Convert to USD per oz or to tons with the convert endpoint
Use the convert endpoint when you need a single, authoritative conversion, or when you want to translate a budget into ounces.
1) 1 troy ounce of STEEL-SC to USD
curl "https://metals-api.com/api/convert?access_key=YOUR_API_KEY&from=STEEL-SC&to=USD&amount=1"
This returns the USD value for exactly one troy ounce—functionally the same as USDSTEEL-SC.
2) Budget to ounces (e.g., 10,000 USD to troy ounces)
curl "https://metals-api.com/api/convert?access_key=YOUR_API_KEY&from=USD&to=STEEL-SC&amount=10000"
Use this for procurement planning or for reconciling expected inventory from a spend amount.
End-to-end code: fetch USD/oz and compute per metric ton
The snippet below calls the latest endpoint, reads both STEEL-SC and USDSTEEL-SC, and derives a metric-ton price. One metric ton equals 1,000,000 grams; 1 troy ounce equals 31.1034768 grams; therefore 1 metric ton equals about 32,150.7465686 troy ounces.
import os
import requests
API_KEY = os.getenv("METALS_API_KEY", "YOUR_API_KEY")
URL = "https://metals-api.com/api/latest"
params = {
"access_key": API_KEY,
"base": "USD",
"symbols": "STEEL-SC,USDSTEEL-SC"
}
resp = requests.get(URL, params=params, timeout=10)
resp.raise_for_status()
data = resp.json()
if not data.get("success"):
raise RuntimeError(f"Metals-API error: {data}")
# Prefer the direct USD per oz if present; otherwise invert oz/USD
rates = data["rates"]
usd_per_oz = rates.get("USDSTEEL-SC")
if usd_per_oz is None:
oz_per_usd = rates["STEEL-SC"]
usd_per_oz = 1.0 / oz_per_usd
# Convert to common units
TROY_OUNCES_PER_METRIC_TON = 1_000_000.0 / 31.1034768
usd_per_metric_ton = usd_per_oz * TROY_OUNCES_PER_METRIC_TON
usd_per_kg = usd_per_metric_ton / 1000.0
usd_per_gram = usd_per_kg / 1000.0
print({
"date": data.get("date"),
"timestamp": data.get("timestamp"),
"usd_per_oz": usd_per_oz,
"usd_per_kg": usd_per_kg,
"usd_per_metric_ton": usd_per_metric_ton,
"usd_per_gram": usd_per_gram
})
Notes:
- Always check data["success"] and HTTP status before using rates.
- Compute USD/oz via inverse when USDSTEEL-SC is not returned in your plan.
- Cache results keyed by date and timestamp so you don’t hammer the API. Many integrations refresh on a schedule tied to timestamps in the payload.
Practical implementation details you’ll want on day one
- Units: Metals-API uses troy ounces for metals. Keep a single source of truth for constants: - 1 troy ounce = 31.1034768 grams - 1 kilogram = 32.1507465686 troy ounces - 1 metric ton = 1,000 kilograms ≈ 32,150.7465686 troy ounces
- Base currency handling: With base=USD, metals in rates are in oz per USD; the inverse synthetic code USD{METAL} is USD per oz. Use the inverse directly when available; otherwise compute 1/value.
- Timestamps and timezone: The timestamp is a Unix epoch in seconds (UTC). Align your caching/refresh logic to this clock.
- Weekends/market closures: LME-linked symbols may not update continuously on weekends or holidays. Your pipeline should: - Accept a “stale” date when markets are closed. - Fall back to the latest available business day for charts and settlement logic. - Display the date/time of the quote to users to avoid ambiguity.
- Caching and retries: - Cache by (symbol set, base, timestamp). - Exponential backoff on transient network errors. - Don’t recompute unit conversions repeatedly; store derived USD/kg, USD/ton once per timestamp for downstream systems.
- Rounding and display: - Keep at least 6–8 decimal places internally for USD/oz and conversions; round only at the UI layer or just before posting to accounting/ERP.
- Data validation: - Verify success is true and that required keys exist. - Sanity-check ranges (e.g., USD/oz should be non-negative and within expected bounds for scrap).
Build it into your pricing and analytics
Typical flows you can implement with the two endpoints above:
- Price board: Pull USDSTEEL-SC and render USD/oz, USD/kg, USD/ton with a timestamp banner. Cache until a new timestamp appears.
- Contract indexation: On a scheduled job (e.g., settlement time), fetch USD/oz and store it with the date for audit, then compute line-item adjustments automatically.
- Budget planner: Use convert to turn planned USD spend into troy ounces, then into metric tons to estimate shipments.
- Alerting: Compare the latest USD/oz to a threshold and fire a webhook. To analyze ranges or multi-day moves, consider time-series endpoints in the Documentation.
Why this fits modern metals tech stacks
Digitally native pricing—especially for traded benchmarks like STEEL-SC—benefits from normalized units (USD/oz), deterministic conversions, and timestamped payloads. With two calls you can power dashboards, auto-hedging rules, embedded procurement tools in ERPs, and lightweight research notebooks. If you’re exploring market structure or contract specs, see LME’s site for contract context: London Metal Exchange.
To explore additional endpoints, rate representations, and response formats beyond this walkthrough, start here: Metals-API Documentation.
Troubleshooting and edge cases
- Missing inverse code: If USDSTEEL-SC isn’t returned in your payload, compute USD/oz = 1 / rates["STEEL-SC"].
- Unit field absent: If the “unit” field isn’t present, metals are still in troy ounces. Keep unit assumptions centralized in your codebase.
- Partial symbol sets: If you query multiple symbols, validate that each key exists before use; handle absent ones gracefully.
- Backfilling: For research or charting, use historical or time-series endpoints. Respect business-day gaps in the calendar.
- Operational safety: Log the full response (minus the key) on failures to aid support; include timestamp and requested symbols for reproducibility.
FAQ
Q: How do I get USD per troy ounce for STEEL-SC in one call?
A: Request both STEEL-SC and its inverse with base=USD: symbols=STEEL-SC,USDSTEEL-SC. Then read rates["USDSTEEL-SC"].
Q: I only get STEEL-SC in oz per USD—how do I invert it?
A: Compute USD per oz as 1 / rates["STEEL-SC"]. Keep enough precision (Decimal/float with care).
Q: How do I convert USD/oz to USD/metric ton?
A: Multiply USD/oz by 32,150.7465686 (troy ounces per metric ton). For kilograms, divide the ton value by 1,000.
Q: What timezone is the “date” field?
A: The date aligns to UTC. Use the epoch “timestamp” for precise cache control across timezones.
Q: Is there a free trial?
A: No. To start, create an account and obtain an API key via the Register page.
Ready to integrate STEEL-SC into your stack? Get an API key on the Register page, review the MCP program if you need managed connectivity, and confirm symbol behavior on the Symbols page. Then wire the latest and convert endpoints into your pricing job and deploy.