Panel de Control
API Facturador Electronico • NevadaSunCloud • © 2026
◎ Estado del Sistema
✓
API Online
117h 41m 15s
Uptime
BETA
SUNAT
1.1.0
Version
2026-07-16
Build
15
Endpoints
Entorno DESARROLLO — SUNAT Beta activo • La guardia
SUNAT_ForzarBeta=true asegura que ningun documento llega a SUNAT produccion aunque la empresa tenga nEmpProduccion=1 en BD.
⚡ Accesos Rapidos
Endpoints
Base:
https://www.dev.facturadorapi.nevadasuncloud.com/servicio/ • Respuestas en JSON📝 Transaccion — Operaciones principales
POST
Transaccion/Guardar
Guarda 1 documento y envia a SUNAT. Body: entidad Transaccion completa con LstTransaccionDetalle.
POST
Transaccion/GuardarMasivo
Guarda lista de documentos en BD sin enviar a SUNAT (carga masiva).
GET
Transaccion
Lista todas las transacciones registradas.
GET
Transaccion/Consultar/{ruc}/{serie}/{num}
Consulta documento especifico por RUC emisor + serie + numero.
GET
Transaccion/ConsultarEstado/{ruc}/{serie}/{num}
Retorna el estado electronico actual (int). Ver tabla de codigos.
GET
Transaccion/ConsultaPortal
Listado paginado para el Portal NSC. Requiere
X-Portal-Service-Key; filtra por empresas, estado, fechas, serie y número.GET
Transaccion/DetallePortal/{ruc}/{serie}/{num}
Detalle protegido para el Portal. Usa la clave funcional RUC emisor + serie + número.
⚡ Transaccion — Operaciones SUNAT
POST
Transaccion/ReenviarPortal
Reenvío protegido para el Portal. Body:
{ ruc, serie, numero }; requiere X-Portal-Service-Key y acepta estados pendientes o con error.GET
Transaccion/ReenviarSunat/{ruc}/{serie}/{num}
Endpoint existente de compatibilidad. Las integraciones nuevas deben usar ReenviarPortal.
GET
Transaccion/AnularSunat/{ruc}/{serie}/{num}
Genera y envia la baja/comunicacion de baja a SUNAT segun tipo de documento.
GET
Transaccion/ConsultarTicket/{ruc}/{ticket}
Consulta el ticket devuelto por SUNAT para resumenes de boletas o bajas pendientes.
GET
Transaccion/EnviarCorreoCliente/{ruc}/{serie}/{num}
Genera el PDF del documento y lo envia al email del cliente.
🏛 Empresa
GET
Empresa
Lista todas las empresas emisoras registradas.
POST
Empresa/Guardar
Crea o actualiza datos de una empresa emisora (RUC, certificado, credenciales SOL, ruta).
📋 Codigos de retorno
0
Guardado en BD, pendiente SUNAT1
Enviado y aceptado por SUNAT2
Enviado + PDF generado-1
Error al procesarContrato de la API
JSON de request para
POST Transaccion/Guardar por tipo de documento. Validado contra el XML de SUNAT UBL 2.1.⚠ Nota sobre Transaccion_Id
El campo
El vinculo entre ProductOne y Facturador es por RUC + Serie + Numero, no por ID. Puedes enviar cualquier valor en
Transaccion_Id que envias desde ProductOne NO se usa como clave primaria en la BD del Facturador.
El SP pa_GuardarTransaccion omite ese campo en el INSERT — el Facturador genera su propio IDENTITY autoincrementado.
El vinculo entre ProductOne y Facturador es por RUC + Serie + Numero, no por ID. Puedes enviar cualquier valor en
Transaccion_Id; se recomienda poner el ID de ProductOne como referencia en los logs.
📄 JSON por tipo de documento
Factura Electronica — codigo SUNAT 01. El cliente DEBE ser persona juridica (RUC 11 digitos).
sCliTipoDocumentoSunat="6" obligatorio.{
"Transaccion_Id": 5330, // referencia ProductOne (NO es el ID del Facturador)
"TipoDocumento_Id": 1, // 1 = Factura
"sTDoCodigoSunat": "01", // codigo SUNAT catalogo 01
"sTraSerie": "F001", // prefijo F obligatorio para facturas
"sTraNumero": "31",
"sTraRUCEmpresa": "20607266868",
"Empresa_Id": 1, // ID en BD del Facturador
"Moneda_Id": 1, // 1=Soles 2=Dolares
"sMonDescripcion": "SOLES",
"dTraFecha": "2026-07-12T00:00:00",
"nTraImporteTotal": 1180.00,
"nTraSubTotalSinIGV": 1000.00,
"nTraMontoIGV": 180.00,
"nTraEsGratuito": 0,
"sCliente": "EMPRESA CLIENTE S.A.C.",
"sCliNroIdentidad": "20123456789", // RUC 11 digitos
"sCliTipoDocumentoSunat": "6", // 6=RUC OBLIGATORIO en facturas
"sCliDomicilioFiscal": "AV. REPUBLICA DE PANAMA 3647, SURQUILLO",
"sCliPaisBreve": "PE",
"sTraTextoQR": "20607266868|01|F001|31|180.00|1180.00|2026-7-12|6|20123456789|",
"sTraEmail": "contabilidad@empresa.com",
"sTraObservaciones": "ORDEN DE COMPRA N 001",
"nTipoDocRelacionado": 0, // 0 = sin doc relacionado
"sSerieNumeroRelacionado": "",
"nTraTieneDetraccion": 0,
"LstTransaccionDetalle": [{
"Transaccion_Id": 5330,
"sProNombre": "SERVICIO DE CONSULTORIA",
"nTDeCantidad": 1.00,
"nTDePrecio": 1180.00,
"nTDeBase": 1000.00,
"nTDeIGV": 180.00,
"nTDeSubtotal": 1180.00,
"nTDeEstadoIGV": 1, // 1=Gravado
"sUMeCodigoSunat": "ZZ", // ZZ=servicio NIU=unidad
"sUMeDescripcion": "SERVICIO"
}],
"LstFormaPago": []
}
Boleta de Venta — codigo SUNAT 03. Para consumidor final. Puede ser DNI, CE, o
00000000 para anonimo.{
"Transaccion_Id": 5328,
"TipoDocumento_Id": 2,
"sTDoCodigoSunat": "03",
"sTraSerie": "B001", // prefijo B para boletas
"sTraNumero": "331",
"sTraRUCEmpresa": "20607266868",
"Empresa_Id": 1,
"Moneda_Id": 1,
"sMonDescripcion": "SOLES",
"dTraFecha": "2026-07-12T00:00:00",
"nTraImporteTotal": 45.00,
"nTraSubTotalSinIGV": 38.14,
"nTraMontoIGV": 6.86,
"nTraEsGratuito": 0,
"sCliente": "VICTOR ARTURO NIEVE MAQUI",
"sCliNroIdentidad": "42636221", // DNI 8 digitos
"sCliTipoDocumentoSunat": "1", // 1=DNI | 0=anonimo con 00000000
"sCliPaisBreve": "PE",
"sTraTextoQR": "20607266868|03|B001|331|6.86|45.00|2026-7-12|1|42636221|",
"sTraEmail": "cliente@gmail.com",
"nTipoDocRelacionado": 0,
"sSerieNumeroRelacionado": "",
"LstTransaccionDetalle": [{
"Transaccion_Id": 5328,
"sProNombre": "TELEVISOR LED 75 SONY",
"nTDeCantidad": 1.00, "nTDePrecio": 50.00,
"nTDeBase": 38.14, "nTDeIGV": 6.86, "nTDeSubtotal": 45.00,
"nTDeEstadoIGV": 1, "sUMeCodigoSunat": "NIU", "sUMeDescripcion": "UNIDAD"
}],
"LstFormaPago": []
}
Nota de Credito — codigo SUNAT 07. Anula o descuenta un comprobante emitido. SIEMPRE debe referenciar el doc original con
nTipoDocRelacionado y sSerieNumeroRelacionado. Serie: FC01 (NC de factura) o BC01 (NC de boleta).{
"Transaccion_Id": 5331,
"TipoDocumento_Id": 3,
"sTDoCodigoSunat": "07",
"sTraSerie": "FC01", // FC=NC de factura, BC=NC de boleta
"sTraNumero": "1",
"sTraRUCEmpresa": "20607266868",
"Empresa_Id": 1,
"Moneda_Id": 1,
"sMonDescripcion": "SOLES",
"dTraFecha": "2026-07-12T00:00:00",
"nTraImporteTotal": 1180.00, // monto a descontar
"nTraSubTotalSinIGV": 1000.00,
"nTraMontoIGV": 180.00,
"nTraEsGratuito": 0,
"sCliente": "EMPRESA CLIENTE S.A.C.",
"sCliNroIdentidad": "20123456789",
"sCliTipoDocumentoSunat": "6",
"sCliPaisBreve": "PE",
"nCReCodigoSunat": "01", // Catalogo 9 SUNAT: 01=anulacion 02=error RUC 07=devolucion...
"sCategoriaReclamo": "DEVOLUCION POR ERROR",
"nTipoDocRelacionado": 1, // TipoDocumento_Id del doc original: 1=Factura
"sSerieNumeroRelacionado": "F001-31", // serie-numero del doc original
"sTraTextoQR": "20607266868|07|FC01|1|180.00|1180.00|2026-7-12|6|20123456789|",
"sTraObservaciones": "DEVOLUCION TOTAL FACTURA F001-31",
"LstTransaccionDetalle": [{
"Transaccion_Id": 5331,
"sProNombre": "DEVOLUCION SERVICIO DE CONSULTORIA",
"nTDeCantidad": 1.00, "nTDePrecio": 1180.00,
"nTDeBase": 1000.00, "nTDeIGV": 180.00, "nTDeSubtotal": 1180.00,
"nTDeEstadoIGV": 1, "sUMeCodigoSunat": "ZZ", "sUMeDescripcion": "SERVICIO"
}],
"LstFormaPago": []
}
Nota de Debito — codigo SUNAT 08. Para cargos adicionales sobre un comprobante existente. Serie:
FD01 (ND de factura) o BD01 (ND de boleta).{
"Transaccion_Id": 5332,
"TipoDocumento_Id": 4,
"sTDoCodigoSunat": "08",
"sTraSerie": "FD01", // FD=ND de factura, BD=ND de boleta
"sTraNumero": "1",
"sTraRUCEmpresa": "20607266868",
"Empresa_Id": 1,
"Moneda_Id": 1,
"sMonDescripcion": "SOLES",
"dTraFecha": "2026-07-12T00:00:00",
"nTraImporteTotal": 50.00,
"nTraSubTotalSinIGV": 42.37,
"nTraMontoIGV": 7.63,
"nTraEsGratuito": 0,
"sCliente": "EMPRESA CLIENTE S.A.C.",
"sCliNroIdentidad": "20123456789",
"sCliTipoDocumentoSunat": "6",
"sCliPaisBreve": "PE",
"nCReCodigoSunat": "02", // Catalogo 10 SUNAT: 01=mora 02=penalidad 03=otros...
"sCategoriaReclamo": "PENALIDAD POR INCUMPLIMIENTO",
"nTipoDocRelacionado": 1, // doc original: 1=Factura
"sSerieNumeroRelacionado": "F001-31",
"sTraTextoQR": "20607266868|08|FD01|1|7.63|50.00|2026-7-12|6|20123456789|",
"sTraObservaciones": "PENALIDAD SEGUN CONTRATO",
"LstTransaccionDetalle": [{
"Transaccion_Id": 5332,
"sProNombre": "PENALIDAD POR INCUMPLIMIENTO",
"nTDeCantidad": 1.00, "nTDePrecio": 50.00,
"nTDeBase": 42.37, "nTDeIGV": 7.63, "nTDeSubtotal": 50.00,
"nTDeEstadoIGV": 1, "sUMeCodigoSunat": "ZZ", "sUMeDescripcion": "SERVICIO"
}],
"LstFormaPago": []
}
Guia de Remision — codigo SUNAT 09. Documento de traslado de bienes. Requiere todos los campos de traslado. Serie:
T001.{
"Transaccion_Id": 5333,
"TipoDocumento_Id": 7,
"sTDoCodigoSunat": "09",
"sTraSerie": "T001",
"sTraNumero": "1",
"sTraRUCEmpresa": "20607266868",
"Empresa_Id": 1,
"Moneda_Id": 1,
"sMonDescripcion": "SOLES",
"dTraFecha": "2026-07-12T00:00:00",
"nTraImporteTotal": 500.00,
"nTraSubTotalSinIGV": 423.73,
"nTraMontoIGV": 76.27,
"nTraEsGratuito": 0,
"sCliente": "EMPRESA DESTINATARIA S.A.C.",
"sCliNroIdentidad": "20987654321",
"sCliTipoDocumentoSunat": "6",
"sCliPaisBreve": "PE",
// ---- CAMPOS OBLIGATORIOS DE TRASLADO ----
"sTraCodigoMotivoTraslado": "01", // Cat.20: 01=venta 02=compra 04=traslado entre establecimientos
"sTraMotivoTraslado": "VENTA",
"sTraCodigoUnidadMedidaTraslado": "KGM", // unidad de peso
"nTraPesoBrutoGuiaTraslado": 10.00,
"sTraCodigoModalidadTraslado": "02", // Cat.18: 01=publico 02=privado
"dTraFechaTraslado": "2026-07-12T00:00:00",
"sTraRUCTransportistaTraslado": "20607266868", // RUC del transportista (propio si es privado)
"sTraNombreTransportistaTraslado": "NEVADASUNCLOUD S.A.C.",
"sTraPlacaVehiculoTraslado": "ABC-123",
"sTraDNIConductorTraslado": "42636221",
"sTraCodigoUbigeoPuntoPartidaTraslado": "130101", // ubigeo origen (Trujillo)
"sTraDireccionPuntoPartidaTraslado": "AV. ESPANA 1234, TRUJILLO",
"sTraCodigoUbigeoPuntoLlegadaTraslado": "150101", // ubigeo destino (Lima)
"sTraDireccionPuntoLlegadaTraslado": "AV. JAVIER PRADO 4200, LIMA",
"sTraTextoQR": "20607266868|09|T001|1|76.27|500.00|2026-7-12|6|20987654321|",
"nTipoDocRelacionado": 0,
"sSerieNumeroRelacionado": "",
"LstTransaccionDetalle": [{
"Transaccion_Id": 5333,
"sProNombre": "TELEVISOR LED 75 SONY",
"nTDeCantidad": 2.00, "nTDePrecio": 295.00,
"nTDeBase": 423.73, "nTDeIGV": 76.27, "nTDeSubtotal": 500.00,
"nTDeEstadoIGV": 1, "sUMeCodigoSunat": "NIU", "sUMeDescripcion": "UNIDAD"
}],
"LstFormaPago": []
}
📋 Campos de la entidad Transaccion
| Campo | Tipo | Descripcion | |
|---|---|---|---|
| Transaccion_Id | int | Referencia ProductOne. NO es PK en Facturador (IDENTITY propio) | |
| TipoDocumento_Id | int | REQ | 1=Factura 2=Boleta 3=NC 4=ND 7=GR |
| Empresa_Id | int | REQ | ID de la empresa en BD Facturador (tabla Empresa) |
| Moneda_Id | int | 1=Soles 2=Dolares | |
| sTraRUCEmpresa | string | REQ | RUC de 11 digitos del emisor |
| sTraSerie | string | REQ | F001 factura, B001 boleta, FC01 NC-fact, BC01 NC-boleta, T001 GR |
| sTraNumero | string | REQ | Correlativo numerico sin padding |
| sTDoCodigoSunat | string | REQ | 01=Factura 03=Boleta 07=NC 08=ND 09=GR |
| sMonDescripcion | string | REQ | "SOLES" o "DOLARES" |
| dTraFecha | DateTime | REQ | Fecha de emision ISO 8601 |
| nTraImporteTotal | decimal | REQ | Total del documento (base + IGV) |
| nTraSubTotalSinIGV | decimal | Base imponible sin IGV | |
| nTraMontoIGV | decimal | Monto total de IGV | |
| nTraEsGratuito | int | 0=con valor economico 1=gratuito | |
| sTraObservaciones | string | Texto libre impreso en el PDF | |
| sTraEmail | string | Emails separados por ; para envio PDF |
| Campo | Tipo | Descripcion | |
|---|---|---|---|
| sCliente | string | REQ | Nombre o razon social del receptor |
| sCliNroIdentidad | string | REQ | DNI (8 dig) o RUC (11 dig). "00000000" para anonimo en boletas |
| sCliTipoDocumentoSunat | string | REQ | 0=anonimo 1=DNI 4=CE 6=RUC 7=Pasaporte. FACTURAS: SIEMPRE 6 |
| sCliDomicilioFiscal | string | Direccion fiscal del receptor | |
| sCliPaisBreve | string | Codigo pais ISO: PE |
| Campo | Tipo | Descripcion | |
|---|---|---|---|
| nTraEstadoTransaccionElectronica | int | 0=Pendiente 1=Enviado 2=PDF 3=Email -1=Error | |
| sTraCodigoRespuestaSunat | string | Codigo CDR de SUNAT | |
| sTraRespuestaValidacion | string | Mensaje de respuesta de SUNAT | |
| sTraNroTicket | string | Ticket para consultar resumen de boletas/bajas | |
| sTraTextoQR | string | REQ | RUC|tipo|serie|num|igv|total|fecha|tipoCli|numCli| |
| nCReCodigoSunat | string | Motivo NC (Catalogo 9) o ND (Catalogo 10) | |
| sCategoriaReclamo | string | Descripcion del motivo NC/ND | |
| nTipoDocRelacionado | int | TipoDocumento_Id del doc original (NC/ND: REQ) | |
| sSerieNumeroRelacionado | string | Serie-Numero del doc relacionado (NC/ND: REQ) | |
| nTraTieneDetraccion | int | 0=No 1=Si tiene detraccion | |
| nTraICBPER | int | 1=Aplica ICBPER (bolsas plasticas) |
Array
LstTransaccionDetalle[] — al menos 1 item requerido.| Campo | Tipo | Descripcion | |
|---|---|---|---|
| Transaccion_Id | int | REQ | Referencia ProductOne (igual que la cabecera) |
| sProNombre | string | REQ | Descripcion del producto/servicio |
| nTDeCantidad | decimal | REQ | Cantidad |
| nTDePrecio | decimal | REQ | Precio unitario con IGV |
| nTDeBase | decimal | REQ | Base imponible sin IGV |
| nTDeIGV | decimal | REQ | IGV de la linea |
| nTDeSubtotal | decimal | REQ | Subtotal de la linea |
| nTDeEstadoIGV | int | REQ | 1=Gravado 2=Exonerado 3=Inafecto |
| sUMeCodigoSunat | string | REQ | NIU=unidad ZZ=servicio KGM=kg HUR=hora |
▶ Probar la API
Ejecuta peticiones reales contra
https://www.dev.facturadorapi.nevadasuncloud.com/servicio/. Los datos de prueba son del entorno DESARROLLO.▶ Tester interactivo
URL de la peticion
https://www.dev.facturadorapi.nevadasuncloud.com/servicio/Empresa
Respuesta
// La respuesta aparecera aqui...
📋 Datos de prueba disponibles (entorno DESARROLLO)
| Tipo | RUC | Serie | Numero | Estado |
|---|---|---|---|---|
| Boleta | 20607266868 | B001 | 327 | ENVIADO SUNAT |
| Factura | 20607266868 | F100 | 48 | ENVIADO SUNAT |
Flujo de Envio a SUNAT
Proceso completo desde ProductOne Backend hasta la respuesta de SUNAT.
▶ Pasos del flujo
1
ProductOne Backend → POST Transaccion/Guardar
SQLTransaccionManager.GuardarFacturacionElectronica() — llamada async void (fire & forget). El backend ya respondio al frontend antes de este punto.// async void = fire & forget, no bloquea al usuario dynamic valor = await _APIFacturador.Post(URI + "Transaccion/Guardar", json); int result = Convert.ToInt32(valor); // 0=BD, 1=SUNAT, -1=error
2
Persistencia en BD del Facturador
TransaccionNeg.GuardarAsync() → TransaccionAdo.Guardar() inserta en tablas Transaccion + TransaccionDetalle + FormaPago.3
Seleccion del endpoint SUNAT
Campo
nEmpProduccion de la empresa decide el endpoint. La guardia SUNAT_ForzarBeta=true esta activa.if (nEmpProduccion == 1) // → https://e-factura.sunat.gob.pe (PRODUCCION) else // → https://e-beta.sunat.gob.pe (BETA) ← activo ahora
4
Generacion XML UBL 2.1 + firma digital
DocumentoElectronico.cs construye el XML. Se firma con certificado .p12 de la empresa y se comprime en ZIP con nombre oficial SUNAT.Factura: {RUC}-01-F001-{n}.zip → sendBill (sincrono, respuesta CDR inmediata) Boleta: resumen diario → sendSummary (ticket pendiente) NC/ND: {RUC}-07/08-serie.zip → sendBill o resumen segun tipo Baja: RA-{fecha}-{n}.zip → sendSummary (ticket)
5
Llamada SOAP a SUNAT
Credenciales SOL (
sEmpUsuarioFE / sEmpPasswordFE). Facturas: CDR inmediato. Boletas/bajas: ticket que se consulta luego con ConsultarTicket.6
CDR → actualizar estado → retornar al Backend
SUNAT devuelve CDR (ZIP/XML). Se descomprime, valida y actualiza
nTraEstadoTransaccionElectronica. Se retorna codigo entero a ProductOne que actualiza su propia BD.0
BD ok, SUNAT pendiente1
SUNAT aceptado2
SUNAT + PDF-1
ErrorConfiguracion
Valores activos desde
Web.config > appSettings. Reiniciar el proceso para aplicar cambios.⚙ Entorno activo
Ambiente
DESARROLLO
SUNAT_ForzarBeta
true
Version
v1.1.0
Build Date
2026-07-16
Endpoint SUNAT activo
https://e-beta.sunat.gob.pe:443/ol-ti-itcpfegem-beta/billService
Base URL API
https://www.dev.facturadorapi.nevadasuncloud.com/servicio/
📊 Para cambiar a Produccion
<add key="Ambiente" value="PRODUCCION" /> <add key="SUNAT_ForzarBeta" value="false" /> <add key="AppVersion" value="1.0.2" /> <add key="BuildDate" value="2026-07-12" /> <!-- Tambien descomentar connectionString de produccion -->