Última cotización servida: 15/7/26, 22:30 (hora peninsular)

API de precios del petróleo

Una llamada REST y tienes el Brent, el WTI y más de 20 materias primas energéticas en JSON. Sin contratos, sin comerciales y sin terminal de 24.000 dólares al año.

Brent

Referencia internacional
$85.70

USD por barril

by_code=BRENT_CRUDE_USD

WTI

Referencia estadounidense

USD por barril

by_code=WTI_CRUDE_USD

Las cifras de arriba salen de esta misma llamada

GET /v1/prices/latest?by_code=BRENT_CRUDE_USD $85.70
Clave API gratuita

Tu primera llamada, en dos minutos

Regístrate, copia tu clave del panel y lanza esto. No hay pasos intermedios: un endpoint, una cabecera y un parámetro.

curl
curl "https://api.oilpriceapi.com/v1/prices/latest?by_code=BRENT_CRUDE_USD" \
  -H "Authorization: Token YOUR_API_KEY" \
  -H "Content-Type: application/json"
Respuesta (JSON) — el ejemplo lleva valores ilustrativos
{
  "status": "success",
  "data": {
    "price": 67.91,
    "code": "BRENT_CRUDE_USD",
    "currency": "USD",
    "created_at": "2026-07-14T09:35:12.000Z"
  }
}

Fíjate en created_at: es la marca de tiempo del propio dato, no la de tu petición. Guárdala. Es lo que te permite saber si estás sirviendo una cotización fresca o una de hace tres horas.

Python (requests)
import requests

API_KEY = "YOUR_API_KEY"
URL = "https://api.oilpriceapi.com/v1/prices/latest"

respuesta = requests.get(
    URL,
    headers={"Authorization": f"Token {API_KEY}"},
    params={"by_code": "BRENT_CRUDE_USD"},
    timeout=10,
)
respuesta.raise_for_status()

datos = respuesta.json()["data"]
print(f"{datos['code']}: {datos['price']} {datos['currency']}")
print(f"Marca de tiempo del dato: {datos['created_at']}")
JavaScript (fetch)
const API_KEY = process.env.OILPRICEAPI_KEY;

async function obtenerPrecio(codigo) {
  const url = new URL("https://api.oilpriceapi.com/v1/prices/latest");
  url.searchParams.set("by_code", codigo);

  const respuesta = await fetch(url, {
    headers: { Authorization: `Token ${API_KEY}` },
  });

  if (!respuesta.ok) {
    throw new Error(`La API respondió ${respuesta.status}`);
  }

  const { data } = await respuesta.json();
  return data;
}

const brent = await obtenerPrecio("BRENT_CRUDE_USD");
console.log(brent.price, brent.currency, brent.created_at);
Serie histórica (mismo patrón, otro endpoint)
curl "https://api.oilpriceapi.com/v1/prices/historical?by_code=WTI_CRUDE_USD&interval=monthly" \
  -H "Authorization: Token YOUR_API_KEY"

El parámetro interval admite daily, weekly y monthly. Más sobre el histórico del crudo.

Códigos de materias primas

El mismo parámetro by_code sirve para todas las series. Estos son los principales; el catálogo cubre además productos refinados, combustibles marinos y otras referencias energéticas.

CódigoMateria primaDetalleUnidad
BRENT_CRUDE_USDBrentReferencia internacional, mar del NorteUSD/barril
WTI_CRUDE_USDWTIReferencia estadounidense, entrega en CushingUSD/barril
URALS_CRUDE_USDUralsMezcla de exportación rusa, cotiza con descuento sobre el BrentUSD/barril
NATURAL_GAS_USDGas naturalHenry HubUSD/MMBtu

Errores y límites de tasa

CódigoQué significa y qué hacer
200Todo bien. El cuerpo trae status: "success" y el objeto data.
401Clave ausente o inválida. Revisa que la cabecera sea exactamente Authorization: Token TU_CLAVE.
429Has superado la cuota de tu plan. La cabecera Retry-After indica cuántos segundos esperar antes de reintentar.
5xxError del lado del servidor. Reintenta con retroceso exponencial y cachea la última respuesta buena para no dejar tu interfaz en blanco.

