Guías por comprobante
Comprobante de percepción electrónico por API
JSON mínimo para emitir el comprobante de percepción (40) por API cuando eres agente de percepción: cliente, comprobantes cobrados e importes percibidos.
Actualizado el
El comprobante de percepción (tipo 40) lo emite el agente de percepción designado por SUNAT cuando cobra a sus
clientes un porcentaje adicional al venderles ciertos bienes (por ejemplo, combustible o harina). Si SUNAT no te lo
comunicó, no lo necesitas.
- Endpoint:
POST /percepciones· alcancecomprobantes.emitir· desde el Plan PRO. - En la empresa: Configuración › Empresa › Datos y facturación SUNAT › «Soy agente de percepción».
- Usa el mismo JSON de la API antigua (
/api/perceptions); el local sale de tu clave o deestablecimiento.
JSON mínimo
Cobras una factura de S/ 1.000 y percibes el 2 % (S/ 20):
{
"serie_documento": "P001",
"numero_documento": "#",
"fecha_de_emision": "2026-11-04",
"hora_de_emision": "11:30:00",
"codigo_tipo_documento": "40",
"datos_del_cliente_o_receptor": {
"codigo_tipo_documento_identidad": "6",
"numero_documento": "20601234567",
"apellidos_y_nombres_o_razon_social": "BODEGA LIMA S.A.C.",
"codigo_pais": "PE",
"ubigeo": "150101",
"direccion": "Av. Lima 1"
},
"codigo_tipo_percepcion": "01",
"observaciones": "Percepción de la factura F001-121",
"totales": {
"total_percibido": 20,
"total_pagado": 1020
},
"documentos": [{
"codigo_tipo_documento": "01",
"serie_documento": "F001",
"numero_documento": "121",
"fecha_de_emision": "2026-11-02",
"codigo_tipo_moneda": "PEN",
"total_documento": 1000,
"pagos": [{ "fecha_de_pago": "2026-11-04", "total_pago": 1000, "codigo_tipo_moneda": "PEN" }],
"fecha_de_percepcion": "2026-11-04",
"total_percibido": 20,
"total_a_pagar": 1020,
"total_pagado": 1020
}]
}
Se envía igual que la retención, a POST /percepciones:
curl -X POST https://pruebas.sistemafacturacionperu.com/api/v1/percepciones \
-H "Authorization: Bearer $SFP_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: percepcion-$(uuidgen)" \
-d @percepcion.json
<?php
$ch = curl_init('https://pruebas.sistemafacturacionperu.com/api/v1/percepciones');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_TIMEOUT => 90,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('SFP_API_KEY'),
'Content-Type: application/json',
'Idempotency-Key: ' . bin2hex(random_bytes(16)),
],
CURLOPT_POSTFIELDS => file_get_contents('percepcion.json'),
]);
$percepcion = json_decode(curl_exec($ch), true)['data'];
const res = await fetch('https://pruebas.sistemafacturacionperu.com/api/v1/percepciones', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SFP_API_KEY}`,
'Content-Type': 'application/json',
'Idempotency-Key': randomUUID(),
},
body: await readFile('percepcion.json', 'utf8'),
});
const { data: percepcion } = await res.json();
r = requests.post(
"https://pruebas.sistemafacturacionperu.com/api/v1/percepciones",
json=json.load(open("percepcion.json", encoding="utf-8")),
headers={"Authorization": f"Bearer {os.environ['SFP_API_KEY']}", "Idempotency-Key": str(uuid.uuid4())},
timeout=90,
)
percepcion = r.json()["data"]
Tipos de percepción
codigo_tipo_percepcion |
Tasa | Para qué |
|---|---|---|
01 |
2 % | Percepción venta interna |
02 |
1 % | Adquisición de combustible |
03 |
0,5 % | Agente de percepción con tasa especial |
Son el catálogo 22 de SUNAT. La percepción siempre es en soles: si el comprobante cobrado es en dólares, agrega su
tipo_de_cambio como en la retención.