Real-Time IBJA Gold 995 PM (IB995PM) - Per 10 Grams Price API - Integration Guide 2026

Metals-API 9 min read
Real-Time IBJA Gold 995 PM (IB995PM) - Per 10 Grams Price API - Integration Guide 2026

You need to display or ingest the latest India IBJA Gold 995 PM benchmark (IB995PM) priced per 10 grams, and you want your app to react immediately to changes—updating product prices, recalculating spreads, or triggering alerts. By the end of this guide, you’ll query IB995PM in real time, interpret the response correctly, and safely transform it to per gram or per troy ounce for downstream systems, with production-grade caching and edge cases covered.

What you’ll build: real-time IBJA Gold 995 PM (per 10 grams) pricing

This walkthrough focuses on a minimal, reliable integration that retrieves the latest IBJA 995 PM per 10g reference price, interprets the USD base correctly, and exposes clean values to your UI, pricing engine, or alerts workflow. We’ll use the Latest endpoint for live updates and point to Historical/Time-Series options for backfills and analytics.

Illustration: Real-Time IBJA Gold 995 PM (IB995PM) - Per 10 Grams Price API - Integration Guide 2026
  • Symbol: IB995PM (IBJA Gold 995 PM benchmark)
  • Unit: per 10 grams (IBJA convention)
  • Base currency in response: USD (API default unless changed)
  • Primary endpoint covered: /api/latest

Before you start, obtain an API key. Metals-API does not offer a free trial. Create your account here: Register. For full parameter details, see the Documentation. Confirm symbol specs on the Symbols page.

Endpoint selection for IB995PM

For live price display and reactive workflows (alerts, quote recalculation), use:

  • Latest Rates Endpoint: get the current IB995PM rate and its USD inverse in a single call.

For backtesting models, intraday reconciliation, or building historical charts, also consider:

  • Historical Rates Endpoint: append a past date (YYYY-MM-DD) to fetch a prior IB995PM rate.
  • Time-Series Endpoint: pull a daily series over a date range for IB995PM.

This guide shows a production-ready Latest call. For historical and timeseries usage, consult the Documentation for exact parameters and limits.

Make a real-time request for IB995PM per 10g

Request both the direct rate (IB995PM) and its USD inverse (USDIB995PM). The inverse is convenient if you price items in USD and want “USD per 10g” directly.

curl "https://metals-api.com/api/latest?access_key=YOUR_API_KEY&symbols=IB995PM,USDIB995PM"

Official sample response (copy/paste safe)

{"success":true,"timestamp":1793146140,"date":"2026-10-28","base":"USD","rates":{"IB995PM":0.00067566854790047,"USD":1,"USDIB995PM":1480.015612843512}}

How to read these fields

  • base: "USD" — all rates are quoted relative to USD.
  • rates.IB995PM: 0.0006756685 — interpretation: 1 USD buys 0.0006756685 “units of IB995PM”. Because IB995PM is “per 10 grams,” this means: USD → 10g gold units.
  • rates.USDIB995PM: 1480.0156128 — interpretation: 1 “unit of IB995PM” (i.e., 10 grams) costs 1480.0156128 USD. This is what most commerce systems need.
  • timestamp: 1793146140 — Unix time in seconds (UTC). Use this to cache and to time-stamp your price.
  • date: "2026-10-28" — the calendar date (UTC) for the snapshot.

Turn the API output into values your system needs

Most downstream systems want one of these:

  • USD per 10 grams (use rates.USDIB995PM directly)
  • USD per gram (divide rates.USDIB995PM by 10)
  • USD per troy ounce (multiply USD per gram by 31.1034768)

Example transformations with the sample payload:

  • USD per 10g = 1480.015612843512
  • USD per gram = 1480.015612843512 / 10
  • USD per troy ounce = (USD per gram) × 31.1034768

Keep at least 6–8 decimal places in intermediate math to avoid rounding drift in markups and P&L. If you show pricing to end users, round only at presentation time.

Production-grade Python example

This script fetches IB995PM, validates success, derives per gram and per troy ounce, and exposes a minimal dict you can feed to your app. It also includes naive caching guidance in comments.