Cómo no chocar con el límite

Cachea del lado del servidor. Las cotizaciones se actualizan cada 5 minutos: sondear cada segundo solo quema tu cuota y no te da nada nuevo.
Pide solo lo que uses. Un by_code concreto en lugar del catálogo entero.
Respeta el 429. Reintentar de inmediato tras un 429 es la forma más rápida de encadenar más 429.
Nunca en el cliente. Tu clave va en una variable de entorno del servidor. Si viaja al navegador, la has publicado.

Por qué integrar esta API

Simple de verdad

Un endpoint REST, una cabecera de autenticación y JSON de vuelta. Sin SDK obligatorio, sin OAuth, sin sesiones. Si sabes usar curl, ya sabes usar esta API.

Cobertura energética

Crudo, gas natural, productos refinados y combustibles marinos, todos con el mismo patrón de llamada. Y la serie histórica desde 2020 para las referencias principales.

Empezar cuesta cero

Nivel gratuito de 100 solicitudes al mes, sin tarjeta. Y una prueba de 7 días con 10.000 solicitudes para evaluarla con volumen real antes de pagar nada. Ver los planes.

Preguntas frecuentes

¿Cómo obtengo el precio del petróleo desde una API?

Con una petición GET a https://api.oilpriceapi.com/v1/prices/latest, pasando el código de la materia prima en el parámetro by_code (por ejemplo, BRENT_CRUDE_USD) y tu clave en la cabecera Authorization con el formato 'Token TU_CLAVE'. La respuesta es JSON e incluye el precio, el código, la divisa y la marca de tiempo del propio dato. No hace falta SDK: sirve cualquier cliente HTTP.

¿Hay un nivel gratuito?

Sí: 100 solicitudes al mes gratis, sin tarjeta de crédito. Además, al registrarte tienes una prueba de 7 días con 10.000 solicitudes para evaluar la API con volumen real antes de decidir nada.

¿Qué autenticación usa la API?

Autenticación por clave en cabecera. Se envía en cada petición como 'Authorization: Token TU_CLAVE'. La clave se genera y se regenera desde tu panel. Consérvala en una variable de entorno del servidor y nunca la incrustes en código de cliente ni la subas a un repositorio.

¿Qué materias primas cubre la API?

Además del Brent (BRENT_CRUDE_USD) y el WTI (WTI_CRUDE_USD), la API cubre el Urals, el gas natural, productos refinados como la gasolina, el gasóleo o el queroseno de aviación, combustibles marinos y varias referencias más. Cada serie se identifica por su código y se pide con el mismo parámetro by_code.

¿Cómo consulto la serie histórica?

Con el endpoint /v1/prices/historical, indicando el código en by_code y el intervalo en interval (diario, semanal o mensual), y acotando el rango de fechas si lo necesitas. La serie histórica arranca en 2020 para las referencias principales; la cobertura varía según la materia prima y la fuente.

¿Qué códigos de error devuelve la API?

Una petición correcta devuelve 200 con un cuerpo cuyo campo status es 'success'. Un 401 significa que la clave falta o no es válida. Un 429 indica que has superado el límite de tu plan: la cabecera Retry-After te dice cuántos segundos esperar. Los errores 5xx son del servidor y conviene reintentarlos con retroceso exponencial.

¿Cuáles son los límites de tasa?

El límite depende de tu plan y se cuenta por solicitudes mensuales: el nivel gratuito son 100 al mes y los planes de pago escalan desde ahí. Si superas la cuota, la API responde 429. En la página de precios está el detalle actualizado de cada plan.

Tu primera llamada, ahora

Regístrate, copia la clave y pega el curl de arriba. Nivel gratuito de 100 solicitudes al mes, sin tarjeta.

Crear cuenta gratis