Precios del oro por quilate: 24K, 22K, 18K y cómo calcularlos
Qué significan 24K, 22K y 18K, cómo se relacionan con leyes como 916 y 750, cómo calcular el precio por gramo del oro por quilate y cómo obtenerlo de una API.
Quilates y pureza
En el oro, el quilate mide la pureza, no el peso. El oro puro tiene 24 quilates, así que el contenido de oro de una aleación es su número de quilates dividido entre 24. El oro de 18 quilates tiene 18 partes de oro y 6 de otros metales, como plata, cobre, zinc o paladio, que endurecen la aleación, cambian su color y abaratan su coste.
En español, quilate designa tanto la pureza del oro (K o kt) como la unidad de 200 miligramos con la que se pesan las piedras preciosas (ct). El inglés estadounidense las distingue («karat» para la pureza, «carat» para el peso), mientras que el inglés británico suele usar «carat» para ambas. El endpoint de MetalAPI se llama /carat, siguiendo ese uso más amplio, pero devuelve precios del oro por pureza, no por peso de piedras preciosas.
La fórmula que vincula el precio por quilate con el mercado del oro es breve:
precio por gramo del oro de K quilates = precio spot por onza troy ÷ 31,1034768 × K ÷ 24
Este artículo explica cada parte de esa fórmula, muestra cómo calcularla tú mismo y cómo obtenerla de la API, y después analiza qué separa el precio del oro por quilate del precio de una joya terminada.
Pureza en quilates y ley milesimal
Muchos países marcan el oro con su ley milesimal, las partes de oro por cada mil, en lugar del quilate o junto a él. Las dos escalas se corresponden directamente:
| Quilates | Pureza (K ÷ 24) | Contenido de oro | Ley (partes por 1000) |
|---|---|---|---|
| 24K | 1,0000 | 100 % | 1000 (los lingotes son de 999 o 999,9) |
| 23K | 0,9583 | 95,8 % | 958,3 |
| 22K | 0,9167 | 91,7 % | 916,7 (marcado 916) |
| 21K | 0,8750 | 87,5 % | 875 |
| 20K | 0,8333 | 83,3 % | 833,3 |
| 18K | 0,7500 | 75,0 % | 750 |
| 16K | 0,6667 | 66,7 % | 666,7 |
| 14K | 0,5833 | 58,3 % | 583,3 (marcado 585) |
| 12K | 0,5000 | 50,0 % | 500 |
| 10K | 0,4167 | 41,7 % | 416,7 (marcado 417) |
| 9K | 0,3750 | 37,5 % | 375 |
| 8K | 0,3333 | 33,3 % | 333,3 (marcado 333) |
Hay dos detalles importantes al convertir esta tabla en precios:
- Los contrastes son mínimos legales. Una marca 585 significa al menos un 58,5 % de oro, algo más que 14 ÷ 24 = 58,33 %. Cada país fija sus propias normas y tolerancias, así que la ley real de una pieza puede quedar un poco por encima de la fracción del quilate.
- El oro puro no llega a ser exactamente 1,0000. Los lingotes de inversión suelen tener una ley de 999,9 o 999. El precio de 24K en MetalAPI usa una pureza de exactamente 1, lo que lo hace igual al precio spot.
Qué quilates importan depende de dónde vendas. El de 22K y el de 21K son tradicionales en la joyería del sur de Asia y de gran parte de Oriente Medio, el de 18K y el de 14K están muy extendidos en Europa y Norteamérica, y el de 9K es habitual en el Reino Unido. Ofrece los que tus clientes compran realmente.
Calcular tú mismo los precios por quilate
El oro al contado cotiza por onza troy de oro puro. Para obtener un precio por gramo según el quilate, convierte la unidad y después ajusta por la pureza. Con el precio spot de ejemplo de la documentación de MetalAPI, 3997,89 USD por onza troy (un ejemplo, no un precio en vivo):
- Precio por gramo de oro puro: 3997,89 ÷ 31,1034768 = 128,5351 USD.
- Precio por gramo de oro de 22K: 128,5351 × 22 ÷ 24 = 117,8239 USD.
- Precio por gramo de oro de 18K: 128,5351 × 18 ÷ 24 = 96,4014 USD.
El mismo cálculo en JavaScript, con una segunda función para calcular el precio según la ley en lugar del quilate:
const GRAMS_PER_TROY_OZ = 31.1034768;
/** Precio por gramo de oro de un quilataje dado (24 = oro puro). */
export function karatPricePerGram(spotPerTroyOz, karat) {
return (spotPerTroyOz / GRAMS_PER_TROY_OZ) * (karat / 24);
}
/** Precio por gramo con una ley milesimal, como 585 o 916. */
export function finenessPricePerGram(spotPerTroyOz, fineness) {
return (spotPerTroyOz / GRAMS_PER_TROY_OZ) * (fineness / 1000);
}
const spot = 3997.89; // precio de ejemplo, USD por onza troy
for (const k of [24, 22, 21, 18, 14, 10, 9]) {
console.log(`${k}K`, karatPricePerGram(spot, k).toFixed(4));
}
// 24K 128.5351, 22K 117.8239, 21K 112.4683, 18K 96.4014, 14K 74.9788, 10K 53.5563, 9K 48.2007
console.log("585", finenessPricePerGram(spot, 585).toFixed(4)); // 75.1931Parte de un precio spot que ya esté en tu moneda de venta (base=EUR, base=INR, etc.), para que el precio del oro y el tipo de cambio correspondan al mismo momento. Convertir un precio por gramo en dólares con un tipo de cambio obtenido en otro momento añade un error que no tiene nada que ver con el oro.
Si calculas el precio según el contraste y no según el quilate, usa la función de la ley. La diferencia entre 583,3 y 585 es de aproximadamente un 0,3 % del valor del metal: poco por gramo, pero visible en una cadena pesada. Elijas lo que elijas, aplícalo de forma coherente y documéntalo.
Obtener precios por quilate con el endpoint /carat
MetalAPI hace estas cuentas por ti en /carat, disponible en todos los planes de pago, empezando por Lite. Acepta estos parámetros:
carat:24(por defecto),23,22,21,20,18,16,14,12,10,9,8oall.base: la divisa de los precios,USDpor defecto.unit:troy_ozpor defecto;grames la opción habitual en joyería.date: unYYYY-MM-DDopcional para obtener los precios por quilate de un día pasado.
curl "https://metalapi.com/api/v1/carat?carat=22&unit=gram&base=EUR" \
-H "X-API-Key: $METALAPI_KEY"La respuesta, con los valores de ejemplo de la referencia de la API:
{
"success": true,
"carat": "22",
"date": "2026-10-24",
"base": "EUR",
"timestamp": 1792834892,
"rates": {
"XAU22K": { "price": 105.5297, "unit": "gram", "carat": "22", "purity": 0.916667 }
}
}Con carat=all obtienes todos los quilates en una sola solicitud, que cuesta lo mismo que un único quilate. Cada entrada tiene la clave XAU<karat>K e incluye el precio, la unidad, el quilate y la pureza aplicada. Este ejemplo está abreviado:
{
"success": true,
"carat": "all",
"date": "2026-10-23",
"base": "USD",
"timestamp": 1792765800,
"rates": {
"XAU24K": { "price": 128.53515, "unit": "gram", "carat": "24", "purity": 1 },
"XAU22K": { "price": 117.82389, "unit": "gram", "carat": "22", "purity": 0.916667 },
"XAU18K": { "price": 96.401361, "unit": "gram", "carat": "18", "purity": 0.75 },
"XAU14K": { "price": 74.978836, "unit": "gram", "carat": "14", "purity": 0.583333 }
}
}Así se leen todos los quilates en dírhams de los EAU por gramo desde Node.js 18 o posterior:
const params = new URLSearchParams({ carat: "all", unit: "gram", base: "AED" });
const res = await fetch(`https://metalapi.com/api/v1/carat?${params}`, {
headers: { "X-API-Key": process.env.METALAPI_KEY },
});
const data = await res.json();
if (!data.success) throw new Error(`${data.error.code} ${data.error.type}: ${data.error.info}`);
for (const row of Object.values(data.rates)) {
console.log(`${row.carat}K: ${row.price.toFixed(2)} ${data.base} per ${row.unit}`);
}En el plan Free, /carat devuelve el error 106 (plan_restriction) junto con una upgrade_url. Un quilate no admitido devuelve 210 (invalid_carat). En Free puedes aplicar igualmente la fórmula anterior al precio del oro de /latest, con el intervalo de actualización diario del plan Free.
Precios en tu moneda local
Las joyas se compran y se venden en moneda local, así que define base con la divisa de la tienda: INR para rupias, AED para dírhams, TRY para liras, GBP para libras. Funcionan las 57 divisas admitidas, y como el oro y el tipo de cambio proceden de una misma instantánea, las cifras son coherentes entre sí.
# Todos los quilates en rupias indias por gramo
curl "https://metalapi.com/api/v1/carat?carat=all&unit=gram&base=INR" \
-H "X-API-Key: $METALAPI_KEY"
# 22K en liras turcas por gramo en un día pasado
curl "https://metalapi.com/api/v1/carat?carat=22&unit=gram&base=TRY&date=2026-10-01" \
-H "X-API-Key: $METALAPI_KEY"En los mercados que cotizan en tolas, multiplica el precio por gramo por 11,6638038, o el precio por onza troy por 0,375. Un lingote de 10 tolas pesa 116,638 g. El artículo sobre conversión de unidades recoge los factores exactos para tolas, taels y pennyweights.
Tres aspectos prácticos:
- La actualidad depende de tu plan.
/caratdevuelve precios tan recientes como permite tu plan: cada 30 minutos en Lite, cada 10 minutos en Standard y hasta cada 5 segundos en Enterprise. Una tienda que actualiza su tablero de precios unas pocas veces al día no necesita el plan más rápido. - Muestra la marca de tiempo. El campo
timestampindica a clientes y auditores cuándo se tomó el precio. - Fines de semana. El oro al contado deja de cotizar el viernes a las 17:00, hora de Nueva York, y vuelve a abrir el domingo a las 17:00, así que durante el fin de semana los precios por quilate se mantienen en el último precio del viernes.
Del precio por quilate al precio de la joya
El precio por quilate es el valor del oro que contiene la pieza. El precio de una joya terminada suma varios componentes, y la forma de calcularlos varía según el país, las costumbres del sector y el negocio. Los elementos habituales son:
- Valor del metal: peso neto de oro × precio por gramo del quilate. Las piedras, las perlas y otras partes que no son de oro se pesan aparte y se excluyen.
- Hechura: mano de obra y diseño, cobrada por gramo, como porcentaje del valor del metal o como importe fijo por pieza. En algunos mercados también se añade una merma por el metal que se pierde en la fabricación.
- Piedras y otros materiales: con su propio precio.
- Tasas de contrastación o certificación, cuando corresponda.
- Impuestos: IVA, GST o impuesto sobre las ventas. Los tipos y las normas varían según el país, y algunos países tratan el oro de inversión de forma distinta a la joyería. En la UE, por ejemplo, el oro de inversión está sujeto a una exención especial del IVA que no cubre la joyería.
Esta es una calculadora mínima de presupuestos que mantiene separadas esas partes. Usa Decimal en todo momento, para que los céntimos de la factura cuadren:
from dataclasses import dataclass
from decimal import Decimal, ROUND_HALF_UP
CENT = Decimal("0.01")
@dataclass
class QuoteInput:
weight_g: Decimal # peso neto de oro, sin piedras
karat_price_per_g: Decimal # de /carat?unit=gram, en tu divisa
making_per_g: Decimal = Decimal("0") # coste fijo de hechura por gramo
making_pct: Decimal = Decimal("0") # o un porcentaje del valor del metal
stones: Decimal = Decimal("0") # con precio aparte
tax_rate: Decimal = Decimal("0") # IVA, GST o impuesto sobre las ventas de tu jurisdicción
def jewelry_quote(q: QuoteInput) -> dict:
metal = q.weight_g * q.karat_price_per_g
making = q.weight_g * q.making_per_g + metal * q.making_pct
subtotal = metal + making + q.stones
tax = subtotal * q.tax_rate
parts = {"metal": metal, "making": making, "stones": q.stones, "tax": tax, "total": subtotal + tax}
return {k: v.quantize(CENT, rounding=ROUND_HALF_UP) for k, v in parts.items()}
# Datos solo ilustrativos: 10 g de 22K al precio de ejemplo de 117.8239 por gramo,
# una hechura del 12% y un tipo impositivo del 20%.
print(jewelry_quote(QuoteInput(
weight_g=Decimal("10"),
karat_price_per_g=Decimal("117.8239"),
making_pct=Decimal("0.12"),
tax_rate=Decimal("0.20"),
)))Con esos datos, muestra un valor del metal de 1178,24, una hechura de 141,39, unos impuestos de 263,93 y un total de 1583,55. La hechura y el tipo impositivo son valores de ejemplo, no recomendaciones. Si se aplican impuestos, a qué componentes y con qué tipo son preguntas para tu contable o asesor fiscal.
Este artículo explica cálculos. No constituye asesoramiento de inversión, de precios ni fiscal.
Valores de recompra y de fundición
Recomprar oro a los clientes funciona al revés. El punto de partida es el mismo valor del metal, pero debe basarse en la ley realmente medida y no en el quilate marcado:
valor de fundición = peso en gramos × ley ÷ 1000 × precio spot por gramo − descuentos por refinado y manipulación
Los compradores suelen analizar la ley, por ejemplo con fluorescencia de rayos X (XRF) o con pruebas de ácido, porque las piezas antiguas pueden no alcanzar su marca y la soldadura de las cadenas reduce la pureza media. Mantén el descuento como un parámetro explícito y documentado en tu código, en lugar de ocultarlo en un precio spot más bajo, para que se vea con claridad en presupuestos y auditorías.
Usa aquí como precio spot el precio por gramo de 24K (o /latest con unit=gram) y aplica tú mismo la ley medida. Los precios por quilate de /carat suponen la fracción exacta K ÷ 24, que es correcta para poner precio a piezas nuevas por quilate, pero no para un resultado de ensayo como 912.
Lista de comprobación para la implementación
- Solicita
carat=alluna vez y guárdalo en caché durante el intervalo de actualización de tu plan, en lugar de hacer una llamada por quilate o por producto. - Guarda el precio, la marca de tiempo y la pureza utilizada con cada presupuesto y pedido, para poder explicar una cifra más adelante.
- Usa
datepara obtener precios históricos por quilate, por ejemplo cuando recalculas una factura antigua. Precios históricos del oro y la plata mediante API trata los rangos más largos y el almacenamiento local. - Redondea solo al mostrar los valores, con los decimales propios de cada divisa.
- Mantén la clave API en tu servidor. Para mostrar un tablero de precios del oro en la web de una tienda sin escribir código, usa un widget integrable.
- Si solo necesitas un par de quilates, la fórmula aplicada a los datos de
/latestfunciona en todos los planes./caratte ahorra las cuentas y devuelve cifras listas y coherentes en los planes de pago.
La documentación de la API describe todos los parámetros de /carat, la página de precios muestra qué planes lo incluyen y la guía de la API de precios del oro trata las claves, los errores y la caché en general. Para probarlo con tu propio catálogo, regístrate y obtén una clave.
Pruébalo con tus propios datos
Crea una cuenta gratuita y haz tu primera solicitud en menos de dos minutos. 100 solicitudes al mes, sin tarjeta de crédito.
Sigue leyendo
API de precios del oro: la guía completa para desarrolladores
Cómo usar una API de precios del oro: obtén una clave, llámala desde curl, JavaScript y Python, lee bien las cotizaciones y gestiona historial, errores, cuotas y caché.
Cómo añadir un widget del precio del oro en vivo a tu sitio web
Añade un widget del precio del oro en vivo a WordPress, Shopify o HTML: créalo en el panel de MetalAPI, elige símbolos, diseño y tema, y pega dos líneas de código.
Crea una calculadora de precios de joyería con el oro en tiempo real
Crea una calculadora de precios de joyería en el servidor con TypeScript y Python: oro por gramo en tiempo real, quilates, hechura, IVA y una caché que cuida tu cuota.