Saltar al contenido
Tarifa anual desde S/ 37 al mes + IGV. Pide tu demo sin costo. Reserva tu demo
Sistema Facturación Perú
Menú del portal

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.

Portal para desarrolladores · ¿Algo no está claro o te falta un ejemplo? Escríbenos y lo mejoramos.