Getting started with Platinum Apr 2026 (PLJ26) - Per Troy Ounce Convert API for price conversions
You need to price or convert Platinum Apr 2026 (PLJ26) per troy ounce in real time, so you can quote an order, hedge a position, or backfill a dashboard. By the end of this guide, you’ll query PLJ26 with Metals-API, convert between USD and troy ounces, interpret the returned fields correctly, handle the “expired symbol” case, and ship a small integration that caches efficiently and respects units.
What PLJ26 is and why its per–troy-ounce conversion matters
PLJ26 denotes the Platinum April 2026 contract. In data workflows you often need two views of the same price:
- USD per troy ounce (USD/oz): for quoting, invoicing and P&L.
- Troy ounces per USD (oz/USD): for portfolio normalizations and conversion math inside pivoted datasets.
Metals-API returns both when available: the direct oz-per-USD rate under rates.PLJ26 and the inverted USD-per-oz rate under rates.USDPLJ26. This article shows how to read and convert those values safely.
Platinum is foundational to clean energy stacks: fuel cells, hydrogen electrolysis, and catalytic converters. Accurate, programmatic pricing lets you cost platinum-heavy components, model green-technology bills of materials, and automate re-pricing in manufacturing and jewelry e-commerce.
Endpoints used in this guide
We’ll focus on two endpoints that cover the majority of PLJ26 conversion needs:
- Convert:
GET /api/convertto convert an amount between USD and PLJ26 (oz) in a single call. - Latest:
GET /api/latestto fetch the most recent PLJ26 rate, including both oz/USD and USD/oz when available.
For additional endpoints like time series, OHLC, and bid/ask, see the Documentation. To confirm the exact code for platinum contracts or the spot symbol, visit Metals-API Supported Symbols.
Quick conversions with the Convert endpoint
Use /api/convert to perform conversions without writing the math yourself. Two common patterns:
- Quote how many troy ounces PLJ26 you can buy for a USD budget.
- Translate a platinum allocation in ounces into a USD notional.
Convert USD to PLJ26 ounces
curl "https://metals-api.com/api/convert?access_key=YOUR_API_KEY&from=USD&to=PLJ26&amount=25000"
Interpretation:
from=USD,to=PLJ26returns troy ounces (oz) for the given USD amount.- The JSON response includes the
resultin troy ounces and an indicativerateat the server-side timestamp.
Convert PLJ26 ounces to USD
curl "https://metals-api.com/api/convert?access_key=YOUR_API_KEY&from=PLJ26&to=USD&amount=15.5"
Interpretation:
from=PLJ26,to=USDreturns the notional in USD for the specified ounces.- The
unitin conversion responses will clarify whether theresultis “troy ounces” or “USD”.
Tip: Cache the last conversion rate you used and the corresponding timestamp from the Latest endpoint (below) for auditability and consistent downstream math.
Fetch the latest PLJ26 rate (oz/USD and USD/oz)
Use /api/latest to retrieve fresh rates and warnings. You’ll inspect both rates.PLJ26 and (if present) rates.USDPLJ26 for direct USD/oz pricing.
Latest request
curl "https://metals-api.com/api/latest?access_key=YOUR_API_KEY&symbols=PLJ26,USDPLJ26,USD"
Official JSON response (example)
{"success":true,"timestamp":1791245280,"date":"2026-10-06","base":"USD","rates":{"PLJ26":0.00053645190708653,"USD":1,"USDPLJ26":1864.099999999999},"warnings":[{"symbol":"PLJ26","code":410,"type":"expired_symbol","info":"The requested symbol has expired and is no longer available."}]}
What you will use from this payload
base: USD. Rates are expressed relative to USD unless you request another base.rates.PLJ26: 0.00053645190708653 oz per 1 USD (oz/USD).rates.USDPLJ26: 1864.10 USD per 1 oz (USD/oz). This is the number to show as “price per troy ounce”.timestampanddate: When this snapshot was valid. Use for caching keys and reconciliation.warnings: Includesexpired_symbolwhen a contract has matured. You should branch to a fallback (e.g., the next active contract or spot XPT) based on what you find on the Metals-API Supported Symbols page.
Note on inversion: If your payload does not include USDPLJ26, you can invert rates.PLJ26 to compute USD/oz: usd_per_oz = 1 / rates.PLJ26 (handle division-by-zero checks and nullability).
A minimal Python client to compute USD/oz and USD/gram
This snippet requests PLJ26 from /api/latest, reads both oz/USD and USD/oz, computes USD/gram, and demonstrates defensive handling of warnings.
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,
"symbols": "PLJ26,USDPLJ26,USD"
}
r = requests.get(URL, params=params, timeout=10)
r.raise_for_status()
data = r.json()
if not data.get("success", False):
raise RuntimeError(f"Metals-API error: {data}")
base = data.get("base")
ts = data.get("timestamp")
rates = data.get("rates", {})
warnings = data.get("warnings", [])
oz_per_usd = rates.get("PLJ26") # oz per 1 USD
usd_per_oz = rates.get("USDPLJ26") # USD per 1 oz (preferred if present)
# Fallback: invert oz/USD if USD/oz not provided
if usd_per_oz is None and oz_per_usd:
usd_per_oz = 1.0 / oz_per_usd
if usd_per_oz is None:
raise RuntimeError("No USD/oz price available for PLJ26.")
# Convert to USD/gram using 1 troy ounce = 31.1034768 grams
USD_PER_GRAM = usd_per_oz / 31.1034768
print(f"Base: {base}, timestamp: {ts}")
print(f"PLJ26 price: {usd_per_oz:.2f} USD/oz")
print(f"PLJ26 price: {USD_PER_GRAM:.4f} USD/g")
# Handle symbol lifecycle (e.g., expired contract)
for w in warnings:
if w.get("type") == "expired_symbol":
print(f"Warning: {w.get('info')} (symbol={w.get('symbol')}, code={w.get('code')})")
# Example action: switch to an alternative symbol from the Symbols list
# or notify downstream services to roll the contract.
Production notes:
- Cache responses keyed by
symbolsand the returnedtimestamp. Respect your plan’s refresh cadence to avoid polling faster than updates occur (see Documentation for your plan’s update frequency). - Ensure you use troy ounces, not avoirdupois. Conversion: 1 troy ounce = 31.1034768 grams.
- Timezone:
timestampis a Unix epoch (UTC). Format it server-side and log it with the rate to make your pricing reproducible.
Interpreting and validating PLJ26 data
When integrating, verify these invariants each run:
- Base currency: If you didn’t request a different base,
baseis USD. Rates in the payload are per 1 unit of the base. For PLJ26 that meansrates.PLJ26is oz per 1 USD. - Direct USD/oz: Prefer
rates.USDPLJ26when present; it avoids floating-point drift from inversion. - Non-trading days: Weekends and holidays can reuse the last available timestamp. Record the timestamp with your transaction/quote.
- Symbol lifecycle: Futures expire. On
expired_symbol, switch to the next active contract or the spot platinum symbol (verify the current codes on the Metals-API Supported Symbols page) and notify stakeholders of the roll. - Precision: Keep monetary calculations in decimal or integer cents where applicable. Treat oz and grams with appropriate precision to avoid rounding errors.
Building a per–troy-ounce conversion pipeline
Here is a practical pattern you can adopt in applications like ERP item pricing, jewelry e-commerce, and trading tools:
- Call
/api/latestwithsymbols=PLJ26,USDPLJ26. - Read
usd_per_oz = rates.USDPLJ26if present; elseusd_per_oz = 1 / rates.PLJ26. - Compute derived units:
- USD/gram:
usd_per_oz / 31.1034768 - USD/kilogram:
usd_per_oz * 32.1507466(31.1034768 g/oz × 1000 g/kg ÷ g/oz)
- USD/gram:
- Apply product-specific adjustments: fabrication premium, recycling credit, taxes and logistics.
- Cache the result with the
timestampand recalc only when Metals-API updates (or when your business rules require a refresh). - For totals or baskets, use
/api/convertto transform mixed inputs into a single currency/metal before aggregation.
Error handling, caching, and lifecycle management
- Warnings array: Always check
warnings. For PLJ26, you may seeexpired_symbol. Decide whether to roll, block trading, or substitute a benchmark. - Caching: Cache by
symbolsset andtimestamp. If your dashboard refreshes faster than the feed cadence, serve cached values to reduce calls. - Weekend/holiday behavior: Expect the same
timestampuntil markets re-open or the next consolidated update is available. Your UI should show the age of the quote. - Validation: Sanity-check inverses:
- If both
PLJ26andUSDPLJ26are present, validate thatabs((1/PLJ26) - USDPLJ26) <= tolerance.
- If both
- Numerical safety: Use Decimal for pricing pipelines. Round only at display time.
Platinum pricing in clean energy and smart manufacturing
Platinum’s catalytic properties underpin hydrogen fuel cells and electrolyzers. If you build BOM optimizers, procurement bots, or sustainability dashboards, streaming USD/oz and USD/gram into your models allows:
- Live cost rollups for stacks and catalysts with dynamic platinum loads.
- Automated re-pricing when platinum swings, with guardrails that trigger hedges or purchase orders.
- Scenario analysis: evaluate platinum intensity trade-offs in next-gen devices.
For market context and research, see the World Platinum Investment Council’s insights on platinum in hydrogen technologies: World Platinum Investment Council. If you compare vendor quotes vs exchanges, cross-check methodologies and timestamps; if needed, enrich with your own spreads or premiums.
Testing steps you can run now
- Call
/api/latestfor PLJ26 and logtimestamp,rates.PLJ26, andrates.USDPLJ26. - Invert
rates.PLJ26and compare torates.USDPLJ26within a small tolerance. - Run
/api/convertboth directions (USD→PLJ26 and PLJ26→USD) with small amounts and confirm round trips. - Simulate an
expired_symbolpath by inspectingwarningsand switch your symbol via the Supported Symbols list. - Implement a 2-tier cache: in-memory (seconds) and store (minutes) keyed by
symbolsandtimestamp.
Security and operations notes
- Store your access key securely (environment variables or your secrets manager). Rotate if exposed.
- Log request IDs, timestamps, and resolved symbols for traceability of quotes and trades.
- No free trial: plan accordingly for environments (dev/stage/prod) and isolate keys by environment. See the MCP page for commercial program details.
Frequently asked questions
Q: How do I display a human-friendly “price per ounce” for PLJ26?
A: Prefer rates.USDPLJ26 from /api/latest. If it’s not present, compute 1 / rates.PLJ26. Always show the timestamp alongside the quote.
Q: What’s the unit returned by Metals-API for metals?
A: Metals are quoted per troy ounce by default. Convert to grams by dividing USD/oz by 31.1034768.
Q: My response includes an expired_symbol warning for PLJ26. What should I do?
A: Treat it as a lifecycle event. Select the next active platinum contract or use spot platinum as your fallback. Confirm the correct symbol on the Supported Symbols page and update your config.
Q: Can I store rates to reduce calls?
A: Yes. Cache by symbols and timestamp. Many use a short in-memory cache and a longer backing cache. Respect your plan’s update cadence to avoid unnecessary requests.
Q: How do I get historical series to backtest or chart PLJ26?
A: Use time-series or historical endpoints described in the Documentation. Contract availability varies by symbol lifecycle; confirm coverage on the symbols page.
Get your key and ship your PLJ26 integration
Grab an API key and plug the curl and Python examples straight into your pricing service. There’s no free trial; pick a plan that fits your refresh cadence and throughput. Start here: Register. For endpoint details and parameters, keep the Documentation open, and verify contract or spot symbols on the Symbols page.