Obtener Tipo de Cambio
Obtiene el tipo de cambio oficial de Banxico para usar en facturas con moneda extranjera.
Endpoint
GET https://api.lummy.io/v1/exchange-rates/for-invoicing
| Entorno | URL |
|---|---|
| Producción | https://api.lummy.io/v1/exchange-rates/for-invoicing |
| Sandbox | https://sandbox.lummy.io/v1/exchange-rates/for-invoicing |
Tipo de cambio oficial
El tipo de cambio proviene de Banxico (Banco de Mexico), que es el requerido por el SAT para facturas en moneda extranjera.
Headers
{
"Authorization": stringrequerido
↳Token de autenticación Bearer (JWT) o API Key para autorizar la solicitud.
}
Query Parameters
{
"currency": string,requerido
↳Código ISO 4217 de la moneda. Ejemplo: USD (Dólar estadounidense), EUR (Euro).
↳Patrón: ^[A-Z]{3}$
"date": stringopcional
↳Fecha en formato YYYY-MM-DD para la cual se requiere el tipo de cambio. Si no se especifica, se utiliza la fecha actual. Nota: Banxico no publica tipos de cambio los fines de semana ni días festivos.
↳Formato: date
}
Ejemplos de Codigo
- cURL
- Node.js (TypeScript)
- Python
- PHP (Guzzle)
# Tipo de cambio USD actual
curl -X GET "https://sandbox.lummy.io/exchange-rates/for-invoicing?currency=USD" \
-H "Authorization: Bearer ${ACCESS_TOKEN}"
# Tipo de cambio EUR de una fecha especifica
curl -X GET "https://sandbox.lummy.io/exchange-rates/for-invoicing?currency=EUR&date=2025-01-15" \
-H "Authorization: Bearer ${ACCESS_TOKEN}"
import axios from 'axios';
interface ExchangeRateResponse {
currency: string;
rate: number;
date: string;
source: string;
}
async function obtenerTipoCambio(
currency: string,
date?: string
): Promise<ExchangeRateResponse> {
const API_URL = 'https://sandbox.lummy.io/exchange-rates/for-invoicing';
const response = await axios.get<ExchangeRateResponse>(API_URL, {
headers: {
'Authorization': `Bearer ${process.env.ACCESS_TOKEN}`,
},
params: { currency, date },
});
console.log(`1 ${currency} = ${response.data.rate} MXN`);
return response.data;
}
obtenerTipoCambio('USD');
import os
import requests
def obtener_tipo_cambio(currency, date=None):
api_url = "https://sandbox.lummy.io/exchange-rates/for-invoicing"
headers = {
"Authorization": f"Bearer {os.getenv('ACCESS_TOKEN')}",
}
params = {"currency": currency}
if date:
params["date"] = date
response = requests.get(api_url, headers=headers, params=params)
response.raise_for_status()
data = response.json()
print(f"1 {currency} = {data['rate']} MXN")
return data
if __name__ == "__main__":
obtener_tipo_cambio("USD")
<?php
require 'vendor/autoload.php';
use GuzzleHttp\Client;
function obtenerTipoCambio(string $currency, ?string $date = null): array
{
$client = new Client([
'base_uri' => 'https://sandbox.lummy.io',
'headers' => [
'Authorization' => 'Bearer ' . getenv('ACCESS_TOKEN'),
],
]);
$query = ['currency' => $currency];
if ($date) {
$query['date'] = $date;
}
$response = $client->get('/exchange-rates/for-invoicing', [
'query' => $query,
]);
$data = json_decode($response->getBody(), true);
echo "1 {$currency} = {$data['rate']} MXN\n";
return $data;
}
obtenerTipoCambio('USD');
Respuestas
Todas las respuestas siguen el formato estándar StandardResponse.
200 OK
{
"requestId": "abc123-def456",
"data": {
"currency": "USD",
"rate": 17.2534,
"date": "2025-01-20",
"source": "BANXICO"
},
"timestamp": "2025-01-20T10:30:00.000Z",
"path": "/exchange-rates/for-invoicing",
"method": "GET"
}
{
"currency": string,requerido
↳Código ISO 4217 de la moneda consultada.
"rate": number,requerido
↳Tipo de cambio publicado por el DOF (Diario Oficial de la Federación) para la fecha especificada. Representa las unidades de MXN por 1 unidad de moneda extranjera.
"date": string,requerido
↳Fecha del tipo de cambio en formato YYYY-MM-DD.
↳Formato: date
"source": stringrequerido
↳Fuente del tipo de cambio. Siempre es BANXICO (Banco de México).
}
400 Bad Request
Moneda no soportada.
{
"requestId": "abc123-def456",
"error": {
"message": "Moneda no soportada: XYZ",
"code": "ValidationError",
"status": 400
},
"timestamp": "2025-01-20T10:30:00.000Z",
"path": "/exchange-rates/for-invoicing",
"method": "GET"
}
404 Not Found
No hay tipo de cambio disponible para la fecha solicitada (dias festivos o fines de semana).
{
"requestId": "abc123-def456",
"error": {
"message": "No hay tipo de cambio disponible para la fecha: 2025-01-18",
"code": "NotFoundException",
"status": 404
},
"timestamp": "2025-01-20T10:30:00.000Z",
"path": "/exchange-rates/for-invoicing",
"method": "GET"
}
Monedas Soportadas
Las monedas mas comunes para facturacion internacional:
| Codigo | Moneda |
|---|---|
USD | Dolar estadounidense |
EUR | Euro |
GBP | Libra esterlina |
CAD | Dolar canadiense |
JPY | Yen japones |
Para ver todas las monedas soportadas, usa el endpoint /exchange-rates/currencies.
Notas Importantes
Uso en Facturas
Cuando emitas una factura en moneda extranjera:
- Obtén el tipo de cambio del dia de la factura
- Usa ese valor en el campo
tipoCambiodel request de factura
const tipoCambio = await obtenerTipoCambio('USD');
const factura = await crearFactura({
// ...otros campos
moneda: 'USD',
tipoCambio: tipoCambio.rate,
});
Dias sin Tipo de Cambio
Banxico no publica tipo de cambio los fines de semana ni dias festivos. En esos casos, el SAT permite usar el tipo de cambio del ultimo dia habil.