import os
import time
import requests

API_KEY = os.getenv("METALS_API_KEY", "YOUR_API_KEY")
URL = "https://metals-api.com/api/latest"
SYMBOLS = "IB995PM,USDIB995PM"

def fetch_ibja_995pm():
    resp = requests.get(URL, params={"access_key": API_KEY, "symbols": SYMBOLS}, timeout=10)
    resp.raise_for_status()
    data = resp.json()
    if not data.get("success"):
        raise RuntimeError(f"Metals-API error: {data}")
    rates = data["rates"]
    # Core fields
    usd_per_10g = rates["USDIB995PM"]  # USD per 10 grams (IBJA 995 PM)
    per_gram = usd_per_10g / 10.0
    TROY_OUNCE_IN_G = 31.1034768
    usd_per_oz = per_gram * TROY_OUNCE_IN_G

    return {
        "timestamp": data["timestamp"],   # seconds since epoch (UTC)
        "date": data["date"],            # ISO date (UTC)
        "usd_per_10g": usd_per_10g,
        "usd_per_g": per_gram,
        "usd_per_oz": usd_per_oz,
    }

if __name__ == "__main__":
    quote = fetch_ibja_995pm()
    # Example: naive cache TTL. Pick a TTL aligned with your plan's refresh cadence.
    cache_ttl_seconds = 60
    next_refresh = quote["timestamp"] + cache_ttl_seconds
    print(f"IB995PM @ {quote['date']} (ts={quote['timestamp']}): "
          f"${quote['usd_per_10g']:.4f}/10g, ${quote['usd_per_g']:.4f}/g, ${quote['usd_per_oz']:.2f}/oz. "
          f"Next refresh after {time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(next_refresh))} UTC")

Correct units, bases, and conversions (don’t skip this)

  • Unit for IB995PM: per 10 grams. Many gold feeds are per troy ounce by default; IBJA’s per-10g convention is different. Standardize internally (e.g., always store per gram) to avoid confusion.
  • Base currency: USD by default in Metals-API responses. If you price in INR or other currencies, convert from USD in your own FX stack, or explore conversion options in the Documentation.
  • Troy ounces vs grams: 1 troy ounce = 31.1034768 grams. Always use troy ounces for precious metals comparisons, not avoirdupois ounces. See background: Troy weight on Wikipedia.

Operational guidance you’ll want in production

Timestamps, timezones, and market cadence

  • Use timestamp (seconds since epoch, UTC) from the response as your canonical time reference.
  • Display both the human-readable UTC date and your local timezone converted time in UI if users are location-diverse.
  • IBJA PM benchmarks are aligned to Indian market days; updates won’t occur on weekends and certain holidays. Your UI should show “Last updated” rather than implying continuous trading.

Caching to reduce calls and jitter

  • Cache until your plan’s update cadence. For example, if your plan refreshes on a minute boundary, a 60–75 second TTL is typical. Check your account’s refresh interval in the MCP dashboard and documentation.
  • Back off on repeated errors; treat stale cached prices as read-only for display, and block new orders if your policy requires fresh quotes.

Rounding, spreads, and markups

  • Calculate markups on the highest precision value you have (e.g., per gram to 6–8 decimals). Round for presentation only.
  • If you publish buy/sell quotes, compute your own bid/ask around the mid you derive from IB995PM. Keep a stable spread floor to avoid zero-spread flashes on slow updates.

Non-trading days and gaps

  • Expect no new ticks on weekends and Indian public holidays. Your system should detect when the latest date remains unchanged and avoid spamming refresh calls.
  • When generating charts, interpolate or step-hold last value for closed days; don’t mislabel gaps as zeros.

Backfills and analytics with historical data

For research dashboards, P&L reports, or to initialize a chart the first time a user opens a page, you can fetch prior days. The Metals-API historical and time-series endpoints return daily values for supported symbols like IB995PM. The general pattern is:

  • Historical (single day): append the date to the path, include symbols=IB995PM,USDIB995PM, and your access_key.
  • Time-Series (range): specify start_date, end_date, and symbols=IB995PM (and optionally USDIB995PM if you prefer the inverse for simpler math).

