Guías por comprobante
Liquidación de compra electrónica por API
JSON mínimo para emitir la liquidación de compra electrónica (04) por API cuando compras a una persona sin RUC: vendedor, lugar de la operación, ítems y totales.
Actualizado el
La liquidación de compra (tipo 04) la emites tú, el comprador, cuando le compras a una persona natural que no
tiene RUC ni puede darte un comprobante (por ejemplo, un productor agrícola o un recolector). Sustenta tu compra y el
crédito fiscal.
- Endpoint:
POST /liquidaciones-compra· alcancecomprobantes.emitir· desde el Plan PRO. - Usa el mismo JSON de la API antigua (
/api/purchase-settlements); el local sale de tu clave o deestablecimiento. - Serie: la de liquidaciones de compra de tu local (
GET /establecimientos, tipo04). En el ejemplo,L001.
JSON mínimo
Compras 500 kg de papa a S/ 1,18 el kilo con IGV:
{
"serie_documento": "L001",
"numero_documento": "#",
"fecha_de_emision": "2026-11-04",
"hora_de_emision": "08:30:00",
"codigo_tipo_operacion": "0101",
"codigo_tipo_documento": "04",
"codigo_tipo_moneda": "PEN",
"datos_del_proveedor_o_receptor": {
"codigo_tipo_documento_identidad": "1",
"numero_documento": "41234567",
"apellidos_y_nombres_o_razon_social": "Juan Mamani Quispe",
"codigo_pais": "PE",
"ubigeo": "080101",
"direccion": "Comunidad San Jerónimo s/n"
},
"datos_de_la_operacion": {
"codigo_pais": "PE",
"ubigeo": "080101",
"direccion": "Comunidad San Jerónimo s/n"
},
"totales": {
"total_operaciones_gravadas": 500,
"total_igv": 90,
"total_impuestos": 90,
"total_valor": 500,
"subtotal_compra": 590,
"total_compra": 590
},
"items": [{
"codigo_interno": "PAPA-01",
"descripcion": "Papa blanca",
"unidad_de_medida": "KGM",
"cantidad": 500,
"valor_unitario": 1,
"codigo_tipo_precio": "01",
"precio_unitario": 1.18,
"codigo_tipo_afectacion_igv": "10",
"total_base_igv": 500,
"porcentaje_igv": 18,
"total_igv": 90,
"total_impuestos": 90,
"total_valor_item": 500,
"total_item": 590
}]
}
curl -X POST https://pruebas.sistemafacturacionperu.com/api/v1/liquidaciones-compra \
-H "Authorization: Bearer $SFP_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: liquidacion-$(uuidgen)" \
-d @liquidacion.json
<?php
$ch = curl_init('https://pruebas.sistemafacturacionperu.com/api/v1/liquidaciones-compra');
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('liquidacion.json'),
]);
$liquidacion = json_decode(curl_exec($ch), true)['data'];
const res = await fetch('https://pruebas.sistemafacturacionperu.com/api/v1/liquidaciones-compra', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SFP_API_KEY}`,
'Content-Type': 'application/json',
'Idempotency-Key': randomUUID(),
},
body: await readFile('liquidacion.json', 'utf8'),
});
const { data: liquidacion } = await res.json();
r = requests.post(
"https://pruebas.sistemafacturacionperu.com/api/v1/liquidaciones-compra",
json=json.load(open("liquidacion.json", encoding="utf-8")),
headers={"Authorization": f"Bearer {os.environ['SFP_API_KEY']}", "Idempotency-Key": str(uuid.uuid4())},
timeout=90,
)
liquidacion = r.json()["data"]
Campos clave
| Campo | Qué poner |
|---|---|
datos_del_proveedor_o_receptor |
La persona que te vende: normalmente con DNI (1) |
datos_de_la_operacion |
Dónde se hizo la compra: país, ubigeo y dirección |
totales.subtotal_compra / total_compra |
El total de la compra (en las ventas se llaman subtotal_venta y total_venta) |
items[].codigo_interno |
Obligatorio en cada línea |
Si corresponde retener el impuesto a la renta, cada línea acepta codigo_tipo_afectacion_igv_impuesto_renta,
porcentaje_retencion_renta y monto_retencion_renta.
La respuesta tiene la misma forma que la de la retención: número, estado, respuesta de SUNAT y enlaces públicos al PDF, XML y CDR.