Saltar al contenido
Krezkadev

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.

JSON
JSON
{
  "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

ClienteSin document_typeCon document_type
Con RUCFacturainvoice
Con DNI, CE o pasaporteBoletareceipt
Sin customerBoleta a CLIENTES VARIOSreceipt
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, sku o barcode. 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_price se 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 batch sale del lote vigente que vence primero; un lote vencido no se vende.

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:

JSON
JSON
{
  "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_price va con IGV. tax: taxed (gravado), exempt (exonerado) o unaffected (inafecto); sin él, el de tu negocio (exonerado si estás en la Ley de Amazonía).
  • unit: unidad de SUNAT, NIU por defecto; ZZ para 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:

Terminal
Terminal
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.