Saltar al contenido principal

Registrar

Este método genera y registra una boleta electrónica.

Valores

VariableDescripciónProdDemo
URL_APIURL base de la APIhttps://api.emite.pehttps://api.demo.emite.pe
EMITE_IDIdentificador asignado a la empresaProporcionado por EmiteProporcionado por Emite
EMITE_KEYAPI Key asignada a la empresaProporcionado por EmiteProporcionado por Emite

Request

POST {{URL_API}}/boleta/registrar

Headers

emite_id: {{EMITE_ID}}
emite_key: {{EMITE_KEY}}
Content-Type: application/json

Estructura Body

El objeto documento representa el CPE a generar.

  • cabecera: contiene la información general del comprobante, totales, serie, correlativo, adquiriente, etc.
  • detalle: contiene la lista de ítems o líneas de venta del comprobante.
{
"documento": {
"cabecera": {...},
"detalle": [
{...},
{...}
]
}
}

La estructura completa del body se detalla en la tabla Propiedades Body.

Implementación

curl "{{URL_API}}/boleta/registrar" -X POST \
-H "emite_id: {{EMITE_ID}}" \
-H "emite_key: {{EMITE_KEY}}" \
-H "Content-Type: application/json" \
-d "{\"documento\":{\"cabecera\":{...},\"detalle\":[{...},{...}]}}"

Propiedades Body

PropiedadObligatoriedadTipoDescripción
documento.
cabecera
RequeridoobjectContiene los datos de la cabecera del documento.
documento.
cabecera.
codigoEstablecimiento
Requeridostring
Tamaño: [4].
Caracteres: [0-9].
Código del establecimiento anexo desde donde se emite el comprobante. Si se emite desde el establecimiento principal o casa matriz el código es 0000
documento.
cabecera.
serie
Requeridostring
Tamaño: [4]
Contiene la serie del documento, debe comenzar por B.
documento.
cabecera.
correlativo
Requeridointeger
Tamaño: [1...8]
Contiene el correlativo del documento.
documento.
cabecera.
fechaEmision
Requeridostring
Tamaño: [10]
Formato: YYYY-MM-DD
Contiene la fecha de emisión del documento.
documento.
cabecera.
horaEmision
Opcionalstring
Tamaño: [8]
Formato: HH:MM:SS
Contiene la hora de emisión del documento.
documento.
cabecera.
fechaVencimiento
Opcionalstring
Tamaño: [10]
Formato: YYYY-MM-DD
Contiene la fecha de vencimiento del documento.
documento.
cabecera.
tipoMoneda
Requeridostring
Tamaño: [3]
Catálogo SUNAT: 02
Contiene el código del tipo de moneda del documento.
documento.
cabecera.
tipoCambio
Condicional
Requerido si tipo de moneda es diferente de PEN
string
Tamaño: [1...9]
Formato: Decimal
Enteros: [1...2]
Decimales: [3...6]
Contiene el tipo de cambio.
documento.
cabecera.
numeroOrden
Opcionalstring
Tamaño: [1...20]
Contiene el número de la orden o servicio.
documento.
cabecera.
tipoOperacion
Requeridostring
Tamaño: [2]
Valor: 01
Catálogo EMITE: 01
Tipo de operación del documento, para boletas solo aplica el tipo venta interna (01).
documento.
cabecera.
adquiriente
RequeridoobjectInformación de la Persona Natural a quien se emite el documento.
documento.
cabecera.
adquiriente.
numeroIdentidad
Requeridostring
Si tipo de identidad es 1: Numérico hasta 8 dígitos
Si tipo de identidad es diferente de 1: Alfanumérico hasta 15 caracteres
Contiene el número de identidad.
documento.
cabecera.
adquiriente.
tipoIdentidad
Requeridostring
Tamaño: [1]
Catálogo SUNAT: 06
Tipo de documento de identidad, para boletas el valor debe ser diferente de 6. Si el importe total es mayor a 700 soles se deben agregar los datos del adquiriente y el tipo de identidad debe ser diferente de 0.
documento.
cabecera.
adquiriente.
nombre
Requeridostring
Tamaño: [1...100]
Razón social.
documento.
cabecera.
adquiriente.
direccion
RequeridoobjectContiene los datos de la dirección de la Persona Natural.
documento.
cabecera.
adquiriente.
direccion.
descripcion
Requeridostring
Tamaño: [1...100]
No se permite solo espacios en blanco
Dirección exacta (en caso de no contar con la dirección puede ser -).
documento.
cabecera.
adquiriente.
email
OpcionalstringEmail de la persona. A este email se notificará el documento.
documento.
cabecera.
adquiriente.
placaVehiculo
Opcionalstring
Tamaño: [6...8]
Solo letras y números
Sin espacios en blanco
Sin carácteres especiales
Placa del vehículo.
documento.
cabecera.
igv
RequeridoobjectContiene los datos del IGV.
documento.
cabecera.
igv.
monto
Requeridostring
Tamaño: [1...15]
Formato: Decimal
Enteros: [1...12]
Decimales: 2
Importe total del IGV.

