Registrar ventas
Cada venta de tu web con su boleta o factura, igual que en tu POS.
POST /sales registra la venta y la emite por el mismo camino de tu POS: mismo correlativo,
mismo IGV, baja el stock, queda en el kardex y el pago entra a caja.
{
"customer": { "document_type": "dni", "document_number": "12345678", "name": "Ana Pérez" },
"items": [
{ "product_id": 8507, "quantity": 2 },
{ "description": "Envío a domicilio", "quantity": 1, "unit_price": 10 }
],
"payment": { "method": "card", "reference": "MP-998877" },
"external_id": "WEB-1001"
}Qué se emite
| Cliente | Sin document_type | Con document_type |
|---|---|---|
| Con RUC | Factura | invoice |
| Con DNI, CE o pasaporte | Boleta | receipt |
Sin customer | Boleta a CLIENTES VARIOS | receipt |
| Cualquiera | — | sales_note: nota de venta, no va a SUNAT |
Una boleta de más de S/ 700 tiene que identificar al comprador con su DNI (lo exige SUNAT).
Los ítems
- Identifica cada producto con uno de:
product_id,skuobarcode. Con tallas, usa el id de la variante. - El código de barras de un paquete (six pack, caja x12) vende el paquete a su precio.
- Sin
unit_pricese cobra el precio del catálogo con su oferta vigente. Si lo mandas, va con IGV. - El envío u otro cobro sin producto:
description+quantity+unit_price. - Farmacia: sin
batchsale del lote vigente que vence primero; un lote vencido no se vende.
Solo facturación (tu web tiene su propio catálogo)
Si tu plataforma ya maneja sus productos y su stock y solo quieres emitir la boleta o factura, manda cada línea como ítem libre, sin cargar nada en Krezka:
{
"items": [
{ "description": "Polera algodón talla M", "quantity": 2, "unit_price": 59 },
{ "description": "Libro de cuentos", "quantity": 1, "unit_price": 40, "tax": "exempt" },
{ "description": "Envío a domicilio", "quantity": 1, "unit_price": 12, "unit": "ZZ" }
],
"payment": { "method": "card", "reference": "PAGO-8891" },
"external_id": "PEDIDO-1001"
}unit_priceva con IGV.tax:taxed(gravado),exempt(exonerado) ounaffected(inafecto); sin él, el de tu negocio (exonerado si estás en la Ley de Amazonía).unit: unidad de SUNAT,NIUpor defecto;ZZpara servicios.- No se mueve stock en Krezka; el cobro sí queda en tu caja.
Antes de emitir
Krezka revisa todo y, si algo falla, no emite nada ni gasta número: producto activo, talla elegida, stock libre en la sede (sin lo reservado, sumando las líneas del mismo producto), lote y cliente.
Después
La respuesta llega enseguida con status: pending. SUNAT suele contestar en segundos:
curl https://api.krezka.com/api/v1/erp/sales/sale_HKA2DiFel0Cz \
-H "Authorization: Bearer sk_live_…"status pasa a accepted. Si queda en pending con sunat_message, Krezka reintenta solo.
Mejor aún: registra un webhook y te avisamos.
El PDF
GET /sales/{id}/pdf?format=a4 (o ticket, a5) devuelve el enlace al PDF, el mismo que
imprime tu panel. Para boletas y facturas, espera a accepted antes de enviarlo.
Para devoluciones mira Anular una venta.
Un pedido, una venta
Manda siempre tu número de pedido en external_id. Si tu web lo manda dos veces —un
doble clic, un reintento—, la segunda recibe 409 duplicate_external_id con el id de la
venta ya hecha, en vez de emitir otra boleta.
