Apariencia
Tipo de cambio
Tipo de cambio del dólar estadounidense (USD → PEN). Todos los endpoints exigen el módulo tipo_cambio; cada llamada exitosa consume 1 consulta.
Fuentes
fuente | Qué es |
|---|---|
sunat | Tipo de cambio oficial de SUNAT: el que se usa en comprobantes y declaraciones. |
sbs | Tipo de cambio SBS – sistema bancario (cierre del día, series del BCRP). |
Formato de cada día
json
{ "fecha": "2026-09-06", "compra": 3.512, "venta": 3.521, "publicado": false, "fecha_publicacion": "2026-09-05" }| Campo | Descripción |
|---|---|
fecha | Día solicitado (YYYY-MM-DD). |
compra, venta | Número (hasta 4 decimales). |
publicado | true si la fuente publicó un valor para ese día. |
fecha_publicacion | Día del valor usado. Igual a fecha cuando publicado es true. |
Días sin publicación (fines de semana y feriados): se completan con el último valor publicado anterior, marcado con publicado: false, que es la regla de SUNAT. Si no hay valor en los 10 días previos, el día se omite. Los días futuros nunca se incluyen.
Por rango de fechas
GET /v1/tipo-cambio · Módulo tipo_cambio
| Parámetro | En | Tipo | Requerido | Descripción |
|---|---|---|---|---|
desde | query | string | Sí | Fecha inicial YYYY-MM-DD. No puede ser futura. |
hasta | query | string | Sí | Fecha final YYYY-MM-DD. Si es posterior a hoy se recorta a hoy. Si es menor que desde, se intercambian. |
fuente | query | string | No | sunat (por defecto) o sbs. |
El rango máximo es de 366 días.
bash
curl "https://api.consultape.pro/v1/tipo-cambio?desde=2026-09-01&hasta=2026-09-07&fuente=sunat" \
-H "Authorization: Bearer $CONSULTAPE_TOKEN"js
const respuesta = await fetch('https://api.consultape.pro/v1/tipo-cambio?desde=2026-09-01&hasta=2026-09-07&fuente=sunat', {
headers: {
Authorization: `Bearer ${process.env.CONSULTAPE_TOKEN}`,
},
});
const datos = await respuesta.json();
if (datos.success) console.log(datos.result);
else console.error(respuesta.status, datos.message);php
<?php
$ch = curl_init('https://api.consultape.pro/v1/tipo-cambio?desde=2026-09-01&hasta=2026-09-07&fuente=sunat');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONSULTAPE_TOKEN')],
CURLOPT_TIMEOUT => 120,
]);
$cuerpo = curl_exec($ch);
$http = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$datos = json_decode($cuerpo, true);
if ($datos['success']) {
print_r($datos['result']);
} else {
echo "Error $http: {$datos['message']}";
}python
import os
import requests
r = requests.get(
"https://api.consultape.pro/v1/tipo-cambio",
params={
"desde": "2026-09-01",
"hasta": "2026-09-07",
"fuente": "sunat",
},
headers={"Authorization": f"Bearer {os.environ['CONSULTAPE_TOKEN']}"},
timeout=120,
)
datos = r.json()
print(datos["result"] if datos["success"] else f"Error {r.status_code}: {datos['message']}")Respuesta:
json
{
"success": true,
"message": "Tipo de cambio SUNAT del 01/09/2026 al 07/09/2026",
"result": {
"fuente": "sunat",
"moneda": "USD",
"desde": "2026-09-01",
"hasta": "2026-09-07",
"items": [
{ "fecha": "2026-09-01", "compra": 3.508, "venta": 3.516, "publicado": true, "fecha_publicacion": "2026-09-01" },
{ "fecha": "2026-09-02", "compra": 3.511, "venta": 3.52, "publicado": true, "fecha_publicacion": "2026-09-02" },
{ "fecha": "2026-09-06", "compra": 3.512, "venta": 3.521, "publicado": false, "fecha_publicacion": "2026-09-05" },
{ "fecha": "2026-09-07", "compra": 3.515, "venta": 3.523, "publicado": true, "fecha_publicacion": "2026-09-07" }
]
}
}Errores:
| HTTP | Mensaje |
|---|---|
| 400 | La fecha 'desde' debe tener el formato AAAA-MM-DD. |
| 400 | El rango máximo es de 366 días. |
| 400 | La fuente debe ser 'sunat' o 'sbs'. |
200 + success:false | No hay tipo de cambio publicado para el rango elegido. |
200 + success:false | No se pudo consultar el tipo de cambio de SUNAT. Intenta en unos minutos. |
Mes completo de SUNAT
GET /v1/tipo-cambio/sunat/{anio}/{mes} · Módulo tipo_cambio
Todos los días del mes (hasta hoy si es el mes en curso).
| Parámetro | En | Tipo | Requerido | Descripción |
|---|---|---|---|---|
anio | ruta | number | Sí | Año, desde 2000. |
mes | ruta | number | Sí | Mes 1 a 12 (acepta 9 o 09). Un mes futuro responde 400 El mes solicitado aún no tiene tipo de cambio. |
bash
curl "https://api.consultape.pro/v1/tipo-cambio/sunat/2026/9" \
-H "Authorization: Bearer $CONSULTAPE_TOKEN"js
const respuesta = await fetch('https://api.consultape.pro/v1/tipo-cambio/sunat/2026/9', {
headers: {
Authorization: `Bearer ${process.env.CONSULTAPE_TOKEN}`,
},
});
const datos = await respuesta.json();
if (datos.success) console.log(datos.result);
else console.error(respuesta.status, datos.message);php
<?php
$ch = curl_init('https://api.consultape.pro/v1/tipo-cambio/sunat/2026/9');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONSULTAPE_TOKEN')],
CURLOPT_TIMEOUT => 120,
]);
$cuerpo = curl_exec($ch);
$http = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$datos = json_decode($cuerpo, true);
if ($datos['success']) {
print_r($datos['result']);
} else {
echo "Error $http: {$datos['message']}";
}python
import os
import requests
r = requests.get(
"https://api.consultape.pro/v1/tipo-cambio/sunat/2026/9",
headers={"Authorization": f"Bearer {os.environ['CONSULTAPE_TOKEN']}"},
timeout=120,
)
datos = r.json()
print(datos["result"] if datos["success"] else f"Error {r.status_code}: {datos['message']}")Respuesta:
json
{
"success": true,
"message": "Tipo de cambio SUNAT de Setiembre 2026",
"result": {
"fuente": "sunat",
"moneda": "USD",
"anio": 2026,
"mes": 9,
"desde": "2026-09-01",
"hasta": "2026-09-30",
"items": [
{ "fecha": "2026-09-01", "compra": 3.508, "venta": 3.516, "publicado": true, "fecha_publicacion": "2026-09-01" }
]
}
}Tipo de cambio de hoy
GET /v1/tipo-cambio/hoy · Módulo tipo_cambio
Tipo de cambio aplicable hoy (hora de Lima) en ambas fuentes. Si hoy no hubo publicación se usa el último valor publicado (publicado: false). Si una fuente falla, su clave viene en null; si fallan ambas, la respuesta es success: false.
Sin parámetros.
bash
curl "https://api.consultape.pro/v1/tipo-cambio/hoy" \
-H "Authorization: Bearer $CONSULTAPE_TOKEN"js
const respuesta = await fetch('https://api.consultape.pro/v1/tipo-cambio/hoy', {
headers: {
Authorization: `Bearer ${process.env.CONSULTAPE_TOKEN}`,
},
});
const datos = await respuesta.json();
if (datos.success) console.log(datos.result);
else console.error(respuesta.status, datos.message);php
<?php
$ch = curl_init('https://api.consultape.pro/v1/tipo-cambio/hoy');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONSULTAPE_TOKEN')],
CURLOPT_TIMEOUT => 120,
]);
$cuerpo = curl_exec($ch);
$http = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$datos = json_decode($cuerpo, true);
if ($datos['success']) {
print_r($datos['result']);
} else {
echo "Error $http: {$datos['message']}";
}python
import os
import requests
r = requests.get(
"https://api.consultape.pro/v1/tipo-cambio/hoy",
headers={"Authorization": f"Bearer {os.environ['CONSULTAPE_TOKEN']}"},
timeout=120,
)
datos = r.json()
print(datos["result"] if datos["success"] else f"Error {r.status_code}: {datos['message']}")Respuesta:
json
{
"success": true,
"message": "Tipo de cambio del 04/10/2026",
"result": {
"fecha": "2026-10-04",
"moneda": "USD",
"sunat": { "fecha": "2026-10-04", "compra": 3.47, "venta": 3.478, "publicado": true, "fecha_publicacion": "2026-10-04" },
"sbs": { "fecha": "2026-10-04", "compra": 3.468, "venta": 3.476, "publicado": false, "fecha_publicacion": "2026-10-02" }
}
}