currency de "MXN". No hay
decimales, no hay otra moneda y no hay cadenas con formato: 19600 es
MX$196.00.
Una tarifa, repartida entre dos
Un envío cuesta un solo número,fee_cents. Es el costo completo de mover el
pedido, calculado para esa distancia, ese momento y ese método de pago.
Un viaje en coche lleva su recargo dentro de este mismo número (consulta
enviarlo en coche).
Ese número se reparte entre dos pagadores:
business_fee_share, un porcentaje de 0 a 100 que dice cuánto de la tarifa
absorbes tú:
business_fee_share: 100significa que tú pagas toda la tarifa de envío y el cliente no aporta nada. Envío gratis, visto desde el cliente.business_fee_share: 0significa que el cliente la paga completa.- Cualquier valor intermedio la reparte.
default_business_fee_share, así que puedes fijar la
política una vez, y cualquier pedido individual puede sobrescribirla.
El valor del pedido en sí, order_value_cents, es aparte de todo esto. Listo
nunca le suma la tarifa ni se la descuenta.
Cómo ponerle tope a lo que absorbes
Cuando tu regla es un monto y no un porcentaje, mandabusiness_fee_cap_cents:
un tope absoluto, en centavos, sobre lo que pagas tú.
fee_cents igual que antes. Cada centavo que el tope te impide absorber es un
centavo que termina pagando tu cliente.
El arreglo más común es business_fee_share: 100 con un tope, que se lee como
“yo cubro el envío hasta MX$30 y el cliente paga lo que se pase". Un tope con un
porcentaje más bajo le pone techo a ese porcentaje: `50` con `3000` es "la mitad
de la tarifa, pero nunca más de MX$30”.
Manda el monto en lugar de convertirlo tú a porcentaje. Un porcentaje solo es un
tope contra la tarifa con la que lo sacaste, así que uno convertido se rompe en
cuanto la tarifa real no es la misma. MX$30 de una cotización de MX$100 es 30%, y
30% de los MX$120 que de verdad cuesta el viaje son MX$36: por encima del tope
que querías poner. Manda 3000 y se aplica a la tarifa que se está repartiendo,
sea cual sea.
Dos cosas que conviene saber:
- No existe un tope por defecto a nivel tienda. Un tope casi siempre depende del pedido, así que es un campo por pedido y no un ajuste que dejas fijo.
- Un tope más alto que la tarifa no es un error. Nomás no aplica en ese pedido, y el porcentaje reparte solo.
Tu parte sale del saldo
Tu cuenta tiene un saldo prepagado por modo, ybusiness_fee_cents se carga a
ese saldo cuando se crea el envío, antes de llamar a ningún repartidor.
Todo lo que hay en ese saldo se puede gastar en envíos en cuanto llega, pero no
todo se puede retirar de inmediato: el efectivo que cobraron tus repartidores y
el dinero que metiste con tarjeta se retienen un tiempo antes de poder salir. Ve
saldo y retiros.
Si el saldo no alcanza, la creación se rechaza con 402 insufficient_balance y
no se despacha nada. Ese es todo el candado del saldo en una creación: no hay
crédito, no hay sobregiro y no hay despacho parcial.
Cada tienda real lleva además un Plan Listo, un cargo mensual por tienda. Una
tienda que creas tú la pagas desde el día en que la creas en modo real, con este
saldo o con una tarjeta guardada en tu cuenta. Un restaurante que
se conecta contigo con su mes en
curso ya pagado sigue pagando su propio plan hasta su siguiente renovación: su
tienda dice paid_by: "store", y pending_paid_by y pending_paid_by_on dicen
el día en que el plan pasa a ti, que es el de tu primer cargo. Si al conectarse
su mes en curso está sin pagar, el plan pasa a ti ese mismo día: el mes que no
había pagado se anula, así que no se le cobra a nadie, y ese mismo día se te
cobra un mes completo. Si el restaurante da de baja su propio plan antes
de ese día, el plan nunca pasa a ti.
El plan es un candado aparte: a una tienda real cuyo plan quedó sin pagar por
quien lo paga, o que ya terminó, se le rechazan las cotizaciones y las
creaciones con 402 plan_required, tenga lo que tenga el saldo. Lo que el
restaurante todavía deba de su propio plan nunca detiene una tienda cuyo plan
pagas tú. Un mes pagado con el saldo aparece en GET /v1/ledger como una fila
plan_charge con la tienda. Ve plan y cobro.
La parte del cliente nunca toca el saldo. Se le cobra a él directamente: va
incluida en lo que el repartidor cobra en un pedido en efectivo, o sumada al
cargo en un pedido con tarjeta.
La propina del repartidor sale del saldo de la misma forma. El tip_cents de una
creación prepaid se carga junto con tu parte de la tarifa, como un solo
movimiento por un solo pedido, y el saldo tiene que alcanzar para los dos o la
creación se rechaza. La propina no es parte de fee_cents y nunca se reparte con
tu cliente, así que cambia lo que pagas tú y nada más. Listo no se queda con
ninguna parte: el monto completo le llega al repartidor. Las reglas del campo
están en cotiza y crea.
Los pedidos prepagados son siempre tuyos por completoCon
payment_method: prepaid, la parte es siempre 100 y business_fee_cap_cents
se ignora. En un pedido prepagado Listo nunca le cobra a tu cliente, así que no
hay a quién cobrarle una parte, y un tope justamente sirve para pasarle parte de
la tarifa a ese nadie. Lo que pasa con una parte que envíes depende de dónde la
envíes:- En una cotización, un
business_fee_sharedistinto de 100 se rechaza con422 validation_failednombrandobusiness_fee_share, así que un precio que le muestres a tu cliente nunca es uno que no se pueda reservar. Una cotización prepagada que no envía parte se calcula con 100, sin importar el valor por defecto de tu tienda. Lo mismo pasa con una cotización sinpayment_method, porque la única entrega que puede enlazarla es una prepagada: se calcula como una cotización prepagada y rechaza una parte distinta de 100 de la misma forma. - En una creación sin cotización, la parte que envíes se fuerza a 100 y el pedido se crea.
- Una creación que enlaza una cotización necesita una cotización que se haya
pedido con
payment_method: prepaido sinpayment_method.
De qué saldo gasta cada tienda
Por defecto, cada tienda que creas gasta del saldo de arriba: lo fondeas una vez y envías desde todas tus sucursales. Es lo que la mayoría de las integraciones quiere, y no cambió nada. Una tienda también puede ser dueña de su dinero. Cada tienda lleva unaccess_tier:
Dónde vive el dinero de una tienda y quién puede entrar son un solo ajuste y no
dos, porque ninguna mitad se sostiene sola: a una tienda no se le puede mostrar
un saldo que no es suyo, y una tienda dueña de su saldo necesita dónde verlo.
Cada objeto de tienda lleva además un
billing de solo lectura, "partner" o
"store", que dice en cuál de los dos arreglos está. Lee ese campo en lugar de
deducir tú mismo quién paga a partir del tier.
Una tienda en full también puede despachar pedidos propios desde la consola, y
esos envíos te llegan como cualquier otro. Ve
de dónde viene un envío.
Un restaurante que ya usa Listo con una cuenta propia llega a full por otro
camino: se conecta, nunca se crea. Su dueño aprueba la conexión en una página de
Listo, y la tienda que recibes ya tiene access_tier: "full" y
billing: "store", con la consola, el saldo y el historial que ya tenía. Ve
conecta un restaurante que ya usa Listo.
En una tienda dueña de su dinero, los dos lados del pedido caen en su saldo: tu
parte de la tarifa se carga ahí al crear el envío, y el efectivo que cobra el
repartidor se abona ahí cuando llega. Sus ingresos fondean sus propios envíos, y
su dueño retira a su propio banco.
Cambiar el tier aplica al siguiente envío. Los pedidos que ya van en camino
siguen cobrándose a la cuenta con la que empezaron, así que nada en curso puede
terminar con su cargo en un saldo y su abono en otro.
Una tienda de prueba no puede ser dueña de su dinero. El dinero de juego y el
dinero real nunca comparten cuenta, así que el access_tier de una tienda de
prueba siempre es api_only, y mandar cualquier otro valor se rechaza con
422 validation_failed.
Cómo leer el saldo y los movimientos de una tienda, y cómo darle un acceso a su
dueño, están en saldo y retiros.
Cómo cobrar tu propio margen
Elmarkup_cents de una tienda suma una cantidad fija a la tarifa de cada envío
de esa tienda, y te abona esa cantidad a tu saldo cuando el envío llega. Así le
pones precio a tu propio servicio dentro de los pedidos que despachas, sin montar
un segundo sistema de cobranza.
Es parte de fee_cents como cualquier otro componente, así que
business_fee_share lo reparte igual que al resto de la tarifa, y las
cotizaciones lo incluyen: una cotización que consumes cobra el margen con el que
se cotizó, aunque hayas cambiado el ajuste mientras tanto.
Dos consecuencias que conviene tener en cuenta:
- En un pedido en efectivo el margen viaja dentro de lo que cobra el repartidor, así que cuenta para el límite de MX$1,000 en efectivo.
- El abono se registra cuando el envío se entrega, no cuando se crea. Un pedido cancelado o devuelto no cobra nada, te reembolsa tu parte completa y no paga margen, así que no hay ninguna reversa que manejar.
En qué termina cada método de pago
El efectivo es el único método que mete dinero a tu saldo. Ve
efectivo en la puerta.
Cuando el envío no ocurre
Si un envío termina encanceled, returned o no_courier, tu parte de la
tarifa se reembolsa al saldo, y también cualquier propina que hayas mandado con
él. No se te cobra un viaje que no entregó.
Una sola cosa puede descontarse de ese reembolso. Una cancelación lo bastante
tarde como para que ya haya un repartidor trabajando en el pedido, o un viaje de
devolución tras una entrega fallida, significa que un viaje sí se manejó, y ese
viaje se te cobra como un cargo aparte: la tarifa de envío por cada tramo que se
manejó, menos tu propio margen de tienda. Una cancelación tardía es un tramo. Una
devolución son dos, el viaje de ida y el de vuelta. Cancela antes de que haya un
repartidor comprometido, o termina en no_courier, y no se manejó nada: el
reembolso es íntegro.
Esto cambió el 29 de agosto de 2026. Antes estos cargos eran lo que ese viaje le
costaba a Listo, así que en los mismos pedidos ahora son más altos que antes.
Son dos movimientos separados y no un solo reembolso calladamente reducido, así
que siempre se distingue qué regresó y qué se cobró. Los dos se pueden leer, en
dos lugares: el cargo va en el envío mismo, en charges, y tanto el reembolso
como el cargo son filas de GET /v1/ledger.
Un cargo también puede regresar después. Algunos de estos viajes son costos que
Listo reclama por tu cuenta después del hecho, y cuando eso prospera el dinero
vuelve como un tercer movimiento, una fila provider_charge_reversal en el
historial: el mismo monto, abonado completo, contra el mismo pedido, y a veces
semanas después del cargo. Es una fila nueva y no una reescritura de la anterior,
así que el cargo que ya le facturaste a tu propio comercio se queda tal cual y el
abono es algo que puedes trasladarle a su vez. Cobra el cargo cuando llegue. No
dejes un pedido abierto esperando una reversión: no todos los cargos son
elegibles para una, y uno elegible todavía puede ser rechazado.
charges es un arreglo que trae todo envío, y en casi todos viene vacío. type
es cancellation_fee o return_fee, que dice de qué fue el cargo, y aquí
amount_cents es positivo: es lo que se te cobró. Ese mismo dinero en los
movimientos de tu saldo es una fila cuyo type es provider_charge, con el
signo negativo que dice hacia dónde se movió en la cuenta. Los dos campos type
son vocabularios distintos, así que no busques return_fee en los movimientos.
Cuánto sale el cargo depende del viaje y de cuántos tramos se manejaron, así que
lee el número en lugar de darlo por hecho, y charged_at es cuándo se registró,
que no es cuándo terminó el envío. Recorre el arreglo en vez de agarrar charges[0]: un cargo no tiene id
propio, el envío del que cuelga es su manija, y ese id del envío es también con
lo que lo empatas contra los movimientos de tu saldo.
Un reembolso que tú le hagas a tu propio cliente por un envío que sí llegó no
te devuelve la tarifa de envío. El viaje se hizo y se pagó.
Cómo leer los números de vuelta
Cada envío lleva todas estas cifras, así que no hay nada que recalcular:fee_cents es el total y nada lo desglosa más. Cómo divide Listo ese total por
dentro no forma parte de lo que se te cobra, y no se publica.
tip_cents va al lado de esas cifras, no dentro de ellas. Viene en todos los
envíos, y cuando no hay propina viene en 0 en lugar de faltar, así que lees un
entero en vez de andar preguntando si el campo existe. Lo que se le cargó a tu
saldo por un pedido es business_fee_cents + tip_cents.
Hay dos endpoints que responden por la cuenta detrás de esos números.
GET /v1/balance es lo que tiene ahora mismo; GET /v1/ledger es cómo llegó
ahí, una fila por movimiento, las mismas filas que el panel de socios muestra en
su página de Movimientos. Cuando rehagas tu contabilidad, ármala desde esos
movimientos y no desde los eventos que recibiste: el historial de movimientos es
el registro, y un evento nunca fue más que un aviso sobre él. Ve
saldo y retiros.
Los precios nunca se inventan
Si un envío no se puede cotizar, se rechaza. No existe una tarifa de respaldo en ninguna parte del sistema, así que nunca vas a recibir un número inventado porque el real no estaba disponible. Según el motivo, ese rechazo es503 provider_unavailable (temporal, reintenta), 409 no_couriers_available
(nadie cerca del viaje está libre en este momento, reintenta en unos minutos),
422 out_of_service_area (demasiado lejos de esa tienda) o
422 address_undeliverable (la dirección misma).