Referencia
Consultas de RUC, DNI y tipo de cambio
Consulta por API los datos de un RUC en SUNAT, un DNI en RENIEC y el tipo de cambio de SUNAT del día, con el mismo servicio que usan las pantallas del sistema.
Actualizado el
Tres consultas para completar formularios y validar antes de emitir, con el mismo servicio que usan las pantallas del
sistema. Todas piden el alcance consultas y vienen también con Conectar en el Plan Básico.
| Consulta | Endpoint |
|---|---|
| RUC (SUNAT) | GET /consultas/ruc/{ruc} |
| DNI (RENIEC) | GET /consultas/dni/{dni} |
| Tipo de cambio (SUNAT) | GET /consultas/tipo-cambio?fecha=AAAA-MM-DD |
RUC
El RUC tiene 11 dígitos y empieza con 10, 15, 16, 17 o 20.
curl https://pruebas.sistemafacturacionperu.com/api/v1/consultas/ruc/20601234567 \
-H "Authorization: Bearer $SFP_API_KEY"
<?php
$ch = curl_init('https://pruebas.sistemafacturacionperu.com/api/v1/consultas/ruc/20601234567');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('SFP_API_KEY')],
]);
$ruc = json_decode(curl_exec($ch), true)['data'];
const res = await fetch('https://pruebas.sistemafacturacionperu.com/api/v1/consultas/ruc/20601234567', {
headers: { Authorization: `Bearer ${process.env.SFP_API_KEY}` },
});
const { data: ruc } = await res.json();
r = requests.get(
"https://pruebas.sistemafacturacionperu.com/api/v1/consultas/ruc/20601234567",
headers={"Authorization": f"Bearer {os.environ['SFP_API_KEY']}"},
timeout=30,
)
ruc = r.json()["data"]
{
"success": true,
"data": {
"ruc": "20601234567",
"razon_social": "BODEGA LIMA S.A.C.",
"nombre_comercial": null,
"direccion": "AV. LIMA 1",
"ubigeo": "150101",
"estado": "ACTIVO",
"condicion": "HABIDO",
"agente_de_retencion": false
}
}
Úsalo para:
- completar la razón social y la dirección de la factura sin que tu usuario las escriba;
- avisar si el cliente no está activo o no está habido antes de facturarle;
- saber si el cliente es agente de retención (te retendrá parte del IGV al pagarte).
DNI
curl https://pruebas.sistemafacturacionperu.com/api/v1/consultas/dni/70123456 \
-H "Authorization: Bearer $SFP_API_KEY"
<?php
$ch = curl_init('https://pruebas.sistemafacturacionperu.com/api/v1/consultas/dni/70123456');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('SFP_API_KEY')],
]);
$dni = json_decode(curl_exec($ch), true)['data'];
const res = await fetch('https://pruebas.sistemafacturacionperu.com/api/v1/consultas/dni/70123456', {
headers: { Authorization: `Bearer ${process.env.SFP_API_KEY}` },
});
const { data: dni } = await res.json();
r = requests.get(
"https://pruebas.sistemafacturacionperu.com/api/v1/consultas/dni/70123456",
headers={"Authorization": f"Bearer {os.environ['SFP_API_KEY']}"},
timeout=30,
)
dni = r.json()["data"]
{
"success": true,
"data": {
"dni": "70123456",
"nombre": "PEREZ GOMEZ ANA",
"nombres": "ANA",
"apellido_paterno": "PEREZ",
"apellido_materno": "GOMEZ",
"direccion": null,
"ubigeo": null
}
}
Tipo de cambio
Sin fecha, el de hoy. Úsalo para el factor_tipo_de_cambio de un comprobante en dólares.
curl "https://pruebas.sistemafacturacionperu.com/api/v1/consultas/tipo-cambio?fecha=2026-11-04" \
-H "Authorization: Bearer $SFP_API_KEY"
<?php
$ch = curl_init('https://pruebas.sistemafacturacionperu.com/api/v1/consultas/tipo-cambio?fecha=2026-11-04');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('SFP_API_KEY')],
]);
$cambio = json_decode(curl_exec($ch), true)['data']; // ['fecha' => …, 'compra' => …, 'venta' => …]
const res = await fetch('https://pruebas.sistemafacturacionperu.com/api/v1/consultas/tipo-cambio?fecha=2026-11-04', {
headers: { Authorization: `Bearer ${process.env.SFP_API_KEY}` },
});
const { data: cambio } = await res.json(); // { fecha, compra, venta }
r = requests.get(
"https://pruebas.sistemafacturacionperu.com/api/v1/consultas/tipo-cambio",
params={"fecha": "2026-11-04"},
headers={"Authorization": f"Bearer {os.environ['SFP_API_KEY']}"},
timeout=30,
)
cambio = r.json()["data"]
{ "success": true, "data": { "fecha": "2026-11-04", "compra": 3.712, "venta": 3.741 } }
Errores
| HTTP | code |
Qué pasó |
|---|---|---|
| 404 | no_encontrado |
El RUC o el DNI no existe |
| 422 | validacion |
El número no tiene el formato (11 dígitos el RUC, 8 el DNI) |
| 502 / 503 | consulta_no_disponible, no_disponible |
El servicio de consultas no respondió: reintenta más tarde |
Las consultas cuentan para el límite de 120 llamadas por minuto de tu clave. Si consultas mucho el mismo RUC, guarda el resultado unas horas en tu sistema.