igv.monto = [((Σ(detalle[i].igv.monto), desde i = 0 hasta i = n) - (Σ(anticipos[i].montoIgv), desde i = 0 hasta i = n)) redondeado a 2 decimales].
documento.
cabecera.
igv.
montoGratuito
Condicional
Requerido si existe al menos un ítem de venta con afectación gratuita
string
Tamaño: [1...15]
Formato: Decimal
Enteros: [1...12]
Decimales: 2
Indica el monto del impuesto como crédito fiscal para el cliente.

igv.montoGratuito = [(Σ(detalle[i].igv.montoGratuito), desde i = 0 hasta i = n) redondeado a 2 decimales].
documento.
cabecera.
icbper
Condicional
Requerido si existe al menos un ítem de venta sujeto al ICBPER
objectContiene los datos del ICBPER (Impuesto al Consumo de las Bolsas de Plástico).
documento.
cabecera.
icbper.
monto
Condicional
Requerido si existe al menos un ítem de venta sujeto al ICBPER
string
Tamaño: [1...15]
Formato: Decimal
Enteros: [1...12]
Decimales: 2
Importe total del ICBPER (cantidad total de unidades de productos sujetos al ICBPER por tasa actual del ICBPER).

icbper.monto = [(icbper.cantidad × factorICBPER) redondeado a 2 decimales].
documento.
cabecera.
icbper.
cantidad
Condicional
Requerido si existe al menos un ítem de venta sujeto al ICBPER
integerIndica la cantidad total de unidades de productos sujetos al ICBPER.
documento.
cabecera.
importes
RequeridoobjectContiene los montos globales del documento.
documento.
cabecera.
importes.
importeTotal
Requeridostring
Tamaño: [1...15]
Formato: Decimal
Enteros: [1...12]
Decimales: 2
Importe total del documento.

importes.importeTotal = [(operacionGravada + operacionInafecta + operacionExonerada + igv.monto + icbper.monto + importes.otrosCargosNAB) redondeado a 2 decimales].
documento.
cabecera.
importes.
descuentosGlobales
Condicional
Requerido si se aplica descuento global a la base imponible
string
Tamaño: [1...15]
Formato: Decimal
Enteros: [1...12]
Decimales: 2
Descuento global aplicado a la base imponible del documento (importe sin IGV).
documento.
cabecera.
importes.
otrosCargosNAB
Condicional
Requerido si se aplican otros cargos al total del documento
string
Tamaño: [1...15]
Formato: Decimal
Enteros: [1...12]
Decimales: 2
Importe total de otros cargos que no afectan la base imponible.
documento.
cabecera.
importes.
valorAnticipado
Condicional
Requerido si se trata de un cierre de anticipos
string
Tamaño: [1...15]
Formato: Decimal
Enteros: [1...12]
Decimales: 2
Sumatoria de importes totales de los anticipos (no incluye IGV).

