Ir al contenido

FISCALISTO / API

Pedidos

Registre lo que su cliente pidió, entréguelo con su remisión, facture lo entregado en una o varias partes y sepa cuándo se cobró.

Un pedido (sor_…) es lo que su cliente le compra: los conceptos, su orden de compra y cuándo lo espera. Lo entrega en una o varias partes, cada una con su remisión (REM-1, REM-2…), y lo factura en una o varias facturas. Su estado sigue solo lo que pasa: draft → confirmed → partially_delivered → delivered → invoiced → paid (o closed, canceled). Un pedido no es un CFDI; cada factura que sale de él sí lo es.

Crear uno

curl https://api.fiscalisto.com/v1/sales_orders \
  -H "Authorization: Bearer $FISCALISTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "customer": "cus_OufpKqnrvx9p42",
    "customer_po": "OC-778",
    "payment_form": "99",
    "payment_method": "PPD",
    "items": [
      { "description": "Silla de oficina ergonómica", "product_key": "56101504", "quantity": 100, "unit_price": 1850 }
    ],
    "expected_on": "2026-11-20",
    "payment_days": 30,
    "confirm": true
  }'

Los conceptos y las condiciones de pago son los de una factura y se revisan con las mismas reglas, así que cada factura que sale del pedido timbra. customer es un cliente de su catálogo (cus_…) o uno con sus datos fiscales (se agrega a sus clientes). Con "quote": "quo_…" el pedido sale de una cotización, con su cliente y sus conceptos, y la cotización queda aceptada.

Sin confirm queda en borrador (draft) y se cambia con POST /v1/sales_orders/{id}; confírmelo con POST /v1/sales_orders/{id}/confirm. Confirmado, con inventario se aparta lo pedido en el almacén y ya se puede entregar y facturar.

invoice_policy dice qué se factura: delivered (por omisión), lo ya entregado; ordered, todo lo pedido desde el inicio (por ejemplo con pago por adelantado). Los servicios no se entregan: se facturan desde la primera factura.

Entregar

curl https://api.fiscalisto.com/v1/sales_orders/sor_OufpKqnrvx9p5Rt2mZr1XyT5uBcW8sKdLx/deliveries \
  -H "Authorization: Bearer $FISCALISTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [{ "line": 31, "quantity": 60 }],
    "carrier": "Paquetexpress",
    "tracking": "PX-90122"
  }'

line es el id de cada concepto en items del pedido. Sin items, sale todo lo que falta. La mercancía sale del almacén con la entrega, no con la factura. Si el emisor no vende sin existencias, no sale más de lo que hay (400 sales_order_invalid). Cada entrega trae su remisión en el PDF del pedido y su cliente la firma en su liga; si ya sabe quién recibió, mándelo en received_by.

POST /v1/sales_orders/{id}/deliveries/{dlv_…}/cancel regresa la mercancía al almacén. POST /v1/sales_orders/{id}/cancel_remaining deja el pedido con lo ya entregado.

Facturar

curl https://api.fiscalisto.com/v1/sales_orders/sor_OufpKqnrvx9p5Rt2mZr1XyT5uBcW8sKdLx/invoice \
  -H "Authorization: Bearer $FISCALISTO_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: PED-12-factura-1" \
  -d '{}'

Timbra una factura con lo entregado y no facturado (o lo que diga items), con los datos fiscales que el cliente tenga hoy en su catálogo y la nota «Pedido PED-12 · Su orden de compra OC-778». Contesta la factura, como POST /v1/invoices. Cada llamada con una Idempotency-Key nueva timbra la siguiente parte; repetirla con la misma contesta la misma factura. Si no queda nada por facturar, 400 sales_order_invalid.

Con include_undelivered: true también factura lo que aún no se entrega. Con deliver: true, al timbrar se registra la entrega de lo que lleva (venta de mostrador).

El pedido queda paid cuando sus facturas se pagan: una PUE al timbrarse, una PPD con sus complementos de pago o al conciliar el depósito. invoices trae cada factura con lo que falta pagar (balance), y paid_total la suma pagada. Si cancela una factura, lo que llevaba se puede volver a facturar.

Mandarlo a su cliente

POST /v1/sales_orders/{id}/send lo manda por correo con su PDF y la liga (url) donde su cliente lo confirma, firma cada entrega con «Ya lo recibí», descarga sus remisiones y abre sus facturas. Con "send_email": false solo contesta url. GET /v1/sales_orders/{id}/pdf da el PDF.

Eventos

EventoCuándo
sales_order.confirmedSe confirmó (por la API o desde la app).
sales_order.customer_confirmedSu cliente lo confirmó en su liga (customer_confirmed_at).
sales_order.deliveredYa salió todo lo pedido (delivered_at).
sales_order.paidSus facturas quedaron pagadas (paid_at).
sales_order.canceledSe canceló (cancel_reason).

Cerrar, cancelar o reabrir

RutaPara qué
POST /v1/sales_orders/{id}/closeLo da por terminado aunque quede algo pendiente, y libera lo apartado.
POST /v1/sales_orders/{id}/cancelSolo sin entregas ni facturas timbradas. Borra sus facturas en borrador y libera lo apartado.
POST /v1/sales_orders/{id}/reopenUno cerrado o cancelado vuelve a estar abierto.
DELETE /v1/sales_orders/{id}Borra un borrador.

close y cancel aceptan reason, que queda en su historial.