Procesar
Este método genera una comunicación de baja o resumen diario de baja.
Valores
| Variable | Descripción | Prod | Demo |
|---|---|---|---|
URL_API | URL base de la API | https://api.emite.pe | https://api.demo.emite.pe |
EMITE_ID | Identificador asignado a la empresa | Proporcionado por Emite | Proporcionado por Emite |
EMITE_KEY | API Key asignada a la empresa | Proporcionado por Emite | Proporcionado por Emite |
Request
POST {{URL_API}}/anular
Headers
emite_id: {{EMITE_ID}}
emite_key: {{EMITE_KEY}}
Content-Type: application/json
Estructura Body
El arreglo documentos contiene los comprobantes que serán anulados.
{
"documentos": [
{...},
{...}
]
}
La estructura completa del body se detalla en la tabla Propiedades Body.
Implementación
- Shell
- Node
- Java
- PHP
curl "{{URL_API}}/anular" -X POST \
-H "emite_id: {{EMITE_ID}}" \
-H "emite_key: {{EMITE_KEY}}" \
-H "Content-Type: application/json" \
-d "{\"documentos\":[{...},{...}]}"
const axios = require('axios');
const data = {
documentos: [
{
// ...
},
{
// ...
}
]
};
axios.post('{{URL_API}}/anular', data, {
headers: {
emite_id: '{{EMITE_ID}}',
emite_key: '{{EMITE_KEY}}',
'Content-Type': 'application/json'
}
})
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error.response?.data || error.message);
});
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class Main {
public static void main(String[] args) throws Exception {
URL url = new URL("{{URL_API}}/anular");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("emite_id", "{{EMITE_ID}}");
conn.setRequestProperty("emite_key", "{{EMITE_KEY}}");
conn.setRequestProperty("Content-Type", "application/json");
conn.setDoOutput(true);
String json = """
{
"documentos": [
{
}
]
}
""";
try (OutputStream os = conn.getOutputStream()) {
byte[] input = json.getBytes("utf-8");
os.write(input, 0, input.length);
}
int statusCode = conn.getResponseCode();
System.out.println("HTTP Status: " + statusCode);
}
}
<?php
$data = (object)[
'documentos' => [
(object)[
// ...
]
]
];
$ch = curl_init('{{URL_API}}/anular');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'emite_id: {{EMITE_ID}}',
'emite_key: {{EMITE_KEY}}',
'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
$response = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error: ' . curl_error($ch);
} else {
echo $response;
}
curl_close($ch);
Propiedades Body
| Propiedad | Obligatoriedad | Tipo | Descripción |
|---|---|---|---|
| documentos | Requerido | array[object] | Contiene el listado de documentos a anular. Máximo 100 documentos.Todos deben ser del mismo tipo de documento. Solo aplica para tipos de documento 01, 03, 07 y 08.Todos deben ser de la misma fecha de emisión. Todos los documentos deben tener estado ACEPTADO en la SUNAT o la OSE. |
| documentos[i]. orden | Requerido | integer | Contiene la serie del documento. |
| documentos[i]. tipoDocumento | Requerido | string Tamaño: [2] Catálogo SUNAT: 01 | Código del tipo de documento. |
| documentos[i]. serie | Requerido | string Tamaño: [4] | Contiene la serie del documento. |
| documentos[i]. correlativo | Requerido | integer Tamaño: [1...8] | Contiene el correlativo del documento. |
| documentos[i]. motivoBaja | Requerido | string Tamaño: [1...100] | Contiene el motivo de la anulación. |
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.
- Anulación de facturas y notas de facturas
- Anulación de boletas y notas de boletas
{
"ticketPeticion": "1537486212351-1024216",
"estado": 2,
"nombreEstado": "EN PROCESO",
"ticketSunat": "1780700034613",
"tipoDocumento": "RA",
"fechaGeneracion": "2026-01-01",
"correlativo": 1,
"cantidadDocumentos": 3,
"documentos": [
{
"estado": 3,
"nombreEstado": "ACEPTADO",
"tipoDocumento": "01",
"serie": "F001",
"correlativo": 1,
"estaAnulado": false
},
{
"estado": 3,
"nombreEstado": "ACEPTADO",
"tipoDocumento": "07",
"serie": "F001",
"correlativo": 1,
"estaAnulado": false
},
{
"estado": 3,
"nombreEstado": "ACEPTADO",
"tipoDocumento": "08",
"serie": "F001",
"correlativo": 1,
"estaAnulado": false
}
]
}
{
"ticketPeticion": "1537486212351-1024216",
"estado": 2,
"nombreEstado": "EN PROCESO",
"ticketSunat": "1780700034613",
"tipoDocumento": "RC",
"fechaGeneracion": "2026-01-01",
"correlativo": 1,
"cantidadDocumentos": 3,
"documentos": [
{
"estado": 3,
"nombreEstado": "ACEPTADO",
"tipoDocumento": "03",
"serie": "B001",
"correlativo": 1,
"estaAnulado": false
},
{
"estado": 3,
"nombreEstado": "ACEPTADO",
"tipoDocumento": "07",
"serie": "B001",
"correlativo": 1,
"estaAnulado": false
},
{
"estado": 3,
"nombreEstado": "ACEPTADO",
"tipoDocumento": "08",
"serie": "B001",
"correlativo": 1,
"estaAnulado": false
}
]
}
| Propiedad | Condición | Tipo | Descripción |
|---|---|---|---|
| ticketPeticion | Siempre | string | Código identificador de la petición. |
| estado | Siempre | integer | Código interno de estado del documento. |
| nombreEstado | Siempre | string | Descripción de estado interno del documento. |
| ticketSunat | Siempre | string | Código identificador de la operación en SUNAT. |
| tipoDocumento | Siempre | string | Identifica el tipo de documento generado. Comunicación de baja RA (Facturas y notas de facturas).Resumen diario de bajas RC (Boletas y notas de boletas). |
| fechaGeneracion | Siempre | string Formato: YYYY-MM-DD | Contiene la fecha de generación de la anulación. |
| correlativo | Siempre | integer | Correlativo del documento generado (corresponde al numero de resumen diario de baja o comunicacion de baja del día). |
| cantidadDocumentos | Siempre | integer | Cantidad de documentos agregados al resumen diario de baja o comunicacion de baja. |
| documentos | Siempre | array[object] | Contiene el listado de documentos declarados. |
| documentos[i]. estado | Siempre | integer | Código interno del estado actual del documento asociado a la baja. |
| documentos[i]. nombreEstado | Siempre | string | Descripción del estado interno actual del documento asociado a la baja. |
| documentos[i]. serie | Siempre | string | Contiene la serie del documento asociado a la baja. |
| documentos[i]. correlativo | Siempre | integer Tamaño: [1...8] | Contiene el correlativo del documento asociado a la baja. |
| documentos[i]. estaAnulado | Siempre | boolean | Indica si el documento asociado a la baja se encuentra anulado. |
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": "Todos los comprobantes deben haber sido registrados"
}
| Propiedad | Condición | Tipo | Descripción |
|---|---|---|---|
| ticketPeticion | Siempre | string | Código identificador de la petición. |
| estado | Siempre | string | Nombre del estado HTTP retornado:BAD_REQUESTUNAUTHORIZEDPAYMENT_REQUIREDFORBIDDENNOT_FOUNDINTERNAL_SERVER_ERROR. |
| mensaje | Siempre | string | Descripción del resultado o error retornado por la API. |
Catálogo SUNAT N° 01
Código de tipo de documento
| Código | Descripción |
|---|---|
| 01 | Factura |
| 03 | Boleta de venta |
| 07 | Nota de crédito |
| 08 | Nota de débito |
| 09 | Guía de remisión remitente |
| 20 | Comprobante de retención |
| 31 | Guía de remisión transportista |
| 40 | Comprobante de Percepción |