importes.valorAnticipado = [(Σ(anticipos[i].operacionGravada + anticipos[i].operacionExonerada + anticipos[i].operacionInafecta), desde i = 0 hasta i = n) redondeado a 2 decimales].
documento.
cabecera.
importes.
importeAnticipado
Condicional
Requerido si se trata de un cierre de anticipos
string
Tamaño: [1...15]
Formato: Decimal
Enteros: [1...12]
Decimales: 2
Sumatoria de importes totales de los anticipos (incluye IGV).

importes.importeAnticipado = [(Σ(anticipos[i].operacionGravada + anticipos[i].operacionExonerada + anticipos[i].operacionInafecta + anticipos[i].montoIgv), desde i = 0 hasta i = n) redondeado a 2 decimales].
documento.
cabecera.
anticipos
Condicional
Requerido si se trata de un cierre de anticipos
array[object]Lista de documentos de anticipo.
documento.
cabecera.
anticipos[i].
tipoDocumento
Condicional
Requerido si se trata de un cierre de anticipos
string
Tamaño: [2]
Catálogo SUNAT: 01
Tipo de documento del anticipo (debe ser del mismo tipo que el del documento de cierre).
documento.
cabecera.
anticipos[i].
serie
Condicional
Requerido si se trata de un cierre de anticipos
string
Tamaño: [4]
Serie del documento de anticipo.
documento.
cabecera.
anticipos[i].
correlativo
Condicional
Requerido si se trata de un cierre de anticipos
integer
Tamaño: [1...8]
Correlativo del documento de anticipo.
documento.
cabecera.
anticipos[i].
fechaEmision
Condicional
Requerido si se trata de un cierre de anticipos
string
Tamaño: [10]
Formato: YYYY-MM-DD
Fecha de emisión del documento de anticipo.
documento.
cabecera.
anticipos[i].
fechaPago
Condicional
Requerido si se trata de un cierre de anticipos
string
Tamaño: [10]
Formato: YYYY-MM-DD
Fecha del pago del anticipo.
documento.
cabecera.
anticipos[i].
horaPago
Condicional
Requerido si se trata de un cierre de anticipos
string
Tamaño: [8]
Formato: HH:MM:SS
Hora del pago del anticipo.
documento.
cabecera.
anticipos[i].
valorPrepagado
Condicional
Requerido si se trata de un cierre de anticipos
string
Tamaño: [1...15]
Formato: Decimal
Enteros: [1...12]
Decimales: 2
importe pagado del anticipo sin incluir IGV.
documento.
cabecera.
anticipos[i].
importePrepagado
Condicional
Requerido si se trata de un cierre de anticipos
string
Tamaño: [1...15]
Formato: Decimal
Enteros: [1...12]
Decimales: 2
importe pagado del anticipo incluyendo IGV.
documento.
cabecera.
montoEnLetras
RequeridostringImporte total en letras.
documento.
cabecera.
guiasRemision
Opcionalarray[object]Lista de Guías de Remisión asociadas al documento.
documento.
cabecera.
guiasRemision[i].
numero
Condicional
Requerido si se agregan guias de remisión
string
Tamaño: [...30]
Formato: [serie]-[correlativo]
Número del documento relacionado.
documento.
cabecera.
guiasRemision[i].
tipo
Condicional
Requerido si se agregan guias de remisión
string
Tamaño: [2]
Catálogo SUNAT: 01
Tipo del documento relacionado (09 o 31).
documento.
cabecera.
operacionGravada
Condicional
Requerido si existe al menos un ítem de venta con afectación gravada
string
Caracteres: [0-9]
Tamaño: [15]
Enteros: [1...12]
Decimales: 2
Monto en decimales de la operación.

operacionGravada = [(((Σ(detalle[i].valorVenta (con afectacion gravada)), desde i = 0 hasta i = n) - (Σ(anticipos[i].operacionGravada), desde i = 0 hasta i = n)) - importes.descuentosGlobales) redondeado a 2 decimales].
documento.
cabecera.
operacionInafecta
Condicional
Requerido si existe al menos un ítem de venta con afectación inafecta
string
Caracteres: [0-9]
Tamaño: [15]
Enteros: [1...12]
Decimales: 2
Monto en decimales de la operación.

