{
"error": {
"code": "invalid_api_key",
"message": "The API key is missing, revoked, or not valid for this mode.",
"param": null,
"retryable": false,
"doc_url": "https://docs.listo.delivery/en/errors/invalid_api_key",
"request_id": "0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10"
}
}
{
"error": {
"code": "read_only_key",
"message": "This API key is read-only. Use a key without the read-only setting to create, change or cancel anything.",
"param": null,
"retryable": false,
"doc_url": "https://docs.listo.delivery/en/errors/read_only_key",
"request_id": "0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10"
}
}
{
"error": {
"code": "not_found",
"message": "No resource with that id exists for this API key.",
"param": null,
"retryable": false,
"doc_url": "https://docs.listo.delivery/en/errors/not_found",
"request_id": "0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10"
}
}
{
"error": {
"code": "pickup_point_pending",
"message": "This store's pickup point is not confirmed yet, so no courier can be requested from it. Retry the same request shortly.",
"param": null,
"retryable": true,
"doc_url": "https://docs.listo.delivery/en/errors/pickup_point_pending",
"request_id": "0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10"
}
}
{
"error": {
"code": "cash_over_cap",
"message": "The cash amount is over the collection limit. Use card instead.",
"param": null,
"retryable": false,
"doc_url": "https://docs.listo.delivery/en/errors/cash_over_cap",
"request_id": "0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10"
}
}
Cotiza un viaje y reserva ese precio para que lo vincules. El precio se fija en el momento en que pides la cotización: vincula su id al crear el envío y al pedido se le cobra el fee_cents y el reparto que te mostramos.
La red de repartidores reserva el viaje al crear el envío, y lo que reserva puede diferir un poco del precio cotizado. Reservamos justo la cotización que te mostramos siempre que siga vigente, así que es raro. Cuando pasa, la diferencia aparece en tu historial como su propia línea (requote_adjustment, ver GET /v1/ledger), negativa cuando el viaje reservado costó más y positiva cuando costó menos. Nunca cambia el fee_cents, el reparto ni el total del pedido que ve tu cliente.
Las cotizaciones vencen, y expires_at te dice cuándo. Vincular una cotización vencida o ya gastada es un 400; pide una nueva. Vincularla es opcional, y una creación sin ella se cotiza en línea al precio que haya en ese momento.
cash_to_collect_cents es lo que el repartidor cobra en la puerta en un pedido en efectivo: el valor de la mercancía más la parte del cliente de la tarifa.
business_fee_share y business_fee_cap_cents dicen cómo se reparte la tarifa de envío entre tú y tu cliente. Una cotización prepaid es distinta: ya cobraste a tu cliente, así que toda la tarifa es tuya y el reparto queda fijo en 100 sin tope. Una cotización que no nombra payment_method se cotiza igual, porque el único envío que puede vincularla es uno prepaid. En cualquiera de los dos, un business_fee_share distinto de 100 se rechaza con 422 validation_failed nombrando business_fee_share, un business_fee_cap_cents válido se ignora (uno que no es número se rechaza primero como error de forma), y una cotización que no envía ninguno se cotiza en 100, sin importar cuál sea el reparto predeterminado de tu tienda. Ese es el reparto que reserva una creación de envío prepaid, así que una cotización que quieras vincular a un envío prepaid debe nombrar payment_method: prepaid o no nombrar ningún método. Para repartir la tarifa con tu cliente, nombra cash o card.
vehicle es moto (el predeterminado) o car. Un auto es un sedán: podemos garantizar un auto, nunca una camioneta, y hay menos autos que motos, así que uno puede tardar más en asignarse. Un auto agrega un recargo que va DENTRO de fee_cents y se reparte como el resto de la tarifa, así que el número que te cotizan es el precio completo; no hay una línea aparte para él.
manifest.items es opcional y acepta los mismos elementos {name, quantity, size} que la creación de envío. size es uno de small (el predeterminado), medium, large o xlarge, y es el único campo de un elemento que puede cambiar el precio: un elemento de tamaño xlarge convierte el viaje en auto aunque vehicle diga moto. Nada más lo hace, ni siquiera el peso. El vehicle de la respuesta dice para qué viaje es la tarifa, sin importar qué lo volvió así. Cotiza con el mismo carrito con el que vas a crear el envío: la creación se sujeta al vehículo con el que se fijó el precio de esta cotización.
Un carrito demasiado grande para un solo viaje de repartidor se rechaza con 422 order_too_large, nombrando manifest.items, antes de cotizar nada. Divídelo en dos envíos.
Listo cotiza en pesos mexicanos y entrega en México. Una tienda que resulte estar en otro país se rechaza aquí con 422 unsupported_country, que es definitivo: no es el provider_unavailable reintentable, y ningún reintento de la misma tienda puede funcionar. Solo te encontrarás con él en una tienda que ubicaste tú mismo, con lat/lng, ya que una tienda que ubicamos nosotros se rechaza al crearla.
Una tienda cuyo punto de recolección no podemos avalar por ahora se rechaza con 409 pickup_point_pending, porque mientras no esté confirmado, un repartidor podría ir al lugar equivocado. Por lo general la dirección de la tienda acaba de cambiar y la confirmación todavía no llega, pero no siempre, así que no lo leas como “el comercio se mudó”. Este SÍ es reintentable: nada en tu solicitud está mal, y la llamada idéntica funciona en cuanto el punto de recolección se confirma. Rechaza la tienda y no el viaje, así que un punto de entrega distinto no ayudará.
Reinténtalo con esperas de minutos, durante un número limitado de intentos, y luego ponlo frente a una persona en lugar de seguir consultando. La mayoría de los cambios se resuelven solos en minutos; unos pocos los detiene algo que solo nuestro equipo puede liberar y tardan bastante más, y esta respuesta no distingue entre los dos. El restaurante también puede desbloquearlo por su cuenta desde su propia consola de Listo, que suele ser la vía más rápida de las dos.
Cuando todos los repartidores cerca del viaje están ocupados, la cotización se rechaza con 409 no_couriers_available y no se cotiza nada. No es una caída del servicio y nada en tu solicitud está mal: SÍ es reintentable, y la llamada idéntica se cotiza en cuanto un repartidor queda libre, por lo general en minutos. Reinténtalo tras unos minutos, durante un número limitado de intentos, y luego avisa a quien espera el pedido en lugar de seguir consultando. Es la misma palabra que un envío que terminó sin repartidor trae en failure_reason.
Una tienda real cuyo Plan Listo no está pagado al día se rechaza con 402 plan_required, porque la creación rechazaría el envío que cotiza esta cotización. error.message nombra el motivo: no hay plan activo, un cobro pendiente, un plan que terminó en una fecha dada, un plan cuyos envíos incluidos del ciclo ya se usaron todos, o una tienda que no puede pedir repartidores en este momento. No es retryable: la llamada idéntica falla hasta que el plan se pague o se reinicie, o hasta que el ciclo se renueve. Consulta Plan y facturación.
{
"error": {
"code": "invalid_api_key",
"message": "The API key is missing, revoked, or not valid for this mode.",
"param": null,
"retryable": false,
"doc_url": "https://docs.listo.delivery/en/errors/invalid_api_key",
"request_id": "0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10"
}
}
{
"error": {
"code": "read_only_key",
"message": "This API key is read-only. Use a key without the read-only setting to create, change or cancel anything.",
"param": null,
"retryable": false,
"doc_url": "https://docs.listo.delivery/en/errors/read_only_key",
"request_id": "0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10"
}
}
{
"error": {
"code": "not_found",
"message": "No resource with that id exists for this API key.",
"param": null,
"retryable": false,
"doc_url": "https://docs.listo.delivery/en/errors/not_found",
"request_id": "0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10"
}
}
{
"error": {
"code": "pickup_point_pending",
"message": "This store's pickup point is not confirmed yet, so no courier can be requested from it. Retry the same request shortly.",
"param": null,
"retryable": true,
"doc_url": "https://docs.listo.delivery/en/errors/pickup_point_pending",
"request_id": "0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10"
}
}
{
"error": {
"code": "cash_over_cap",
"message": "The cash amount is over the collection limit. Use card instead.",
"param": null,
"retryable": false,
"doc_url": "https://docs.listo.delivery/en/errors/cash_over_cap",
"request_id": "0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10"
}
}
Tu llave de API, enviada como Authorization: Bearer <key>. Las llaves reales y de prueba son distintas; la llave que envías decide en qué modo actúa la llamada. Para probar llamadas, usa una llave de prueba (empieza con lst_test_): no se envía ningún repartidor real y no se mueve dinero real, pero los webhooks se disparan y el dropoff.phone que des puede recibir mensajes de WhatsApp, así que usa tu propio número. Una llave real (empieza con lst_live_) reserva y cobra envíos reales.
La lista descriptiva de artículos para el repartidor. El dinero nunca sale de ella;
su único efecto en el viaje es que un artículo xlarge lo convierte en auto.
Ausente, null, {} y {"items": null} significan todos que no hay carrito.
Show child attributes
Respuesta
Creado.
Un envío cotizado y apartado por un momento. Pasa id a
POST /v1/deliveries como quote_id para reservar exactamente a este precio.
La tarifa de envío total, en centavos, y el número al que se sujeta una reserva
de esta cotización. business_fee_cents más customer_fee_cents siempre suman esa cifra.
Lo que cobra el repartidor en la puerta en un pedido en efectivo: el valor del
pedido más la parte de la tarifa que paga el cliente. Null en toda cotización
que no sea en efectivo, lo cual no es lo mismo que 0 (un pedido en efectivo
que no cobra nada).
Para qué se armó este precio: car cuando pediste uno o un
artículo tiene tamaño xlarge, moto en otro caso. Siempre presente.
Opciones disponibles:
moto,
car
Ejemplo:
"moto"
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Listo Partner API","description":"Quote, create and track deliveries, and manage your balance, through the Listo Partner Delivery API.","colors":{"primary":"#15171C","light":"#F4F4F5","dark":"#15171C"},"logo":{"light":"https://mintcdn.com/listo-c5a11a00/mreCwXzcEA2bSZog/logo/light.svg?fit=max\u0026auto=format\u0026n=mreCwXzcEA2bSZog\u0026q=85\u0026s=da2b28d464dc6987329dfd5971085dd7","dark":"https://mintcdn.com/listo-c5a11a00/mreCwXzcEA2bSZog/logo/dark.svg?fit=max\u0026auto=format\u0026n=mreCwXzcEA2bSZog\u0026q=85\u0026s=ad013a6a0d979eb46c1cea550ec6a460","href":"/"},"favicon":"https://mintcdn.com/listo-c5a11a00/mreCwXzcEA2bSZog/favicon.svg?fit=max\u0026auto=format\u0026n=mreCwXzcEA2bSZog\u0026q=85\u0026s=f790496dfe0c2ad9971d8de95e45be8d","api":{"playground":{"display":"interactive"}},"thumbnails":{"preset":"minimal","appearance":"dark","background":"https://mintcdn.com/listo-c5a11a00/lF-Gm03tnDMquh_z/images/og-background.jpg?fit=max\u0026auto=format\u0026n=lF-Gm03tnDMquh_z\u0026q=85\u0026s=d73469201c8ffe28afc598d23fde5d84","fonts":{"family":"Archivo ExtraBold","source":"fonts/archivo-800.ttf","format":"ttf"},"eyebrow":{"source":"none"}},"markdown":{"instructions":["Notes on the Listo Partner Delivery API:","- Every endpoint is under `https://api.listo.delivery/v1/` and authenticates with a bearer API key.","- This documentation site is at https://docs.listo.delivery. The full machine-readable reference is the OpenAPI document at https://api.listo.delivery/docs/openapi.yaml (served by the API host, not by this site).","- Any page of this site is also available as raw markdown by appending `.md` to its URL, for example https://docs.listo.delivery/en/guides/webhooks.md. The index of every page is https://docs.listo.delivery/llms.txt and all of them in one file is https://docs.listo.delivery/llms-full.txt.","- Every page is published in English under https://docs.listo.delivery/en/ and in Spanish under https://docs.listo.delivery/es/, with the same path after the language. The API reference is under https://docs.listo.delivery/api-reference/ in English and https://docs.listo.delivery/es/api-reference/ in Spanish.","- To debug an integration yourself: `GET /v1/request_logs` lists the calls your keys made with what you sent and what was answered, `GET /v1/events` lists the events Listo emitted, `GET /v1/webhook_deliveries` lists every attempt to deliver them, `POST /v1/events/{id}/resend` sends one event again and `POST /v1/test_webhooks` sends a sample event (`\"test\": true`). The page https://docs.listo.delivery/en/guides/debugging describes them. A resent event is a snapshot from when it happened; `GET /v1/deliveries` is still how you recover current state.","- Every error response has `error.doc_url`, a page that explains that error code and what to do, and `error.request_id`, the same value as the `X-Request-Id` response header. All the pages are listed at https://docs.listo.delivery/en/errors. Filter `GET /v1/request_logs` with `request_id` to read the logged call.","- A `409 account_exists` from `POST /v1/stores` means the restaurant already has its own Listo account: connect it instead of creating it, as the page https://docs.listo.delivery/en/guides/connect-existing-account describes.","- Every live store carries one Plan Listo, charged to the partner. The exception is a connected restaurant that had already paid its current month: it keeps paying its own plan until its next renewal, shown as `paid_by: \"store\"` with the handover date in `pending_paid_by_on`. A `402 plan_required` from a quote, a delivery create or a retry means the store's plan is not paid or has ended; the page https://docs.listo.delivery/en/guides/plan-and-billing describes the plan, the `plan` block on a store and how to end or restart it.","- An AI assistant (Claude Code, Cursor, Codex) can act through the same API key at `https://api.listo.delivery/mcp`, an MCP server over Streamable HTTP authenticated with `Authorization: Bearer \u003cAPI key>`. Every tool runs the matching `/v1/` endpoint, and each one that moves money first previews and then needs a confirmation token; the page https://docs.listo.delivery/en/guides/connect-ai-client lists the tools and describes the two steps."]},"styling":{"latex":true},"navigation":{"languages":[{"language":"en","default":true,"navbar":{"links":[{"href":"https://status.listo.delivery","label":"Status"}]},"href":"en/quickstart"},{"language":"es","navbar":{"links":[{"href":"https://status.listo.delivery","label":"Estado del servicio"}]},"href":"es/quickstart"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"listo-c5a11a00","hasAudioNarration":false,"actualSubdomain":"listo-c5a11a00","customDomains":["docs.listo.delivery"],"gitSource":{"type":"github","owner":"davidalejandroaguilar","repo":"listo","deployBranch":"main","contentDirectory":"docs-site","isPrivate":true,"mountPath":"","label":"","_id":"6aed6954347cccfbc77ed1c5"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aeeb167ae7fce64eae954de","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"en","tag":"Errors","count":43},{"language":"en","tag":"Reference","count":43},{"language":"es","tag":"Errores","count":43},{"language":"es","tag":"Referencia","count":43},{"language":"en","tag":"Guides","count":9},{"language":"es","tag":"Guías","count":9},{"language":"en","tag":"Stores","count":8},{"language":"es","tag":"Tiendas","count":8},{"language":"en","tag":"Deliveries","count":7},{"language":"es","tag":"Envíos","count":7},{"language":"en","tag":"Webhooks","count":6},{"language":"es","tag":"Webhooks","count":6},{"language":"en","tag":"Concepts","count":5},{"language":"es","tag":"Conceptos","count":5},{"language":"en","tag":"Card onboarding","count":4},{"language":"en","tag":"Events","count":4},{"language":"es","tag":"Alta de cobros con tarjeta","count":4},{"language":"es","tag":"Eventos","count":4},{"language":"en","tag":"Withdrawals","count":3},{"language":"es","tag":"Retiros","count":3}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":":is(#sidebar-content,#mobile-nav) li[data-active=\"true\"]>a{background-color:#ffc400;color:#15171c}"}],"page":{"pagePath":"es/api-reference/quotes/price-a-delivery","slug":"/es/api-reference/quotes/price-a-delivery","pageMetadata":{"title":"Cotiza un envío","description":"Cotiza un viaje y reserva ese precio para que lo vincules. El precio se fija en el momento en que pides la cotización: vincula su `id` al crear el envío y al pedido se le cobra el `fee_cents` y el reparto que te mostramos.\n\nLa red de repartidores reserva el viaje al crear el envío, y lo que reserva puede diferir un poco del precio cotizado. Reservamos justo la cotización que te mostramos siempre que siga vigente, así que es raro. Cuando pasa, la diferencia aparece en tu historial como su propia línea (`requote_adjustment`, ver `GET /v1/ledger`), negativa cuando el viaje reservado costó más y positiva cuando costó menos. Nunca cambia el `fee_cents`, el reparto ni el total del pedido que ve tu cliente.\n\nLas cotizaciones vencen, y `expires_at` te dice cuándo. Vincular una cotización vencida o ya gastada es un `400`; pide una nueva. Vincularla es opcional, y una creación sin ella se cotiza en línea al precio que haya en ese momento.\n\n`cash_to_collect_cents` es lo que el repartidor cobra en la puerta en un pedido en efectivo: el valor de la mercancía más la parte del cliente de la tarifa.\n\n`business_fee_share` y `business_fee_cap_cents` dicen cómo se reparte la tarifa de envío entre tú y tu cliente. Una cotización `prepaid` es distinta: ya cobraste a tu cliente, así que toda la tarifa es tuya y el reparto queda fijo en 100 sin tope. Una cotización que no nombra `payment_method` se cotiza igual, porque el único envío que puede vincularla es uno `prepaid`. En cualquiera de los dos, un `business_fee_share` distinto de 100 se rechaza con `422\nvalidation_failed` nombrando `business_fee_share`, un `business_fee_cap_cents` válido se ignora (uno que no es número se rechaza primero como error de forma), y una cotización que no envía ninguno se cotiza en 100, sin importar cuál sea el reparto predeterminado de tu tienda. Ese es el reparto que reserva una creación de envío `prepaid`, así que una cotización que quieras vincular a un envío `prepaid` debe nombrar `payment_method: prepaid` o no nombrar ningún método. Para repartir la tarifa con tu cliente, nombra `cash` o `card`.\n\n`vehicle` es `moto` (el predeterminado) o `car`. Un auto es un sedán: podemos garantizar un auto, nunca una camioneta, y hay menos autos que motos, así que uno puede tardar más en asignarse. Un auto agrega un recargo que va DENTRO de `fee_cents` y se reparte como el resto de la tarifa, así que el número que te cotizan es el precio completo; no hay una línea aparte para él.\n\n`manifest.items` es opcional y acepta los mismos elementos `{name, quantity,\nsize}` que la creación de envío. `size` es uno de `small` (el predeterminado), `medium`, `large` o `xlarge`, y es el único campo de un elemento que puede cambiar el precio: un elemento de tamaño `xlarge` convierte el viaje en auto aunque `vehicle` diga `moto`. Nada más lo hace, ni siquiera el peso. El `vehicle` de la respuesta dice para qué viaje es la tarifa, sin importar qué lo volvió así. Cotiza con el mismo carrito con el que vas a crear el envío: la creación se sujeta al vehículo con el que se fijó el precio de esta cotización.\n\nUn carrito demasiado grande para un solo viaje de repartidor se rechaza con `422\norder_too_large`, nombrando `manifest.items`, antes de cotizar nada. Divídelo en dos envíos.\n\nListo cotiza en pesos mexicanos y entrega en México. Una tienda que resulte estar en otro país se rechaza aquí con `422\nunsupported_country`, que es definitivo: no es el `provider_unavailable` reintentable, y ningún reintento de la misma tienda puede funcionar. Solo te encontrarás con él en una tienda que ubicaste tú mismo, con `lat`/`lng`, ya que una tienda que ubicamos nosotros se rechaza al crearla.\n\nUna tienda cuyo punto de recolección no podemos avalar por ahora se rechaza con `409 pickup_point_pending`, porque mientras no esté confirmado, un repartidor podría ir al lugar equivocado. Por lo general la dirección de la tienda acaba de cambiar y la confirmación todavía no llega, pero no siempre, así que no lo leas como \"el comercio se mudó\". Este SÍ es reintentable: nada en tu solicitud está mal, y la llamada idéntica funciona en cuanto el punto de recolección se confirma. Rechaza la tienda y no el viaje, así que un punto de entrega distinto no ayudará.\n\nReinténtalo con esperas de minutos, durante un número limitado de intentos, y luego ponlo frente a una persona en lugar de seguir consultando. La mayoría de los cambios se resuelven solos en minutos; unos pocos los detiene algo que solo nuestro equipo puede liberar y tardan bastante más, y esta respuesta no distingue entre los dos. El restaurante también puede desbloquearlo por su cuenta desde su propia consola de Listo, que suele ser la vía más rápida de las dos.\n\nCuando todos los repartidores cerca del viaje están ocupados, la cotización se rechaza con `409 no_couriers_available` y no se cotiza nada. No es una caída del servicio y nada en tu solicitud está mal: SÍ es reintentable, y la llamada idéntica se cotiza en cuanto un repartidor queda libre, por lo general en minutos. Reinténtalo tras unos minutos, durante un número limitado de intentos, y luego avisa a quien espera el pedido en lugar de seguir consultando. Es la misma palabra que un envío que terminó sin repartidor trae en `failure_reason`.\n\nUna tienda real cuyo Plan Listo no está pagado al día se rechaza con `402\nplan_required`, porque la creación rechazaría el envío que cotiza esta cotización. `error.message` nombra el motivo: no hay plan activo, un cobro pendiente, un plan que terminó en una fecha dada, un plan cuyos envíos incluidos del ciclo ya se usaron todos, o una tienda que no puede pedir repartidores en este momento. No es `retryable`: la llamada idéntica falla hasta que el plan se pague o se reinicie, o hasta que el ciclo se renueve. Consulta [Plan y facturación](https://docs.listo.delivery/es/guides/plan-and-billing).\n","deprecated":null,"version":null,"sidebarTitle":"Cotiza un envío","openapi":"/openapi/es.yaml post /v1/quotes","href":"/es/api-reference/quotes/price-a-delivery","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n a: \"a\",\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Cotiza un viaje y reserva ese precio para que lo vincules. El precio se fija en el momento en que pides la cotización: vincula su \", _jsx(_components.code, {\n children: \"id\"\n }), \" al crear el envío y al pedido se le cobra el \", _jsx(_components.code, {\n children: \"fee_cents\"\n }), \" y el reparto que te mostramos.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"La red de repartidores reserva el viaje al crear el envío, y lo que reserva puede diferir un poco del precio cotizado. Reservamos justo la cotización que te mostramos siempre que siga vigente, así que es raro. Cuando pasa, la diferencia aparece en tu historial como su propia línea (\", _jsx(_components.code, {\n children: \"requote_adjustment\"\n }), \", ver \", _jsx(_components.code, {\n children: \"GET /v1/ledger\"\n }), \"), negativa cuando el viaje reservado costó más y positiva cuando costó menos. Nunca cambia el \", _jsx(_components.code, {\n children: \"fee_cents\"\n }), \", el reparto ni el total del pedido que ve tu cliente.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Las cotizaciones vencen, y \", _jsx(_components.code, {\n children: \"expires_at\"\n }), \" te dice cuándo. Vincular una cotización vencida o ya gastada es un \", _jsx(_components.code, {\n children: \"400\"\n }), \"; pide una nueva. Vincularla es opcional, y una creación sin ella se cotiza en línea al precio que haya en ese momento.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"cash_to_collect_cents\"\n }), \" es lo que el repartidor cobra en la puerta en un pedido en efectivo: el valor de la mercancía más la parte del cliente de la tarifa.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"business_fee_share\"\n }), \" y \", _jsx(_components.code, {\n children: \"business_fee_cap_cents\"\n }), \" dicen cómo se reparte la tarifa de envío entre tú y tu cliente. Una cotización \", _jsx(_components.code, {\n children: \"prepaid\"\n }), \" es distinta: ya cobraste a tu cliente, así que toda la tarifa es tuya y el reparto queda fijo en 100 sin tope. Una cotización que no nombra \", _jsx(_components.code, {\n children: \"payment_method\"\n }), \" se cotiza igual, porque el único envío que puede vincularla es uno \", _jsx(_components.code, {\n children: \"prepaid\"\n }), \". En cualquiera de los dos, un \", _jsx(_components.code, {\n children: \"business_fee_share\"\n }), \" distinto de 100 se rechaza con \", _jsx(_components.code, {\n children: \"422 validation_failed\"\n }), \" nombrando \", _jsx(_components.code, {\n children: \"business_fee_share\"\n }), \", un \", _jsx(_components.code, {\n children: \"business_fee_cap_cents\"\n }), \" válido se ignora (uno que no es número se rechaza primero como error de forma), y una cotización que no envía ninguno se cotiza en 100, sin importar cuál sea el reparto predeterminado de tu tienda. Ese es el reparto que reserva una creación de envío \", _jsx(_components.code, {\n children: \"prepaid\"\n }), \", así que una cotización que quieras vincular a un envío \", _jsx(_components.code, {\n children: \"prepaid\"\n }), \" debe nombrar \", _jsx(_components.code, {\n children: \"payment_method: prepaid\"\n }), \" o no nombrar ningún método. Para repartir la tarifa con tu cliente, nombra \", _jsx(_components.code, {\n children: \"cash\"\n }), \" o \", _jsx(_components.code, {\n children: \"card\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"vehicle\"\n }), \" es \", _jsx(_components.code, {\n children: \"moto\"\n }), \" (el predeterminado) o \", _jsx(_components.code, {\n children: \"car\"\n }), \". Un auto es un sedán: podemos garantizar un auto, nunca una camioneta, y hay menos autos que motos, así que uno puede tardar más en asignarse. Un auto agrega un recargo que va DENTRO de \", _jsx(_components.code, {\n children: \"fee_cents\"\n }), \" y se reparte como el resto de la tarifa, así que el número que te cotizan es el precio completo; no hay una línea aparte para él.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"manifest.items\"\n }), \" es opcional y acepta los mismos elementos \", _jsx(_components.code, {\n children: \"{name, quantity, size}\"\n }), \" que la creación de envío. \", _jsx(_components.code, {\n children: \"size\"\n }), \" es uno de \", _jsx(_components.code, {\n children: \"small\"\n }), \" (el predeterminado), \", _jsx(_components.code, {\n children: \"medium\"\n }), \", \", _jsx(_components.code, {\n children: \"large\"\n }), \" o \", _jsx(_components.code, {\n children: \"xlarge\"\n }), \", y es el único campo de un elemento que puede cambiar el precio: un elemento de tamaño \", _jsx(_components.code, {\n children: \"xlarge\"\n }), \" convierte el viaje en auto aunque \", _jsx(_components.code, {\n children: \"vehicle\"\n }), \" diga \", _jsx(_components.code, {\n children: \"moto\"\n }), \". Nada más lo hace, ni siquiera el peso. El \", _jsx(_components.code, {\n children: \"vehicle\"\n }), \" de la respuesta dice para qué viaje es la tarifa, sin importar qué lo volvió así. Cotiza con el mismo carrito con el que vas a crear el envío: la creación se sujeta al vehículo con el que se fijó el precio de esta cotización.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Un carrito demasiado grande para un solo viaje de repartidor se rechaza con \", _jsx(_components.code, {\n children: \"422 order_too_large\"\n }), \", nombrando \", _jsx(_components.code, {\n children: \"manifest.items\"\n }), \", antes de cotizar nada. Divídelo en dos envíos.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Listo cotiza en pesos mexicanos y entrega en México. Una tienda que resulte estar en otro país se rechaza aquí con \", _jsx(_components.code, {\n children: \"422 unsupported_country\"\n }), \", que es definitivo: no es el \", _jsx(_components.code, {\n children: \"provider_unavailable\"\n }), \" reintentable, y ningún reintento de la misma tienda puede funcionar. Solo te encontrarás con él en una tienda que ubicaste tú mismo, con \", _jsx(_components.code, {\n children: \"lat\"\n }), \"/\", _jsx(_components.code, {\n children: \"lng\"\n }), \", ya que una tienda que ubicamos nosotros se rechaza al crearla.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Una tienda cuyo punto de recolección no podemos avalar por ahora se rechaza con \", _jsx(_components.code, {\n children: \"409 pickup_point_pending\"\n }), \", porque mientras no esté confirmado, un repartidor podría ir al lugar equivocado. Por lo general la dirección de la tienda acaba de cambiar y la confirmación todavía no llega, pero no siempre, así que no lo leas como “el comercio se mudó”. Este SÍ es reintentable: nada en tu solicitud está mal, y la llamada idéntica funciona en cuanto el punto de recolección se confirma. Rechaza la tienda y no el viaje, así que un punto de entrega distinto no ayudará.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"Reinténtalo con esperas de minutos, durante un número limitado de intentos, y luego ponlo frente a una persona en lugar de seguir consultando. La mayoría de los cambios se resuelven solos en minutos; unos pocos los detiene algo que solo nuestro equipo puede liberar y tardan bastante más, y esta respuesta no distingue entre los dos. El restaurante también puede desbloquearlo por su cuenta desde su propia consola de Listo, que suele ser la vía más rápida de las dos.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Cuando todos los repartidores cerca del viaje están ocupados, la cotización se rechaza con \", _jsx(_components.code, {\n children: \"409 no_couriers_available\"\n }), \" y no se cotiza nada. No es una caída del servicio y nada en tu solicitud está mal: SÍ es reintentable, y la llamada idéntica se cotiza en cuanto un repartidor queda libre, por lo general en minutos. Reinténtalo tras unos minutos, durante un número limitado de intentos, y luego avisa a quien espera el pedido en lugar de seguir consultando. Es la misma palabra que un envío que terminó sin repartidor trae en \", _jsx(_components.code, {\n children: \"failure_reason\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Una tienda real cuyo Plan Listo no está pagado al día se rechaza con \", _jsx(_components.code, {\n children: \"402 plan_required\"\n }), \", porque la creación rechazaría el envío que cotiza esta cotización. \", _jsx(_components.code, {\n children: \"error.message\"\n }), \" nombra el motivo: no hay plan activo, un cobro pendiente, un plan que terminó en una fecha dada, un plan cuyos envíos incluidos del ciclo ya se usaron todos, o una tienda que no puede pedir repartidores en este momento. No es \", _jsx(_components.code, {\n children: \"retryable\"\n }), \": la llamada idéntica falla hasta que el plan se pague o se reinicie, o hasta que el ciclo se renueve. Consulta \", _jsx(_components.a, {\n href: \"https://docs.listo.delivery/es/guides/plan-and-billing\",\n children: \"Plan y facturación\"\n }), \".\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Cotiza un envío","description":"Cotiza un viaje y reserva ese precio para que lo vincules. El precio se fija en el momento en que pides la cotización: vincula su `id` al crear el envío y al pedido se le cobra el `fee_cents` y el reparto que te mostramos.\n\nLa red de repartidores reserva el viaje al crear el envío, y lo que reserva puede diferir un poco del precio cotizado. Reservamos justo la cotización que te mostramos siempre que siga vigente, así que es raro. Cuando pasa, la diferencia aparece en tu historial como su propia línea (`requote_adjustment`, ver `GET /v1/ledger`), negativa cuando el viaje reservado costó más y positiva cuando costó menos. Nunca cambia el `fee_cents`, el reparto ni el total del pedido que ve tu cliente.\n\nLas cotizaciones vencen, y `expires_at` te dice cuándo. Vincular una cotización vencida o ya gastada es un `400`; pide una nueva. Vincularla es opcional, y una creación sin ella se cotiza en línea al precio que haya en ese momento.\n\n`cash_to_collect_cents` es lo que el repartidor cobra en la puerta en un pedido en efectivo: el valor de la mercancía más la parte del cliente de la tarifa.\n\n`business_fee_share` y `business_fee_cap_cents` dicen cómo se reparte la tarifa de envío entre tú y tu cliente. Una cotización `prepaid` es distinta: ya cobraste a tu cliente, así que toda la tarifa es tuya y el reparto queda fijo en 100 sin tope. Una cotización que no nombra `payment_method` se cotiza igual, porque el único envío que puede vincularla es uno `prepaid`. En cualquiera de los dos, un `business_fee_share` distinto de 100 se rechaza con `422\nvalidation_failed` nombrando `business_fee_share`, un `business_fee_cap_cents` válido se ignora (uno que no es número se rechaza primero como error de forma), y una cotización que no envía ninguno se cotiza en 100, sin importar cuál sea el reparto predeterminado de tu tienda. Ese es el reparto que reserva una creación de envío `prepaid`, así que una cotización que quieras vincular a un envío `prepaid` debe nombrar `payment_method: prepaid` o no nombrar ningún método. Para repartir la tarifa con tu cliente, nombra `cash` o `card`.\n\n`vehicle` es `moto` (el predeterminado) o `car`. Un auto es un sedán: podemos garantizar un auto, nunca una camioneta, y hay menos autos que motos, así que uno puede tardar más en asignarse. Un auto agrega un recargo que va DENTRO de `fee_cents` y se reparte como el resto de la tarifa, así que el número que te cotizan es el precio completo; no hay una línea aparte para él.\n\n`manifest.items` es opcional y acepta los mismos elementos `{name, quantity,\nsize}` que la creación de envío. `size` es uno de `small` (el predeterminado), `medium`, `large` o `xlarge`, y es el único campo de un elemento que puede cambiar el precio: un elemento de tamaño `xlarge` convierte el viaje en auto aunque `vehicle` diga `moto`. Nada más lo hace, ni siquiera el peso. El `vehicle` de la respuesta dice para qué viaje es la tarifa, sin importar qué lo volvió así. Cotiza con el mismo carrito con el que vas a crear el envío: la creación se sujeta al vehículo con el que se fijó el precio de esta cotización.\n\nUn carrito demasiado grande para un solo viaje de repartidor se rechaza con `422\norder_too_large`, nombrando `manifest.items`, antes de cotizar nada. Divídelo en dos envíos.\n\nListo cotiza en pesos mexicanos y entrega en México. Una tienda que resulte estar en otro país se rechaza aquí con `422\nunsupported_country`, que es definitivo: no es el `provider_unavailable` reintentable, y ningún reintento de la misma tienda puede funcionar. Solo te encontrarás con él en una tienda que ubicaste tú mismo, con `lat`/`lng`, ya que una tienda que ubicamos nosotros se rechaza al crearla.\n\nUna tienda cuyo punto de recolección no podemos avalar por ahora se rechaza con `409 pickup_point_pending`, porque mientras no esté confirmado, un repartidor podría ir al lugar equivocado. Por lo general la dirección de la tienda acaba de cambiar y la confirmación todavía no llega, pero no siempre, así que no lo leas como \"el comercio se mudó\". Este SÍ es reintentable: nada en tu solicitud está mal, y la llamada idéntica funciona en cuanto el punto de recolección se confirma. Rechaza la tienda y no el viaje, así que un punto de entrega distinto no ayudará.\n\nReinténtalo con esperas de minutos, durante un número limitado de intentos, y luego ponlo frente a una persona en lugar de seguir consultando. La mayoría de los cambios se resuelven solos en minutos; unos pocos los detiene algo que solo nuestro equipo puede liberar y tardan bastante más, y esta respuesta no distingue entre los dos. El restaurante también puede desbloquearlo por su cuenta desde su propia consola de Listo, que suele ser la vía más rápida de las dos.\n\nCuando todos los repartidores cerca del viaje están ocupados, la cotización se rechaza con `409 no_couriers_available` y no se cotiza nada. No es una caída del servicio y nada en tu solicitud está mal: SÍ es reintentable, y la llamada idéntica se cotiza en cuanto un repartidor queda libre, por lo general en minutos. Reinténtalo tras unos minutos, durante un número limitado de intentos, y luego avisa a quien espera el pedido en lugar de seguir consultando. Es la misma palabra que un envío que terminó sin repartidor trae en `failure_reason`.\n\nUna tienda real cuyo Plan Listo no está pagado al día se rechaza con `402\nplan_required`, porque la creación rechazaría el envío que cotiza esta cotización. `error.message` nombra el motivo: no hay plan activo, un cobro pendiente, un plan que terminó en una fecha dada, un plan cuyos envíos incluidos del ciclo ya se usaron todos, o una tienda que no puede pedir repartidores en este momento. No es `retryable`: la llamada idéntica falla hasta que el plan se pague o se reinicie, o hasta que el ciclo se renueve. Consulta [Plan y facturación](https://docs.listo.delivery/es/guides/plan-and-billing).\n","deprecated":null,"version":null,"sidebarTitle":"Cotiza un envío","openapi":"/openapi/es.yaml post /v1/quotes","href":"/es/api-reference/quotes/price-a-delivery","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"summary":"Cotiza un envío","description":"Cotiza un viaje y reserva ese precio para que lo vincules. El precio se fija en el momento en que pides la cotización: vincula su `id` al crear el envío y al pedido se le cobra el `fee_cents` y el reparto que te mostramos.\n\nLa red de repartidores reserva el viaje al crear el envío, y lo que reserva puede diferir un poco del precio cotizado. Reservamos justo la cotización que te mostramos siempre que siga vigente, así que es raro. Cuando pasa, la diferencia aparece en tu historial como su propia línea (`requote_adjustment`, ver `GET /v1/ledger`), negativa cuando el viaje reservado costó más y positiva cuando costó menos. Nunca cambia el `fee_cents`, el reparto ni el total del pedido que ve tu cliente.\n\nLas cotizaciones vencen, y `expires_at` te dice cuándo. Vincular una cotización vencida o ya gastada es un `400`; pide una nueva. Vincularla es opcional, y una creación sin ella se cotiza en línea al precio que haya en ese momento.\n\n`cash_to_collect_cents` es lo que el repartidor cobra en la puerta en un pedido en efectivo: el valor de la mercancía más la parte del cliente de la tarifa.\n\n`business_fee_share` y `business_fee_cap_cents` dicen cómo se reparte la tarifa de envío entre tú y tu cliente. Una cotización `prepaid` es distinta: ya cobraste a tu cliente, así que toda la tarifa es tuya y el reparto queda fijo en 100 sin tope. Una cotización que no nombra `payment_method` se cotiza igual, porque el único envío que puede vincularla es uno `prepaid`. En cualquiera de los dos, un `business_fee_share` distinto de 100 se rechaza con `422\nvalidation_failed` nombrando `business_fee_share`, un `business_fee_cap_cents` válido se ignora (uno que no es número se rechaza primero como error de forma), y una cotización que no envía ninguno se cotiza en 100, sin importar cuál sea el reparto predeterminado de tu tienda. Ese es el reparto que reserva una creación de envío `prepaid`, así que una cotización que quieras vincular a un envío `prepaid` debe nombrar `payment_method: prepaid` o no nombrar ningún método. Para repartir la tarifa con tu cliente, nombra `cash` o `card`.\n\n`vehicle` es `moto` (el predeterminado) o `car`. Un auto es un sedán: podemos garantizar un auto, nunca una camioneta, y hay menos autos que motos, así que uno puede tardar más en asignarse. Un auto agrega un recargo que va DENTRO de `fee_cents` y se reparte como el resto de la tarifa, así que el número que te cotizan es el precio completo; no hay una línea aparte para él.\n\n`manifest.items` es opcional y acepta los mismos elementos `{name, quantity,\nsize}` que la creación de envío. `size` es uno de `small` (el predeterminado), `medium`, `large` o `xlarge`, y es el único campo de un elemento que puede cambiar el precio: un elemento de tamaño `xlarge` convierte el viaje en auto aunque `vehicle` diga `moto`. Nada más lo hace, ni siquiera el peso. El `vehicle` de la respuesta dice para qué viaje es la tarifa, sin importar qué lo volvió así. Cotiza con el mismo carrito con el que vas a crear el envío: la creación se sujeta al vehículo con el que se fijó el precio de esta cotización.\n\nUn carrito demasiado grande para un solo viaje de repartidor se rechaza con `422\norder_too_large`, nombrando `manifest.items`, antes de cotizar nada. Divídelo en dos envíos.\n\nListo cotiza en pesos mexicanos y entrega en México. Una tienda que resulte estar en otro país se rechaza aquí con `422\nunsupported_country`, que es definitivo: no es el `provider_unavailable` reintentable, y ningún reintento de la misma tienda puede funcionar. Solo te encontrarás con él en una tienda que ubicaste tú mismo, con `lat`/`lng`, ya que una tienda que ubicamos nosotros se rechaza al crearla.\n\nUna tienda cuyo punto de recolección no podemos avalar por ahora se rechaza con `409 pickup_point_pending`, porque mientras no esté confirmado, un repartidor podría ir al lugar equivocado. Por lo general la dirección de la tienda acaba de cambiar y la confirmación todavía no llega, pero no siempre, así que no lo leas como \"el comercio se mudó\". Este SÍ es reintentable: nada en tu solicitud está mal, y la llamada idéntica funciona en cuanto el punto de recolección se confirma. Rechaza la tienda y no el viaje, así que un punto de entrega distinto no ayudará.\n\nReinténtalo con esperas de minutos, durante un número limitado de intentos, y luego ponlo frente a una persona en lugar de seguir consultando. La mayoría de los cambios se resuelven solos en minutos; unos pocos los detiene algo que solo nuestro equipo puede liberar y tardan bastante más, y esta respuesta no distingue entre los dos. El restaurante también puede desbloquearlo por su cuenta desde su propia consola de Listo, que suele ser la vía más rápida de las dos.\n\nCuando todos los repartidores cerca del viaje están ocupados, la cotización se rechaza con `409 no_couriers_available` y no se cotiza nada. No es una caída del servicio y nada en tu solicitud está mal: SÍ es reintentable, y la llamada idéntica se cotiza en cuanto un repartidor queda libre, por lo general en minutos. Reinténtalo tras unos minutos, durante un número limitado de intentos, y luego avisa a quien espera el pedido en lugar de seguir consultando. Es la misma palabra que un envío que terminó sin repartidor trae en `failure_reason`.\n\nUna tienda real cuyo Plan Listo no está pagado al día se rechaza con `402\nplan_required`, porque la creación rechazaría el envío que cotiza esta cotización. `error.message` nombra el motivo: no hay plan activo, un cobro pendiente, un plan que terminó en una fecha dada, un plan cuyos envíos incluidos del ciclo ya se usaron todos, o una tienda que no puede pedir repartidores en este momento. No es `retryable`: la llamada idéntica falla hasta que el plan se pague o se reinicie, o hasta que el ciclo se renueve. Consulta [Plan y facturación](https://docs.listo.delivery/es/guides/plan-and-billing).\n","tags":["Quotes"],"operationId":"createQuote","security":["d350af9a-e522-419a-99c0-a7cbe5438575"],"requestBody":"d8a248bc-a877-4caf-91d9-169cae0994a8","responses":{"201":"cf6e7256-f15f-4613-8a78-d76a6dd7d424","401":"aaa14f86-601d-49dc-8670-ef9a9b4923bd","403":"e000c1a8-d3a6-4e5c-a80b-3e699f9f1a9d","404":"77c73fd5-b4ed-4597-af4c-abaf9e99c121","409":"d6799503-9e98-4e05-8d7c-6056e77c0c02","422":"d6b17453-f169-428b-ab5c-06aa2b19483d","503":"8ab45d6c-a34b-4abc-a2ae-5d30638f718c"},"x-mint":{"href":"/es/api-reference/quotes/price-a-delivery","metadata":{"sidebarTitle":"Cotiza un envío"}},"method":"post","type":"path","servers":["f399fc83-7e7d-462b-bf3b-3042989289cb"],"path":"/v1/quotes","baseUrlOptions":["https://api.listo.delivery"],"title":"Cotiza un envío","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"content":{"application/json":{"schema":{"type":"object","description":"El viaje a cotizar.","properties":{"store_id":{"type":"string","description":"El id `st_` de la tienda de donde recoge el repartidor.","isRequired":true,"uniqueKey":"store_id","typeLabel":"string"},"dropoff":{"type":"object","description":"A dónde va el pedido.","properties":{"street":{"type":"string","description":"La dirección completa de la calle, en una sola cadena.","isRequired":true,"uniqueKey":"dropoff.street","typeLabel":"string"},"apt_unit":{"type":"string","uniqueKey":"dropoff.apt_unit","typeLabel":"string"},"lat":{"type":"number","format":"double","minimum":-90,"maximum":90,"description":"Latitud. Envíala junto con `lng`, o ninguna de las dos.","uniqueKey":"dropoff.lat","typeLabel":"number\u003cdouble>"},"lng":{"type":"number","format":"double","minimum":-180,"maximum":180,"description":"Longitud. Envíala junto con `lat`, o ninguna de las dos.","uniqueKey":"dropoff.lng","typeLabel":"number\u003cdouble>"}},"required":["street"],"isRequired":true,"uniqueKey":"dropoff","typeLabel":"object"},"payment_method":{"type":"string","enum":["prepaid","cash","card"],"description":"Cómo paga el cliente.","uniqueKey":"payment_method","typeLabel":"enum\u003cstring>"},"order_value_cents":{"type":"integer","minimum":0,"description":"El valor del pedido, en centavos. Obligatorio para una cotización `cash`,\ndonde es lo que cobra el repartidor.\n","uniqueKey":"order_value_cents","typeLabel":"integer"},"business_fee_share":{"type":"integer","minimum":0,"maximum":100,"description":"El porcentaje de la tarifa de envío que paga la tienda. Por omisión es el de la propia tienda.","uniqueKey":"business_fee_share","typeLabel":"integer"},"business_fee_cap_cents":{"type":"integer","minimum":0,"description":"Lo máximo que paga la tienda para la tarifa, en centavos.","uniqueKey":"business_fee_cap_cents","typeLabel":"integer"},"pickup_ready_at":{"type":"string","format":"date-time","description":"Cuándo estará listo el pedido, en ISO-8601 en UTC. Debe ser en el futuro.","uniqueKey":"pickup_ready_at","typeLabel":"string\u003cdate-time>"},"vehicle":{"type":"string","enum":["moto","car"],"description":"Por omisión es `moto`.","uniqueKey":"vehicle","typeLabel":"enum\u003cstring>"},"manifest":{"oneOf":[{"type":"object","description":"La lista descriptiva de artículos para el repartidor. El dinero nunca sale de ella;\nsu único efecto en el viaje es que un artículo `xlarge` lo convierte en auto.\nAusente, null, `{}` y `{\"items\": null}` significan todos que no hay carrito.\n","properties":{"items":{"oneOf":[{"type":"array","items":{"type":"object","description":"Una línea de la lista descriptiva de artículos que se envía al repartidor.","properties":{"name":{"type":"string","description":"Qué es el artículo.","isRequired":true,"uniqueKey":"manifest.oneOf.0.\\items.oneOf.0.items.[INDEX].name","typeLabel":"string"},"quantity":{"type":"integer","minimum":1,"description":"Cuántas unidades. Un número entero positivo.","isRequired":true,"uniqueKey":"manifest.oneOf.0.\\items.oneOf.0.items.[INDEX].quantity","typeLabel":"integer"},"size":{"oneOf":[{"type":"string","enum":["small","medium","large","xlarge",null],"description":"El tamaño del artículo. Omítelo para `small`. Un artículo `xlarge`\nhace que el envío sea en auto.\n","uniqueKey":"manifest.oneOf.0.\\items.oneOf.0.items.[INDEX].size.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["small","medium","large","xlarge",null],"description":"El tamaño del artículo. Omítelo para `small`. Un artículo `xlarge`\nhace que el envío sea en auto.\n","uniqueKey":"manifest.oneOf.0.\\items.oneOf.0.items.[INDEX].size.oneOf.1","typeLabel":"null"}],"uniqueKey":"manifest.oneOf.0.\\items.oneOf.0.items.[INDEX].size","typeLabel":"enum\u003cstring> | null"}},"required":["name","quantity"],"uniqueKey":"manifest.oneOf.0.\\items.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"manifest.oneOf.0.\\items.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","description":"Una línea de la lista descriptiva de artículos que se envía al repartidor.","properties":{"name":{"type":"string","description":"Qué es el artículo."},"quantity":{"type":"integer","minimum":1,"description":"Cuántas unidades. Un número entero positivo."},"size":{"oneOf":[{"type":"string","enum":["small","medium","large","xlarge",null],"description":"El tamaño del artículo. Omítelo para `small`. Un artículo `xlarge`\nhace que el envío sea en auto.\n"},{"type":"null","enum":["small","medium","large","xlarge",null],"description":"El tamaño del artículo. Omítelo para `small`. Un artículo `xlarge`\nhace que el envío sea en auto.\n"}]}},"required":["name","quantity"]},"uniqueKey":"manifest.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"manifest.oneOf.0.\\items","typeLabel":"object[] | null"}},"uniqueKey":"manifest.oneOf.0","typeLabel":"object"},{"type":"null","description":"La lista descriptiva de artículos para el repartidor. El dinero nunca sale de ella;\nsu único efecto en el viaje es que un artículo `xlarge` lo convierte en auto.\nAusente, null, `{}` y `{\"items\": null}` significan todos que no hay carrito.\n","properties":{"items":{"oneOf":[{"type":"array","items":{"type":"object","description":"Una línea de la lista descriptiva de artículos que se envía al repartidor.","properties":{"name":{"type":"string","description":"Qué es el artículo."},"quantity":{"type":"integer","minimum":1,"description":"Cuántas unidades. Un número entero positivo."},"size":{"oneOf":[{"type":"string","enum":["small","medium","large","xlarge",null],"description":"El tamaño del artículo. Omítelo para `small`. Un artículo `xlarge`\nhace que el envío sea en auto.\n"},{"type":"null","enum":["small","medium","large","xlarge",null],"description":"El tamaño del artículo. Omítelo para `small`. Un artículo `xlarge`\nhace que el envío sea en auto.\n"}]}},"required":["name","quantity"]}},{"type":"null","items":{"type":"object","description":"Una línea de la lista descriptiva de artículos que se envía al repartidor.","properties":{"name":{"type":"string","description":"Qué es el artículo."},"quantity":{"type":"integer","minimum":1,"description":"Cuántas unidades. Un número entero positivo."},"size":{"oneOf":[{"type":"string","enum":["small","medium","large","xlarge",null],"description":"El tamaño del artículo. Omítelo para `small`. Un artículo `xlarge`\nhace que el envío sea en auto.\n"},{"type":"null","enum":["small","medium","large","xlarge",null],"description":"El tamaño del artículo. Omítelo para `small`. Un artículo `xlarge`\nhace que el envío sea en auto.\n"}]}},"required":["name","quantity"]}}]}},"uniqueKey":"manifest.oneOf.1","typeLabel":"null"}],"uniqueKey":"manifest","typeLabel":"object | null"}},"required":["store_id","dropoff"],"uniqueKey":"","typeLabel":"object"},"example":{"store_id":"st_4bR8kM2wQ7xT1nV5cZ9pLdYe","dropoff":{"street":"Blvd. Puerta de Hierro 4965, Zapopan, Jalisco 45116","lat":20.709395,"lng":-103.413393,"apt_unit":"Depto 4B"},"payment_method":"cash","order_value_cents":19600,"business_fee_share":100,"business_fee_cap_cents":3000,"vehicle":"car","manifest":{"items":[{"name":"Tacos al pastor","quantity":2},{"name":"Refrigerador","quantity":1,"size":"xlarge"}]},"pickup_ready_at":"2026-07-29T00:25:00Z"},"examples":{"Example":{"title":"Example","value":{"store_id":"st_4bR8kM2wQ7xT1nV5cZ9pLdYe","dropoff":{"street":"Blvd. Puerta de Hierro 4965, Zapopan, Jalisco 45116","lat":20.709395,"lng":-103.413393,"apt_unit":"Depto 4B"},"payment_method":"cash","order_value_cents":19600,"business_fee_share":100,"business_fee_cap_cents":3000,"vehicle":"car","manifest":{"items":[{"name":"Tacos al pastor","quantity":2},{"name":"Refrigerador","quantity":1,"size":"xlarge"}]},"pickup_ready_at":"2026-07-29T00:25:00Z"}}},"exampleType":"examples"}},"required":true,"exampleType":"examples"},"responses":{"cf6e7256-f15f-4613-8a78-d76a6dd7d424":{"description":"Creado.","content":{"application/json":{"schema":{"type":"object","description":"Un envío cotizado y apartado por un momento. Pasa `id` a\n`POST /v1/deliveries` como `quote_id` para reservar exactamente a este precio.\n","properties":{"id":{"type":"string","description":"El id de la cotización, con prefijo `qt_`.","example":"qt_5nW3jP8vT2xQ6bM9cZ1sRdKe","isRequired":true,"uniqueKey":"id","typeLabel":"string"},"fee_cents":{"type":"integer","description":"La tarifa de envío total, en centavos, y el número al que se sujeta una reserva\nde esta cotización. `business_fee_cents` más `customer_fee_cents` siempre suman esa cifra.\n","isRequired":true,"uniqueKey":"fee_cents","typeLabel":"integer"},"business_fee_cents":{"type":"integer","description":"La parte de la tarifa que paga la tienda.","isRequired":true,"uniqueKey":"business_fee_cents","typeLabel":"integer"},"customer_fee_cents":{"type":"integer","description":"La parte de la tarifa que paga el cliente.","isRequired":true,"uniqueKey":"customer_fee_cents","typeLabel":"integer"},"cash_to_collect_cents":{"oneOf":[{"type":"integer","description":"Lo que cobra el repartidor en la puerta en un pedido en efectivo: el valor del\npedido más la parte de la tarifa que paga el cliente. Null en toda cotización\nque no sea en efectivo, lo cual no es lo mismo que `0` (un pedido en efectivo\nque no cobra nada).\n","isRequired":true,"uniqueKey":"cash_to_collect_cents.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Lo que cobra el repartidor en la puerta en un pedido en efectivo: el valor del\npedido más la parte de la tarifa que paga el cliente. Null en toda cotización\nque no sea en efectivo, lo cual no es lo mismo que `0` (un pedido en efectivo\nque no cobra nada).\n","isRequired":true,"uniqueKey":"cash_to_collect_cents.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"cash_to_collect_cents","typeLabel":"integer | null"},"currency":{"type":"string","enum":["MXN"],"description":"Siempre `MXN`; el dinero va en centavos enteros.","isRequired":true,"uniqueKey":"currency","typeLabel":"enum\u003cstring>"},"pickup_duration_min":{"oneOf":[{"type":"integer","description":"Minutos hasta que se espera un repartidor en la tienda, cuando la cotización\nregresó con una estimación. Null en otro caso.\n","isRequired":true,"uniqueKey":"pickup_duration_min.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Minutos hasta que se espera un repartidor en la tienda, cuando la cotización\nregresó con una estimación. Null en otro caso.\n","isRequired":true,"uniqueKey":"pickup_duration_min.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"pickup_duration_min","typeLabel":"integer | null"},"dropoff_eta_at":{"oneOf":[{"type":"string","format":"date-time","description":"Cuándo se espera el pedido en la puerta, cuando la cotización regresó con una estimación. Null en otro caso.","isRequired":true,"uniqueKey":"dropoff_eta_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"Cuándo se espera el pedido en la puerta, cuando la cotización regresó con una estimación. Null en otro caso.","isRequired":true,"uniqueKey":"dropoff_eta_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dropoff_eta_at","typeLabel":"string\u003cdate-time> | null"},"expires_at":{"type":"string","format":"date-time","description":"El plazo para reservar este precio. Pasado ese plazo, una creación responde\n`quote_expired` y tienes que volver a cotizar.\n","isRequired":true,"uniqueKey":"expires_at","typeLabel":"string\u003cdate-time>"},"test":{"type":"boolean","description":"Si la cotización pertenece al mundo de pruebas.","isRequired":true,"uniqueKey":"test","typeLabel":"boolean"},"created_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"},"vehicle":{"type":"string","enum":["moto","car"],"description":"Para qué se armó este precio: `car` cuando pediste uno o un\nartículo tiene tamaño `xlarge`, `moto` en otro caso. Siempre presente.\n","example":"moto","isRequired":true,"uniqueKey":"vehicle","typeLabel":"enum\u003cstring>"}},"required":["id","fee_cents","business_fee_cents","customer_fee_cents","cash_to_collect_cents","vehicle","currency","pickup_duration_min","dropoff_eta_at","expires_at","test","created_at"],"uniqueKey":"","typeLabel":"object"},"example":{"id":"qt_5nW3jP8vT2xQ6bM9cZ1sRdKe","fee_cents":6844,"business_fee_cents":6844,"customer_fee_cents":0,"cash_to_collect_cents":null,"currency":"MXN","pickup_duration_min":12,"dropoff_eta_at":"2026-07-28T23:11:19Z","expires_at":"2026-07-28T22:36:55Z","test":true,"created_at":"2026-07-28T22:25:00Z","vehicle":"moto"},"examples":{"Example":{"title":"Example","value":{"id":"qt_5nW3jP8vT2xQ6bM9cZ1sRdKe","fee_cents":6844,"business_fee_cents":6844,"customer_fee_cents":0,"cash_to_collect_cents":null,"currency":"MXN","pickup_duration_min":12,"dropoff_eta_at":"2026-07-28T23:11:19Z","expires_at":"2026-07-28T22:36:55Z","test":true,"created_at":"2026-07-28T22:25:00Z","vehicle":"moto"}}},"exampleType":"examples"}},"exampleType":"examples"},"aaa14f86-601d-49dc-8670-ef9a9b4923bd":{"description":"La llave de API no existe, fue revocada o no es válida para este modo (`invalid_api_key`).","content":{"application/json":{"schema":{"type":"object","description":"El cuerpo de toda respuesta 4xx y 5xx de esta API.","properties":{"error":{"type":"object","description":"Cómo se ve todo rechazo y toda falla. `code` es el único\ncampo en el que decidir; `message` es para una persona que lee un registro y puede\ncambiar de redacción o de idioma sin aviso.\n","properties":{"code":{"type":"string","description":"Un nombre estable y legible por máquina de lo que salió mal, como\n`validation_failed`, `not_found` o `insufficient_balance`. Decide\ncon base en esto y nunca en `message`. La lista crece sin romper nada: trata\nun código que no conozcas como el fallo genérico que indica su código de estado.\nCada código tiene una página en `doc_url`.\n","example":"validation_failed","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Una oración para quien depura. Puede cambiar de redacción o de\nidioma en cualquier momento, así que nunca la uses para comparar.\n","example":"order_value_cents is required.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"param":{"oneOf":[{"type":"string","description":"El campo de la solicitud al que se refiere el rechazo, cuando aplica, escrito\ncomo lo enviaste (`dropoff.street`, `manifest.items`). Null cuando la\nfalla no se refiere a un solo campo.\n","example":"order_value_cents","isRequired":true,"uniqueKey":"error.param.oneOf.0","typeLabel":"string"},{"type":"null","description":"El campo de la solicitud al que se refiere el rechazo, cuando aplica, escrito\ncomo lo enviaste (`dropoff.street`, `manifest.items`). Null cuando la\nfalla no se refiere a un solo campo.\n","example":"order_value_cents","isRequired":true,"uniqueKey":"error.param.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.param","typeLabel":"string | null"},"retryable":{"type":"boolean","description":"Si volver a enviar la misma solicitud podría tener éxito. `false`\nsignifica que nunca lo tendrá sin un cambio de tu lado o en el mundo.\n","example":false,"isRequired":true,"uniqueKey":"error.retryable","typeLabel":"boolean"},"doc_url":{"type":"string","format":"uri","description":"La página de documentación de este `code`.","example":"https://docs.listo.delivery/en/errors/validation_failed","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string\u003curi>"},"request_id":{"type":"string","description":"Nuestro id de esta solicitud, el mismo valor que el encabezado de respuesta\n`X-Request-Id`. Cítalo a soporte, y filtra\n`GET /v1/request_logs` por él.\n","example":"0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"}},"required":["code","message","param","retryable","doc_url","request_id"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"invalid_api_key","message":"The API key is missing, revoked, or not valid for this mode.","param":null,"retryable":false,"doc_url":"https://docs.listo.delivery/en/errors/invalid_api_key","request_id":"0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"invalid_api_key","message":"The API key is missing, revoked, or not valid for this mode.","param":null,"retryable":false,"doc_url":"https://docs.listo.delivery/en/errors/invalid_api_key","request_id":"0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10"}}}},"exampleType":"examples"}},"exampleType":"examples"},"e000c1a8-d3a6-4e5c-a80b-3e699f9f1a9d":{"description":"La llave es válida y es de solo lectura (`read_only_key`), así que puede leer pero no crear, cambiar ni cancelar nada. Usa una llave emitida sin la opción de solo lectura.","content":{"application/json":{"schema":{"type":"object","description":"El cuerpo de toda respuesta 4xx y 5xx de esta API.","properties":{"error":{"type":"object","description":"Cómo se ve todo rechazo y toda falla. `code` es el único\ncampo en el que decidir; `message` es para una persona que lee un registro y puede\ncambiar de redacción o de idioma sin aviso.\n","properties":{"code":{"type":"string","description":"Un nombre estable y legible por máquina de lo que salió mal, como\n`validation_failed`, `not_found` o `insufficient_balance`. Decide\ncon base en esto y nunca en `message`. La lista crece sin romper nada: trata\nun código que no conozcas como el fallo genérico que indica su código de estado.\nCada código tiene una página en `doc_url`.\n","example":"validation_failed","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Una oración para quien depura. Puede cambiar de redacción o de\nidioma en cualquier momento, así que nunca la uses para comparar.\n","example":"order_value_cents is required.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"param":{"oneOf":[{"type":"string","description":"El campo de la solicitud al que se refiere el rechazo, cuando aplica, escrito\ncomo lo enviaste (`dropoff.street`, `manifest.items`). Null cuando la\nfalla no se refiere a un solo campo.\n","example":"order_value_cents","isRequired":true,"uniqueKey":"error.param.oneOf.0","typeLabel":"string"},{"type":"null","description":"El campo de la solicitud al que se refiere el rechazo, cuando aplica, escrito\ncomo lo enviaste (`dropoff.street`, `manifest.items`). Null cuando la\nfalla no se refiere a un solo campo.\n","example":"order_value_cents","isRequired":true,"uniqueKey":"error.param.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.param","typeLabel":"string | null"},"retryable":{"type":"boolean","description":"Si volver a enviar la misma solicitud podría tener éxito. `false`\nsignifica que nunca lo tendrá sin un cambio de tu lado o en el mundo.\n","example":false,"isRequired":true,"uniqueKey":"error.retryable","typeLabel":"boolean"},"doc_url":{"type":"string","format":"uri","description":"La página de documentación de este `code`.","example":"https://docs.listo.delivery/en/errors/validation_failed","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string\u003curi>"},"request_id":{"type":"string","description":"Nuestro id de esta solicitud, el mismo valor que el encabezado de respuesta\n`X-Request-Id`. Cítalo a soporte, y filtra\n`GET /v1/request_logs` por él.\n","example":"0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"}},"required":["code","message","param","retryable","doc_url","request_id"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"read_only_key":{"title":"read_only_key","value":{"error":{"code":"read_only_key","message":"This API key is read-only. Use a key without the read-only setting to create, change or cancel anything.","param":null,"retryable":false,"doc_url":"https://docs.listo.delivery/en/errors/read_only_key","request_id":"0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10"}}}},"exampleType":"examples"}},"exampleType":"examples"},"77c73fd5-b4ed-4597-af4c-abaf9e99c121":{"description":"Ningún objeto con ese id existe para esta llave (`not_found`). Los objetos de otra cuenta son indistinguibles de los que nunca existieron.","content":{"application/json":{"schema":{"type":"object","description":"El cuerpo de toda respuesta 4xx y 5xx de esta API.","properties":{"error":{"type":"object","description":"Cómo se ve todo rechazo y toda falla. `code` es el único\ncampo en el que decidir; `message` es para una persona que lee un registro y puede\ncambiar de redacción o de idioma sin aviso.\n","properties":{"code":{"type":"string","description":"Un nombre estable y legible por máquina de lo que salió mal, como\n`validation_failed`, `not_found` o `insufficient_balance`. Decide\ncon base en esto y nunca en `message`. La lista crece sin romper nada: trata\nun código que no conozcas como el fallo genérico que indica su código de estado.\nCada código tiene una página en `doc_url`.\n","example":"validation_failed","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Una oración para quien depura. Puede cambiar de redacción o de\nidioma en cualquier momento, así que nunca la uses para comparar.\n","example":"order_value_cents is required.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"param":{"oneOf":[{"type":"string","description":"El campo de la solicitud al que se refiere el rechazo, cuando aplica, escrito\ncomo lo enviaste (`dropoff.street`, `manifest.items`). Null cuando la\nfalla no se refiere a un solo campo.\n","example":"order_value_cents","isRequired":true,"uniqueKey":"error.param.oneOf.0","typeLabel":"string"},{"type":"null","description":"El campo de la solicitud al que se refiere el rechazo, cuando aplica, escrito\ncomo lo enviaste (`dropoff.street`, `manifest.items`). Null cuando la\nfalla no se refiere a un solo campo.\n","example":"order_value_cents","isRequired":true,"uniqueKey":"error.param.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.param","typeLabel":"string | null"},"retryable":{"type":"boolean","description":"Si volver a enviar la misma solicitud podría tener éxito. `false`\nsignifica que nunca lo tendrá sin un cambio de tu lado o en el mundo.\n","example":false,"isRequired":true,"uniqueKey":"error.retryable","typeLabel":"boolean"},"doc_url":{"type":"string","format":"uri","description":"La página de documentación de este `code`.","example":"https://docs.listo.delivery/en/errors/validation_failed","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string\u003curi>"},"request_id":{"type":"string","description":"Nuestro id de esta solicitud, el mismo valor que el encabezado de respuesta\n`X-Request-Id`. Cítalo a soporte, y filtra\n`GET /v1/request_logs` por él.\n","example":"0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"}},"required":["code","message","param","retryable","doc_url","request_id"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"not_found","message":"No resource with that id exists for this API key.","param":null,"retryable":false,"doc_url":"https://docs.listo.delivery/en/errors/not_found","request_id":"0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"not_found","message":"No resource with that id exists for this API key.","param":null,"retryable":false,"doc_url":"https://docs.listo.delivery/en/errors/not_found","request_id":"0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10"}}}},"exampleType":"examples"}},"exampleType":"examples"},"d6799503-9e98-4e05-8d7c-6056e77c0c02":{"description":"La solicitud entra en conflicto con el estado actual. El objeto ya no está en un estado que permita esto (`not_cancellable`, `not_reschedulable`, `not_retriable`, `not_editable`, `not_refundable`, `not_reactivatable`, `plan_ended`), la cancelación no se completó (`cancel_failed`), el cobro del plan aún está en el banco (`charge_in_progress`), la llave de idempotencia se reutilizó con otro cuerpo (`idempotency_conflict`, que ningún reintento corrige), la llave de idempotencia aún la retiene la solicitud que la envió primero (`idempotency_conflict`, y una vez que esa solicitud respondió, la misma llamada con la misma llave repite su respuesta), no hay URL de webhook configurada para el modo de la llave, así que no hay a dónde enviar (`webhook_endpoint_not_configured`), el evento es una posición del repartidor, que nunca se vuelve a enviar (`event_not_resendable`), el correo ya tiene una cuenta de Listo (`account_exists`), el punto de recolección de la tienda aún se está moviendo (`pickup_point_pending`), o ningún repartidor está libre para este viaje en este momento (`no_couriers_available`). Vale la pena repetirla sin cambios después de unos minutos: `cancel_failed`, `charge_in_progress`, `pickup_point_pending`, `no_couriers_available`, y una llamada rechazada porque su llave de idempotencia sigue retenida (repítela con la misma llave). Cualquier otro rechazo aquí requiere que primero cambien la solicitud o el objeto.","content":{"application/json":{"schema":{"type":"object","description":"El cuerpo de toda respuesta 4xx y 5xx de esta API.","properties":{"error":{"type":"object","description":"Cómo se ve todo rechazo y toda falla. `code` es el único\ncampo en el que decidir; `message` es para una persona que lee un registro y puede\ncambiar de redacción o de idioma sin aviso.\n","properties":{"code":{"type":"string","description":"Un nombre estable y legible por máquina de lo que salió mal, como\n`validation_failed`, `not_found` o `insufficient_balance`. Decide\ncon base en esto y nunca en `message`. La lista crece sin romper nada: trata\nun código que no conozcas como el fallo genérico que indica su código de estado.\nCada código tiene una página en `doc_url`.\n","example":"validation_failed","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Una oración para quien depura. Puede cambiar de redacción o de\nidioma en cualquier momento, así que nunca la uses para comparar.\n","example":"order_value_cents is required.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"param":{"oneOf":[{"type":"string","description":"El campo de la solicitud al que se refiere el rechazo, cuando aplica, escrito\ncomo lo enviaste (`dropoff.street`, `manifest.items`). Null cuando la\nfalla no se refiere a un solo campo.\n","example":"order_value_cents","isRequired":true,"uniqueKey":"error.param.oneOf.0","typeLabel":"string"},{"type":"null","description":"El campo de la solicitud al que se refiere el rechazo, cuando aplica, escrito\ncomo lo enviaste (`dropoff.street`, `manifest.items`). Null cuando la\nfalla no se refiere a un solo campo.\n","example":"order_value_cents","isRequired":true,"uniqueKey":"error.param.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.param","typeLabel":"string | null"},"retryable":{"type":"boolean","description":"Si volver a enviar la misma solicitud podría tener éxito. `false`\nsignifica que nunca lo tendrá sin un cambio de tu lado o en el mundo.\n","example":false,"isRequired":true,"uniqueKey":"error.retryable","typeLabel":"boolean"},"doc_url":{"type":"string","format":"uri","description":"La página de documentación de este `code`.","example":"https://docs.listo.delivery/en/errors/validation_failed","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string\u003curi>"},"request_id":{"type":"string","description":"Nuestro id de esta solicitud, el mismo valor que el encabezado de respuesta\n`X-Request-Id`. Cítalo a soporte, y filtra\n`GET /v1/request_logs` por él.\n","example":"0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"}},"required":["code","message","param","retryable","doc_url","request_id"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"pickup_point_pending","message":"This store's pickup point is not confirmed yet, so no courier can be requested from it. Retry the same request shortly.","param":null,"retryable":true,"doc_url":"https://docs.listo.delivery/en/errors/pickup_point_pending","request_id":"0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"pickup_point_pending","message":"This store's pickup point is not confirmed yet, so no courier can be requested from it. Retry the same request shortly.","param":null,"retryable":true,"doc_url":"https://docs.listo.delivery/en/errors/pickup_point_pending","request_id":"0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10"}}}},"exampleType":"examples"}},"exampleType":"examples"},"d6b17453-f169-428b-ab5c-06aa2b19483d":{"description":"La solicitud se entendió y se rechazó. `error.code` dice por qué y `error.param` nombra el campo con el problema cuando aplica.","content":{"application/json":{"schema":{"type":"object","description":"El cuerpo de toda respuesta 4xx y 5xx de esta API.","properties":{"error":{"type":"object","description":"Cómo se ve todo rechazo y toda falla. `code` es el único\ncampo en el que decidir; `message` es para una persona que lee un registro y puede\ncambiar de redacción o de idioma sin aviso.\n","properties":{"code":{"type":"string","description":"Un nombre estable y legible por máquina de lo que salió mal, como\n`validation_failed`, `not_found` o `insufficient_balance`. Decide\ncon base en esto y nunca en `message`. La lista crece sin romper nada: trata\nun código que no conozcas como el fallo genérico que indica su código de estado.\nCada código tiene una página en `doc_url`.\n","example":"validation_failed","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Una oración para quien depura. Puede cambiar de redacción o de\nidioma en cualquier momento, así que nunca la uses para comparar.\n","example":"order_value_cents is required.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"param":{"oneOf":[{"type":"string","description":"El campo de la solicitud al que se refiere el rechazo, cuando aplica, escrito\ncomo lo enviaste (`dropoff.street`, `manifest.items`). Null cuando la\nfalla no se refiere a un solo campo.\n","example":"order_value_cents","isRequired":true,"uniqueKey":"error.param.oneOf.0","typeLabel":"string"},{"type":"null","description":"El campo de la solicitud al que se refiere el rechazo, cuando aplica, escrito\ncomo lo enviaste (`dropoff.street`, `manifest.items`). Null cuando la\nfalla no se refiere a un solo campo.\n","example":"order_value_cents","isRequired":true,"uniqueKey":"error.param.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.param","typeLabel":"string | null"},"retryable":{"type":"boolean","description":"Si volver a enviar la misma solicitud podría tener éxito. `false`\nsignifica que nunca lo tendrá sin un cambio de tu lado o en el mundo.\n","example":false,"isRequired":true,"uniqueKey":"error.retryable","typeLabel":"boolean"},"doc_url":{"type":"string","format":"uri","description":"La página de documentación de este `code`.","example":"https://docs.listo.delivery/en/errors/validation_failed","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string\u003curi>"},"request_id":{"type":"string","description":"Nuestro id de esta solicitud, el mismo valor que el encabezado de respuesta\n`X-Request-Id`. Cítalo a soporte, y filtra\n`GET /v1/request_logs` por él.\n","example":"0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"}},"required":["code","message","param","retryable","doc_url","request_id"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"cash_over_cap","message":"The cash amount is over the collection limit. Use card instead.","param":null,"retryable":false,"doc_url":"https://docs.listo.delivery/en/errors/cash_over_cap","request_id":"0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"cash_over_cap","message":"The cash amount is over the collection limit. Use card instead.","param":null,"retryable":false,"doc_url":"https://docs.listo.delivery/en/errors/cash_over_cap","request_id":"0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10"}}}},"exampleType":"examples"}},"exampleType":"examples"},"8ab45d6c-a34b-4abc-a2ae-5d30638f718c":{"description":"El despacho no está disponible por ahora (`provider_unavailable`). Reintenta pronto.","content":{"application/json":{"schema":{"type":"object","description":"El cuerpo de toda respuesta 4xx y 5xx de esta API.","properties":{"error":{"type":"object","description":"Cómo se ve todo rechazo y toda falla. `code` es el único\ncampo en el que decidir; `message` es para una persona que lee un registro y puede\ncambiar de redacción o de idioma sin aviso.\n","properties":{"code":{"type":"string","description":"Un nombre estable y legible por máquina de lo que salió mal, como\n`validation_failed`, `not_found` o `insufficient_balance`. Decide\ncon base en esto y nunca en `message`. La lista crece sin romper nada: trata\nun código que no conozcas como el fallo genérico que indica su código de estado.\nCada código tiene una página en `doc_url`.\n","example":"validation_failed","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Una oración para quien depura. Puede cambiar de redacción o de\nidioma en cualquier momento, así que nunca la uses para comparar.\n","example":"order_value_cents is required.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"param":{"oneOf":[{"type":"string","description":"El campo de la solicitud al que se refiere el rechazo, cuando aplica, escrito\ncomo lo enviaste (`dropoff.street`, `manifest.items`). Null cuando la\nfalla no se refiere a un solo campo.\n","example":"order_value_cents","isRequired":true,"uniqueKey":"error.param.oneOf.0","typeLabel":"string"},{"type":"null","description":"El campo de la solicitud al que se refiere el rechazo, cuando aplica, escrito\ncomo lo enviaste (`dropoff.street`, `manifest.items`). Null cuando la\nfalla no se refiere a un solo campo.\n","example":"order_value_cents","isRequired":true,"uniqueKey":"error.param.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.param","typeLabel":"string | null"},"retryable":{"type":"boolean","description":"Si volver a enviar la misma solicitud podría tener éxito. `false`\nsignifica que nunca lo tendrá sin un cambio de tu lado o en el mundo.\n","example":false,"isRequired":true,"uniqueKey":"error.retryable","typeLabel":"boolean"},"doc_url":{"type":"string","format":"uri","description":"La página de documentación de este `code`.","example":"https://docs.listo.delivery/en/errors/validation_failed","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string\u003curi>"},"request_id":{"type":"string","description":"Nuestro id de esta solicitud, el mismo valor que el encabezado de respuesta\n`X-Request-Id`. Cítalo a soporte, y filtra\n`GET /v1/request_logs` por él.\n","example":"0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"}},"required":["code","message","param","retryable","doc_url","request_id"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"provider_unavailable","message":"Dispatch is temporarily unavailable. Nothing was created. Retry.","param":null,"retryable":true,"doc_url":"https://docs.listo.delivery/en/errors/provider_unavailable","request_id":"0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"provider_unavailable","message":"Dispatch is temporarily unavailable. Nothing was created. Retry.","param":null,"retryable":true,"doc_url":"https://docs.listo.delivery/en/errors/provider_unavailable","request_id":"0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10"}}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"d350af9a-e522-419a-99c0-a7cbe5438575":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Tu llave de API, enviada como `Authorization: Bearer \u003ckey>`. Las llaves reales y de prueba son distintas; la llave que envías decide en qué modo actúa la llamada. Para probar llamadas, usa una llave de prueba (empieza con `lst_test_`): no se envía ningún repartidor real y no se mueve dinero real, pero los webhooks se disparan y el `dropoff.phone` que des puede recibir mensajes de WhatsApp, así que usa tu propio número. Una llave real (empieza con `lst_live_`) reserva y cobra envíos reales.","scopes":[],"schemeName":"BearerAuth"}}},"servers":{"f399fc83-7e7d-462b-bf3b-3042989289cb":{"url":"https://api.listo.delivery"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Tu llave de API, enviada como `Authorization: Bearer \u003ckey>`. Las llaves reales y de prueba son distintas; la llave que envías decide en qué modo actúa la llamada. Para probar llamadas, usa una llave de prueba (empieza con `lst_test_`): no se envía ningún repartidor real y no se mueve dinero real, pero los webhooks se disparan y el `dropoff.phone` que des puede recibir mensajes de WhatsApp, así que usa tu propio número. Una llave real (empieza con `lst_live_`) reserva y cobra envíos reales.","scopes":[],"schemeName":"BearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Tu llave de API, enviada como `Authorization: Bearer \u003ckey>`. Las llaves reales y de prueba son distintas; la llave que envías decide en qué modo actúa la llamada. Para probar llamadas, usa una llave de prueba (empieza con `lst_test_`): no se envía ningún repartidor real y no se mueve dinero real, pero los webhooks se disparan y el `dropoff.phone` que des puede recibir mensajes de WhatsApp, así que usa tu propio número. Una llave real (empieza con `lst_live_`) reserva y cobra envíos reales.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"BearerAuth","name":"Authorization"}],"title":"BearerAuth"}]},"originalFileLocation":"openapi/es.yaml"},"subdomain":"listo-c5a11a00","siteName":"Listo Partner API","title":"Cotiza un envío - Listo Partner API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/api-reference/quotes/price-a-delivery","matchLevel":1},"es":{"href":"/es/api-reference/quotes/price-a-delivery","matchLevel":0}}},"lastModified":"2026-11-07T01:48:56.011Z","originalFileLocation":"es/api-reference/quotes/price-a-delivery.mdx","locale":"es"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Cotiza un viaje y reserva ese precio para que lo vincules. El precio se fija en el momento en que pides la cotización: vincula su id al crear el envío y al pedido se le cobra el fee_cents y el reparto que te mostramos. La red de repartidores reserva el viaje al crear el envío, y lo que reserva puede diferir un poco del precio cotizado. Reservamos justo la cotización que te mostramos siempre que siga vigente, así que es raro. Cuando pasa, la diferencia aparece en tu historial como su propia línea (requote_adjustment, ver GET /v1/ledger), negativa cuando el viaje reservado costó más y positiva cuando costó menos. Nunca cambia el fee_cents, el reparto ni el total del pedido que ve tu cliente. Las cotizaciones vencen, y expires_at te dice cuándo. Vincular una cotización vencida o ya gastada es un 400; pide una nueva. Vincularla es opcional, y una creación sin ella se cotiza en línea al precio que haya en ese momento. cash_to_collect_cents es lo que el repartidor cobra en la puerta en un pedido en efectivo: el valor de la mercancía más la parte del cliente de la tarifa. business_fee_share y business_fee_cap_cents dicen cómo se reparte la tarifa de envío entre tú y tu cliente. Una cotización prepaid es distinta: ya cobraste a tu cliente, así que toda la tarifa es tuya y el reparto queda fijo en 100 sin tope. Una cotización que no nombra payment_method se cotiza igual, porque el único envío que puede vincularla es uno prepaid. En cualquiera de los dos, un business_fee_share distinto de 100 se rechaza con 422 validation_failed nombrando business_fee_share, un business_fee_cap_cents válido se ignora (uno que no es número se rechaza primero como error de forma), y una cotización que no envía ninguno se cotiza en 100, sin importar cuál sea el reparto predeterminado de tu tienda. Ese es el reparto que reserva una creación de envío prepaid, así que una cotización que quieras vincular a un envío prepaid debe nombrar payment_method: prepaid o no nombrar ningún método. Para repartir la tarifa con tu cliente, nombra cash o card. vehicle es moto (el predeterminado) o car. Un auto es un sedán: podemos garantizar un auto, nunca una camioneta, y hay menos autos que motos, así que uno puede tardar más en asignarse. Un auto agrega un recargo que va DENTRO de fee_cents y se reparte como el resto de la tarifa, así que el número que te cotizan es el precio completo; no hay una línea aparte para él. manifest.items es opcional y acepta los mismos elementos {name, quantity, size} que la creación de envío. size es uno de small (el predeterminado), medium, large o xlarge, y es el único campo de un elemento que puede cambiar el precio: un elemento de tamaño xlarge convierte el viaje en auto aunque vehicle diga moto. Nada más lo hace, ni siquiera el peso. El vehicle de la respuesta dice para qué viaje es la tarifa, sin importar qué lo volvió así. Cotiza con el mismo carrito con el que vas a crear el envío: la creación se sujeta al vehículo con el que se fijó el precio de esta cotización. Un carrito demasiado grande para un solo viaje de repartidor se rechaza con 422 order_too_large, nombrando manifest.items, antes de cotizar nada. Divídelo en dos envíos. Listo cotiza en pesos mexicanos y entrega en México. Una tienda que resulte estar en otro país se rechaza aquí con 422 unsupported_country, que es definitivo: no es el provider_unavailable reintentable, y ningún reintento de la misma tienda puede funcionar. Solo te encontrarás con él en una tienda que ubicaste tú mismo, con lat/lng, ya que una tienda que ubicamos nosotros se rechaza al crearla. Una tienda cuyo punto de recolección no podemos avalar por ahora se rechaza con 409 pickup_point_pending, porque mientras no esté confirmado, un repartidor podría ir al lugar equivocado. Por lo general la dirección de la tienda acaba de cambiar y la confirmación todavía no llega, pero no siempre, así que no lo leas como \u0026quot;el comercio se mudó\u0026quot;. Este SÍ es reintentable: nada en tu solicitud está mal, y la llamada idéntica funciona en cuanto el punto de recolección se confirma. Rechaza la tienda y no el viaje, así que un punto de entrega distinto no ayudará. Reinténtalo con esperas de minutos, durante un número limitado de intentos, y luego ponlo frente a una persona en lugar de seguir consultando. La mayoría de los cambios se resuelven solos en minutos; unos pocos los detiene algo que solo nuestro equipo puede liberar y tardan bastante más, y esta respuesta no distingue entre los dos. El restaurante también puede desbloquearlo por su cuenta desde su propia consola de Listo, que suele ser la vía más rápida de las dos. Cuando todos los repartidores cerca del viaje están ocupados, la cotización se rechaza con 409 no_couriers_available y no se cotiza nada. No es una caída del servicio y nada en tu solicitud está mal: SÍ es reintentable, y la llamada idéntica se cotiza en cuanto un repartidor queda libre, por lo general en minutos. Reinténtalo tras unos minutos, durante un número limitado de intentos, y luego avisa a quien espera el pedido en lugar de seguir consultando. Es la misma palabra que un envío que terminó sin repartidor trae en failure_reason. Una tienda real cuyo Plan Listo no está pagado al día se rechaza con 402 plan_required, porque la creación rechazaría el envío que cotiza esta cotización. error.message nombra el motivo: no hay plan activo, un cobro pendiente, un plan que terminó en una fecha dada, un plan cuyos envíos incluidos del ciclo ya se usaron todos, o una tienda que no puede pedir repartidores en este momento. No es retryable: la llamada idéntica falla hasta que el plan se pague o se reinicie, o hasta que el ciclo se renueve. Consulta Plan y facturación.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Listo Partner API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/listo-c5a11a00/GMBEN5uWEX-r6cRJ/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/listo-c5a11a00/GMBEN5uWEX-r6cRJ/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/listo-c5a11a00/GMBEN5uWEX-r6cRJ/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/listo-c5a11a00/GMBEN5uWEX-r6cRJ/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/listo-c5a11a00/GMBEN5uWEX-r6cRJ/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/listo-c5a11a00/GMBEN5uWEX-r6cRJ/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/listo-c5a11a00/GMBEN5uWEX-r6cRJ/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/listo-c5a11a00/GMBEN5uWEX-r6cRJ/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/listo-c5a11a00/GMBEN5uWEX-r6cRJ/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Cotiza un envío - Listo Partner API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Cotiza un viaje y reserva ese precio para que lo vincules. El precio se fija en el momento en que pides la cotización: vincula su id al crear el envío y al pedido se le cobra el fee_cents y el reparto que te mostramos. La red de repartidores reserva el viaje al crear el envío, y lo que reserva puede diferir un poco del precio cotizado. Reservamos justo la cotización que te mostramos siempre que siga vigente, así que es raro. Cuando pasa, la diferencia aparece en tu historial como su propia línea (requote_adjustment, ver GET /v1/ledger), negativa cuando el viaje reservado costó más y positiva cuando costó menos. Nunca cambia el fee_cents, el reparto ni el total del pedido que ve tu cliente. Las cotizaciones vencen, y expires_at te dice cuándo. Vincular una cotización vencida o ya gastada es un 400; pide una nueva. Vincularla es opcional, y una creación sin ella se cotiza en línea al precio que haya en ese momento. cash_to_collect_cents es lo que el repartidor cobra en la puerta en un pedido en efectivo: el valor de la mercancía más la parte del cliente de la tarifa. business_fee_share y business_fee_cap_cents dicen cómo se reparte la tarifa de envío entre tú y tu cliente. Una cotización prepaid es distinta: ya cobraste a tu cliente, así que toda la tarifa es tuya y el reparto queda fijo en 100 sin tope. Una cotización que no nombra payment_method se cotiza igual, porque el único envío que puede vincularla es uno prepaid. En cualquiera de los dos, un business_fee_share distinto de 100 se rechaza con 422 validation_failed nombrando business_fee_share, un business_fee_cap_cents válido se ignora (uno que no es número se rechaza primero como error de forma), y una cotización que no envía ninguno se cotiza en 100, sin importar cuál sea el reparto predeterminado de tu tienda. Ese es el reparto que reserva una creación de envío prepaid, así que una cotización que quieras vincular a un envío prepaid debe nombrar payment_method: prepaid o no nombrar ningún método. Para repartir la tarifa con tu cliente, nombra cash o card. vehicle es moto (el predeterminado) o car. Un auto es un sedán: podemos garantizar un auto, nunca una camioneta, y hay menos autos que motos, así que uno puede tardar más en asignarse. Un auto agrega un recargo que va DENTRO de fee_cents y se reparte como el resto de la tarifa, así que el número que te cotizan es el precio completo; no hay una línea aparte para él. manifest.items es opcional y acepta los mismos elementos {name, quantity, size} que la creación de envío. size es uno de small (el predeterminado), medium, large o xlarge, y es el único campo de un elemento que puede cambiar el precio: un elemento de tamaño xlarge convierte el viaje en auto aunque vehicle diga moto. Nada más lo hace, ni siquiera el peso. El vehicle de la respuesta dice para qué viaje es la tarifa, sin importar qué lo volvió así. Cotiza con el mismo carrito con el que vas a crear el envío: la creación se sujeta al vehículo con el que se fijó el precio de esta cotización. Un carrito demasiado grande para un solo viaje de repartidor se rechaza con 422 order_too_large, nombrando manifest.items, antes de cotizar nada. Divídelo en dos envíos. Listo cotiza en pesos mexicanos y entrega en México. Una tienda que resulte estar en otro país se rechaza aquí con 422 unsupported_country, que es definitivo: no es el provider_unavailable reintentable, y ningún reintento de la misma tienda puede funcionar. Solo te encontrarás con él en una tienda que ubicaste tú mismo, con lat/lng, ya que una tienda que ubicamos nosotros se rechaza al crearla. Una tienda cuyo punto de recolección no podemos avalar por ahora se rechaza con 409 pickup_point_pending, porque mientras no esté confirmado, un repartidor podría ir al lugar equivocado. Por lo general la dirección de la tienda acaba de cambiar y la confirmación todavía no llega, pero no siempre, así que no lo leas como \u0026quot;el comercio se mudó\u0026quot;. Este SÍ es reintentable: nada en tu solicitud está mal, y la llamada idéntica funciona en cuanto el punto de recolección se confirma. Rechaza la tienda y no el viaje, así que un punto de entrega distinto no ayudará. Reinténtalo con esperas de minutos, durante un número limitado de intentos, y luego ponlo frente a una persona en lugar de seguir consultando. La mayoría de los cambios se resuelven solos en minutos; unos pocos los detiene algo que solo nuestro equipo puede liberar y tardan bastante más, y esta respuesta no distingue entre los dos. El restaurante también puede desbloquearlo por su cuenta desde su propia consola de Listo, que suele ser la vía más rápida de las dos. Cuando todos los repartidores cerca del viaje están ocupados, la cotización se rechaza con 409 no_couriers_available y no se cotiza nada. No es una caída del servicio y nada en tu solicitud está mal: SÍ es reintentable, y la llamada idéntica se cotiza en cuanto un repartidor queda libre, por lo general en minutos. Reinténtalo tras unos minutos, durante un número limitado de intentos, y luego avisa a quien espera el pedido en lugar de seguir consultando. Es la misma palabra que un envío que terminó sin repartidor trae en failure_reason. Una tienda real cuyo Plan Listo no está pagado al día se rechaza con 402 plan_required, porque la creación rechazaría el envío que cotiza esta cotización. error.message nombra el motivo: no hay plan activo, un cobro pendiente, un plan que terminó en una fecha dada, un plan cuyos envíos incluidos del ciclo ya se usaron todos, o una tienda que no puede pedir repartidores en este momento. No es retryable: la llamada idéntica falla hasta que el plan se pague o se reinicie, o hasta que el ciclo se renueve. Consulta Plan y facturación.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Listo Partner API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.listo.delivery/es/api-reference/quotes/price-a-delivery\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://listo-c5a11a00.mintlify.site/_mintlify/api/og/v2?title=Cotiza+un+env%C3%ADo\u0026amp;description=Cotiza+un+viaje+y+reserva+ese+precio+para+que+lo+vincules.+El+precio+se+fija+en+el+momento+en+que+pides+la+cotizaci%C3%B3n%3A+vincula+su+%60id%60+al+crear+el+env%C3%ADo+y+al+pe\u0026amp;theme=77fcfc9066d8b9eb9850b729\u0026amp;signature=8e9c94b3660ce5cce26b6fa2650bc7b20655c4891fb64fc1ffb0f076b27a6d90\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Cotiza un envío - Listo Partner API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Cotiza un viaje y reserva ese precio para que lo vincules. El precio se fija en el momento en que pides la cotización: vincula su id al crear el envío y al pedido se le cobra el fee_cents y el reparto que te mostramos. La red de repartidores reserva el viaje al crear el envío, y lo que reserva puede diferir un poco del precio cotizado. Reservamos justo la cotización que te mostramos siempre que siga vigente, así que es raro. Cuando pasa, la diferencia aparece en tu historial como su propia línea (requote_adjustment, ver GET /v1/ledger), negativa cuando el viaje reservado costó más y positiva cuando costó menos. Nunca cambia el fee_cents, el reparto ni el total del pedido que ve tu cliente. Las cotizaciones vencen, y expires_at te dice cuándo. Vincular una cotización vencida o ya gastada es un 400; pide una nueva. Vincularla es opcional, y una creación sin ella se cotiza en línea al precio que haya en ese momento. cash_to_collect_cents es lo que el repartidor cobra en la puerta en un pedido en efectivo: el valor de la mercancía más la parte del cliente de la tarifa. business_fee_share y business_fee_cap_cents dicen cómo se reparte la tarifa de envío entre tú y tu cliente. Una cotización prepaid es distinta: ya cobraste a tu cliente, así que toda la tarifa es tuya y el reparto queda fijo en 100 sin tope. Una cotización que no nombra payment_method se cotiza igual, porque el único envío que puede vincularla es uno prepaid. En cualquiera de los dos, un business_fee_share distinto de 100 se rechaza con 422 validation_failed nombrando business_fee_share, un business_fee_cap_cents válido se ignora (uno que no es número se rechaza primero como error de forma), y una cotización que no envía ninguno se cotiza en 100, sin importar cuál sea el reparto predeterminado de tu tienda. Ese es el reparto que reserva una creación de envío prepaid, así que una cotización que quieras vincular a un envío prepaid debe nombrar payment_method: prepaid o no nombrar ningún método. Para repartir la tarifa con tu cliente, nombra cash o card. vehicle es moto (el predeterminado) o car. Un auto es un sedán: podemos garantizar un auto, nunca una camioneta, y hay menos autos que motos, así que uno puede tardar más en asignarse. Un auto agrega un recargo que va DENTRO de fee_cents y se reparte como el resto de la tarifa, así que el número que te cotizan es el precio completo; no hay una línea aparte para él. manifest.items es opcional y acepta los mismos elementos {name, quantity, size} que la creación de envío. size es uno de small (el predeterminado), medium, large o xlarge, y es el único campo de un elemento que puede cambiar el precio: un elemento de tamaño xlarge convierte el viaje en auto aunque vehicle diga moto. Nada más lo hace, ni siquiera el peso. El vehicle de la respuesta dice para qué viaje es la tarifa, sin importar qué lo volvió así. Cotiza con el mismo carrito con el que vas a crear el envío: la creación se sujeta al vehículo con el que se fijó el precio de esta cotización. Un carrito demasiado grande para un solo viaje de repartidor se rechaza con 422 order_too_large, nombrando manifest.items, antes de cotizar nada. Divídelo en dos envíos. Listo cotiza en pesos mexicanos y entrega en México. Una tienda que resulte estar en otro país se rechaza aquí con 422 unsupported_country, que es definitivo: no es el provider_unavailable reintentable, y ningún reintento de la misma tienda puede funcionar. Solo te encontrarás con él en una tienda que ubicaste tú mismo, con lat/lng, ya que una tienda que ubicamos nosotros se rechaza al crearla. Una tienda cuyo punto de recolección no podemos avalar por ahora se rechaza con 409 pickup_point_pending, porque mientras no esté confirmado, un repartidor podría ir al lugar equivocado. Por lo general la dirección de la tienda acaba de cambiar y la confirmación todavía no llega, pero no siempre, así que no lo leas como \u0026quot;el comercio se mudó\u0026quot;. Este SÍ es reintentable: nada en tu solicitud está mal, y la llamada idéntica funciona en cuanto el punto de recolección se confirma. Rechaza la tienda y no el viaje, así que un punto de entrega distinto no ayudará. Reinténtalo con esperas de minutos, durante un número limitado de intentos, y luego ponlo frente a una persona en lugar de seguir consultando. La mayoría de los cambios se resuelven solos en minutos; unos pocos los detiene algo que solo nuestro equipo puede liberar y tardan bastante más, y esta respuesta no distingue entre los dos. El restaurante también puede desbloquearlo por su cuenta desde su propia consola de Listo, que suele ser la vía más rápida de las dos. Cuando todos los repartidores cerca del viaje están ocupados, la cotización se rechaza con 409 no_couriers_available y no se cotiza nada. No es una caída del servicio y nada en tu solicitud está mal: SÍ es reintentable, y la llamada idéntica se cotiza en cuanto un repartidor queda libre, por lo general en minutos. Reinténtalo tras unos minutos, durante un número limitado de intentos, y luego avisa a quien espera el pedido en lugar de seguir consultando. Es la misma palabra que un envío que terminó sin repartidor trae en failure_reason. Una tienda real cuyo Plan Listo no está pagado al día se rechaza con 402 plan_required, porque la creación rechazaría el envío que cotiza esta cotización. error.message nombra el motivo: no hay plan activo, un cobro pendiente, un plan que terminó en una fecha dada, un plan cuyos envíos incluidos del ciclo ya se usaron todos, o una tienda que no puede pedir repartidores en este momento. No es retryable: la llamada idéntica falla hasta que el plan se pague o se reinicie, o hasta que el ciclo se renueve. Consulta Plan y facturación.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://listo-c5a11a00.mintlify.site/_mintlify/api/og/v2?title=Cotiza+un+env%C3%ADo\u0026amp;description=Cotiza+un+viaje+y+reserva+ese+precio+para+que+lo+vincules.+El+precio+se+fija+en+el+momento+en+que+pides+la+cotizaci%C3%B3n%3A+vincula+su+%60id%60+al+crear+el+env%C3%ADo+y+al+pe\u0026amp;theme=77fcfc9066d8b9eb9850b729\u0026amp;signature=8e9c94b3660ce5cce26b6fa2650bc7b20655c4891fb64fc1ffb0f076b27a6d90\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/listo-c5a11a00/GMBEN5uWEX-r6cRJ/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Listo Partner API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#15171C\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.listo.delivery/es/api-reference/quotes/price-a-delivery\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/es/api-reference/quotes/price-a-delivery.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"es\" href=\"https://docs.listo.delivery/es/api-reference/quotes/price-a-delivery\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://docs.listo.delivery/api-reference/quotes/price-a-delivery\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://docs.listo.delivery/api-reference/quotes/price-a-delivery\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.listo.delivery/#organization\",\"name\":\"Listo Partner API\",\"url\":\"https://docs.listo.delivery\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/listo-c5a11a00/mreCwXzcEA2bSZog/logo/light.svg?fit=max\u0026auto=format\u0026n=mreCwXzcEA2bSZog\u0026q=85\u0026s=da2b28d464dc6987329dfd5971085dd7\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.listo.delivery#website\",\"name\":\"Listo Partner API\",\"url\":\"https://docs.listo.delivery\",\"publisher\":{\"@id\":\"https://docs.listo.delivery/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.listo.delivery/es/api-reference/quotes/price-a-delivery#webpage\",\"url\":\"https://docs.listo.delivery/es/api-reference/quotes/price-a-delivery\",\"name\":\"Cotiza un envío\",\"description\":\"Cotiza un viaje y reserva ese precio para que lo vincules. El precio se fija en el momento en que pides la cotización: vincula su id al crear el envío y al pedido se le cobra el fee_cents y el reparto que te mostramos. La red de repartidores reserva el viaje al crear el envío, y lo que reserva puede diferir un poco del precio cotizado. Reservamos justo la cotización que te mostramos siempre que siga vigente, así que es raro. Cuando pasa, la diferencia aparece en tu historial como su propia línea (requote_adjustment, ver GET /v1/ledger), negativa cuando el viaje reservado costó más y positiva cuando costó menos. Nunca cambia el fee_cents, el reparto ni el total del pedido que ve tu cliente. Las cotizaciones vencen, y expires_at te dice cuándo. Vincular una cotización vencida o ya gastada es un 400; pide una nueva. Vincularla es opcional, y una creación sin ella se cotiza en línea al precio que haya en ese momento. cash_to_collect_cents es lo que el repartidor cobra en la puerta en un pedido en efectivo: el valor de la mercancía más la parte del cliente de la tarifa. business_fee_share y business_fee_cap_cents dicen cómo se reparte la tarifa de envío entre tú y tu cliente. Una cotización prepaid es distinta: ya cobraste a tu cliente, así que toda la tarifa es tuya y el reparto queda fijo en 100 sin tope. Una cotización que no nombra payment_method se cotiza igual, porque el único envío que puede vincularla es uno prepaid. En cualquiera de los dos, un business_fee_share distinto de 100 se rechaza con 422 validation_failed nombrando business_fee_share, un business_fee_cap_cents válido se ignora (uno que no es número se rechaza primero como error de forma), y una cotización que no envía ninguno se cotiza en 100, sin importar cuál sea el reparto predeterminado de tu tienda. Ese es el reparto que reserva una creación de envío prepaid, así que una cotización que quieras vincular a un envío prepaid debe nombrar payment_method: prepaid o no nombrar ningún método. Para repartir la tarifa con tu cliente, nombra cash o card. vehicle es moto (el predeterminado) o car. Un auto es un sedán: podemos garantizar un auto, nunca una camioneta, y hay menos autos que motos, así que uno puede tardar más en asignarse. Un auto agrega un recargo que va DENTRO de fee_cents y se reparte como el resto de la tarifa, así que el número que te cotizan es el precio completo; no hay una línea aparte para él. manifest.items es opcional y acepta los mismos elementos {name, quantity, size} que la creación de envío. size es uno de small (el predeterminado), medium, large o xlarge, y es el único campo de un elemento que puede cambiar el precio: un elemento de tamaño xlarge convierte el viaje en auto aunque vehicle diga moto. Nada más lo hace, ni siquiera el peso. El vehicle de la respuesta dice para qué viaje es la tarifa, sin importar qué lo volvió así. Cotiza con el mismo carrito con el que vas a crear el envío: la creación se sujeta al vehículo con el que se fijó el precio de esta cotización. Un carrito demasiado grande para un solo viaje de repartidor se rechaza con 422 order_too_large, nombrando manifest.items, antes de cotizar nada. Divídelo en dos envíos. Listo cotiza en pesos mexicanos y entrega en México. Una tienda que resulte estar en otro país se rechaza aquí con 422 unsupported_country, que es definitivo: no es el provider_unavailable reintentable, y ningún reintento de la misma tienda puede funcionar. Solo te encontrarás con él en una tienda que ubicaste tú mismo, con lat/lng, ya que una tienda que ubicamos nosotros se rechaza al crearla. Una tienda cuyo punto de recolección no podemos avalar por ahora se rechaza con 409 pickup_point_pending, porque mientras no esté confirmado, un repartidor podría ir al lugar equivocado. Por lo general la dirección de la tienda acaba de cambiar y la confirmación todavía no llega, pero no siempre, así que no lo leas como \\\"el comercio se mudó\\\". Este SÍ es reintentable: nada en tu solicitud está mal, y la llamada idéntica funciona en cuanto el punto de recolección se confirma. Rechaza la tienda y no el viaje, así que un punto de entrega distinto no ayudará. Reinténtalo con esperas de minutos, durante un número limitado de intentos, y luego ponlo frente a una persona en lugar de seguir consultando. La mayoría de los cambios se resuelven solos en minutos; unos pocos los detiene algo que solo nuestro equipo puede liberar y tardan bastante más, y esta respuesta no distingue entre los dos. El restaurante también puede desbloquearlo por su cuenta desde su propia consola de Listo, que suele ser la vía más rápida de las dos. Cuando todos los repartidores cerca del viaje están ocupados, la cotización se rechaza con 409 no_couriers_available y no se cotiza nada. No es una caída del servicio y nada en tu solicitud está mal: SÍ es reintentable, y la llamada idéntica se cotiza en cuanto un repartidor queda libre, por lo general en minutos. Reinténtalo tras unos minutos, durante un número limitado de intentos, y luego avisa a quien espera el pedido en lugar de seguir consultando. Es la misma palabra que un envío que terminó sin repartidor trae en failure_reason. Una tienda real cuyo Plan Listo no está pagado al día se rechaza con 402 plan_required, porque la creación rechazaría el envío que cotiza esta cotización. error.message nombra el motivo: no hay plan activo, un cobro pendiente, un plan que terminó en una fecha dada, un plan cuyos envíos incluidos del ciclo ya se usaron todos, o una tienda que no puede pedir repartidores en este momento. No es retryable: la llamada idéntica falla hasta que el plan se pague o se reinicie, o hasta que el ciclo se renueve. Consulta Plan y facturación.\",\"dateModified\":\"2026-11-07T01:48:56.011Z\",\"isPartOf\":{\"@id\":\"https://docs.listo.delivery#website\"},\"breadcrumb\":{\"@id\":\"https://docs.listo.delivery/es/api-reference/quotes/price-a-delivery#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.listo.delivery/es/api-reference/quotes/price-a-delivery#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Referencia\",\"item\":\"https://docs.listo.delivery/es/api-reference/balance/read-your-prepaid-balance\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Cotiza un envío\",\"item\":\"https://docs.listo.delivery/es/api-reference/quotes/price-a-delivery\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.listo.delivery/es/api-reference/quotes/price-a-delivery#apireference\",\"headline\":\"Cotiza un envío\",\"name\":\"Cotiza un envío\",\"description\":\"Cotiza un viaje y reserva ese precio para que lo vincules. El precio se fija en el momento en que pides la cotización: vincula su id al crear el envío y al pedido se le cobra el fee_cents y el reparto que te mostramos. La red de repartidores reserva el viaje al crear el envío, y lo que reserva puede diferir un poco del precio cotizado. Reservamos justo la cotización que te mostramos siempre que siga vigente, así que es raro. Cuando pasa, la diferencia aparece en tu historial como su propia línea (requote_adjustment, ver GET /v1/ledger), negativa cuando el viaje reservado costó más y positiva cuando costó menos. Nunca cambia el fee_cents, el reparto ni el total del pedido que ve tu cliente. Las cotizaciones vencen, y expires_at te dice cuándo. Vincular una cotización vencida o ya gastada es un 400; pide una nueva. Vincularla es opcional, y una creación sin ella se cotiza en línea al precio que haya en ese momento. cash_to_collect_cents es lo que el repartidor cobra en la puerta en un pedido en efectivo: el valor de la mercancía más la parte del cliente de la tarifa. business_fee_share y business_fee_cap_cents dicen cómo se reparte la tarifa de envío entre tú y tu cliente. Una cotización prepaid es distinta: ya cobraste a tu cliente, así que toda la tarifa es tuya y el reparto queda fijo en 100 sin tope. Una cotización que no nombra payment_method se cotiza igual, porque el único envío que puede vincularla es uno prepaid. En cualquiera de los dos, un business_fee_share distinto de 100 se rechaza con 422 validation_failed nombrando business_fee_share, un business_fee_cap_cents válido se ignora (uno que no es número se rechaza primero como error de forma), y una cotización que no envía ninguno se cotiza en 100, sin importar cuál sea el reparto predeterminado de tu tienda. Ese es el reparto que reserva una creación de envío prepaid, así que una cotización que quieras vincular a un envío prepaid debe nombrar payment_method: prepaid o no nombrar ningún método. Para repartir la tarifa con tu cliente, nombra cash o card. vehicle es moto (el predeterminado) o car. Un auto es un sedán: podemos garantizar un auto, nunca una camioneta, y hay menos autos que motos, así que uno puede tardar más en asignarse. Un auto agrega un recargo que va DENTRO de fee_cents y se reparte como el resto de la tarifa, así que el número que te cotizan es el precio completo; no hay una línea aparte para él. manifest.items es opcional y acepta los mismos elementos {name, quantity, size} que la creación de envío. size es uno de small (el predeterminado), medium, large o xlarge, y es el único campo de un elemento que puede cambiar el precio: un elemento de tamaño xlarge convierte el viaje en auto aunque vehicle diga moto. Nada más lo hace, ni siquiera el peso. El vehicle de la respuesta dice para qué viaje es la tarifa, sin importar qué lo volvió así. Cotiza con el mismo carrito con el que vas a crear el envío: la creación se sujeta al vehículo con el que se fijó el precio de esta cotización. Un carrito demasiado grande para un solo viaje de repartidor se rechaza con 422 order_too_large, nombrando manifest.items, antes de cotizar nada. Divídelo en dos envíos. Listo cotiza en pesos mexicanos y entrega en México. Una tienda que resulte estar en otro país se rechaza aquí con 422 unsupported_country, que es definitivo: no es el provider_unavailable reintentable, y ningún reintento de la misma tienda puede funcionar. Solo te encontrarás con él en una tienda que ubicaste tú mismo, con lat/lng, ya que una tienda que ubicamos nosotros se rechaza al crearla. Una tienda cuyo punto de recolección no podemos avalar por ahora se rechaza con 409 pickup_point_pending, porque mientras no esté confirmado, un repartidor podría ir al lugar equivocado. Por lo general la dirección de la tienda acaba de cambiar y la confirmación todavía no llega, pero no siempre, así que no lo leas como \\\"el comercio se mudó\\\". Este SÍ es reintentable: nada en tu solicitud está mal, y la llamada idéntica funciona en cuanto el punto de recolección se confirma. Rechaza la tienda y no el viaje, así que un punto de entrega distinto no ayudará. Reinténtalo con esperas de minutos, durante un número limitado de intentos, y luego ponlo frente a una persona en lugar de seguir consultando. La mayoría de los cambios se resuelven solos en minutos; unos pocos los detiene algo que solo nuestro equipo puede liberar y tardan bastante más, y esta respuesta no distingue entre los dos. El restaurante también puede desbloquearlo por su cuenta desde su propia consola de Listo, que suele ser la vía más rápida de las dos. Cuando todos los repartidores cerca del viaje están ocupados, la cotización se rechaza con 409 no_couriers_available y no se cotiza nada. No es una caída del servicio y nada en tu solicitud está mal: SÍ es reintentable, y la llamada idéntica se cotiza en cuanto un repartidor queda libre, por lo general en minutos. Reinténtalo tras unos minutos, durante un número limitado de intentos, y luego avisa a quien espera el pedido en lugar de seguir consultando. Es la misma palabra que un envío que terminó sin repartidor trae en failure_reason. Una tienda real cuyo Plan Listo no está pagado al día se rechaza con 402 plan_required, porque la creación rechazaría el envío que cotiza esta cotización. error.message nombra el motivo: no hay plan activo, un cobro pendiente, un plan que terminó en una fecha dada, un plan cuyos envíos incluidos del ciclo ya se usaron todos, o una tienda que no puede pedir repartidores en este momento. No es retryable: la llamada idéntica falla hasta que el plan se pague o se reinicie, o hasta que el ciclo se renueve. Consulta Plan y facturación.\",\"url\":\"https://docs.listo.delivery/es/api-reference/quotes/price-a-delivery\",\"mainEntityOfPage\":{\"@id\":\"https://docs.listo.delivery/es/api-reference/quotes/price-a-delivery#webpage\"},\"dateModified\":\"2026-11-07T01:48:56.011Z\",\"publisher\":{\"@id\":\"https://docs.listo.delivery/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.listo.delivery#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Listo Partner API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Listo Partner API","nav":{"global":null,"languages":[{"language":"en","default":true,"navbar":{"links":[{"href":"https://status.listo.delivery","label":"Status"}]},"pages":[{"title":"en","href":"/api-reference/quotes/price-a-delivery"}]},{"language":"es","navbar":{"links":[{"href":"https://status.listo.delivery","label":"Estado del servicio"}]},"groups":[{"group":"Primeros pasos","pages":[{"title":"Inicio rápido","href":"/es/quickstart"}]},{"group":"Guías","pages":[{"title":"Cotiza y crea un envío","href":"/es/guides/quote-and-create"},{"title":"Recibe y verifica webhooks","href":"/es/guides/webhooks"},{"title":"Depurar tu integración","href":"/es/guides/debugging"},{"title":"Construye con IA","href":"/es/guides/build-with-ai"},{"title":"Fondea tu saldo y retira","href":"/es/guides/balance-and-withdrawals"},{"title":"Sal a producción","href":"/es/guides/go-live"},{"title":"Conecta un restaurante que ya usa Listo","sidebarTitle":"Conecta una cuenta existente","href":"/es/guides/connect-existing-account"},{"title":"Plan y cobro","href":"/es/guides/plan-and-billing"},{"title":"Conecta Claude, Cursor o Codex","href":"/es/guides/connect-ai-client"}]},{"group":"Errores","expanded":false,"pages":[{"title":"Errores","href":"/es/errors/index"},{"title":"account_exists","href":"/es/errors/account_exists"},{"title":"address_not_found","href":"/es/errors/address_not_found"},{"title":"address_undeliverable","href":"/es/errors/address_undeliverable"},{"title":"cancel_failed","href":"/es/errors/cancel_failed"},{"title":"card_below_minimum","href":"/es/errors/card_below_minimum"},{"title":"card_not_ready","href":"/es/errors/card_not_ready"},{"title":"cash_over_cap","href":"/es/errors/cash_over_cap"},{"title":"charge_in_progress","href":"/es/errors/charge_in_progress"},{"title":"code_expired","href":"/es/errors/code_expired"},{"title":"console_access_required","href":"/es/errors/console_access_required"},{"title":"event_not_resendable","href":"/es/errors/event_not_resendable"},{"title":"idempotency_conflict","href":"/es/errors/idempotency_conflict"},{"title":"insufficient_balance","href":"/es/errors/insufficient_balance"},{"title":"internal_error","href":"/es/errors/internal_error"},{"title":"invalid_api_key","href":"/es/errors/invalid_api_key"},{"title":"no_couriers_available","href":"/es/errors/no_couriers_available"},{"title":"not_cancellable","href":"/es/errors/not_cancellable"},{"title":"not_editable","href":"/es/errors/not_editable"},{"title":"not_found","href":"/es/errors/not_found"},{"title":"not_reactivatable","href":"/es/errors/not_reactivatable"},{"title":"not_refundable","href":"/es/errors/not_refundable"},{"title":"not_reschedulable","href":"/es/errors/not_reschedulable"},{"title":"not_retriable","href":"/es/errors/not_retriable"},{"title":"order_too_large","href":"/es/errors/order_too_large"},{"title":"out_of_service_area","href":"/es/errors/out_of_service_area"},{"title":"payout_account_not_ready","href":"/es/errors/payout_account_not_ready"},{"title":"pickup_point_pending","href":"/es/errors/pickup_point_pending"},{"title":"plan_ended","href":"/es/errors/plan_ended"},{"title":"plan_required","href":"/es/errors/plan_required"},{"title":"provider_unavailable","href":"/es/errors/provider_unavailable"},{"title":"quote_consumed","href":"/es/errors/quote_consumed"},{"title":"quote_expired","href":"/es/errors/quote_expired"},{"title":"rate_limited","href":"/es/errors/rate_limited"},{"title":"read_only_key","href":"/es/errors/read_only_key"},{"title":"refund_amount_too_large","href":"/es/errors/refund_amount_too_large"},{"title":"resend_limit_reached","href":"/es/errors/resend_limit_reached"},{"title":"same_day_below_minimum","href":"/es/errors/same_day_below_minimum"},{"title":"same_day_cap_exceeded","href":"/es/errors/same_day_cap_exceeded"},{"title":"test_webhook_limit_reached","href":"/es/errors/test_webhook_limit_reached"},{"title":"unsupported_country","href":"/es/errors/unsupported_country"},{"title":"validation_failed","href":"/es/errors/validation_failed"},{"title":"webhook_endpoint_not_configured","href":"/es/errors/webhook_endpoint_not_configured"}]},{"group":"Referencia","pages":[{"group":"Saldo","pages":[{"title":"Consulta tu saldo prepagado","deprecated":null,"version":null,"sidebarTitle":"Consulta tu saldo prepagado","openapi":"/openapi/es.yaml get /v1/balance","href":"/es/api-reference/balance/read-your-prepaid-balance"},{"title":"Consulta el saldo de una tienda","deprecated":null,"version":null,"sidebarTitle":"Consulta el saldo de una tienda","openapi":"/openapi/es.yaml get /v1/stores/{store_id}/balance","href":"/es/api-reference/balance/read-a-stores-balance"}]},{"group":"Conexión de cuenta","pages":[{"title":"Pide a un restaurante que conecte la cuenta que ya tiene en Listo","deprecated":null,"version":null,"sidebarTitle":"Pide a un restaurante que conecte la cuenta que ya tiene en Listo","openapi":"/openapi/es.yaml post /v1/connect_requests","href":"/es/api-reference/account-connection/ask-a-restaurant-to-connect-its-account"},{"title":"Canjea una aprobación por la tienda","deprecated":null,"version":null,"sidebarTitle":"Canjea una aprobación por la tienda","openapi":"/openapi/es.yaml post /v1/connections","href":"/es/api-reference/account-connection/exchange-an-approval-for-the-store"}]},{"group":"Envíos","pages":[{"title":"Lista envíos","deprecated":null,"version":null,"sidebarTitle":"Lista envíos","openapi":"/openapi/es.yaml get /v1/deliveries","href":"/es/api-reference/deliveries/list-deliveries"},{"title":"Crea un envío","deprecated":null,"version":null,"sidebarTitle":"Crea un envío","openapi":"/openapi/es.yaml post /v1/deliveries","href":"/es/api-reference/deliveries/create-a-delivery"},{"title":"Cancela un envío","deprecated":null,"version":null,"sidebarTitle":"Cancela un envío","openapi":"/openapi/es.yaml post /v1/deliveries/{delivery_id}/cancellations","href":"/es/api-reference/deliveries/cancel-a-delivery"},{"title":"Reembolsa un envío","deprecated":null,"version":null,"sidebarTitle":"Reembolsa un envío","openapi":"/openapi/es.yaml post /v1/deliveries/{delivery_id}/refunds","href":"/es/api-reference/deliveries/refund-a-delivery"},{"title":"Reintenta un despacho fallido","deprecated":null,"version":null,"sidebarTitle":"Reintenta un despacho fallido","openapi":"/openapi/es.yaml post /v1/deliveries/{delivery_id}/retries","href":"/es/api-reference/deliveries/retry-a-failed-dispatch"},{"title":"Obtén un envío","deprecated":null,"version":null,"sidebarTitle":"Obtén un envío","openapi":"/openapi/es.yaml get /v1/deliveries/{id}","href":"/es/api-reference/deliveries/fetch-a-delivery"},{"title":"Actualiza un envío","deprecated":null,"version":null,"sidebarTitle":"Actualiza un envío","openapi":"/openapi/es.yaml patch /v1/deliveries/{id}","href":"/es/api-reference/deliveries/update-a-delivery"}]},{"group":"Eventos","pages":[{"title":"Lista tus eventos de webhook","deprecated":null,"version":null,"sidebarTitle":"Lista tus eventos de webhook","openapi":"/openapi/es.yaml get /v1/events","href":"/es/api-reference/events/list-your-webhook-events"},{"title":"Reenvía un evento de webhook","deprecated":null,"version":null,"sidebarTitle":"Reenvía un evento de webhook","openapi":"/openapi/es.yaml post /v1/events/{event_id}/resend","href":"/es/api-reference/events/send-a-webhook-event-again"},{"title":"Obtén un evento de webhook","deprecated":null,"version":null,"sidebarTitle":"Obtén un evento de webhook","openapi":"/openapi/es.yaml get /v1/events/{id}","href":"/es/api-reference/events/retrieve-a-webhook-event"},{"title":"Envía un webhook de prueba","deprecated":null,"version":null,"sidebarTitle":"Envía un webhook de prueba","openapi":"/openapi/es.yaml post /v1/test_webhooks","href":"/es/api-reference/events/send-a-test-webhook"}]},{"group":"Historial","pages":[{"title":"Lista tus movimientos del historial","deprecated":null,"version":null,"sidebarTitle":"Lista tus movimientos del historial","openapi":"/openapi/es.yaml get /v1/ledger","href":"/es/api-reference/ledger/list-your-ledger-entries"},{"title":"Lista los movimientos del historial de una tienda","deprecated":null,"version":null,"sidebarTitle":"Lista los movimientos del historial de una tienda","openapi":"/openapi/es.yaml get /v1/stores/{store_id}/ledger","href":"/es/api-reference/ledger/list-a-stores-ledger-entries"}]},{"group":"Autenticación","pages":[{"title":"Verifica que tu llave de API funciona","description":"Confirma que una llave es válida y te dice en qué modo actúa.\nEmpieza por aquí: ejercita la autenticación, el límite de solicitudes\ny el formato de error sin crear nada.\n\nUna llave de solo lectura puede llamar a este y a cualquier otro `GET`. Cualquier llamada que cree, cambie o cancele algo con una llave de solo lectura se rechaza con `403 read_only_key`.\n","deprecated":null,"version":null,"sidebarTitle":"Verifica que tu llave de API funciona","openapi":"/openapi/es.yaml get /v1/ping","href":"/es/api-reference/authentication/check-that-your-api-key-works"}]},{"group":"Cotizaciones","pages":[{"title":"Cotiza un envío","deprecated":null,"version":null,"sidebarTitle":"Cotiza un envío","openapi":"/openapi/es.yaml post /v1/quotes","href":"/es/api-reference/quotes/price-a-delivery"}]},{"group":"Registro de solicitudes","pages":[{"title":"Lista tu registro de solicitudes","description":"Todas las llamadas que tus llaves hicieron a esta API, las más nuevas primero, paginadas por keyset\ncomo cada lista de aquí. Úsalo para responder «¿qué mandó mi código y qué\nrespondió Listo?» sin preguntarle a nadie.\n\nUna llave solo ve las llamadas de su propio mundo: una llave real lee llamadas reales\ny una llave de prueba lee llamadas de prueba, y ninguna puede leer las de la otra.\n\nFiltra por `status` (`failed` son todas las respuestas de 400 o más),\n`endpoint`, `created_after` y `created_before`. Un filtro acota todo el\nhistorial, nunca solo la página en la que estás.\n\nSe registran las llamadas que identificaron una llave. Una llamada sin llave o con una equivocada no es tuya y no está aquí, tampoco una llamada rechazada por límite de tasa. Las llamadas se guardan indefinidamente. Leer esta lista, una entrada o tus eventos o entregas de webhook también queda registrado, pero sin cuerpos, para que el registro no se copie a sí mismo cada vez que lo lees.\n\nLa lista no trae cuerpos. `GET /v1/request_logs/{id}` devuelve la llamada con ellos.\n","deprecated":null,"version":null,"sidebarTitle":"Lista tu registro de solicitudes","openapi":"/openapi/es.yaml get /v1/request_logs","href":"/es/api-reference/request-logs/list-your-request-log"},{"title":"Obtén una entrada del registro de solicitudes","deprecated":null,"version":null,"sidebarTitle":"Obtén una entrada del registro de solicitudes","openapi":"/openapi/es.yaml get /v1/request_logs/{id}","href":"/es/api-reference/request-logs/retrieve-a-request-log-entry"}]},{"group":"Tiendas","pages":[{"title":"Lista tus tiendas","deprecated":null,"version":null,"sidebarTitle":"Lista tus tiendas","openapi":"/openapi/es.yaml get /v1/stores","href":"/es/api-reference/stores/list-your-stores"},{"title":"Crea una tienda","deprecated":null,"version":null,"sidebarTitle":"Crea una tienda","openapi":"/openapi/es.yaml post /v1/stores","href":"/es/api-reference/stores/create-a-store"},{"title":"Obtén una tienda","deprecated":null,"version":null,"sidebarTitle":"Obtén una tienda","openapi":"/openapi/es.yaml get /v1/stores/{id}","href":"/es/api-reference/stores/fetch-a-store"},{"title":"Actualiza una tienda","deprecated":null,"version":null,"sidebarTitle":"Actualiza una tienda","openapi":"/openapi/es.yaml patch /v1/stores/{id}","href":"/es/api-reference/stores/update-a-store"},{"title":"Invita al dueño de una tienda","deprecated":null,"version":null,"sidebarTitle":"Invita al dueño de una tienda","openapi":"/openapi/es.yaml post /v1/stores/{store_id}/owner","href":"/es/api-reference/stores/invite-a-store-owner"},{"title":"Reactiva el plan de una tienda","deprecated":null,"version":null,"sidebarTitle":"Reactiva el plan de una tienda","openapi":"/openapi/es.yaml post /v1/stores/{store_id}/plan","href":"/es/api-reference/stores/reactivate-a-stores-plan"},{"title":"Cancela el plan de una tienda","deprecated":null,"version":null,"sidebarTitle":"Cancela el plan de una tienda","openapi":"/openapi/es.yaml post /v1/stores/{store_id}/plan_cancellation","href":"/es/api-reference/stores/cancel-a-stores-plan"},{"title":"Deshaz la cancelación del plan de una tienda","deprecated":null,"version":null,"sidebarTitle":"Deshaz la cancelación del plan de una tienda","openapi":"/openapi/es.yaml delete /v1/stores/{store_id}/plan_cancellation","href":"/es/api-reference/stores/undo-a-stores-plan-cancellation"}]},{"group":"Alta de cobros con tarjeta","pages":[{"title":"Inicia el alta para cobros con tarjeta de una tienda","deprecated":null,"version":null,"sidebarTitle":"Inicia el alta para cobros con tarjeta de una tienda","openapi":"/openapi/es.yaml post /v1/stores/{store_id}/stripe_onboarding","href":"/es/api-reference/card-onboarding/start-card-onboarding-for-a-store"},{"title":"Consulta la disponibilidad para cobrar con tarjeta de una tienda","deprecated":null,"version":null,"sidebarTitle":"Consulta la disponibilidad para cobrar con tarjeta de una tienda","openapi":"/openapi/es.yaml get /v1/stores/{store_id}/stripe_status","href":"/es/api-reference/card-onboarding/read-a-stores-card-readiness"},{"title":"Inicia el alta para cobros con tarjeta de tu empresa","deprecated":null,"version":null,"sidebarTitle":"Inicia el alta para cobros con tarjeta de tu empresa","openapi":"/openapi/es.yaml post /v1/stripe_onboarding","href":"/es/api-reference/card-onboarding/start-card-onboarding-for-your-company"},{"title":"Consulta la disponibilidad para cobrar con tarjeta de tu empresa","deprecated":null,"version":null,"sidebarTitle":"Consulta la disponibilidad para cobrar con tarjeta de tu empresa","openapi":"/openapi/es.yaml get /v1/stripe_status","href":"/es/api-reference/card-onboarding/read-your-companys-card-readiness"}]},{"group":"Entregas de webhook","pages":[{"title":"Lista los intentos de entrega de webhook","deprecated":null,"version":null,"sidebarTitle":"Lista los intentos de entrega de webhook","openapi":"/openapi/es.yaml get /v1/webhook_deliveries","href":"/es/api-reference/webhook-deliveries/list-webhook-delivery-attempts"}]},{"group":"Retiros","pages":[{"title":"Lista tus retiros","deprecated":null,"version":null,"sidebarTitle":"Lista tus retiros","openapi":"/openapi/es.yaml get /v1/withdrawals","href":"/es/api-reference/withdrawals/list-your-withdrawals"},{"title":"Solicita un retiro","deprecated":null,"version":null,"sidebarTitle":"Solicita un retiro","openapi":"/openapi/es.yaml post /v1/withdrawals","href":"/es/api-reference/withdrawals/request-a-withdrawal"},{"title":"Obtén un retiro","deprecated":null,"version":null,"sidebarTitle":"Obtén un retiro","openapi":"/openapi/es.yaml get /v1/withdrawals/{id}","href":"/es/api-reference/withdrawals/fetch-a-withdrawal"}]},{"group":"Webhooks","pages":[{"title":"A delivery reached a new status","version":null,"deprecated":null,"sidebarTitle":"Un envío llegó a un nuevo estado","openapi":"/openapi/es.yaml webhook delivery.status_changed","href":"/es/api-reference/webhooks/a-delivery-reached-a-new-status"},{"title":"A delivery changed without changing status","version":null,"deprecated":null,"sidebarTitle":"Un envío cambió sin cambiar de estado","openapi":"/openapi/es.yaml webhook delivery.updated","href":"/es/api-reference/webhooks/a-delivery-changed-without-changing-status"},{"title":"The courier moved","version":null,"deprecated":null,"sidebarTitle":"El repartidor se movió","openapi":"/openapi/es.yaml webhook delivery.courier_location","href":"/es/api-reference/webhooks/the-courier-moved"},{"title":"A withdrawal was settled","version":null,"deprecated":null,"sidebarTitle":"Un retiro se liquidó","openapi":"/openapi/es.yaml webhook withdrawal.updated","href":"/es/api-reference/webhooks/a-withdrawal-was-settled"},{"title":"A store changed","version":null,"deprecated":null,"sidebarTitle":"Una tienda cambió","openapi":"/openapi/es.yaml webhook store.updated","href":"/es/api-reference/webhooks/a-store-changed"},{"title":"A restaurant connected its existing account to you","version":null,"deprecated":null,"sidebarTitle":"Un restaurante conectó la cuenta de Listo que ya tenía contigo","openapi":"/openapi/es.yaml webhook store.connected","href":"/es/api-reference/webhooks/a-restaurant-connected-its-existing-account-to-you"}]}]},{"group":"Conceptos","pages":[{"title":"El modelo de dinero","href":"/es/concepts/money"},{"title":"De dónde viene un envío","href":"/es/concepts/delivery-origin"},{"title":"Modo de prueba","href":"/es/concepts/test-mode"},{"title":"Firmas","href":"/es/concepts/signing"},{"title":"Efectivo en la puerta","href":"/es/concepts/cash-at-the-door"}]},{"group":"Historial de cambios","pages":[{"title":"Historial de cambios","href":"/es/changelog"}]},{"group":"Legal","pages":[{"title":"Términos para Partners","url":"https://listo.delivery/terminos-partners","href":"/es/terms-for-partners"}]}]}]},"basePath":"","title":"Cotiza un envío - Listo Partner API","buildId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","deploymentId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-i2a3QZ8E.js","utils-ChLwp8m0.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DRktVTDc.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-CA2pEs4T.js","snippetPresets-ClQ6XrKD.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-Ct_Lv36y.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-Cn2PYw9e.js","shallow-rkyymjXQ.js","getApiPlaygroundDisplay-BB9vkXtE.js","CodeSnippet-Bm5RU7m1.js","CodeSnippets-BgU9Deuz.js","Page-BUDYNlhG.js","getPastedJson-BD-6NNum.js","icon-8Z6tud2e.js","MethodPill-Tuzr4g3V.js","DuplicateIcon-0ceWFYhN.js","createIcon-FBXow_ST.js","DynamicMarkdown-CD8713Yy.js","SectionHeading-7zgzQbH-.js","axios-vUo_bRtp.js","Markdown-D7Ofw1oz.js","clsx-eKJ4rcii.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CwjSCXIK.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-9EK5IAXV.js"]}