Refer to the exact parameter names and date limits in the Documentation. Always normalize units the same way as you do for the Latest endpoint (e.g., convert to per gram in your pipeline) to keep analytics consistent.

IB995PM symbol and field quick reference

Field / Symbol Meaning Practical use
IB995PM IBJA Gold 995 PM benchmark, quoted per 10 grams Used to derive USD per 10g via inverse (USDIB995PM), or to compute USD per gram/oz
USDIB995PM Inverse rate (USD per 10 grams) Directly suitable for e-commerce pricing and P&L in USD
base Base currency for all rates (default USD) Determine how to interpret “rates” values and where to apply FX conversion
timestamp Unix epoch seconds (UTC) of the quote Cache key, freshness checks, audit logging
date UTC date string for the quote UI display, end-of-day reconciliations

Testing checklist before going live

  • Verify symbol availability and unit: check IB995PM on the Symbols page.
  • Assert that USDIB995PM is present in the response; fall back to computing 1 / IB995PM if the inverse was not requested.
  • Normalize prices: store per gram internally; derive per 10g, per oz, and your end-currency at the edge.
  • Implement a cache TTL aligned to your plan’s refresh cadence; log timestamp and date for audit.
  • Handle weekends/holidays gracefully: last-price display, disabled trading if policy requires fresh data.
  • Monitor response structure: check success flag and handle error payloads without crashing pricing.

Why IB995PM matters in digital workflows

Bringing IBJA’s PM benchmark into your stack lets you streamline India-focused pricing with the same rigor you apply to global troy-ounce references. With a consistent per-10g base, you can:

  • Price jewelry SKUs and components directly off USD per 10g, with markups and making charges layered on top.
  • Run analytics comparing IB995PM to other regional references (convert all to USD per gram for apples-to-apples).
  • Automate procurement rules: trigger purchase orders or hedges when USD per 10g hits thresholds.

A modern JSON feed such as Metals-API removes manual steps, enabling charting, alerting, and ERP updates using the same standardized response schema.

Troubleshooting common issues

  • Numbers look inverted: If you expected “USD per 10g” but see a small decimal like 0.000675..., you are looking at IB995PM (units per USD). Request USDIB995PM or invert the rate: usd_per_10g = 1 / IB995PM.
  • Stale price on weekends: This is normal. Show “Last updated” with timestamp; do not overwrite with zero or blank values.
  • Display rounding differences: Perform math in high precision (Decimal or double with care), round at the final UI step only.
  • Missing symbol error: Re-check spelling and availability on Symbols.

Next steps

Integrate the Latest endpoint for IB995PM, add a cache aligned with your update cadence, and standardize your internal unit to gram for clean downstream math. When you’re ready to widen coverage or add backtests, consult the Documentation, verify instrument details on Symbols, and review your plan settings in MCP.

FAQ

Q: How do I get “USD per 10 grams” directly?
A: Request USDIB995PM along with IB995PM. USDIB995PM is already USD per 10g. If you only have IB995PM, compute 1 / IB995PM.

Q: What unit does IB995PM use?
A: Per 10 grams (IBJA convention). Convert to per gram by dividing USD per 10g by 10. Convert to per troy ounce by multiplying USD per gram by 31.1034768.

Q: Why is there both IB995PM and USDIB995PM in rates?
A: IB995PM is quoted as units per USD. USDIB995PM is the inverse, i.e., USD per 10g. Many commerce and ERP systems prefer the inverse for straightforward pricing.

Q: How should I cache the response?
A: Cache using the response timestamp and a TTL aligned to your plan’s update cadence. On errors, serve cached data with a visible “Last updated” indicator and retry with exponential backoff.

Q: Can I backfill IB995PM history?
A: Yes. Use the Historical or Time-Series endpoints for IB995PM. See the exact query parameters and date limits in the Documentation.

Ready to ship your IBJA 995 PM integration? Create your key and start calling the API in minutes: Register. For broader capabilities and operational controls, explore your account’s settings in MCP and reference the full Documentation.