Getting started with Platinum Apr 2026 (PLJ26) - Per Troy Ounce Convert API for price conversions

Metals-API 9 min read
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:

Illustration: Getting started with Platinum Apr 2026 (PLJ26) - Per Troy Ounce Convert API for price conversions
  • 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/convert to convert an amount between USD and PLJ26 (oz) in a single call.
  • Latest: GET /api/latest to 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=PLJ26 returns troy ounces (oz) for the given USD amount.
  • The JSON response includes the result in troy ounces and an indicative rate at 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=USD returns the notional in USD for the specified ounces.
  • The unit in conversion responses will clarify whether the result is “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”.
  • timestamp and date: When this snapshot was valid. Use for caching keys and reconciliation.
  • warnings: Includes expired_symbol when 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 symbols and the returned timestamp. 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: timestamp is 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, base is USD. Rates in the payload are per 1 unit of the base. For PLJ26 that means rates.PLJ26 is oz per 1 USD.
  • Direct USD/oz: Prefer rates.USDPLJ26 when 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:

  1. Call /api/latest with symbols=PLJ26,USDPLJ26.
  2. Read usd_per_oz = rates.USDPLJ26 if present; else usd_per_oz = 1 / rates.PLJ26.
  3. 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)
  4. Apply product-specific adjustments: fabrication premium, recycling credit, taxes and logistics.
  5. Cache the result with the timestamp and recalc only when Metals-API updates (or when your business rules require a refresh).
  6. For totals or baskets, use /api/convert to 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 see expired_symbol. Decide whether to roll, block trading, or substitute a benchmark.
  • Caching: Cache by symbols set and timestamp. If your dashboard refreshes faster than the feed cadence, serve cached values to reduce calls.
  • Weekend/holiday behavior: Expect the same timestamp until 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 PLJ26 and USDPLJ26 are present, validate that abs((1/PLJ26) - USDPLJ26) <= tolerance.
  • 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

  1. Call /api/latest for PLJ26 and log timestamp, rates.PLJ26, and rates.USDPLJ26.
  2. Invert rates.PLJ26 and compare to rates.USDPLJ26 within a small tolerance.
  3. Run /api/convert both directions (USD→PLJ26 and PLJ26→USD) with small amounts and confirm round trips.
  4. Simulate an expired_symbol path by inspecting warnings and switch your symbol via the Supported Symbols list.
  5. Implement a 2-tier cache: in-memory (seconds) and store (minutes) keyed by symbols and timestamp.

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.