Cómo se informan las boletas
Elige si las boletas van sueltas, como una factura, o esperan al resumen del día.
Autenticación: token Bearer de cuenta (empresas:manage).
Consideraciones
- Por defecto es
individual: cada boleta se manda sola y recibe su propio CDR, en el acto. - En
resumen, POST /v1/cpe respondeestado: "por_resumir"y la boleta queda firmada esperando el resumen del día — un solo documento para todas. - La boleta ya es válida al firmarse en los dos modos: se puede imprimir y entregar sin esperar nada.
- Las notas de crédito y débito no se configuran: heredan del comprobante al que afectan. Una nota de boleta sigue este modo; una de factura va suelta siempre, porque el resumen diario no las admite.
- Cada boleta consume una firma vaya por donde vaya. El resumen añade una: es un documento y se firma una vez.
Cuál elegir
Las dos formas son legales y sirven a negocios distintos.
| Individual | Por resumen | |
|---|---|---|
| Tras emitir queda en | Recibido | Por resumir |
| CDR | propio, en el acto | el del resumen, por ticket |
| Para | poco volumen | punto de venta |
Un comercio con pocas boletas las manda sueltas y tiene su constancia al momento. Un punto de venta con cientos las agrupa: un documento al día en vez de trescientos.
curl -X PATCH https://api.xmlperu.dev/v1/companies/$RUC/receipts \
-H "Authorization: Bearer $TOKEN_CUENTA" \
-H "Content-Type: application/json" \
-d '{"mode": "summary"}'
Va en la empresa y no en cada comprobante, igual que quién envía a SUNAT: es una decisión operativa del negocio, no de cada venta.
El estado «Por resumir»
Una boleta que espera su resumen queda en un estado propio y no en «Registrado». La diferencia importa: «Registrado» es un comprobante que se quedó a medias por un fallo, y «Por resumir» es uno que va bien y está esperando su turno. Sin esa distinción no hay forma de saber cuál es cuál.
Headers
| Name | Type | Description |
|---|---|---|
| Accept | string | application/json |
| Content-Type | string | application/json |
| Authorization | string | Bearer <token>. Genéralo desde tu panel, en Tokens de API. |
Parámetros de URL
| Name | Type | Description |
|---|---|---|
| ruc* | string | RUC de 11 dígitos de la empresa. |
Body
| Name | Type | Description |
|---|---|---|
| mode* | string | individual o summary. |
Ejemplo de solicitud
curl -X PATCH https://api.xmlperu.dev/v1/companies/20123456789/receipts \
-H "Authorization: Bearer $TOKEN_CUENTA" \
-H "Accept: application/json"<?php
$token_cuenta = 'pega-aqui-tu-token';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.xmlperu.dev/v1/companies/20123456789/receipts');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . $token_cuenta,
'Accept: application/json',
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);const TOKEN_CUENTA = 'pega-aqui-tu-token';
const res = await fetch('https://api.xmlperu.dev/v1/companies/20123456789/receipts', {
method: 'PATCH',
headers: {
Authorization: `Bearer ${TOKEN_CUENTA}`,
Accept: 'application/json',
},
});
const data = await res.json();import requests
TOKEN_CUENTA = "pega-aqui-tu-token"
headers = {
"Authorization": f"Bearer {TOKEN_CUENTA}",
"Accept": "application/json",
}
res = requests.patch("https://api.xmlperu.dev/v1/companies/20123456789/receipts", headers=headers)
data = res.json()Respuesta
{
"success": true,
"message": "Modo de boletas actualizado.",
"data": {
"company": {
"ruc": "20123456789",
"receipts": "summary"
}
}
}{
"success": false,
"message": "The selected modo is invalid."
}