operacionInafecta = [((Σ(detalle[i].valorVenta (con afectacion inafecta)), desde i = 0 hasta i = n) - (Σ(anticipos[i].operacionInafecta), desde i = 0 hasta i = n)) redondeado a 2 decimales].
documento.
cabecera.
operacionExonerada
Condicional
Requerido si existe al menos un ítem de venta con afectación exonerada
string
Caracteres: [0-9]
Tamaño: [15]
Enteros: [1...12]
Decimales: 2
Monto en decimales de la operación.

operacionExonerada = [((Σ(detalle[i].valorVenta (con afectacion exonerada)), desde i = 0 hasta i = n) - (Σ(anticipos[i].operacionExonerada), desde i = 0 hasta i = n)) redondeado a 2 decimales].
documento.
cabecera.
operacionGratuita
Condicional
Requerido si existe al menos un ítem de venta con afectación gratuita
string
Caracteres: [0-9]
Tamaño: [18]
Enteros: 15
Decimales: 2
Monto en decimales de la operación.

operacionGratuita = [(Σ(detalle[i].valorVenta (con afectacion gratuita)), desde i = 0 hasta i = n) redondeado a 2 decimales].
documento.
cabecera.
adicionales
Opcionalarray[object]Lista de campos adicionales a agregar en la representación impresa.
documento.
cabecera.
adicionales[i].
codigo
Condicional
Requerido si se agregan adicionales
stringCódigo a consignar en la representación impresa, este código es definido por el usuario.
documento.
cabecera.
adicionales[i].
valor
Condicional
Requerido si se agregan adicionales
stringValor del dato adicional que se imprimirá en la representación impresa según el código asignado.
documento.
cabecera.
observaciones
Opcionalarray[string]
Tamaño: [1...250] por cada posición del arreglo
Descripciones adicionales del documento. Cada posición del arreglo será una nueva línea.
documento.
detalle
Requeridoarray[object]Listado de ítems de venta del documento.
documento.
detalle[i].
orden
Requeridointeger
Tamaño: [1...3]
Número de orden del ítem.
documento.
detalle[i].
descripcion
Requeridostring
Tamaño: [1...250]
Descripción del producto o servicio.
documento.
detalle[i].
multiDescripcion
Opcionalarray[string]
Tamaño: [1...250] por cada posición del arreglo
Descripción adicional del producto o servicio. Cada posición del arreglo será una nueva línea.
documento.
detalle[i].
codigoProducto
Opcionalstring
Tamaño: [1...30]
Caracteres: [a-zA-z0-9]
Código del producto. Este código es definido por el usuario.
documento.
detalle[i].
codigoSunat
Opcionalstring
Tamaño: [8]
Catálogo SUNAT: 25
Código SUNAT según Segmento, Familia, Clase y Producto del bien o servicio.
documento.
detalle[i].
unidadMedida
Requeridostring
Tamaño: [1...3]
Catálogo SUNAT: 03
Código de unidad de medida.
documento.
detalle[i].
cantidad
Requeridostring
Tamaño: [1...23]
Formato: Decimal
Enteros: [1...12]
Decimales: 10
Cantidad de unidades de medida del producto o servicio.
documento.
detalle[i].
igv
RequeridoobjectContiene los datos del IGV.
documento.
detalle[i].
igv.
monto
Requeridostring
Tamaño: [1...15]
Formato: Decimal
Decimales: 2
Indica el monto del impuesto.

igv.codigoTipoAfectacionIgv es 10 factorIGV será igual a 1 + (%IGV / 100).

igv.codigoTipoAfectacionIgv es diferente de 10 factorIGV será igual a 1.

igv.monto = [((valorVenta × factorIGV) - valorVenta) redondeado a 2 decimales].
documento.
detalle[i].
igv.
montoGratuito
Condicional
Requerido si la afectación de IGV del ítem es gratuita
string
Tamaño: [1...15]
Formato: Decimal
Enteros: [1...12]
Decimales: 2
Indica el monto del impuesto como crédito fiscal para el cliente.

