API Emisión Guías de Remisión Facturactiva
API Emisión Guías de Remisión Facturactiva
Esquema de autenticación:
La autenticación de la API será usando el protocolo OAuth 2.0 haciendo uso de token de accesos,
los cuales son generados/intercambiados mediante un API_KEY y API_SECRET que son únicos por
cliente (entregados por Facturactiva).
a carácter alfabético
n carácter numérico
an carácter alfanumérico
a3 3 caracteres alfabéticos de longitud fija
n3 3 caracteres numéricos de longitud fija
an3 3 caracteres alfa-numéricos de longitud fija
a..3 hasta 3 caracteres alfabéticos
n..3 hasta 3 caracteres numéricos
an..3 hasta 3 caracteres alfa-numéricos
n(12,2) elemento numérico hasta 12 dígitos, 10 enteros+punto decimal+
hasta dos decimales
n(3,2) elemento numérico hasta 3 dígitos, 1 entero+punto decimal+
hasta dos decimales
F##### elemento inicia con la letra F seguida de cinco dígitos
B##### elemento inicia con la letra B seguida de cinco dígitos
YYYY-MM-DD formato fecha yyyy=año, mm=mes, dd=día
hh:mm:ss Formato hora hh=hora, mm= minuto, ss=segundo
Este documento hace uso y menciona los catálogos de códigos de SUNAT, los cuales pueden ser
descargados desde http://orientacion.sunat.gob.pe/index.php/empresas-menu/comprobantes-
de-pago-empresas/comprobantes-de-pago-electronicos-empresas/see-desde-los-sistemas-del-
contribuyente/2-comprobantes-que-se-pueden-emitir-desde-see-sistemas-del-
contribuyente/factura-electronica-desde-see-del-contribuyente/3552-normas-legales-factura-
electronica (Buscar Anexo 8 - catálogo de códigos principal) y
http://contenido.app.sunat.gob.pe/insc/ComprobantesDePago+Electronicos/Detalle+CATALOGO+
2,3,4+13.pdf (catálogo de códigos extras), estos documentos contienen los diferentes conceptos
de códigos mencionados en este documento.
En esta ruta se obtiene el access token necesario para autenticarse en otros endpoints.
a. Codificar de acuerdo a RFC 1738 (URL encode) los valores del API_KEY y
API_SECRET
b. Concatenar los valores del API_KEY codificada, el carácter “:”, y el API_SECRET
codificada en una sola cadena.
c. Codificar en Base64 la cadena obtenida del paso anterior.
API_KEY xvz1evFS4wEEPTGEFPHBog
API_SECRET L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88
DRdyOg
Valor del API_KEY codificado según RFC xvz1evFS4wEEPTGEFPHBog
1738 (nótese que generalmente el valor
no cambia)
Valor del API_SECRET codificado según L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88
RFC 1738 (nótese que generalmente el DRdyOg
valor no cambia)
Conjunto de credenciales obtenidas al xvz1evFS4wEEPTGEFPHBog:L8qq9PZyRg6ie
concatenar KGEKhZolGC0vJWLw8iEJ88DRdyOg
Conjunto de credenciales en base64 eHZ6MWV2RlM0d0VFUFRHRUZQSEJvZzpM
OHFxOVBaeVJnNmllS0dFS2hab2xHQzB2Sld
MdzhpRUo4OERSZHlPZw==
El valor calculado en el paso 1 debe ser cambiado por un token mediante una petición
POST a /oauth2/token.
1. {
2. "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJGYWN0dXJhY3
RpdmEiLCJpYXQiOjE0NTc3MjM5NTYsImV4cCI6MTQ1NzgxMDM1NiwianRpIjoiYTM3OWZmNGI0OTdj
NDgwN2FlMDc1MThjYWYwNDIyMjAiLCJjb25zdW1lcktleSI6IjZYU2xOR09UamM0NXJnZU9WZzVPSU
0ifQ.imNmYCFuUBozqqgWcc0yz3UuC7GCp0ApahwOvayoqL8",
3. "expires_at": 1457810356,
4. "token_type": "Bearer"
5. }
Nota: A partir de este punto cualquier endpoint que contenga la glosa “(requiere
access token)” necesitara enviar su access token de la siguiente forma:
- El access token se deberá incluir en la petición usando el header Authorization con el
valor de: Bearer <Valor del access token>
Ejemplo de petición:
FlMDc1MThjYWYwNDIyMjAiLCJjb25zdW1lcktleSI6IjZYU2xOR09UamM0NXJnZU9WZzVP
SU0ifQ.imNmYCFuUBozqqgWcc0yz3UuC7GCp0ApahwOvayoqL8
{} // cuerpo de petición dependiendo del endpoint
Respuesta de cualquier endpoint (que requiera access token) en caso de autenticación inválida:
Cualquier endpoint que requiera autenticación responderá con el siguiente formato al detectar
una autenticación invalida (ya sea porque el token es invalido, o porque el token expiró).
1. {
2. "errors": [{
3. "status": 401,
4. "code": "10"
5. "detail": "Unauthorized"
6. }]
7. }
Nota: La longitud máxima de cualquier mensaje de error es de 500 caracteres, sin embargo en
ocasiones no controladas este campo podría contener una cantidad mayor de caracteres, es por
eso que se recomienda que de almacenar el mensaje siempre se trunque la cadena a 500
caracteres para evitar cualquier error no esperado.
code -> código de error Facturactiva (Ver tabla 11 códigos error Facturactiva)
Dependiendo si el origen del error fue porque la autenticación falló o por que el token no tiene
autorización para realizar la acción, los posibles códigos http (según especifica los códigos estados
erróneos HTTP) de error de autenticación serán los siguientes:
En esta ruta se podrá enviar la información de un documento electrónico (Guía de Remisión del
Remitente) para ser declarado contra La Superintendencia Nacional de Aduanas y de
Administración Tributaria (SUNAT).
1. {
2. "tipoDocumento": "09", // [Ver tabla 1 Catálogo No. 01 Anexo 8
SUNAT. Codigo de tipo de documento electronico para ver los posibles valores] –
String(2),
3. "idTransaccion": "0000001", // [Id unico por transaccion/emision de documento (Ej:
id de servicio, id de venta, etc)] – String(250),
4. "fechaEmision": "2017-09-10", // [Dato alfanumérico de 10 posiciones con formato
yyyy-mm-dd.]
5. "correoReceptor": "[email protected]", // (Campo opcional) [Correo electrónico
del receptor al cual se enviará una copia de las representaciones del comprobante
electrónico (XML, PDF), en caso de no especificar este campo se usará el correo
electrónico que el emisor previamente ha registrado en la sección de clientes del
portal facturactiva.] – String(260),
6. "documento": {Documento}, // [Ver tabla 6. Campos documento para una descripcion d
el formato de este objeto]
7. "guia": {Traslado}, // {Ver tabla 7. Campos guía para una descripción del formato
de este objeto}
8. "referencia": [{ referencia }], // {Ver tabla 9 Campos referencia
para una descripcion del formato de este arreglo}
9. "detalle": [{Detalle documento}], // [Ver tabla 10 Campos detalle documento
para una descripcion del formato de este arreglo]
10. }
En caso de comunicación satisfactoria, la respuesta de este endpoint será con código http 200 y el
formato de la respuesta será el siguiente.
1. "data": {
2. "tipoDocumento": "09",
3. "numComprobante": "T001-10000001",
4. "estadoEmision": "A",
5. "observaciones": []
6. }
En caso de error la respuesta será con código de error http (según especifica los códigos estados
erróneos HTTP, ya sean errores 4XX – Errores de cliente o 5XX – Errores del servidor, ej: 400, 500,
etc) y el formato de la respuesta será el siguiente:
1. {
2. "errors": [{
3. "status": 400,
4. "code": "51",
5. "detail": "Campo tipoDocEmisor no puede estar vacío",
6. "meta": {
7. "reenvioHabilitado": true
8. }
9. }]
10. }
Nota: La longitud máxima de cualquier mensaje de error es de 500 caracteres, sin embargo en
ocasiones no controladas este campo podría contener una cantidad mayor de caracteres, es por
eso que se recomienda que de almacenar el mensaje siempre se trunque la cadena a 500
caracteres para evitar cualquier error no esperado.
El campo errors es arreglo que contiene uno o más errores encontrados en la petición, el primer
error en este arreglo simboliza el error principal en la petición, dicho error principal es un objeto
que contiene la siguiente información:
meta.codigoErrorSUNAT -> código de error principal SUNAT (este campo solo estará presente en
los casos que el error provenga desde SUNAT)
meta.estadoEmision -> Estado de emisión obtenido en él envió (este campo solo estará presente
en los casos donde el error provenga desde SUNAT, en los casos que el error provenga por una
validación de datos realizada antes de enviar los datos a SUNAT, este campo no estará presente)
N
R
meta.reenvioHabilitado -> valor booleano que indica si el documento puede ser re-enviado
utilizando la misma serie y correlativo, true en caso de permitir su re-envió o false en caso de no
ser posible un re-envió. Por ejemplo, en caso de recibir este campo como false al enviar una
factura, esto significaría que SUNAT ya no recibirá este comprobante con la misma serie y
correlativo, lo cual conllevaría a que el emisor revise por que la emisión del comprobante generó
el error, proceder a corregir el error, y finalmente emitir la operación generando un nuevo
correlativo. (este campo solo estará presente en los casos donde se tenga suficiente información
para determinar su valor, por lo que en los casos de no estar presente este campo, el emisor
deberá asumir que puede reenviar el documento con la misma serie y correlativo).
Los siguientes ítems (del segundo en adelante) en el arreglo errors son considerados errores
secundarios, los cuales son representados con un objeto que contiene la siguiente información:
code -> código de error Facturactiva (Ver tabla 11 códigos error Facturactiva)
meta.codigoErrorSUNAT -> código de error secundario SUNAT (este campo solo estará presente
en los casos que el error provenga desde SUNAT)
Ejemplo de una respuesta errónea con varios errores (1 error principal, 1 error secundario):
1. {
2. "errors": [{
3. "status": 400,
4. "code": "51",
5. "detail": "Campo tipoDocEmisor no puede estar vacio"
6. }, {
7. "code": "52",
8. "detail": "Campo numCajero no está habilitado como campo adicional para este
emisor"
9. }]
10. }
ANEXO - TABLAS
Código
Descripción
01 Factura
03 Boleta de Venta
07 Nota de Crédito
08 Nota de Debito
09 Guía de Remisión del Remitente
Código Descripción
DOC.TRIB.NO.DOM.SIN.RUC
0
DOC. NACIONAL DE IDENTIDAD (DNI)
1
CARNET DE EXTRANJERIA
4
REG. UNICO DE CONTRIBUYENTES (RUC)
6
PASAPORTE
7
CED. DIPLOMATICA DE IDENTIDAD
A
Código Descripción
NUMERACION DAM
01
NUMERO DE ORDEN DE ENTREGA
02
NUMERO SCOP
03
NUMERO DE MANIFIESTO DE CARGA
04
NUMERO DE CONSTANCIA DE DETRACCION
05
OTROS
06
Código Descripción
VENTA
01
VENTA SUJETA A CONFIRMACION DEL COMPRADOR
14
COMPRA
02
TRASLADO ENTRE ESTABLECIMIENTOS DE LA MISMA
04
EMPRESA
TRASLADO EMISOR ITINERANTE CP
18
IMPORTACION
08
EXPORTACION
09
TRASLADO A ZONA PRIMARIA
19
OTROS
13
5. Tabla de Modalidad Traslado
Código Descripción
TRANSPORTE PÚBLICO
01
TRANSPORTE PRIVADO
02
tabla 2) ☒
numDocEmisor Número de String(25) n..25 Habilitado: numDocEmisor: '205
identidad del ☒ 18915119'
emisor Obligatorio
☒
nombreEmisor Apellidos y String(100) an..100 Habilitado: nombreEmisor: 'MINE
nombres o ☒ RIA CORPORATIVA S.A
denominación o Obligatorio .C.'
razón social ☒
☒
direccionDestinoU Ubigeo del String(6) an..6 Habilitado: direccionDestinoUb
bigeo punto de ☒ igeo: '150123'
llegada. Obligatorio:
Según ☒
catálogo N°
13 del Anexo
N° 8
direccionDestinoD Nombre del String(50) an .. 50 Habilitado: direccionDestinoDe
epartamento departament ☒ partamento: 'LIMA'
o del punto Obligatorio:
de destino ☐
direccionDestinoPr Nombre de la String(50) an .. 50 Habilitado: direccionDestinoPr
ovincia provincia del ☒ ovincia: 'LIMA'
punto de Obligatorio:
destino ☐
direccionDestinoDi Nombre del String(50) an .. 50 Habilitado: direccionDestinoDi
strito distrito del ☒ strito:
punto de Obligatorio: 'PACHACAMAC'
destino ☐
direccionDestino Dirección del String(100) an..100 Habilitado: direccionDestino:
punto de ☒ 'CALLE LOS
destino Obligatorio: ROBLES N°4780'
☒
codigoPuerto Código del String(10) an..10 Habilitado: codigoPuerto: 'PAI'
Puerto. ☒
Puerto o Obligatorio:
Aeropuerto ☐
de
embarque/d
esembarque
cuando el
motivo de
traslado es
importación
numeroContenedor Datos del String(10) an..10 Habilitado: numeroContenedo:
contenedor ☒ 'I789000'
(Obligatorio Obligatorio:
si motivo es ☐
Importación)
nombreTransportis Apellidos y String(100) an..100 Habilitado: nombreTransportist
ta Nombres o ☒ a: 'TRANSPORTE
denominació Obligatorio: S.A.C.'
n o razón ☐
social del
transportista
tipoDocumentoTra Tipo de String(2) an..2 Habilitado: tipoDocumentoTra
nsportista documento ☒ nsportista: '6'
del Obligatorio:
transportista. ☐
(Ver tabla 2)
Si la Guía de
remisión
remitente
cuenta con la
información
requerida al
transportista
sobre el
vehículo que
realiza el
traslado y
sus
conductores
en caso de
transporte
público, el
transportista
ya no
requerirá
llenar su guía
de remisión
transportista
(Normativa
General
sobre Guiase
Electrónicas)
. Cuando
utilice los
servicios de
un
transportista
(modalidad
de traslado:
transporte
público) y
siempre que
el
transportista
emita su guía
de remisión
transportista
o su factura
electrónica
transportista,
en
reemplazo
de estos
datos, se
deberá
consignar
solo la
información
señalada en
las casillas
rucTransporti
sta y
nombreTrans
portista.
conductor. ☐
nombreChofer Nombre o String(100) an..100 Habilitado: nombreChofer:
razón social ☒ 'Jose Martin Paz
del Obligatorio: Urquia'
conductor ☐
tipoDocumentoPro Tipo de String(2) an..2 Habilitado: tipoDocumentoProv
veedor documento ☒ eedor: '6'
identidad Obligatorio:
(Ver tabla 2) ☐
catálogo N.°
6 del Anexo
N.°8 Sunat
Se ingresa
esta
información
cuando el
motivo
traslado sea
COMPRA,
TRASLADO
ENTRE
ESTABLECIMIE
NTOS DE LA
MISMA
EMPRESA,
IMPORTACION
Lista de errores específicos de la suite Facturactiva. (De recibir un código de error no listado
en esta lista, usar el campo “status” en su objeto de error para determinar la mejor forma de
manejarlo.