Brass Shell (BRSH) - Per Ounce Spot Price — Live API Endpoints and Response Formats
Your product, ERP, or trading tool needs to show a live per‑ounce spot price for Brass Shell (BRSH) and use it to quote orders, update SKUs, or run analytics. In this guide you will fetch the BRSH spot from the Metals-API latest endpoint, read the exact field that is already USD per troy ounce, fall back to inversion when needed, and integrate basic caching and unit conversion so you can ship an accurate price panel and downstream calculations.
What “BRSH per ounce” means in Metals-API responses
Metals-API returns rates by default with base=USD. In that mode:
- rates.BRSH = ounces of BRSH per 1 USD (oz/USD)
- rates.USDBRSH = USD per 1 ounce of BRSH (USD/oz)
For a spot widget or pricing flow you usually want USD/oz. If the response includes rates.USDBRSH, use it directly. If you only have rates.BRSH, compute USD/oz as 1 / rates.BRSH.
Units are per troy ounce when working with metals pricing. If you need grams or kilograms for BOMs, convert with 1 troy ounce = 31.1034768 grams.
To confirm codes and naming, consult the live symbol directory: Metals-API Supported Symbols. The API and field shapes are documented in the developer reference: Documentation.
Get the live BRSH spot (USD per troy ounce)
Use the Latest Rates endpoint to fetch BRSH. Keep base=USD (default) so you can read USDBRSH directly when available.
curl request
curl "https://metals-api.com/api/latest?access_key=YOUR_API_KEY&symbols=BRSH,USDBRSH"
Official sample response
{"success":true,"timestamp":1791418080,"date":"2026-10-08","base":"USD","rates":{"BRSH":5,"USD":1,"USDBRSH":0.2}}
How to use these fields:
- timestamp: 1791418080 is a UNIX epoch (seconds, UTC). Cache this value; many apps also display “as of” using the date field.
- base: "USD" confirms the default base currency.
- rates.BRSH: 5 means 5 ounces of BRSH per 1 USD (oz/USD). If USDBRSH were missing, USD/oz = 1 / 5 = 0.2.
- rates.USDBRSH: 0.2 is the per‑ounce spot price you can display or compute with (USD/oz).
Production notes
- Update frequency depends on plan; the latest endpoint refresh cadence (e.g., every 60 minutes or 10 minutes) is plan-specific. Design your polling and caching accordingly.
- Weekends/holidays: industrial metals can have slower updates during market closures. Your job should reuse the last known good rate when no new timestamp arrives, and label the “as of.”
- HTTP/cache: front your calls with an application cache or CDN for read-heavy UIs to reduce request volume and latency spikes.
Python example: read USDBRSH (USD/oz) and convert to grams
import requests
from datetime import datetime, timezone
API_URL = "https://metals-api.com/api/latest"
API_KEY = "YOUR_API_KEY"
SYMBOLS = "BRSH,USDBRSH"
def fetch_brsh_spot():
params = {
"access_key": API_KEY,
"symbols": SYMBOLS # ask for both oz/USD and USD/oz fields
}
r = requests.get(API_URL, params=params, timeout=10)
r.raise_for_status()
data = r.json()
if not data.get("success"):
raise RuntimeError(f"API error: {data}")
ts = int(data["timestamp"])
as_of = datetime.fromtimestamp(ts, tz=timezone.utc)
rates = data.get("rates", {})
# Prefer direct USD per ounce when present
usd_per_oz = rates.get("USDBRSH")
if usd_per_oz is None:
oz_per_usd = rates.get("BRSH")
if not oz_per_usd:
raise RuntimeError("Neither USDBRSH nor BRSH present in response.")
usd_per_oz = 1.0 / float(oz_per_usd)
# Convert to USD/gram for BOM or SKU pricing
TROY_OUNCE_TO_GRAM = 31.1034768
usd_per_gram = usd_per_oz / TROY_OUNCE_TO_GRAM
return {
"as_of_utc": as_of.isoformat(),
"usd_per_oz": usd_per_oz,
"usd_per_gram": usd_per_gram
}
if __name__ == "__main__":
spot = fetch_brsh_spot()
print(f"As of {spot['as_of_utc']}: BRSH = ${spot['usd_per_oz']:.6f} per oz, ${spot['usd_per_gram']:.6f} per gram")
What this does:
- Requests BRSH and USDBRSH, preferring the per‑ounce price directly.
- Falls back to inversion when only BRSH (oz/USD) is available.
- Outputs USD/oz and USD/gram so you can price SKUs by piece weight or lot weight.
Integrate BRSH spot into pricing, quoting, and research
Whether you run a cartridge case e‑commerce catalog, a procurement dashboard, or a research terminal, the same minimal playbook applies:
- Fetch latest BRSH and USDBRSH on a schedule matched to your plan’s refresh cadence. Cache the JSON alongside the UNIX timestamp.
- Display USDBRSH (USD/oz) in UI components. Include “as of” with the rounded UTC timestamp and a hover detail with the full ISO timestamp.
- Convert to your operational unit:
- USD/gram = USDBRSH / 31.1034768
- USD/kg = USDBRSH / 31.1034768 × 1000
- USD/lb (avoirdupois) = USDBRSH × 14.5833333 (since 1 troy ounce ≈ 0.0685714 lb; verify with your finance team if you must reconcile troy vs. avoirdupois conventions)
- Apply scrap or fabrication premiums downstream in your own pricing logic; keep the API spot clean and auditable.
- Persist the raw payload and computed fields so finance can reconcile end-of-day PnL and audit price changes.
Backfill and charting: when you need more than spot
For dashboards and research, you may want to show a trailing line or compute day-over-day change. Metals-API includes historical and time-series endpoints you can call for BRSH to build those features. Keep examples in your code identical to the latest endpoint shape; just read the same BRSH/USDBRSH keys by date.
- Historical Rates endpoint: query a past date for BRSH to snapshot a specific close/day rate.
- Time-Series endpoint: query daily rates between two dates; the response maps dates to rate objects where you can read BRSH and/or USDBRSH the same way you do for spot.
Endpoint parameters and date ranges are documented here: Documentation. Always request the symbol BRSH (and optionally USDBRSH) to keep your logic consistent across endpoints.
Data hygiene, caching, and non-trading days
- Timestamps and timezone: the timestamp field is UNIX seconds in UTC. Standardize all comparisons and SLAs in UTC.
- Weekend/holiday handling: if the timestamp hasn’t advanced since your last poll, reuse the previous payload and label it. Many shops suppress price-change alerts when no new timestamp is present.
- Cache strategy: cache by endpoint+symbol set, keyed by timestamp. A 60–120 second soft TTL often eliminates stampedes in multi-user dashboards while staying within plan refresh windows.
- Precision: carry prices internally as Decimal or integers of micro‑cents if your language supports it; only round for display. The JSON floats are typically adequate for UI but preserve full precision for PnL.
- Error paths: if success=false, keep your last known good price and surface a small badge indicating “stale.” Log the entire error payload for diagnosis.
Why brass data belongs in your “smart” stack
Brass shell pricing sits at the intersection of industrial supply, defense, and sporting goods. Digitizing your price inputs unlocks:
- Automated repricing: recalculate quotes as USDBRSH updates, with per‑SKU gram weights and machining yields baked in.
- Alerting and rules: trigger replenishment orders or margin reviews on percentage moves computed from USDBRSH vs. your moving average.
- Analytics-as-a-service: stream normalized USD/oz and USD/gram into notebooks, BI tools, or internal APIs for downstream consumers.
Metals-API’s JSON format slots cleanly into microservices, data pipelines, and browser apps—no custom transport necessary. See the full parameter and response options in the Documentation, and confirm symbol coverage on the Symbols page.
Plans, keys, and operational setup
- API key: required in every request’s access_key parameter. Store it in a server-side secret vault and do not expose it client-side.
- Refresh cadence: align your polling interval to your plan’s update frequency.
- Pricing: plan details are listed in the customer portal; for example, Copper Monthly is $19.99/mo. For managed access and commercial provisioning, see MCP.
- Registration: create an account to obtain an API key here: Register.
Validation and cross-checks
In production, teams often implement sanity checks before updating displayed prices:
- Delta guards: cap single-tick movement to a percentage based on your historical volatility window to avoid transient spikes in UX.
- Cross source: if your workflow requires it, record a parallel series from a secondary source for reconciliation. Public macro references like FRED can help contextualize broader industrial metals trends (not a tick-by-tick reference).
- Audit trail: archive each JSON payload with request ID and timestamp in object storage for SOX-style traceability.
Common pitfalls and how to avoid them
- Mixing ounce systems: display and compute with troy ounces for pricing; convert explicitly to grams/kg/lb as needed. Don’t assume “ounce” means avoirdupois.
- Forgetting inversion: your per‑ounce price is USDBRSH; if it’s absent, compute 1 / BRSH. Never treat BRSH as USD/oz; it’s oz/USD when base=USD.
- Dropping the timestamp: always store and show the as‑of time. It drives UX trust and avoids confusion during market pauses.
- Unbounded polling: respect your plan’s update cadence; aggressive polling won’t produce fresher data and may just waste requests.
FAQ
Q: Which field is the BRSH per‑ounce spot in USD?
A: Use rates.USDBRSH (USD/oz). If it’s not present, compute USD/oz as 1 / rates.BRSH (since rates.BRSH is oz per USD).
Q: What unit is assumed for “ounce”?
A: Troy ounce for metals pricing. Convert to grams by dividing USD/oz by 31.1034768, or to kg by multiplying USD/gram by 1000.
Q: How often does the BRSH spot update?
A: The latest endpoint’s update frequency depends on your subscription plan. Poll and cache according to the plan’s cadence outlined in the Documentation.
Q: What happens on weekends and holidays?
A: Expect slower or no updates during market closures. Reuse the last known good payload and keep the “as of” timestamp visible in your UI.
Q: Can I request BRSH with other symbols?
A: Yes. Provide a comma-separated list in symbols (e.g., BRSH,USDBRSH). Confirm each code on the Symbols page before deploying.
Ship your BRSH spot integration now: grab an API key on the Register page, confirm symbol coverage on Symbols, and review parameters in the Documentation. For managed commercial provisioning, visit MCP.