igv.codigoTipoAfectacionIgv esta entre 11 y 19 factorIGV será igual a 1 + (%IGV / 100).

igv.codigoTipoAfectacionIgv no esta entre 11 y 19 factorIGV será igual a 1.

igv.montoGratuito = [((valorVenta × factorIGV) - valorVenta) redondeado a 2 decimales].
documento.
detalle[i].
igv.
codigoTipoAfectacionIgv
Requeridostring
Catálogo SUNAT: 07
Código de tipo de afectación del IGV.
documento.
detalle[i].
igv.
factorTributo
Condicional
Requerido si la taza de IGV a usar es diferente de 18%
string
Tamaño: [4...5]
Formato: Decimal
Enteros: [1...2]
Decimales: 2
Taza de IGV a utilizar en el documento ejemplo: 18.00, debe ser la misma para todo el documento, si no se envia se tomara 18.00 por defecto.
documento.
detalle[i].
valorUnitario
Requeridostring
Tamaño: [1...23]
Formato: Decimal
Decimales: 10
Valor unitario por item (no incluye IGV).
documento.
detalle[i].
importeTotal
RequeridostringImporte total de ítem (incluye IGV).

importeTotal = [(valorVenta + igv.monto) redondeado a 2 decimales].
documento.
detalle[i].
valorVenta
Requeridostring
Tamaño: [1...23]
Formato: Decimal
Decimales: 10
Valor venta por item (no incluye IGV).

valorVenta = [((valorUnitario * cantidad) - montoDescuento) redondeado a 10 decimales].
documento.
detalle[i].
montoDescuento
Condicional
Requerido si se aplica descuento al ítem de venta
string
Tamaño: [1...12]
Formato: Decimal
Decimales: 2
Monto de descuento por ítem (no incluye IGV).
documento.
detalle[i].
precioVentaUnitario
Requeridostring
Tamaño: [1...15]
Formato: Decimal
Decimales: 2
Precio unitario del ítem (incluye IGV).

igv.codigoTipoAfectacionIgv es 10 factorIGV será igual a 1 + (%IGV / 100).

igv.codigoTipoAfectacionIgv es diferente de 10 factorIGV será igual a 1.

precioVentaUnitario = [(valorUnitario × factorIGV) redondeado a 2 decimales].
documento.
detalle[i].
adicionales
Opcionalarray[object]Lista de campos adicionales a agregar en la representación impresa.
documento.
detalle[i].
adicionales[a].
codigo
Condicional
Requerido si se agregan adicionales al ítem
stringCódigo a consignar en la representación impresa. Este código es definido por el usuario.
documento.
detalle[i].
adicionales[a].
valor
Condicional
Requerido si se agregan adicionales al ítem
stringValor del dato adicional que se imprimirá en la representación impresa según el código asignado.

Response

Si el código de estado es 200 la petición anterior retorna un JSON estructurado de la siguiente manera:

Success

200 — Cuando el proceso se ejecute correctamente.

{
"ticketPeticion": "1537486212351-1024216",
"codigoHash": "JIkdG2WPEgcfALGPziUEA8wnBBY=",
"estado": 1,
"nombreEstado": "NO PROCESADO",
"xml": {
"name": "20600323751-03-B001-1.xml",
"content": "contenido-del-archivo",
"contentType": "text/xml"
},
"pdf": {
"name": "20600323751-03-B001-1.pdf",
"content": "contenido-del-archivo",
"contentType": "application/pdf"
}
}
PropiedadCondiciónTipoDescripción
ticketPeticionSiemprestringCódigo identificador de la petición.
codigoHashSiemprestringCódigo HASH del valor resumen de la firma digital al XML del CPE.
estadoSiempreintegerCódigo interno de estado del documento.
nombreEstadoSiemprestringDescripción de estado interno del documento.
pdfSiempreobjectContiene los datos del archivo PDF.
pdf.
name
SiemprestringNombre del archivo.
pdf.
content
Siemprestring
Base64
Contenido del byte[] representado en Base64.
pdf.
contentType
Siemprestring
application/pdf
Nombre del mime type del archivo.
xmlSiempreobjectContiene los datos del archivo XML.
xml.
name
SiemprestringNombre del archivo.
xml.
content
Siemprestring
Base64
Contenido del byte[] representado en Base64.
xml.
contentType
Siemprestring
text/xml
Nombre del mime type del archivo.

