Services / APIs
One integration for every official lookup you need.
One integration for every lookup against official Peruvian sources. We keep the connection to each authority working; you get stable JSON.
No card needed. The trial plan activates on sign-up.
X-API-Key: tu_token
GET /api/sunat/consulta-ruc/20123456789 200 OK {
"numero": "20123456789",
"nombre_o_razon_social": "EMPRESA DE EJEMPLO S.A.C.",
"tipo_contribuyente": "SOCIEDAD ANONIMA CERRADA",
"nombre_comercial": "EJEMPLO",
…
} - SUNAT tax ID, taxpayer status and exchange rate
- MTC carrier registry, certificates and plates
- MINEM REINFO, mining formalisation
- And whichever you need we integrate new sources on request
Why a platform?
The hard part isn't the first lookup. It's the hundredth.
Public bodies don't publish stable APIs: they change their portals without warning. Keeping those connections alive is continuous work, and it's the work we do.
-
One integration, every source
The same authentication and the same response shape for every lookup. Integrate once and add sources without touching your code.
-
We deal with the paperwork
Public bodies don't publish APIs: their portals have to be read. When they change the HTML, we fix it and your integration keeps working.
-
You don't pay twice for the same data
Lookups whose data doesn't change daily are served from cache. Repeating a recent lookup doesn't count against your plan.
-
Usage control and audit trail
Per-application tokens, per-plan quota and a record of every lookup: what was asked, when, and what came back.
-
Missing the one you need?
We integrate new sources on request. If your process depends on a public portal, we can turn it into an endpoint.
-
We run on it too
Our own ERP uses this platform to validate tax IDs, plates and registrations. It isn't a product we sell without using.
How to integrate
One header and one HTTP request.
No SDK, no dependencies. Every lookup is requested the same way, so adding one doesn't change your code.
- Request your token. We give you access to the dashboard to generate it.
- Add the header. Either one works. The token is generated from the client dashboard.
- Query. This request already works.
X-API-Key: tu_tokenAuthorization: Bearer tu_token
curl -X GET "https://perusoftware.dev/api/sunat/consulta-ruc/20123456789" \
-H "X-API-Key: tu_token" Available today
14 lookups in production.
The catalogue keeps growing. Every plan includes all of them, so a new lookup doesn't change what you pay.
Tax ID lookup
Full taxpayer record: legal name, status, condition, registered address, economic activities and registers.
What it's for: Fill in a new customer's details from their tax ID, without anyone typing them.
Docs and live testerQuick look
Request
curl -X GET "https://perusoftware.dev/api/sunat/consulta-ruc/20123456789" \
-H "X-API-Key: tu_token" -
ruc11-digit tax ID (RUC) · in the path
Response
{
"numero": "20123456789",
"nombre_o_razon_social": "EMPRESA DE EJEMPLO S.A.C.",
"tipo_contribuyente": "SOCIEDAD ANONIMA CERRADA",
"nombre_comercial": "EJEMPLO",
"estado": "ACTIVO",
"condicion": "HABIDO",
"fecha_inscripcion": "12/03/2015",
"direccion": "AV. EJEMPLO NRO 123 URB. MODELO",
"departamento": "LIMA",
"provincia": "LIMA",
"distrito": "MIRAFLORES",
"actividades_economicas": {
"principal": "6201 - PROGRAMACION INFORMATICA",
"secundarias": []
},
"es_buen_contribuyente": false,
"es_agente_de_retencion": false
} Values are examples; field names are the real ones.
Exchange rate
SUNAT's official exchange rate, buy and sell per day. Queried by whole month, not by single date.
What it's for: Convert dollar amounts to soles using the official rate for the day of the transaction.
Docs and live testerQuick look
Request
curl -X POST "https://perusoftware.dev/api/sunat/tipo-cambio" \
-H "X-API-Key: tu_token"
-H "Content-Type: application/json" \
-d '{ "anio": "2026", "mes": "8" }' -
anioYear to query · in the body -
mesMonth, 1 to 12 · in the body
Response
{
"resultado": [
{ "fecha": "01-08-2026", "compra": 3.752, "venta": 3.759 },
{ "fecha": "02-08-2026", "compra": 3.748, "venta": 3.755 }
]
} Values are examples; field names are the real ones.
MTC registration
Registration codes active at the Ministry of Transport for a given tax ID.
What it's for: Verify that a carrier's registration is current before hiring them.
Docs and live testerQuick look
Request
curl -X POST "https://perusoftware.dev/api/mtc/registro" \
-H "X-API-Key: tu_token"
-H "Content-Type: application/json" \
-d '{ "ruc": "20123456789" }' -
rucCompany tax ID (RUC) · in the body
Response
{
"registros_habilitados": ["0000123", "0000456"]
} Values are examples; field names are the real ones.
MTC certificate
Details of the transport certificate tied to a specific plate.
What it's for: Check a vehicle's technical details before assigning it a load.
Docs and live testerQuick look
Request
curl -X POST "https://perusoftware.dev/api/mtc/constancia" \
-H "X-API-Key: tu_token"
-H "Content-Type: application/json" \
-d '{ "ruc": "20123456789", "registro": "0001234", "placa": "ABC-123" }' -
rucCompany tax ID (RUC) · in the body -
registroMTC registration code · in the body -
placaVehicle plate · in the body
Response
{
"item": "1",
"placa": "ABC-123",
"nro_constancia": "0001234-2026",
"categoria": "N3",
"serie_chasis": "9BWZZZ00ZTT000000",
"fabricacion": "2019",
"nro_ejes": "3",
"carga_util": "18000",
"peso_seco": "9000"
} Values are examples; field names are the real ones.
REINFO
MINEM's mining formalisation registry. Returns the mining rights tied to a tax ID and their status.
What it's for: Check whether a mining supplier is registered and where their formalisation stands.
Docs and live testerQuick look
Request
curl -X GET "https://perusoftware.dev/api/reinfo/20123456789" \
-H "X-API-Key: tu_token" -
rucHolder's tax ID · in the path
Response
{
"registros": [
{
"sec": "1",
"ruc": "20123456789",
"nombre": "MINERA DE EJEMPLO S.A.C.",
"codigo_unico": "010012345",
"derecho": "CONCESION DE EJEMPLO 1",
"departamento": "AREQUIPA",
"provincia": "CAYLLOMA",
"distrito": "CAYLLOMA",
"estado": "VIGENTE"
}
]
} Values are examples; field names are the real ones.
Legal representatives
Registered legal representatives of a taxpayer.
What it's for: Check who can sign on a company's behalf before accepting a contract.
Docs and live testerQuick look
Request
curl -X GET "https://perusoftware.dev/api/sunat/consulta-representantes/20123456789" \
-H "X-API-Key: tu_token" -
ruc11-digit tax ID (RUC) · in the path
Response
{
"representantes": [
{
"documento": "DNI",
"numeroDocumento": "12345678",
"nombre": "NOMBRE APELLIDO APELLIDO",
"cargo": "GERENTE GENERAL",
"fechaDesde": "01/01/2020"
}
]
} Values are examples; field names are the real ones.
Enforced tax debt
Debt under enforced collection registered against a tax ID.
What it's for: Assess the risk of a new supplier before extending credit.
Docs and live testerQuick look
Request
curl -X GET "https://perusoftware.dev/api/sunat/consulta-deuda-coactiva/20123456789" \
-H "X-API-Key: tu_token" -
ruc11-digit tax ID (RUC) · in the path
Response
{
"razon_social": "EMPRESA DE EJEMPLO S.A.C.",
"mensaje": "",
"deudas": [
{
"montoDeuda": 12500.00,
"periodoTributario": "202312",
"fechaInicioCobranza": "15/04/2024",
"entidadAsociada": "SUNAT"
}
]
} Values are examples; field names are the real ones.
Taxpayers without operating capacity
Whether a tax ID appears on SUNAT's register of taxpayers without operating capacity.
What it's for: Rule out a supplier whose invoices SUNAT would not allow as tax credit.
Docs and live testerQuick look
Request
curl -X GET "https://perusoftware.dev/api/sunat/ssco/20123456789" \
-H "X-API-Key: tu_token" -
ruc11-digit tax ID (RUC) · in the path
Response
{
"status": 200,
"message": "Exito",
"success": true,
"total": 1,
"data": [
{
"ruc": "20123456789",
"razon_social": "EMPRESA DE EJEMPLO S.A.C.",
"domicilio_fiscal": "AV. EJEMPLO NRO 123 - LIMA",
"resolucion_atribucion_ssco": "0230050012345",
"fecha_emision_resolucion_atribucion": "10/01/2025",
"fecha_resolucion_firme": "25/02/2025",
"documento_representante_legal": "12345678",
"representante_legal": "NOMBRE APELLIDO APELLIDO",
"fecha_publicacion": "01/03/2025"
}
]
} Values are examples; field names are the real ones.
Invoice validation
Checks against SUNAT whether an invoice exists and what state it is in.
What it's for: Validate a supplier's invoice before booking it as tax credit.
Docs and live testerQuick look
Request
curl -X POST "https://perusoftware.dev/api/sunat/consulta-cpe" \
-H "X-API-Key: tu_token"
-H "Content-Type: application/json" \
-d '{ "ruc-consultante": "20123456789", "client-id": "a1b2c3d4-…", "client-secret": "••••••••", "ruc-emisor": "20987654321", "cod-comprobante": "01", "serie": "F001", "numero": "184", "fecha-emision": "15/03/2026", "monto": "1416.00" }' -
ruc-consultanteCredential of your own application registered with SUNAT, you provide it · in the body -
client-idCredential of your own application registered with SUNAT, you provide it · in the body -
client-secretCredential of your own application registered with SUNAT, you provide it · in the body -
ruc-emisorTax ID of the invoice issuer · in the body -
cod-comprobanteDocument type: 01 invoice, 03 receipt · in the body -
serieInvoice series · in the body -
numeroSequential number · in the body -
fecha-emisionIssue date, dd/mm/yyyy · in the body -
montoTotal amount. Invoices and receipts only · in the body
Response
{
"success": true,
"data": {
"estadoCp": "1",
"estadoCpDescripcion": "ACEPTADO",
"estadoRuc": "00",
"estadoRucDescripcion": "ACTIVO",
"condDomiRuc": "00",
"condDomiRucDescripcion": "HABIDO"
}
} Values are examples; field names are the real ones.
Printable tax ID record
The same tax ID record, returned as HTML ready to print or attach.
What it's for: Attach the taxpayer record to a case file without laying it out yourself.
Docs and live testerQuick look
Request
curl -X POST "https://perusoftware.dev/api/sunat/html/consulta-ruc" \
-H "X-API-Key: tu_token"
-H "Content-Type: application/json" \
-d '{ "ruc": "20123456789" }' -
ruc11-digit tax ID (RUC) · in the body
Response
<!DOCTYPE html>
<html lang="es">
<head><title>Ficha RUC 20123456789</title></head>
<body>
<h1>EMPRESA DE EJEMPLO S.A.C.</h1>
<p>RUC 20123456789 · ACTIVO · HABIDO</p>
</body>
</html> Values are examples; field names are the real ones.
Printable enforced debt report
The enforced-debt lookup as HTML ready to print.
What it's for: Keep a printed record of a supplier's debt status at the moment of hiring.
Docs and live testerQuick look
Request
curl -X POST "https://perusoftware.dev/api/sunat/html/consulta-deuda-coactiva" \
-H "X-API-Key: tu_token"
-H "Content-Type: application/json" \
-d '{ "ruc": "20123456789" }' -
ruc11-digit tax ID (RUC) · in the body
Response
<!DOCTYPE html>
<html lang="es">
<head><title>Deuda coactiva 20123456789</title></head>
<body>
<h1>EMPRESA DE EJEMPLO S.A.C.</h1>
<p>No se ha remitido deuda en cobranza coactiva.</p>
</body>
</html> Values are examples; field names are the real ones.
Printable REINFO report
The REINFO lookup as HTML ready to print.
What it's for: Document a third party's mining formalisation status in a case file.
Docs and live testerQuick look
Request
curl -X POST "https://perusoftware.dev/api/reinfo/html" \
-H "X-API-Key: tu_token"
-H "Content-Type: application/json" \
-d '{ "ruc": "20123456789" }' -
ruc11-digit tax ID (RUC) · in the body
Response
<!DOCTYPE html>
<html lang="es">
<head><title>REINFO 20123456789</title></head>
<body>
<h1>EMPRESA DE EJEMPLO S.A.C.</h1>
<p>Registros de formalización minera vigentes.</p>
</body>
</html> Values are examples; field names are the real ones.
MYPE invoice download
Your issued invoices, as PDF or XML, using your SOL credentials.
What it's for: Automatically archive the invoices you issue, without logging into SUNAT's portal.
Docs and live testerQuick look
Request
curl -X POST "https://perusoftware.dev/api/sunat/download/factura/current/{pdf|xml}" \
-H "X-API-Key: tu_token"
-H "Content-Type: application/json" \
-d '{ "ruc-empresa": "20123456789", "usuario-sol": "USUARIO01", "clave-sol": "••••••••", "tipo": "01", "serie": "F001", "numero": "184" }' -
ruc-empresaPart of your own SOL credentials, you provide it · in the body -
usuario-solPart of your own SOL credentials, you provide it · in the body -
clave-solPart of your own SOL credentials, you provide it · in the body -
tipoDocument type: 01 invoice, 03 receipt · in the body -
serieInvoice series · in the body -
numeroSequential number · in the body
Response
HTTP/1.1 200 OK
Content-Type: application/pdf
Content-Disposition: attachment; filename="20123456789-01-F001-184.pdf"
%PDF-1.4 … Values are examples; field names are the real ones.
Series F invoice download
Series F invoices as PDF, XML or JSON, using your SOL credentials.
What it's for: Retrieve the invoice a supplier issued to you and reconcile it with your books.
Docs and live testerQuick look
Request
curl -X POST "https://perusoftware.dev/api/sunat/download/factura/external/{pdf|xml|json}" \
-H "X-API-Key: tu_token"
-H "Content-Type: application/json" \
-d '{ "ruc-empresa": "20123456789", "usuario-sol": "USUARIO01", "clave-sol": "••••••••", "ruc-emisor": "20987654321", "serie": "F001", "numero": "184" }' -
ruc-empresaPart of your own SOL credentials, you provide it · in the body -
usuario-solPart of your own SOL credentials, you provide it · in the body -
clave-solPart of your own SOL credentials, you provide it · in the body -
ruc-emisorTax ID of the invoice issuer · in the body -
serieInvoice series · in the body -
numeroSequential number · in the body
Response
HTTP/1.1 200 OK
Content-Type: application/xml
Content-Disposition: attachment; filename="20987654321-01-F001-184.xml"
<?xml version="1.0" encoding="UTF-8"?>
<Invoice …> Values are examples; field names are the real ones.
Need one that isn't here? If your process depends on a public portal, we can turn it into one more endpoint in the same integration. Tell us which one.
Plans
You pay for volume, not per API.
Every plan includes every lookup, the ones available today and the ones added later. The only difference is how many credits you get.
Free
Free
100 credits · 7 days
To integrate at your own pace and see if it fits.
- Every source, nothing held back
- Lookup history
- Email support
Starter
S/ 19.00/mo
S/ 190.00 per year −17% off
12,000 credits · 30 days
S/ 0.0016 per credit
Accounting practices and teams validating customers daily.
- Every source, nothing held back
- MTC and REINFO included
- Printable HTML records
- Lookup history
- WhatsApp support
Business
S/ 35.00/mo
S/ 350.00 per year −17% off
40,000 credits · 30 days
S/ 0.0009 per credit
Form validation, customer onboarding and recurring MTC or REINFO lookups.
- Every source, nothing held back
- MTC and REINFO included
- Printable HTML records
- Lookup history
- WhatsApp support
Corporate
S/ 65.00/mo
S/ 650.00 per year −17% off
120,000 credits · 30 days
S/ 0.0005 per credit
High volume, batch processing and portfolio clean-up.
- Every source, nothing held back
- MTC and REINFO included
- Printable HTML records
- Lookup history
- WhatsApp support
Nearly every lookup spends 1 credit. Downloading an invoice spends 2.
Prices exclude Peruvian VAT (IGV).
When the quota runs out, the service returns 429 and lookups stop until you renew. There is no per-credit overage charge yet.
Rather we do the integration?
The plans give you API access, which means someone on your side writes the integration. If there is nobody to do it, we do it and leave it running inside your system — your ERP, your website or whatever software you already use.
Quoted case by case, depending on the system and which lookups need wiring in.
Ask for a quotePayment
Pay from your phone and we activate your token.
No payment gateway in between and no surcharge for paying: send the money by Yape, Plin or bank transfer, send us the receipt and we activate your token.
1. What you're paying for
Pick the plan and how often you renew. The total already includes Peruvian VAT.
2. How you pay it
The amount is never pre-filled: type it exactly and the payment matches first time.
You're paying
Reference
Add it to the payment note: it's what lets us recognise the payment without asking you.
Pick the plan and period above to see the exact amount.
Yape / Plin
No feesShow the details
- Phone number
- +51 929 766 373
- Account name
- Carlos Daniel De La Cruz Galvan
The QR is Yape's. From Plin — BBVA, Interbank, Scotiabank and the cajas — search for the number instead. Check the name before confirming.
BCP
No fees from BCPShow the details
- Account (PEN)
- 25595400323098
- CCI (interbank code)
- 00225519540032309881
- Account holder
- Carlos Daniel De La Cruz Galvan
From another bank use the CCI: the transfer still arrives, usually the same day.
Interbank
No fees from InterbankShow the details
- Simple account (PEN)
- 8983216258748
- CCI (interbank code)
- 00389801321625874840
- Account holder
- Carlos Daniel De La Cruz Galvan
From another bank use the CCI: the transfer still arrives, usually the same day.
3. Tell us
Activation isn't automatic: we check the payment and enable the token by hand, during business hours.
or email us at contacto@perusoftware.pe
Monday to Friday, 10:00 – 17:00 (GMT-5)
We will never ask for passwords, verification codes or card details. The payment goes from your app to the company account; this page never handles it.
We issue an electronic invoice for every payment.
Reference
What it can answer.
The same status codes for every lookup. Worth handling from the start, not the first time one shows up in production.
- 200 OK Lookup resolved. Counts one request against the plan.
- 401 Invalid or expired token The authentication header is missing or the token isn't valid.
- 403 No access The plan doesn't cover this service, or the subscription isn't active.
- 404 Not found The lookup ran but returned nothing. It still counts.
- 429 Limit reached The period's lookups have run out.
- 500 Service error The official source failed to answer. Nothing is cached.
Shall we try it with your case?
Tell us what you need to look up. We'll give you trial access so you can validate the integration before paying.
Message us on WhatsApp