Si el código de estado es 400, 401, 402, 403, 404 o 500 la petición anterior retorna un JSON estructurado de la siguiente manera:

Bad Request

400 - ERROR DE ESTRUCTURA JSON O EN LOS PARÁMETROS ENVIADOS.

Unauthorized

401 - ERROR DE AUTORIZACIÓN.

Payment Required

402 - ERROR POR FALTA DE PAGO.

Forbidden

403 - ERROR POR VALIDACIONES.

Not Found

404 - RECURSO NO ENCONTRADO.

Internal Server Error

500 - ERROR EN EL SERVIDOR.

{
"ticketPeticion": "1537486212351-1024216",
"estado": "FORBIDDEN",
"mensaje": "La Boleta << B001-1 >> ya fue registrada anteriormente en nuestro sistema"
}
PropiedadCondiciónTipoDescripción
ticketPeticionSiemprestringCódigo identificador de la petición.
estadoSiemprestringNombre del estado HTTP retornado:
BAD_REQUEST
UNAUTHORIZED
PAYMENT_REQUIRED
FORBIDDEN
NOT_FOUND
INTERNAL_SERVER_ERROR.
mensajeSiemprestringDescripción del resultado o error retornado por la API.


Catálogo EMITE N° 01

Código de tipo de operación

CódigoDescripción
01Venta lnterna
02Exportación
10Detracciones

Catálogo SUNAT N° 01

Código de tipo de documento

CódigoDescripción
01Factura
03Boleta de venta
07Nota de crédito
08Nota de débito
09Guía de remisión remitente
20Comprobante de retención
31Guía de remisión transportista
40Comprobante de Percepción

Catálogo SUNAT N° 02

Código de tipo de monedas

CódigoDescripción
PENSoles
USDDólar americano

Archivo XLS con todos los tipos de moneda

Archivo XML con todos los tipos de moneda

Catálogo SUNAT N° 03

Código de tipo de unidad de medida comercial

CódigoDescripción
NIUUNIDADES BIENES
ZZUNIDADES SERVICIOS

Archivo XLS con las unidades de medida

Catálogo SUNAT N° 06

Código de tipo de documento de identidad

CódigoDescripción
0DOC.TRIB.NO.DOM.SIN.RUC
1Documento Nacional de Identidad
4Carnet de extranjería
6Registro Unico de Contributentes
7Pasaporte
ACédula Diplomática de identidad
BDOC.IDENT.PAIS.RESIDENCIA-NO.D
DIdentification Number - IN – Doc Trib PP. JJ
FPermiso Temporal de Permanencia - PTP
HCarné Permiso Temp. Perman. - CPP

Catálogo SUNAT N° 07

Código de tipo de afectación del IGV

CódigoDescripción
10Gravado - Operación Onerosa
11Gravado – Retiro por premio
12Gravado – Retiro por donación
13Gravado – Retiro
14Gravado – Retiro por publicidad
15Gravado – Bonificaciones
16Gravado – Retiro por entrega a trabajadores
17Gravado - IVAP
20Exonerado - Operación Onerosa
21Exonerado - Transferencia gratuita
30Inafecto - Operación Onerosa
31Inafecto – Retiro por Bonificación
32Inafecto – Retiro
33Inafecto – Retiro por Muestras Médicas
34Inafecto - Retiro por Convenio Colectivo
35Inafecto – Retiro por premio
36Inafecto - Retiro por publicidad
37Inafecto - Transferencia gratuita
40Exportación de Bienes o Servicios

Catálogo SUNAT N° 25

Código de producto SUNAT

Sistema de Codificación Común de las Naciones Unidas - UNSPSC v14_0801 (nivel 3)