{
"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": "idempotency_conflict",
"message": "That idempotency key was already used with a different body.",
"param": null,
"retryable": false,
"doc_url": "https://docs.listo.delivery/en/errors/idempotency_conflict",
"request_id": "0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10"
}
}
{
"error": {
"code": "validation_failed",
"message": "Markup cents must be less than or equal to 1000000",
"param": "markup_cents",
"retryable": false,
"doc_url": "https://docs.listo.delivery/en/errors/validation_failed",
"request_id": "0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10"
}
}
Tiendas
Crea una tienda
Registra un punto de recolección. lat/lng son opcionales: envíalos cuando los tengas y los tomamos tal cual; si no, geocodificamos street.
phone va en E.164. Un número mexicano es +52 seguido de los 10 dígitos (se acepta +52 1 seguido de 10, como lo escribe WhatsApp); un número de Estados Unidos o Canadá es +1 seguido de los 10 dígitos; un número de cualquier otro país se acepta con de 8 a 15 dígitos en total. Cualquier otra cosa se rechaza con validation_failed.
timezone se deriva de la posición de la tienda, y no tienes que enviarlo. México abarca cinco zonas horarias, y la posición de la tienda es lo que decide cuál le corresponde: los horarios de recolección programados, las marcas de tiempo de envío y la semana de liquidación se leen en esa zona.
Un timezone que sí envíes solo se usa cuando la posición no puede responder: una tienda sin coordenadas, o una posición que ninguna zona reclama. Uno que no coincida con la posición no cambia la tienda y no es un error: la tienda se crea, se aplica todo lo demás que enviaste, y la zona que da la posición es la que regresa.
Preferimos corregirlo en silencio antes que rechazarlo, porque desde aquí no podemos distinguir los dos casos: una zona enviada por defecto desde un formulario que nunca le preguntó al usuario llega exactamente igual que una zona que alguien eligió, y la primera tienda aprovisionada con la regla anterior quedó una hora adelantada durante todo un año de horarios de apertura, marcas de tiempo de envío y semanas de liquidación. La posición de la tienda es la evidencia de dónde está. Si el reloj de una tienda parece mal, lo que hay que corregir son las coordenadas.
default_business_fee_share es la parte de la tarifa de envío que esta tienda cubre por defecto, de 0 a 100, con el resto cobrado al cliente. Cada envío cash o card de la tienda la hereda, salvo que la creación la reemplace. Un envío prepaid, y una cotización que no nombre payment_method, siempre llevan 100 en lugar de eso: la tarifa completa es tuya.
Una tienda también puede dividir la tarifa por un monto fijo en pesos en lugar de por un porcentaje. default_fee_split_mode en el objeto de tienda te dice cuál es el modo, y default_fee_split_amount_cents lleva el monto. Ambos son de solo lectura: el restaurante elige la forma desde la consola de Listo, y aquí no hay un campo para definirla. Lee el modo antes que la parte, porque en un modo de monto la parte no es la división vigente. Enviar default_business_fee_share regresa la tienda a percent, en este endpoint y en la actualización.
owner_email es opcional, y es una precondición más que un atributo: envía la dirección de quien administra el local y la comparamos contra los restaurantes que ya tienen una cuenta de Listo propia. Si existe una, no se crea nada y recibes 409 account_exists, porque una segunda cuenta para una cocina que ya tiene una dividiría el saldo, la consola y el historial en dos. Pídele al dueño que conecte la cuenta que ya tiene con POST /v1/connect_requests, como describe Conecta un restaurante que ya usa Listo.
Nada guarda la dirección y ningún objeto de tienda la repite. Tampoco crea un inicio de sesión; eso es POST /v1/stores/{id}/owner.
Listo entrega en México, y una street que resuelve a otro país se rechaza con 422 unsupported_country: no se crea nada, y ninguna otra dirección de ese país funcionará tampoco. Una dirección que no podemos resolver en absoluto no se rechaza. Se guarda tal como la enviaste y se localiza en el primer envío.
Lo que hace una creación para una tienda real con el Plan Listo de la tienda depende de quién lo paga en tu cuenta (ver Plan y facturación).
Si tú pagas los planes de tus tiendas, la tienda inicia el Plan Listo y el primer mes se cobra a ti en esta misma solicitud, de tu saldo real o de la tarjeta guardada en tu cuenta. Fondea uno de los dos primero, y envía un Idempotency-Key en cada creación de una tienda real: una creación que se agota por tiempo y se repite sin él crea una segunda tienda, y la segunda tienda inicia un segundo plan. Una tienda cuyo primer cobro falla sigue creada y sigue respondiendo 201, con plan.statusawaiting_payment: todavía no tiene plan, nada está vencido, y los envíos de esa tienda se rechazan con 402 plan_required hasta que tu saldo o tu tarjeta cubran el mes, lo que Listo entonces cobra por sí solo.
Si tu cuenta está configurada para que cada restaurante pague el plan propio, no se te cobra nada: la tienda se crea sin plan (plan es null) y el restaurante compra el Plan Listo desde la consola de Listo. Los envíos de esa tienda se rechazan con 402 plan_required hasta que lo haga.
Una tienda de prueba no tiene plan.
POST
/
v1
/
stores
Crea una tienda
curl --request POST \ --url https://api.listo.delivery/v1/stores \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "name": "Sucursal Chapalita", "phone": "3312345678", "street": "Av. Juan Palomar y Arias 765", "apt_unit": "Local 4", "lat": 20.691145, "lng": -103.426885, "pickup_notes": "Toca el timbre del local, no la puerta principal", "timezone": "Guadalajara", "default_business_fee_share": 60, "access_tier": "api_only", "markup_cents": 800, "external_id": "pos-store-41", "owner_email": "rosa@lataqueria.mx"}'
{
"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": "idempotency_conflict",
"message": "That idempotency key was already used with a different body.",
"param": null,
"retryable": false,
"doc_url": "https://docs.listo.delivery/en/errors/idempotency_conflict",
"request_id": "0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10"
}
}
{
"error": {
"code": "validation_failed",
"message": "Markup cents must be less than or equal to 1000000",
"param": "markup_cents",
"retryable": false,
"doc_url": "https://docs.listo.delivery/en/errors/validation_failed",
"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.
Opcional. Envía una para que un reintento sea seguro: genera una llave NUEVA para cada llamada lógica (un UUID sirve bien), de hasta 255 caracteres, y envía la MISMA llave cuando reintentes esa llamada tras un tiempo de espera o una conexión caída. La misma llave con el mismo cuerpo devuelve la respuesta ORIGINAL, con su código de estado incluido, en lugar de volver a hacer el trabajo, durante 24 horas. La misma llave con un cuerpo distinto se rechaza con 409 idempotency_conflict, y también un reintento que llega mientras la primera solicitud aún se procesa (vuelve a intentarlo en un momento). Sin el encabezado no se guarda nada y un reintento es una solicitud nueva. Una llave pertenece a tu cuenta y al modo de la llave de API que la envió (las llaves de producción y de prueba nunca se cruzan), así que el mismo texto de dos cuentas, o de una llave de producción y una de prueba, son dos llaves distintas.
El dueño del restaurante a invitar, para una tienda con consola.
Respuesta
Creado.
Un punto de recolección. La disponibilidad para cobrar con tarjeta NO es un
campo aquí a propósito: tiene endpoint propio, con detalle propio de requisitos pendientes.
Tu propia referencia de esta ubicación, si enviaste una. Es única por modo de llave, y se puede filtrar en la lista, para que puedas conciliar contra tu propio libro de tiendas sin guardar nuestros ids.
El nombre que le diste a la tienda; para un restaurante que conectó una cuenta con varias sucursales, el negocio y la sucursal, como lo leen sus propios clientes (Tortería La Mera Mera, Zapopan). Una sucursal cuyo nombre ya empieza con el nombre del negocio, como Tortería La Mera Mera Centro, se publica tal cual. Cuando envías un nombre, un valor que empieza con el nombre de negocio de la tienda y una coma se lee como ese negocio más la sucursal, así que devolver el nombre que leíste no cambia nada.
La zona IANA en la que la tienda guarda sus horarios, normalizada a una
sola escritura por zona. Se deriva de las coordenadas de la tienda, y
se vuelve a derivar cada vez que la posición de la tienda se mueve. Una zona que tú envías
se usa solo cuando la posición no puede responder (una tienda sin
coordenadas, o una posición que ninguna zona reclama), y una que no coincide con la posición ni se guarda ni se trata
como error.
La parte de la tarifa de envío que esta tienda cubre por defecto, como porcentaje. El resto se cobra al cliente. Solo está vigente cuando default_fee_split_mode es percent; en cualquiera de los dos modos de monto, este es el porcentaje que la tienda conserva para cuando vuelva a ser uno.
Qué forma tiene el reparto predeterminado de esta tienda, y por eso cuál de los dos campos de arriba y de abajo está vigente. percent reparte la tarifa según default_business_fee_share; business_amount significa que la tienda cubre hasta default_fee_split_amount_cents de ella y el cliente paga el resto; customer_amount es el espejo, el cliente paga hasta ese monto y la tienda cubre el resto.
Solo lectura. Lo fija el restaurante en su propia consola de Listo, y enviar default_business_fee_share al crear o actualizar devuelve la tienda a percent.
El monto entre el que dividen la tarifa los dos modos de monto, en centavos. Es null en
modo percent, y nunca es null en ninguno de los dos modos de monto. Solo lectura.
Cuánto de Listo usa la propia tienda. Los envíos de una tienda api_only gastan tu saldo, y los de una tienda wallet o full gastan el suyo; billing dice cuál. Se puede escribir al crear y al actualizar, y siempre es api_only en una tienda de prueba. Una tienda real de una cuenta cuyos restaurantes pagan su propio Plan Listo no puede ser api_only: no tiene consola desde la cual comprar un plan, así que una creación o una actualización que lo pida se rechaza con 422 validation_failed y param: "access_tier".
Tu propio margen sobre cada envío de esta tienda, en centavos. Se suma a la tarifa de envío, se reparte con el cliente como el resto de la tarifa, y se abona a tu saldo cuando el envío se entrega. Se puede escribir al crear y al actualizar.
De quién es el saldo que paga los envíos de esta tienda, leído de access_tier para que nunca tengas que derivarlo: partner es tuyo, store es el propio de la tienda. Solo lectura. No es quién paga el plan de la tienda, que es plan.paid_by.
El Plan Listo de la tienda, o null cuando la tienda no necesita plan: una tienda de prueba, o una tienda real creada antes de que existiera Plan Listo, que sigue pidiendo repartidores sin uno. También es null cuando la tienda paga su propio plan (cada tienda de una cuenta cuyas tiendas pagan su propio Plan Listo) y el restaurante todavía no ha comprado uno: el restaurante lo compra en su propia consola, y no tienes nada que pagar ni reactivar. También es null para una tienda de un socio con el esquema de precios sin Plan Listo, que no necesita plan. Cuando es un objeto, todas las llaves están presentes, y las que no aplican son null. Consulta Plan y facturación.
Show child attributes
{"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/stores/create-a-store","slug":"/es/api-reference/stores/create-a-store","pageMetadata":{"title":"Crea una tienda","description":"Registra un punto de recolección. `lat`/`lng` son opcionales: envíalos cuando los tengas y los tomamos tal cual; si no, geocodificamos `street`.\n\n`phone` va en E.164. Un número mexicano es +52 seguido de los 10 dígitos (se acepta +52 1 seguido de 10, como lo escribe WhatsApp); un número de Estados Unidos o Canadá es +1 seguido de los 10 dígitos; un número de cualquier otro país se acepta con de 8 a 15 dígitos en total. Cualquier otra cosa se rechaza con `validation_failed`.\n\n`timezone` se deriva de la posición de la tienda, y no tienes que enviarlo. México abarca cinco zonas horarias, y la posición de la tienda es lo que decide cuál le corresponde: los horarios de recolección programados, las marcas de tiempo de envío y la semana de liquidación se leen en esa zona.\n\nUn `timezone` que sí envíes solo se usa cuando la posición no puede responder: una tienda sin coordenadas, o una posición que ninguna zona reclama. Uno que no coincida con la posición no cambia la tienda y no es un error: la tienda se crea, se aplica todo lo demás que enviaste, y la zona que da la posición es la que regresa.\n\nPreferimos corregirlo en silencio antes que rechazarlo, porque desde aquí no podemos distinguir los dos casos: una zona enviada por defecto desde un formulario que nunca le preguntó al usuario llega exactamente igual que una zona que alguien eligió, y la primera tienda aprovisionada con la regla anterior quedó una hora adelantada durante todo un año de horarios de apertura, marcas de tiempo de envío y semanas de liquidación. La posición de la tienda es la evidencia de dónde está. Si el reloj de una tienda parece mal, lo que hay que corregir son las coordenadas.\n\n`default_business_fee_share` es la parte de la tarifa de envío que esta tienda cubre por defecto, de 0 a 100, con el resto cobrado al cliente. Cada envío `cash` o `card` de la tienda la hereda, salvo que la creación la reemplace. Un envío `prepaid`, y una cotización que no nombre `payment_method`, siempre llevan 100 en lugar de eso: la tarifa completa es tuya.\n\nUna tienda también puede dividir la tarifa por un monto fijo en pesos en lugar de por un porcentaje. `default_fee_split_mode` en el objeto de tienda te dice cuál es el modo, y `default_fee_split_amount_cents` lleva el monto. Ambos son de solo lectura: el restaurante elige la forma desde la consola de Listo, y aquí no hay un campo para definirla. Lee el modo antes que la parte, porque en un modo de monto la parte no es la división vigente. Enviar `default_business_fee_share` regresa la tienda a `percent`, en este endpoint y en la actualización.\n\n`owner_email` es opcional, y es una precondición más que un atributo: envía la dirección de quien administra el local y la comparamos contra los restaurantes que ya tienen una cuenta de Listo propia. Si existe una, no se crea nada y recibes `409 account_exists`, porque una segunda cuenta para una cocina que ya tiene una dividiría el saldo, la consola y el historial en dos. Pídele al dueño que conecte la cuenta que ya tiene con `POST /v1/connect_requests`, como describe [Conecta un restaurante que ya usa Listo](https://docs.listo.delivery/es/guides/connect-existing-account).\n\nNada guarda la dirección y ningún objeto de tienda la repite. Tampoco crea un inicio de sesión; eso es `POST /v1/stores/{id}/owner`.\n\nListo entrega en México, y una `street` que resuelve a otro país se rechaza con `422 unsupported_country`: no se crea nada, y ninguna otra dirección de ese país funcionará tampoco. Una dirección que no podemos resolver en absoluto no se rechaza. Se guarda tal como la enviaste y se localiza en el primer envío.\n\nLo que hace una creación para una tienda real con el Plan Listo de la tienda depende de quién lo paga en tu cuenta (ver [Plan y facturación](https://docs.listo.delivery/es/guides/plan-and-billing)).\n\nSi tú pagas los planes de tus tiendas, la tienda inicia el Plan Listo y el primer mes se cobra a ti en esta misma solicitud, de tu saldo real o de la tarjeta guardada en tu cuenta. Fondea uno de los dos primero, y envía un `Idempotency-Key` en cada creación de una tienda real: una creación que se agota por tiempo y se repite sin él crea una segunda tienda, y la segunda tienda inicia un segundo plan. Una tienda cuyo primer cobro falla sigue creada y sigue respondiendo `201`, con `plan.status` `awaiting_payment`: todavía no tiene plan, nada está vencido, y los envíos de esa tienda se rechazan con `402 plan_required` hasta que tu saldo o tu tarjeta cubran el mes, lo que Listo entonces cobra por sí solo.\n\nSi tu cuenta está configurada para que cada restaurante pague el plan propio, no se te cobra nada: la tienda se crea sin plan (`plan` es `null`) y el restaurante compra el Plan Listo desde la consola de Listo. Los envíos de esa tienda se rechazan con `402 plan_required` hasta que lo haga.\n\nUna tienda de prueba no tiene plan.\n","deprecated":null,"version":null,"sidebarTitle":"Crea una tienda","openapi":"/openapi/es.yaml post /v1/stores","href":"/es/api-reference/stores/create-a-store","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: [\"Registra un punto de recolección. \", _jsx(_components.code, {\n children: \"lat\"\n }), \"/\", _jsx(_components.code, {\n children: \"lng\"\n }), \" son opcionales: envíalos cuando los tengas y los tomamos tal cual; si no, geocodificamos \", _jsx(_components.code, {\n children: \"street\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"phone\"\n }), \" va en E.164. Un número mexicano es +52 seguido de los 10 dígitos (se acepta +52 1 seguido de 10, como lo escribe WhatsApp); un número de Estados Unidos o Canadá es +1 seguido de los 10 dígitos; un número de cualquier otro país se acepta con de 8 a 15 dígitos en total. Cualquier otra cosa se rechaza con \", _jsx(_components.code, {\n children: \"validation_failed\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"timezone\"\n }), \" se deriva de la posición de la tienda, y no tienes que enviarlo. México abarca cinco zonas horarias, y la posición de la tienda es lo que decide cuál le corresponde: los horarios de recolección programados, las marcas de tiempo de envío y la semana de liquidación se leen en esa zona.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Un \", _jsx(_components.code, {\n children: \"timezone\"\n }), \" que sí envíes solo se usa cuando la posición no puede responder: una tienda sin coordenadas, o una posición que ninguna zona reclama. Uno que no coincida con la posición no cambia la tienda y no es un error: la tienda se crea, se aplica todo lo demás que enviaste, y la zona que da la posición es la que regresa.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"Preferimos corregirlo en silencio antes que rechazarlo, porque desde aquí no podemos distinguir los dos casos: una zona enviada por defecto desde un formulario que nunca le preguntó al usuario llega exactamente igual que una zona que alguien eligió, y la primera tienda aprovisionada con la regla anterior quedó una hora adelantada durante todo un año de horarios de apertura, marcas de tiempo de envío y semanas de liquidación. La posición de la tienda es la evidencia de dónde está. Si el reloj de una tienda parece mal, lo que hay que corregir son las coordenadas.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"default_business_fee_share\"\n }), \" es la parte de la tarifa de envío que esta tienda cubre por defecto, de 0 a 100, con el resto cobrado al cliente. Cada envío \", _jsx(_components.code, {\n children: \"cash\"\n }), \" o \", _jsx(_components.code, {\n children: \"card\"\n }), \" de la tienda la hereda, salvo que la creación la reemplace. Un envío \", _jsx(_components.code, {\n children: \"prepaid\"\n }), \", y una cotización que no nombre \", _jsx(_components.code, {\n children: \"payment_method\"\n }), \", siempre llevan 100 en lugar de eso: la tarifa completa es tuya.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Una tienda también puede dividir la tarifa por un monto fijo en pesos en lugar de por un porcentaje. \", _jsx(_components.code, {\n children: \"default_fee_split_mode\"\n }), \" en el objeto de tienda te dice cuál es el modo, y \", _jsx(_components.code, {\n children: \"default_fee_split_amount_cents\"\n }), \" lleva el monto. Ambos son de solo lectura: el restaurante elige la forma desde la consola de Listo, y aquí no hay un campo para definirla. Lee el modo antes que la parte, porque en un modo de monto la parte no es la división vigente. Enviar \", _jsx(_components.code, {\n children: \"default_business_fee_share\"\n }), \" regresa la tienda a \", _jsx(_components.code, {\n children: \"percent\"\n }), \", en este endpoint y en la actualización.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"owner_email\"\n }), \" es opcional, y es una precondición más que un atributo: envía la dirección de quien administra el local y la comparamos contra los restaurantes que ya tienen una cuenta de Listo propia. Si existe una, no se crea nada y recibes \", _jsx(_components.code, {\n children: \"409 account_exists\"\n }), \", porque una segunda cuenta para una cocina que ya tiene una dividiría el saldo, la consola y el historial en dos. Pídele al dueño que conecte la cuenta que ya tiene con \", _jsx(_components.code, {\n children: \"POST /v1/connect_requests\"\n }), \", como describe \", _jsx(_components.a, {\n href: \"https://docs.listo.delivery/es/guides/connect-existing-account\",\n children: \"Conecta un restaurante que ya usa Listo\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Nada guarda la dirección y ningún objeto de tienda la repite. Tampoco crea un inicio de sesión; eso es \", _jsx(_components.code, {\n children: \"POST /v1/stores/{id}/owner\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Listo entrega en México, y una \", _jsx(_components.code, {\n children: \"street\"\n }), \" que resuelve a otro país se rechaza con \", _jsx(_components.code, {\n children: \"422 unsupported_country\"\n }), \": no se crea nada, y ninguna otra dirección de ese país funcionará tampoco. Una dirección que no podemos resolver en absoluto no se rechaza. Se guarda tal como la enviaste y se localiza en el primer envío.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Lo que hace una creación para una tienda real con el Plan Listo de la tienda depende de quién lo paga en tu cuenta (ver \", _jsx(_components.a, {\n href: \"https://docs.listo.delivery/es/guides/plan-and-billing\",\n children: \"Plan y facturación\"\n }), \").\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Si tú pagas los planes de tus tiendas, la tienda inicia el Plan Listo y el primer mes se cobra a ti en esta misma solicitud, de tu saldo real o de la tarjeta guardada en tu cuenta. Fondea uno de los dos primero, y envía un \", _jsx(_components.code, {\n children: \"Idempotency-Key\"\n }), \" en cada creación de una tienda real: una creación que se agota por tiempo y se repite sin él crea una segunda tienda, y la segunda tienda inicia un segundo plan. Una tienda cuyo primer cobro falla sigue creada y sigue respondiendo \", _jsx(_components.code, {\n children: \"201\"\n }), \", con \", _jsx(_components.code, {\n children: \"plan.status\"\n }), \" \", _jsx(_components.code, {\n children: \"awaiting_payment\"\n }), \": todavía no tiene plan, nada está vencido, y los envíos de esa tienda se rechazan con \", _jsx(_components.code, {\n children: \"402 plan_required\"\n }), \" hasta que tu saldo o tu tarjeta cubran el mes, lo que Listo entonces cobra por sí solo.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Si tu cuenta está configurada para que cada restaurante pague el plan propio, no se te cobra nada: la tienda se crea sin plan (\", _jsx(_components.code, {\n children: \"plan\"\n }), \" es \", _jsx(_components.code, {\n children: \"null\"\n }), \") y el restaurante compra el Plan Listo desde la consola de Listo. Los envíos de esa tienda se rechazan con \", _jsx(_components.code, {\n children: \"402 plan_required\"\n }), \" hasta que lo haga.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"Una tienda de prueba no tiene plan.\"\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":"Crea una tienda","description":"Registra un punto de recolección. `lat`/`lng` son opcionales: envíalos cuando los tengas y los tomamos tal cual; si no, geocodificamos `street`.\n\n`phone` va en E.164. Un número mexicano es +52 seguido de los 10 dígitos (se acepta +52 1 seguido de 10, como lo escribe WhatsApp); un número de Estados Unidos o Canadá es +1 seguido de los 10 dígitos; un número de cualquier otro país se acepta con de 8 a 15 dígitos en total. Cualquier otra cosa se rechaza con `validation_failed`.\n\n`timezone` se deriva de la posición de la tienda, y no tienes que enviarlo. México abarca cinco zonas horarias, y la posición de la tienda es lo que decide cuál le corresponde: los horarios de recolección programados, las marcas de tiempo de envío y la semana de liquidación se leen en esa zona.\n\nUn `timezone` que sí envíes solo se usa cuando la posición no puede responder: una tienda sin coordenadas, o una posición que ninguna zona reclama. Uno que no coincida con la posición no cambia la tienda y no es un error: la tienda se crea, se aplica todo lo demás que enviaste, y la zona que da la posición es la que regresa.\n\nPreferimos corregirlo en silencio antes que rechazarlo, porque desde aquí no podemos distinguir los dos casos: una zona enviada por defecto desde un formulario que nunca le preguntó al usuario llega exactamente igual que una zona que alguien eligió, y la primera tienda aprovisionada con la regla anterior quedó una hora adelantada durante todo un año de horarios de apertura, marcas de tiempo de envío y semanas de liquidación. La posición de la tienda es la evidencia de dónde está. Si el reloj de una tienda parece mal, lo que hay que corregir son las coordenadas.\n\n`default_business_fee_share` es la parte de la tarifa de envío que esta tienda cubre por defecto, de 0 a 100, con el resto cobrado al cliente. Cada envío `cash` o `card` de la tienda la hereda, salvo que la creación la reemplace. Un envío `prepaid`, y una cotización que no nombre `payment_method`, siempre llevan 100 en lugar de eso: la tarifa completa es tuya.\n\nUna tienda también puede dividir la tarifa por un monto fijo en pesos en lugar de por un porcentaje. `default_fee_split_mode` en el objeto de tienda te dice cuál es el modo, y `default_fee_split_amount_cents` lleva el monto. Ambos son de solo lectura: el restaurante elige la forma desde la consola de Listo, y aquí no hay un campo para definirla. Lee el modo antes que la parte, porque en un modo de monto la parte no es la división vigente. Enviar `default_business_fee_share` regresa la tienda a `percent`, en este endpoint y en la actualización.\n\n`owner_email` es opcional, y es una precondición más que un atributo: envía la dirección de quien administra el local y la comparamos contra los restaurantes que ya tienen una cuenta de Listo propia. Si existe una, no se crea nada y recibes `409 account_exists`, porque una segunda cuenta para una cocina que ya tiene una dividiría el saldo, la consola y el historial en dos. Pídele al dueño que conecte la cuenta que ya tiene con `POST /v1/connect_requests`, como describe [Conecta un restaurante que ya usa Listo](https://docs.listo.delivery/es/guides/connect-existing-account).\n\nNada guarda la dirección y ningún objeto de tienda la repite. Tampoco crea un inicio de sesión; eso es `POST /v1/stores/{id}/owner`.\n\nListo entrega en México, y una `street` que resuelve a otro país se rechaza con `422 unsupported_country`: no se crea nada, y ninguna otra dirección de ese país funcionará tampoco. Una dirección que no podemos resolver en absoluto no se rechaza. Se guarda tal como la enviaste y se localiza en el primer envío.\n\nLo que hace una creación para una tienda real con el Plan Listo de la tienda depende de quién lo paga en tu cuenta (ver [Plan y facturación](https://docs.listo.delivery/es/guides/plan-and-billing)).\n\nSi tú pagas los planes de tus tiendas, la tienda inicia el Plan Listo y el primer mes se cobra a ti en esta misma solicitud, de tu saldo real o de la tarjeta guardada en tu cuenta. Fondea uno de los dos primero, y envía un `Idempotency-Key` en cada creación de una tienda real: una creación que se agota por tiempo y se repite sin él crea una segunda tienda, y la segunda tienda inicia un segundo plan. Una tienda cuyo primer cobro falla sigue creada y sigue respondiendo `201`, con `plan.status` `awaiting_payment`: todavía no tiene plan, nada está vencido, y los envíos de esa tienda se rechazan con `402 plan_required` hasta que tu saldo o tu tarjeta cubran el mes, lo que Listo entonces cobra por sí solo.\n\nSi tu cuenta está configurada para que cada restaurante pague el plan propio, no se te cobra nada: la tienda se crea sin plan (`plan` es `null`) y el restaurante compra el Plan Listo desde la consola de Listo. Los envíos de esa tienda se rechazan con `402 plan_required` hasta que lo haga.\n\nUna tienda de prueba no tiene plan.\n","deprecated":null,"version":null,"sidebarTitle":"Crea una tienda","openapi":"/openapi/es.yaml post /v1/stores","href":"/es/api-reference/stores/create-a-store","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"summary":"Crea una tienda","description":"Registra un punto de recolección. `lat`/`lng` son opcionales: envíalos cuando los tengas y los tomamos tal cual; si no, geocodificamos `street`.\n\n`phone` va en E.164. Un número mexicano es +52 seguido de los 10 dígitos (se acepta +52 1 seguido de 10, como lo escribe WhatsApp); un número de Estados Unidos o Canadá es +1 seguido de los 10 dígitos; un número de cualquier otro país se acepta con de 8 a 15 dígitos en total. Cualquier otra cosa se rechaza con `validation_failed`.\n\n`timezone` se deriva de la posición de la tienda, y no tienes que enviarlo. México abarca cinco zonas horarias, y la posición de la tienda es lo que decide cuál le corresponde: los horarios de recolección programados, las marcas de tiempo de envío y la semana de liquidación se leen en esa zona.\n\nUn `timezone` que sí envíes solo se usa cuando la posición no puede responder: una tienda sin coordenadas, o una posición que ninguna zona reclama. Uno que no coincida con la posición no cambia la tienda y no es un error: la tienda se crea, se aplica todo lo demás que enviaste, y la zona que da la posición es la que regresa.\n\nPreferimos corregirlo en silencio antes que rechazarlo, porque desde aquí no podemos distinguir los dos casos: una zona enviada por defecto desde un formulario que nunca le preguntó al usuario llega exactamente igual que una zona que alguien eligió, y la primera tienda aprovisionada con la regla anterior quedó una hora adelantada durante todo un año de horarios de apertura, marcas de tiempo de envío y semanas de liquidación. La posición de la tienda es la evidencia de dónde está. Si el reloj de una tienda parece mal, lo que hay que corregir son las coordenadas.\n\n`default_business_fee_share` es la parte de la tarifa de envío que esta tienda cubre por defecto, de 0 a 100, con el resto cobrado al cliente. Cada envío `cash` o `card` de la tienda la hereda, salvo que la creación la reemplace. Un envío `prepaid`, y una cotización que no nombre `payment_method`, siempre llevan 100 en lugar de eso: la tarifa completa es tuya.\n\nUna tienda también puede dividir la tarifa por un monto fijo en pesos en lugar de por un porcentaje. `default_fee_split_mode` en el objeto de tienda te dice cuál es el modo, y `default_fee_split_amount_cents` lleva el monto. Ambos son de solo lectura: el restaurante elige la forma desde la consola de Listo, y aquí no hay un campo para definirla. Lee el modo antes que la parte, porque en un modo de monto la parte no es la división vigente. Enviar `default_business_fee_share` regresa la tienda a `percent`, en este endpoint y en la actualización.\n\n`owner_email` es opcional, y es una precondición más que un atributo: envía la dirección de quien administra el local y la comparamos contra los restaurantes que ya tienen una cuenta de Listo propia. Si existe una, no se crea nada y recibes `409 account_exists`, porque una segunda cuenta para una cocina que ya tiene una dividiría el saldo, la consola y el historial en dos. Pídele al dueño que conecte la cuenta que ya tiene con `POST /v1/connect_requests`, como describe [Conecta un restaurante que ya usa Listo](https://docs.listo.delivery/es/guides/connect-existing-account).\n\nNada guarda la dirección y ningún objeto de tienda la repite. Tampoco crea un inicio de sesión; eso es `POST /v1/stores/{id}/owner`.\n\nListo entrega en México, y una `street` que resuelve a otro país se rechaza con `422 unsupported_country`: no se crea nada, y ninguna otra dirección de ese país funcionará tampoco. Una dirección que no podemos resolver en absoluto no se rechaza. Se guarda tal como la enviaste y se localiza en el primer envío.\n\nLo que hace una creación para una tienda real con el Plan Listo de la tienda depende de quién lo paga en tu cuenta (ver [Plan y facturación](https://docs.listo.delivery/es/guides/plan-and-billing)).\n\nSi tú pagas los planes de tus tiendas, la tienda inicia el Plan Listo y el primer mes se cobra a ti en esta misma solicitud, de tu saldo real o de la tarjeta guardada en tu cuenta. Fondea uno de los dos primero, y envía un `Idempotency-Key` en cada creación de una tienda real: una creación que se agota por tiempo y se repite sin él crea una segunda tienda, y la segunda tienda inicia un segundo plan. Una tienda cuyo primer cobro falla sigue creada y sigue respondiendo `201`, con `plan.status` `awaiting_payment`: todavía no tiene plan, nada está vencido, y los envíos de esa tienda se rechazan con `402 plan_required` hasta que tu saldo o tu tarjeta cubran el mes, lo que Listo entonces cobra por sí solo.\n\nSi tu cuenta está configurada para que cada restaurante pague el plan propio, no se te cobra nada: la tienda se crea sin plan (`plan` es `null`) y el restaurante compra el Plan Listo desde la consola de Listo. Los envíos de esa tienda se rechazan con `402 plan_required` hasta que lo haga.\n\nUna tienda de prueba no tiene plan.\n","tags":["Stores"],"operationId":"createStore","security":["e10862c2-6b65-4ea8-b85b-dcc05b8eca79"],"requestBody":"cfd49097-1f86-4c2e-ae88-6adba6afe552","responses":{"201":"a74d808e-8aa7-455e-8a07-f4578d7de841","401":"c510c6c3-f4e3-423d-974b-0cb2ac9b6bc3","403":"d3943faa-75ca-43c2-ae0d-d4b9ecf07809","409":"6fe3091e-a778-47b8-9d8a-a6d7df4448b5","422":"9bb2eff1-a313-4d21-9e53-d294e916effb"},"parameters":["c09e4dd6-2cfd-4d7b-a3b5-a152c61e6721"],"x-mint":{"href":"/es/api-reference/stores/create-a-store","metadata":{"sidebarTitle":"Crea una tienda"}},"method":"post","type":"path","servers":["f399fc83-7e7d-462b-bf3b-3042989289cb"],"path":"/v1/stores","baseUrlOptions":["https://api.listo.delivery"],"title":"Crea una tienda","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"c09e4dd6-2cfd-4d7b-a3b5-a152c61e6721":{"name":"Idempotency-Key","in":"header","description":"Opcional. Envía una para que un reintento sea seguro: genera una llave NUEVA para cada llamada lógica (un UUID sirve bien), de hasta 255 caracteres, y envía la MISMA llave cuando reintentes esa llamada tras un tiempo de espera o una conexión caída. La misma llave con el mismo cuerpo devuelve la respuesta ORIGINAL, con su código de estado incluido, en lugar de volver a hacer el trabajo, durante 24 horas. La misma llave con un cuerpo distinto se rechaza con `409 idempotency_conflict`, y también un reintento que llega mientras la primera solicitud aún se procesa (vuelve a intentarlo en un momento). Sin el encabezado no se guarda nada y un reintento es una solicitud nueva. Una llave pertenece a tu cuenta y al modo de la llave de API que la envió (las llaves de producción y de prueba nunca se cruzan), así que el mismo texto de dos cuentas, o de una llave de producción y una de prueba, son dos llaves distintas.","required":false,"schema":{"type":"string","isRequired":false,"description":"Opcional. Envía una para que un reintento sea seguro: genera una llave NUEVA para cada llamada lógica (un UUID sirve bien), de hasta 255 caracteres, y envía la MISMA llave cuando reintentes esa llamada tras un tiempo de espera o una conexión caída. La misma llave con el mismo cuerpo devuelve la respuesta ORIGINAL, con su código de estado incluido, en lugar de volver a hacer el trabajo, durante 24 horas. La misma llave con un cuerpo distinto se rechaza con `409 idempotency_conflict`, y también un reintento que llega mientras la primera solicitud aún se procesa (vuelve a intentarlo en un momento). Sin el encabezado no se guarda nada y un reintento es una solicitud nueva. Una llave pertenece a tu cuenta y al modo de la llave de API que la envió (las llaves de producción y de prueba nunca se cruzan), así que el mismo texto de dos cuentas, o de una llave de producción y una de prueba, son dos llaves distintas.","uniqueKey":"","typeLabel":"string"},"example":"pos-store-41-attempt-1"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","description":"La ubicación de recolección a crear.","properties":{"name":{"type":"string","isRequired":true,"uniqueKey":"name","typeLabel":"string"},"phone":{"type":"string","description":"Un teléfono que se puede interpretar como un número E.164.","isRequired":true,"uniqueKey":"phone","typeLabel":"string"},"street":{"type":"string","description":"La dirección completa de la calle, en una sola cadena.","isRequired":true,"uniqueKey":"street","typeLabel":"string"},"apt_unit":{"type":"string","uniqueKey":"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":"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":"lng","typeLabel":"number\u003cdouble>"},"pickup_notes":{"type":"string","maxLength":280,"description":"Indicaciones para el repartidor en la tienda, de hasta 280 caracteres.","uniqueKey":"pickup_notes","typeLabel":"string"},"timezone":{"type":"string","description":"Un nombre de zona horaria IANA.","uniqueKey":"timezone","typeLabel":"string"},"default_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.","uniqueKey":"default_business_fee_share","typeLabel":"integer"},"access_tier":{"type":"string","enum":["api_only","wallet","full"],"description":"Lo que la tienda recibe además de la API.","uniqueKey":"access_tier","typeLabel":"enum\u003cstring>"},"markup_cents":{"type":"integer","minimum":0,"maximum":1000000,"description":"Tu margen en cada envío, en centavos, de hasta 1000000.","uniqueKey":"markup_cents","typeLabel":"integer"},"external_id":{"type":"string","maxLength":255,"description":"Tu propia referencia para esta ubicación.","uniqueKey":"external_id","typeLabel":"string"},"owner_email":{"type":"string","description":"El dueño del restaurante a invitar, para una tienda con consola.","uniqueKey":"owner_email","typeLabel":"string"}},"required":["name","phone","street"],"uniqueKey":"","typeLabel":"object"},"example":{"name":"Sucursal Chapalita","phone":"3312345678","street":"Av. Juan Palomar y Arias 765","apt_unit":"Local 4","lat":20.691145,"lng":-103.426885,"pickup_notes":"Toca el timbre del local, no la puerta principal","timezone":"Guadalajara","default_business_fee_share":60,"access_tier":"api_only","markup_cents":800,"external_id":"pos-store-41","owner_email":"rosa@lataqueria.mx"},"examples":{"Example":{"title":"Example","value":{"name":"Sucursal Chapalita","phone":"3312345678","street":"Av. Juan Palomar y Arias 765","apt_unit":"Local 4","lat":20.691145,"lng":-103.426885,"pickup_notes":"Toca el timbre del local, no la puerta principal","timezone":"Guadalajara","default_business_fee_share":60,"access_tier":"api_only","markup_cents":800,"external_id":"pos-store-41","owner_email":"rosa@lataqueria.mx"}}},"exampleType":"examples"}},"required":true,"exampleType":"examples"},"responses":{"a74d808e-8aa7-455e-8a07-f4578d7de841":{"description":"Creado.","content":{"application/json":{"schema":{"type":"object","description":"Un punto de recolección. La disponibilidad para cobrar con tarjeta NO es un\ncampo aquí a propósito: tiene endpoint propio, con detalle propio de requisitos pendientes.\n","properties":{"id":{"type":"string","description":"El id de la tienda, con prefijo `st_`.","example":"st_4bR8kM2wQ7xT1nV5cZ9pLdYe","isRequired":true,"uniqueKey":"id","typeLabel":"string"},"external_id":{"oneOf":[{"type":"string","description":"Tu propia referencia de esta ubicación, si enviaste una. Es única por modo de llave, y se puede filtrar en la lista, para que puedas conciliar contra tu propio libro de tiendas sin guardar nuestros ids.\n","example":"pos-store-41","isRequired":true,"uniqueKey":"external_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Tu propia referencia de esta ubicación, si enviaste una. Es única por modo de llave, y se puede filtrar en la lista, para que puedas conciliar contra tu propio libro de tiendas sin guardar nuestros ids.\n","example":"pos-store-41","isRequired":true,"uniqueKey":"external_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"external_id","typeLabel":"string | null"},"name":{"type":"string","description":"El nombre que le diste a la tienda; para un restaurante que conectó una cuenta con varias sucursales, el negocio y la sucursal, como lo leen sus propios clientes (`Tortería La Mera Mera, Zapopan`). Una sucursal cuyo nombre ya empieza con el nombre del negocio, como `Tortería La Mera Mera Centro`, se publica tal cual. Cuando envías un nombre, un valor que empieza con el nombre de negocio de la tienda y una coma se lee como ese negocio más la sucursal, así que devolver el nombre que leíste no cambia nada.\n","isRequired":true,"uniqueKey":"name","typeLabel":"string"},"phone":{"type":"string","description":"E.164, normalizado al recibirlo.","isRequired":true,"uniqueKey":"phone","typeLabel":"string"},"street":{"type":"string","isRequired":true,"uniqueKey":"street","typeLabel":"string"},"apt_unit":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"apt_unit.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"apt_unit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"apt_unit","typeLabel":"string | null"},"lat":{"oneOf":[{"type":"number","format":"double","isRequired":true,"uniqueKey":"lat.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","format":"double","isRequired":true,"uniqueKey":"lat.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"lat","typeLabel":"number\u003cdouble> | null"},"lng":{"oneOf":[{"type":"number","format":"double","isRequired":true,"uniqueKey":"lng.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","format":"double","isRequired":true,"uniqueKey":"lng.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"lng","typeLabel":"number\u003cdouble> | null"},"pickup_notes":{"oneOf":[{"type":"string","description":"Instrucciones permanentes para el repartidor que recoge aquí.","isRequired":true,"uniqueKey":"pickup_notes.oneOf.0","typeLabel":"string"},{"type":"null","description":"Instrucciones permanentes para el repartidor que recoge aquí.","isRequired":true,"uniqueKey":"pickup_notes.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"pickup_notes","typeLabel":"string | null"},"timezone":{"type":"string","description":"La zona IANA en la que la tienda guarda sus horarios, normalizada a una\nsola escritura por zona. Se deriva de las coordenadas de la tienda, y\nse vuelve a derivar cada vez que la posición de la tienda se mueve. Una zona que tú envías\nse usa solo cuando la posición no puede responder (una tienda sin\ncoordenadas, o una posición que ninguna zona reclama), y una que no coincide con la posición ni se guarda ni se trata\ncomo error.\n","example":"America/Mexico_City","isRequired":true,"uniqueKey":"timezone","typeLabel":"string"},"default_business_fee_share":{"type":"integer","minimum":0,"maximum":100,"description":"La parte de la tarifa de envío que esta tienda cubre por defecto, como porcentaje. El resto se cobra al cliente. Solo está vigente cuando `default_fee_split_mode` es `percent`; en cualquiera de los dos modos de monto, este es el porcentaje que la tienda conserva para cuando vuelva a ser uno.\n","isRequired":true,"uniqueKey":"default_business_fee_share","typeLabel":"integer"},"default_fee_split_mode":{"type":"string","enum":["percent","business_amount","customer_amount"],"description":"Qué forma tiene el reparto predeterminado de esta tienda, y por eso cuál de los dos campos de arriba y de abajo está vigente. `percent` reparte la tarifa según `default_business_fee_share`; `business_amount` significa que la tienda cubre hasta `default_fee_split_amount_cents` de ella y el cliente paga el resto; `customer_amount` es el espejo, el cliente paga hasta ese monto y la tienda cubre el resto.\n\nSolo lectura. Lo fija el restaurante en su propia consola de Listo, y enviar `default_business_fee_share` al crear o actualizar devuelve la tienda a `percent`.\n","isRequired":true,"uniqueKey":"default_fee_split_mode","typeLabel":"enum\u003cstring>"},"default_fee_split_amount_cents":{"oneOf":[{"type":"integer","minimum":0,"description":"El monto entre el que dividen la tarifa los dos modos de monto, en centavos. Es null en\nmodo `percent`, y nunca es null en ninguno de los dos modos de monto. Solo lectura.\n","isRequired":true,"uniqueKey":"default_fee_split_amount_cents.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":0,"description":"El monto entre el que dividen la tarifa los dos modos de monto, en centavos. Es null en\nmodo `percent`, y nunca es null en ninguno de los dos modos de monto. Solo lectura.\n","isRequired":true,"uniqueKey":"default_fee_split_amount_cents.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"default_fee_split_amount_cents","typeLabel":"integer | null"},"access_tier":{"type":"string","enum":["api_only","wallet","full"],"description":"Cuánto de Listo usa la propia tienda. Los envíos de una tienda `api_only` gastan tu saldo, y los de una tienda `wallet` o `full` gastan el suyo; `billing` dice cuál. Se puede escribir al crear y al actualizar, y siempre es `api_only` en una tienda de prueba. Una tienda real de una cuenta cuyos restaurantes pagan su propio Plan Listo no puede ser `api_only`: no tiene consola desde la cual comprar un plan, así que una creación o una actualización que lo pida se rechaza con `422 validation_failed` y `param: \"access_tier\"`.\n","isRequired":true,"uniqueKey":"access_tier","typeLabel":"enum\u003cstring>"},"markup_cents":{"type":"integer","minimum":0,"description":"Tu propio margen sobre cada envío de esta tienda, en centavos. Se suma a la tarifa de envío, se reparte con el cliente como el resto de la tarifa, y se abona a tu saldo cuando el envío se entrega. Se puede escribir al crear y al actualizar.\n","isRequired":true,"uniqueKey":"markup_cents","typeLabel":"integer"},"billing":{"type":"string","enum":["partner","store"],"description":"De quién es el saldo que paga los envíos de esta tienda, leído de `access_tier` para que nunca tengas que derivarlo: `partner` es tuyo, `store` es el propio de la tienda. Solo lectura. No es quién paga el plan de la tienda, que es `plan.paid_by`.\n","isRequired":true,"uniqueKey":"billing","typeLabel":"enum\u003cstring>"},"test":{"type":"boolean","isRequired":true,"uniqueKey":"test","typeLabel":"boolean"},"created_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"},"plan":{"oneOf":[{"description":"El Plan Listo de la tienda, o `null` cuando la tienda no necesita plan: una tienda de prueba, o una tienda real creada antes de que existiera Plan Listo, que sigue pidiendo repartidores sin uno. También es `null` cuando la tienda paga su propio plan (cada tienda de una cuenta cuyas tiendas pagan su propio Plan Listo) y el restaurante todavía no ha comprado uno: el restaurante lo compra en su propia consola, y no tienes nada que pagar ni reactivar. También es `null` para una tienda de un socio con el esquema de precios sin Plan Listo, que no necesita plan. Cuando es un objeto, todas las llaves están presentes, y las que no aplican son `null`. Consulta [Plan y facturación](https://docs.listo.delivery/es/guides/plan-and-billing).\n","type":"object","properties":{"status":{"type":"string","enum":["active","past_due","canceling","canceled","awaiting_payment"],"description":"`active` está al corriente y se renueva en `next_charge_on` (null en un plan que está pasando al restaurante, ver `pending_paid_by`). `past_due` tiene un mes sin pagar, y sus envíos se rechazan con `402\nplan_required` hasta que el cobro pase. `awaiting_payment` es una tienda cuyo primer mes no pudieron cubrir ni tu saldo ni tu tarjeta: todavía no tiene plan, `price_cents` es el precio que se le cobrará antes de IVA (el monto necesario para pagar es ese más IVA), todas las fechas son null, sus envíos se rechazan con `402 plan_required`, y Listo le cobra por sí mismo en cuanto tu saldo o tu tarjeta lo cubran. `canceling` se canceló y se sirve hasta el día anterior a `ends_on`. `canceled` ya terminó, y se puede reiniciar.\n","isRequired":true,"uniqueKey":"plan.oneOf.0.status","typeLabel":"enum\u003cstring>"},"price_cents":{"type":"integer","description":"Lo que te cuesta un mes del plan de esta tienda, antes de IVA: tu precio, incluso mientras un restaurante que se conectó contigo sigue pagando su propio plan. Cuando `paid_by` es `store` porque la tienda paga su propio plan, es el precio de un `interval` del plan propio del restaurante, que no te corresponde pagar.\n","example":199000,"isRequired":true,"uniqueKey":"plan.oneOf.0.price_cents","typeLabel":"integer"},"currency":{"type":"string","example":"MXN","isRequired":true,"uniqueKey":"plan.oneOf.0.currency","typeLabel":"string"},"interval":{"type":"string","description":"Cuánto dura un periodo de este plan, y el ciclo del que `price_cents` es el precio. `month` para todo plan que pagas. Una tienda que paga su propio plan reporta el intervalo que compró su restaurante, así que `year` es un restaurante que pagó doce meses de una vez.\n","example":"month","isRequired":true,"uniqueKey":"plan.oneOf.0.interval","typeLabel":"string"},"current_period_ends_on":{"oneOf":[{"type":"string","format":"date","description":"El último día del periodo actual, ya pagado salvo que `status` sea `past_due`.\n","isRequired":true,"uniqueKey":"plan.oneOf.0.current_period_ends_on.oneOf.0","typeLabel":"string\u003cdate>"},{"type":"null","format":"date","description":"El último día del periodo actual, ya pagado salvo que `status` sea `past_due`.\n","isRequired":true,"uniqueKey":"plan.oneOf.0.current_period_ends_on.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"plan.oneOf.0.current_period_ends_on","typeLabel":"string\u003cdate> | null"},"next_charge_on":{"oneOf":[{"type":"string","format":"date","description":"El día en que se te cobra lo siguiente: la siguiente renovación o, mientras un restaurante que se conectó contigo siga pagando su propio plan, tu primer cobro. Es null una vez que el plan está terminando o ya terminó, y es null mientras está `past_due`: el mes adeudado se cobra en el momento en que tu saldo o tu tarjeta guardada lo permitan, y se reintenta cada día hasta que se paga. También es null mientras `courtesy` sea true. Igualmente es null en un plan que tú pagas y que está pasando al restaurante (`pending_paid_by` es `store`): pagas el periodo en el que estás y nada después. Cuando `paid_by` es `store` porque la tienda paga su propio plan, es el día en que se renueva el plan propio del restaurante, no un cobro a ti.\n","isRequired":true,"uniqueKey":"plan.oneOf.0.next_charge_on.oneOf.0","typeLabel":"string\u003cdate>"},{"type":"null","format":"date","description":"El día en que se te cobra lo siguiente: la siguiente renovación o, mientras un restaurante que se conectó contigo siga pagando su propio plan, tu primer cobro. Es null una vez que el plan está terminando o ya terminó, y es null mientras está `past_due`: el mes adeudado se cobra en el momento en que tu saldo o tu tarjeta guardada lo permitan, y se reintenta cada día hasta que se paga. También es null mientras `courtesy` sea true. Igualmente es null en un plan que tú pagas y que está pasando al restaurante (`pending_paid_by` es `store`): pagas el periodo en el que estás y nada después. Cuando `paid_by` es `store` porque la tienda paga su propio plan, es el día en que se renueva el plan propio del restaurante, no un cobro a ti.\n","isRequired":true,"uniqueKey":"plan.oneOf.0.next_charge_on.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"plan.oneOf.0.next_charge_on","typeLabel":"string\u003cdate> | null"},"canceled_at":{"oneOf":[{"type":"string","format":"date-time","description":"Cuándo cancelaste el plan.","isRequired":true,"uniqueKey":"plan.oneOf.0.canceled_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"Cuándo cancelaste el plan.","isRequired":true,"uniqueKey":"plan.oneOf.0.canceled_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"plan.oneOf.0.canceled_at","typeLabel":"string\u003cdate-time> | null"},"ends_on":{"oneOf":[{"type":"string","format":"date","description":"El día en que el plan deja de dar servicio a la tienda, que es el día después del último día pagado, o el día en que se canceló un plan cuyo cobro estaba pendiente. Es null salvo que el plan esté terminando o ya haya terminado.\n","isRequired":true,"uniqueKey":"plan.oneOf.0.ends_on.oneOf.0","typeLabel":"string\u003cdate>"},{"type":"null","format":"date","description":"El día en que el plan deja de dar servicio a la tienda, que es el día después del último día pagado, o el día en que se canceló un plan cuyo cobro estaba pendiente. Es null salvo que el plan esté terminando o ya haya terminado.\n","isRequired":true,"uniqueKey":"plan.oneOf.0.ends_on.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"plan.oneOf.0.ends_on","typeLabel":"string\u003cdate> | null"},"paid_by":{"type":"string","enum":["partner","store"],"description":"Quién paga este plan: `partner`, que eres tú, o `store`, el propio restaurante. `store` es un restaurante que se conectó contigo y aún paga su propio plan, y cada tienda que paga su propio Plan Listo porque tu cuenta está configurada así; ninguna de ellas te toca pagar.\n","isRequired":true,"uniqueKey":"plan.oneOf.0.paid_by","typeLabel":"enum\u003cstring>"},"pending_paid_by":{"oneOf":[{"type":"string","description":"Quién lo pagará a partir de `pending_paid_by_on`, cuando eso está por cambiar, o null. `partner` eres tú: un restaurante que se conectó contigo y aún paga su propio plan, hasta la renovación que pagas tú. `store` es el restaurante: un plan que pagas tú y que pasa al restaurante en su próxima renovación porque tu cuenta está configurada para que cada restaurante pague su propio plan. Pagas el periodo en el que estás y nada después de él, por eso `next_charge_on` es null.\n","isRequired":true,"uniqueKey":"plan.oneOf.0.pending_paid_by.oneOf.0","typeLabel":"string"},{"type":"null","description":"Quién lo pagará a partir de `pending_paid_by_on`, cuando eso está por cambiar, o null. `partner` eres tú: un restaurante que se conectó contigo y aún paga su propio plan, hasta la renovación que pagas tú. `store` es el restaurante: un plan que pagas tú y que pasa al restaurante en su próxima renovación porque tu cuenta está configurada para que cada restaurante pague su propio plan. Pagas el periodo en el que estás y nada después de él, por eso `next_charge_on` es null.\n","isRequired":true,"uniqueKey":"plan.oneOf.0.pending_paid_by.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"plan.oneOf.0.pending_paid_by","typeLabel":"string | null"},"pending_paid_by_on":{"oneOf":[{"type":"string","format":"date","description":"La fecha en que entra el cambio (el día en que empieza el primer periodo del nuevo pagador), o null.\n","isRequired":true,"uniqueKey":"plan.oneOf.0.pending_paid_by_on.oneOf.0","typeLabel":"string\u003cdate>"},{"type":"null","format":"date","description":"La fecha en que entra el cambio (el día en que empieza el primer periodo del nuevo pagador), o null.\n","isRequired":true,"uniqueKey":"plan.oneOf.0.pending_paid_by_on.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"plan.oneOf.0.pending_paid_by_on","typeLabel":"string\u003cdate> | null"},"courtesy":{"type":"boolean","description":"`courtesy` es true mientras Listo le perdona el plan a esta tienda: no se cobra nada y `next_charge_on` es null.\n","isRequired":true,"uniqueKey":"plan.oneOf.0.courtesy","typeLabel":"boolean"}},"required":["status","price_cents","currency","interval","current_period_ends_on","next_charge_on","canceled_at","ends_on","paid_by","pending_paid_by","pending_paid_by_on","courtesy"],"isRequired":true,"uniqueKey":"plan.oneOf.0","typeLabel":"object"},{"description":"El Plan Listo de la tienda, o `null` cuando la tienda no necesita plan: una tienda de prueba, o una tienda real creada antes de que existiera Plan Listo, que sigue pidiendo repartidores sin uno. También es `null` cuando la tienda paga su propio plan (cada tienda de una cuenta cuyas tiendas pagan su propio Plan Listo) y el restaurante todavía no ha comprado uno: el restaurante lo compra en su propia consola, y no tienes nada que pagar ni reactivar. También es `null` para una tienda de un socio con el esquema de precios sin Plan Listo, que no necesita plan. Cuando es un objeto, todas las llaves están presentes, y las que no aplican son `null`. Consulta [Plan y facturación](https://docs.listo.delivery/es/guides/plan-and-billing).\n","type":"null","properties":{"status":{"type":"string","enum":["active","past_due","canceling","canceled","awaiting_payment"],"description":"`active` está al corriente y se renueva en `next_charge_on` (null en un plan que está pasando al restaurante, ver `pending_paid_by`). `past_due` tiene un mes sin pagar, y sus envíos se rechazan con `402\nplan_required` hasta que el cobro pase. `awaiting_payment` es una tienda cuyo primer mes no pudieron cubrir ni tu saldo ni tu tarjeta: todavía no tiene plan, `price_cents` es el precio que se le cobrará antes de IVA (el monto necesario para pagar es ese más IVA), todas las fechas son null, sus envíos se rechazan con `402 plan_required`, y Listo le cobra por sí mismo en cuanto tu saldo o tu tarjeta lo cubran. `canceling` se canceló y se sirve hasta el día anterior a `ends_on`. `canceled` ya terminó, y se puede reiniciar.\n"},"price_cents":{"type":"integer","description":"Lo que te cuesta un mes del plan de esta tienda, antes de IVA: tu precio, incluso mientras un restaurante que se conectó contigo sigue pagando su propio plan. Cuando `paid_by` es `store` porque la tienda paga su propio plan, es el precio de un `interval` del plan propio del restaurante, que no te corresponde pagar.\n","example":199000},"currency":{"type":"string","example":"MXN"},"interval":{"type":"string","description":"Cuánto dura un periodo de este plan, y el ciclo del que `price_cents` es el precio. `month` para todo plan que pagas. Una tienda que paga su propio plan reporta el intervalo que compró su restaurante, así que `year` es un restaurante que pagó doce meses de una vez.\n","example":"month"},"current_period_ends_on":{"oneOf":[{"type":"string","format":"date","description":"El último día del periodo actual, ya pagado salvo que `status` sea `past_due`.\n"},{"type":"null","format":"date","description":"El último día del periodo actual, ya pagado salvo que `status` sea `past_due`.\n"}]},"next_charge_on":{"oneOf":[{"type":"string","format":"date","description":"El día en que se te cobra lo siguiente: la siguiente renovación o, mientras un restaurante que se conectó contigo siga pagando su propio plan, tu primer cobro. Es null una vez que el plan está terminando o ya terminó, y es null mientras está `past_due`: el mes adeudado se cobra en el momento en que tu saldo o tu tarjeta guardada lo permitan, y se reintenta cada día hasta que se paga. También es null mientras `courtesy` sea true. Igualmente es null en un plan que tú pagas y que está pasando al restaurante (`pending_paid_by` es `store`): pagas el periodo en el que estás y nada después. Cuando `paid_by` es `store` porque la tienda paga su propio plan, es el día en que se renueva el plan propio del restaurante, no un cobro a ti.\n"},{"type":"null","format":"date","description":"El día en que se te cobra lo siguiente: la siguiente renovación o, mientras un restaurante que se conectó contigo siga pagando su propio plan, tu primer cobro. Es null una vez que el plan está terminando o ya terminó, y es null mientras está `past_due`: el mes adeudado se cobra en el momento en que tu saldo o tu tarjeta guardada lo permitan, y se reintenta cada día hasta que se paga. También es null mientras `courtesy` sea true. Igualmente es null en un plan que tú pagas y que está pasando al restaurante (`pending_paid_by` es `store`): pagas el periodo en el que estás y nada después. Cuando `paid_by` es `store` porque la tienda paga su propio plan, es el día en que se renueva el plan propio del restaurante, no un cobro a ti.\n"}]},"canceled_at":{"oneOf":[{"type":"string","format":"date-time","description":"Cuándo cancelaste el plan."},{"type":"null","format":"date-time","description":"Cuándo cancelaste el plan."}]},"ends_on":{"oneOf":[{"type":"string","format":"date","description":"El día en que el plan deja de dar servicio a la tienda, que es el día después del último día pagado, o el día en que se canceló un plan cuyo cobro estaba pendiente. Es null salvo que el plan esté terminando o ya haya terminado.\n"},{"type":"null","format":"date","description":"El día en que el plan deja de dar servicio a la tienda, que es el día después del último día pagado, o el día en que se canceló un plan cuyo cobro estaba pendiente. Es null salvo que el plan esté terminando o ya haya terminado.\n"}]},"paid_by":{"type":"string","enum":["partner","store"],"description":"Quién paga este plan: `partner`, que eres tú, o `store`, el propio restaurante. `store` es un restaurante que se conectó contigo y aún paga su propio plan, y cada tienda que paga su propio Plan Listo porque tu cuenta está configurada así; ninguna de ellas te toca pagar.\n"},"pending_paid_by":{"oneOf":[{"type":"string","description":"Quién lo pagará a partir de `pending_paid_by_on`, cuando eso está por cambiar, o null. `partner` eres tú: un restaurante que se conectó contigo y aún paga su propio plan, hasta la renovación que pagas tú. `store` es el restaurante: un plan que pagas tú y que pasa al restaurante en su próxima renovación porque tu cuenta está configurada para que cada restaurante pague su propio plan. Pagas el periodo en el que estás y nada después de él, por eso `next_charge_on` es null.\n"},{"type":"null","description":"Quién lo pagará a partir de `pending_paid_by_on`, cuando eso está por cambiar, o null. `partner` eres tú: un restaurante que se conectó contigo y aún paga su propio plan, hasta la renovación que pagas tú. `store` es el restaurante: un plan que pagas tú y que pasa al restaurante en su próxima renovación porque tu cuenta está configurada para que cada restaurante pague su propio plan. Pagas el periodo en el que estás y nada después de él, por eso `next_charge_on` es null.\n"}]},"pending_paid_by_on":{"oneOf":[{"type":"string","format":"date","description":"La fecha en que entra el cambio (el día en que empieza el primer periodo del nuevo pagador), o null.\n"},{"type":"null","format":"date","description":"La fecha en que entra el cambio (el día en que empieza el primer periodo del nuevo pagador), o null.\n"}]},"courtesy":{"type":"boolean","description":"`courtesy` es true mientras Listo le perdona el plan a esta tienda: no se cobra nada y `next_charge_on` es null.\n"}},"required":["status","price_cents","currency","interval","current_period_ends_on","next_charge_on","canceled_at","ends_on","paid_by","pending_paid_by","pending_paid_by_on","courtesy"],"isRequired":true,"uniqueKey":"plan.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"plan","typeLabel":"object | null"}},"required":["id","external_id","name","phone","street","apt_unit","lat","lng","pickup_notes","timezone","default_business_fee_share","default_fee_split_mode","default_fee_split_amount_cents","access_tier","markup_cents","billing","test","created_at","plan"],"uniqueKey":"","typeLabel":"object"},"example":{"id":"st_4bR8kM2wQ7xT1nV5cZ9pLdYe","name":"Sucursal Chapalita","phone":"+523312345678","street":"Av. Juan Palomar y Arias 765","apt_unit":null,"lat":null,"lng":null,"pickup_notes":null,"timezone":"America/Mexico_City","default_business_fee_share":0,"test":false,"created_at":"2026-07-31T22:15:07Z","access_tier":"api_only","markup_cents":0,"billing":"partner","external_id":null,"default_fee_split_mode":"percent","default_fee_split_amount_cents":null,"plan":null},"examples":{"Example":{"title":"Example","value":{"id":"st_4bR8kM2wQ7xT1nV5cZ9pLdYe","name":"Sucursal Chapalita","phone":"+523312345678","street":"Av. Juan Palomar y Arias 765","apt_unit":null,"lat":null,"lng":null,"pickup_notes":null,"timezone":"America/Mexico_City","default_business_fee_share":0,"test":false,"created_at":"2026-07-31T22:15:07Z","access_tier":"api_only","markup_cents":0,"billing":"partner","external_id":null,"default_fee_split_mode":"percent","default_fee_split_amount_cents":null,"plan":null}}},"exampleType":"examples"}},"exampleType":"examples"},"c510c6c3-f4e3-423d-974b-0cb2ac9b6bc3":{"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"},"d3943faa-75ca-43c2-ae0d-d4b9ecf07809":{"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"},"6fe3091e-a778-47b8-9d8a-a6d7df4448b5":{"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":"idempotency_conflict","message":"That idempotency key was already used with a different body.","param":null,"retryable":false,"doc_url":"https://docs.listo.delivery/en/errors/idempotency_conflict","request_id":"0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"idempotency_conflict","message":"That idempotency key was already used with a different body.","param":null,"retryable":false,"doc_url":"https://docs.listo.delivery/en/errors/idempotency_conflict","request_id":"0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10"}}}},"exampleType":"examples"}},"exampleType":"examples"},"9bb2eff1-a313-4d21-9e53-d294e916effb":{"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":"validation_failed","message":"Markup cents must be less than or equal to 1000000","param":"markup_cents","retryable":false,"doc_url":"https://docs.listo.delivery/en/errors/validation_failed","request_id":"0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"validation_failed","message":"Markup cents must be less than or equal to 1000000","param":"markup_cents","retryable":false,"doc_url":"https://docs.listo.delivery/en/errors/validation_failed","request_id":"0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10"}}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"e10862c2-6b65-4ea8-b85b-dcc05b8eca79":{"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":"Crea una tienda - Listo Partner API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/api-reference/stores/create-a-store","matchLevel":1},"es":{"href":"/es/api-reference/stores/create-a-store","matchLevel":0}}},"lastModified":"2026-11-07T01:48:56.075Z","originalFileLocation":"es/api-reference/stores/create-a-store.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=\"Registra un punto de recolección. lat/lng son opcionales: envíalos cuando los tengas y los tomamos tal cual; si no, geocodificamos street. phone va en E.164. Un número mexicano es +52 seguido de los 10 dígitos (se acepta +52 1 seguido de 10, como lo escribe WhatsApp); un número de Estados Unidos o Canadá es +1 seguido de los 10 dígitos; un número de cualquier otro país se acepta con de 8 a 15 dígitos en total. Cualquier otra cosa se rechaza con validation_failed. timezone se deriva de la posición de la tienda, y no tienes que enviarlo. México abarca cinco zonas horarias, y la posición de la tienda es lo que decide cuál le corresponde: los horarios de recolección programados, las marcas de tiempo de envío y la semana de liquidación se leen en esa zona. Un timezone que sí envíes solo se usa cuando la posición no puede responder: una tienda sin coordenadas, o una posición que ninguna zona reclama. Uno que no coincida con la posición no cambia la tienda y no es un error: la tienda se crea, se aplica todo lo demás que enviaste, y la zona que da la posición es la que regresa. Preferimos corregirlo en silencio antes que rechazarlo, porque desde aquí no podemos distinguir los dos casos: una zona enviada por defecto desde un formulario que nunca le preguntó al usuario llega exactamente igual que una zona que alguien eligió, y la primera tienda aprovisionada con la regla anterior quedó una hora adelantada durante todo un año de horarios de apertura, marcas de tiempo de envío y semanas de liquidación. La posición de la tienda es la evidencia de dónde está. Si el reloj de una tienda parece mal, lo que hay que corregir son las coordenadas. default_business_fee_share es la parte de la tarifa de envío que esta tienda cubre por defecto, de 0 a 100, con el resto cobrado al cliente. Cada envío cash o card de la tienda la hereda, salvo que la creación la reemplace. Un envío prepaid, y una cotización que no nombre payment_method, siempre llevan 100 en lugar de eso: la tarifa completa es tuya. Una tienda también puede dividir la tarifa por un monto fijo en pesos en lugar de por un porcentaje. default_fee_split_mode en el objeto de tienda te dice cuál es el modo, y default_fee_split_amount_cents lleva el monto. Ambos son de solo lectura: el restaurante elige la forma desde la consola de Listo, y aquí no hay un campo para definirla. Lee el modo antes que la parte, porque en un modo de monto la parte no es la división vigente. Enviar default_business_fee_share regresa la tienda a percent, en este endpoint y en la actualización. owner_email es opcional, y es una precondición más que un atributo: envía la dirección de quien administra el local y la comparamos contra los restaurantes que ya tienen una cuenta de Listo propia. Si existe una, no se crea nada y recibes 409 account_exists, porque una segunda cuenta para una cocina que ya tiene una dividiría el saldo, la consola y el historial en dos. Pídele al dueño que conecte la cuenta que ya tiene con POST /v1/connect_requests, como describe Conecta un restaurante que ya usa Listo. Nada guarda la dirección y ningún objeto de tienda la repite. Tampoco crea un inicio de sesión; eso es POST /v1/stores/{id}/owner. Listo entrega en México, y una street que resuelve a otro país se rechaza con 422 unsupported_country: no se crea nada, y ninguna otra dirección de ese país funcionará tampoco. Una dirección que no podemos resolver en absoluto no se rechaza. Se guarda tal como la enviaste y se localiza en el primer envío. Lo que hace una creación para una tienda real con el Plan Listo de la tienda depende de quién lo paga en tu cuenta (ver Plan y facturación). Si tú pagas los planes de tus tiendas, la tienda inicia el Plan Listo y el primer mes se cobra a ti en esta misma solicitud, de tu saldo real o de la tarjeta guardada en tu cuenta. Fondea uno de los dos primero, y envía un Idempotency-Key en cada creación de una tienda real: una creación que se agota por tiempo y se repite sin él crea una segunda tienda, y la segunda tienda inicia un segundo plan. Una tienda cuyo primer cobro falla sigue creada y sigue respondiendo 201, con plan.status awaiting_payment: todavía no tiene plan, nada está vencido, y los envíos de esa tienda se rechazan con 402 plan_required hasta que tu saldo o tu tarjeta cubran el mes, lo que Listo entonces cobra por sí solo. Si tu cuenta está configurada para que cada restaurante pague el plan propio, no se te cobra nada: la tienda se crea sin plan (plan es null) y el restaurante compra el Plan Listo desde la consola de Listo. Los envíos de esa tienda se rechazan con 402 plan_required hasta que lo haga. Una tienda de prueba no tiene plan.\">\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=\"Crea una tienda - Listo Partner API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Registra un punto de recolección. lat/lng son opcionales: envíalos cuando los tengas y los tomamos tal cual; si no, geocodificamos street. phone va en E.164. Un número mexicano es +52 seguido de los 10 dígitos (se acepta +52 1 seguido de 10, como lo escribe WhatsApp); un número de Estados Unidos o Canadá es +1 seguido de los 10 dígitos; un número de cualquier otro país se acepta con de 8 a 15 dígitos en total. Cualquier otra cosa se rechaza con validation_failed. timezone se deriva de la posición de la tienda, y no tienes que enviarlo. México abarca cinco zonas horarias, y la posición de la tienda es lo que decide cuál le corresponde: los horarios de recolección programados, las marcas de tiempo de envío y la semana de liquidación se leen en esa zona. Un timezone que sí envíes solo se usa cuando la posición no puede responder: una tienda sin coordenadas, o una posición que ninguna zona reclama. Uno que no coincida con la posición no cambia la tienda y no es un error: la tienda se crea, se aplica todo lo demás que enviaste, y la zona que da la posición es la que regresa. Preferimos corregirlo en silencio antes que rechazarlo, porque desde aquí no podemos distinguir los dos casos: una zona enviada por defecto desde un formulario que nunca le preguntó al usuario llega exactamente igual que una zona que alguien eligió, y la primera tienda aprovisionada con la regla anterior quedó una hora adelantada durante todo un año de horarios de apertura, marcas de tiempo de envío y semanas de liquidación. La posición de la tienda es la evidencia de dónde está. Si el reloj de una tienda parece mal, lo que hay que corregir son las coordenadas. default_business_fee_share es la parte de la tarifa de envío que esta tienda cubre por defecto, de 0 a 100, con el resto cobrado al cliente. Cada envío cash o card de la tienda la hereda, salvo que la creación la reemplace. Un envío prepaid, y una cotización que no nombre payment_method, siempre llevan 100 en lugar de eso: la tarifa completa es tuya. Una tienda también puede dividir la tarifa por un monto fijo en pesos en lugar de por un porcentaje. default_fee_split_mode en el objeto de tienda te dice cuál es el modo, y default_fee_split_amount_cents lleva el monto. Ambos son de solo lectura: el restaurante elige la forma desde la consola de Listo, y aquí no hay un campo para definirla. Lee el modo antes que la parte, porque en un modo de monto la parte no es la división vigente. Enviar default_business_fee_share regresa la tienda a percent, en este endpoint y en la actualización. owner_email es opcional, y es una precondición más que un atributo: envía la dirección de quien administra el local y la comparamos contra los restaurantes que ya tienen una cuenta de Listo propia. Si existe una, no se crea nada y recibes 409 account_exists, porque una segunda cuenta para una cocina que ya tiene una dividiría el saldo, la consola y el historial en dos. Pídele al dueño que conecte la cuenta que ya tiene con POST /v1/connect_requests, como describe Conecta un restaurante que ya usa Listo. Nada guarda la dirección y ningún objeto de tienda la repite. Tampoco crea un inicio de sesión; eso es POST /v1/stores/{id}/owner. Listo entrega en México, y una street que resuelve a otro país se rechaza con 422 unsupported_country: no se crea nada, y ninguna otra dirección de ese país funcionará tampoco. Una dirección que no podemos resolver en absoluto no se rechaza. Se guarda tal como la enviaste y se localiza en el primer envío. Lo que hace una creación para una tienda real con el Plan Listo de la tienda depende de quién lo paga en tu cuenta (ver Plan y facturación). Si tú pagas los planes de tus tiendas, la tienda inicia el Plan Listo y el primer mes se cobra a ti en esta misma solicitud, de tu saldo real o de la tarjeta guardada en tu cuenta. Fondea uno de los dos primero, y envía un Idempotency-Key en cada creación de una tienda real: una creación que se agota por tiempo y se repite sin él crea una segunda tienda, y la segunda tienda inicia un segundo plan. Una tienda cuyo primer cobro falla sigue creada y sigue respondiendo 201, con plan.status awaiting_payment: todavía no tiene plan, nada está vencido, y los envíos de esa tienda se rechazan con 402 plan_required hasta que tu saldo o tu tarjeta cubran el mes, lo que Listo entonces cobra por sí solo. Si tu cuenta está configurada para que cada restaurante pague el plan propio, no se te cobra nada: la tienda se crea sin plan (plan es null) y el restaurante compra el Plan Listo desde la consola de Listo. Los envíos de esa tienda se rechazan con 402 plan_required hasta que lo haga. Una tienda de prueba no tiene plan.\">\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/stores/create-a-store\">\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=Crea+una+tienda\u0026amp;description=Registra+un+punto+de+recolecci%C3%B3n.+%60lat%60%2F%60lng%60+son+opcionales%3A+env%C3%ADalos+cuando+los+tengas+y+los+tomamos+tal+cual%3B+si+no%2C+geocodificamos+%60street%60.%0A%0A%60phone%60+va+en+\u0026amp;theme=77fcfc9066d8b9eb9850b729\u0026amp;signature=4214d2cc9ef4617bdf97d62dc5859c5cdfa7922c277ba0b58409433314b7c8ec\">\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=\"Crea una tienda - Listo Partner API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Registra un punto de recolección. lat/lng son opcionales: envíalos cuando los tengas y los tomamos tal cual; si no, geocodificamos street. phone va en E.164. Un número mexicano es +52 seguido de los 10 dígitos (se acepta +52 1 seguido de 10, como lo escribe WhatsApp); un número de Estados Unidos o Canadá es +1 seguido de los 10 dígitos; un número de cualquier otro país se acepta con de 8 a 15 dígitos en total. Cualquier otra cosa se rechaza con validation_failed. timezone se deriva de la posición de la tienda, y no tienes que enviarlo. México abarca cinco zonas horarias, y la posición de la tienda es lo que decide cuál le corresponde: los horarios de recolección programados, las marcas de tiempo de envío y la semana de liquidación se leen en esa zona. Un timezone que sí envíes solo se usa cuando la posición no puede responder: una tienda sin coordenadas, o una posición que ninguna zona reclama. Uno que no coincida con la posición no cambia la tienda y no es un error: la tienda se crea, se aplica todo lo demás que enviaste, y la zona que da la posición es la que regresa. Preferimos corregirlo en silencio antes que rechazarlo, porque desde aquí no podemos distinguir los dos casos: una zona enviada por defecto desde un formulario que nunca le preguntó al usuario llega exactamente igual que una zona que alguien eligió, y la primera tienda aprovisionada con la regla anterior quedó una hora adelantada durante todo un año de horarios de apertura, marcas de tiempo de envío y semanas de liquidación. La posición de la tienda es la evidencia de dónde está. Si el reloj de una tienda parece mal, lo que hay que corregir son las coordenadas. default_business_fee_share es la parte de la tarifa de envío que esta tienda cubre por defecto, de 0 a 100, con el resto cobrado al cliente. Cada envío cash o card de la tienda la hereda, salvo que la creación la reemplace. Un envío prepaid, y una cotización que no nombre payment_method, siempre llevan 100 en lugar de eso: la tarifa completa es tuya. Una tienda también puede dividir la tarifa por un monto fijo en pesos en lugar de por un porcentaje. default_fee_split_mode en el objeto de tienda te dice cuál es el modo, y default_fee_split_amount_cents lleva el monto. Ambos son de solo lectura: el restaurante elige la forma desde la consola de Listo, y aquí no hay un campo para definirla. Lee el modo antes que la parte, porque en un modo de monto la parte no es la división vigente. Enviar default_business_fee_share regresa la tienda a percent, en este endpoint y en la actualización. owner_email es opcional, y es una precondición más que un atributo: envía la dirección de quien administra el local y la comparamos contra los restaurantes que ya tienen una cuenta de Listo propia. Si existe una, no se crea nada y recibes 409 account_exists, porque una segunda cuenta para una cocina que ya tiene una dividiría el saldo, la consola y el historial en dos. Pídele al dueño que conecte la cuenta que ya tiene con POST /v1/connect_requests, como describe Conecta un restaurante que ya usa Listo. Nada guarda la dirección y ningún objeto de tienda la repite. Tampoco crea un inicio de sesión; eso es POST /v1/stores/{id}/owner. Listo entrega en México, y una street que resuelve a otro país se rechaza con 422 unsupported_country: no se crea nada, y ninguna otra dirección de ese país funcionará tampoco. Una dirección que no podemos resolver en absoluto no se rechaza. Se guarda tal como la enviaste y se localiza en el primer envío. Lo que hace una creación para una tienda real con el Plan Listo de la tienda depende de quién lo paga en tu cuenta (ver Plan y facturación). Si tú pagas los planes de tus tiendas, la tienda inicia el Plan Listo y el primer mes se cobra a ti en esta misma solicitud, de tu saldo real o de la tarjeta guardada en tu cuenta. Fondea uno de los dos primero, y envía un Idempotency-Key en cada creación de una tienda real: una creación que se agota por tiempo y se repite sin él crea una segunda tienda, y la segunda tienda inicia un segundo plan. Una tienda cuyo primer cobro falla sigue creada y sigue respondiendo 201, con plan.status awaiting_payment: todavía no tiene plan, nada está vencido, y los envíos de esa tienda se rechazan con 402 plan_required hasta que tu saldo o tu tarjeta cubran el mes, lo que Listo entonces cobra por sí solo. Si tu cuenta está configurada para que cada restaurante pague el plan propio, no se te cobra nada: la tienda se crea sin plan (plan es null) y el restaurante compra el Plan Listo desde la consola de Listo. Los envíos de esa tienda se rechazan con 402 plan_required hasta que lo haga. Una tienda de prueba no tiene plan.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://listo-c5a11a00.mintlify.site/_mintlify/api/og/v2?title=Crea+una+tienda\u0026amp;description=Registra+un+punto+de+recolecci%C3%B3n.+%60lat%60%2F%60lng%60+son+opcionales%3A+env%C3%ADalos+cuando+los+tengas+y+los+tomamos+tal+cual%3B+si+no%2C+geocodificamos+%60street%60.%0A%0A%60phone%60+va+en+\u0026amp;theme=77fcfc9066d8b9eb9850b729\u0026amp;signature=4214d2cc9ef4617bdf97d62dc5859c5cdfa7922c277ba0b58409433314b7c8ec\">\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/stores/create-a-store\">\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/stores/create-a-store.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"es\" href=\"https://docs.listo.delivery/es/api-reference/stores/create-a-store\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://docs.listo.delivery/api-reference/stores/create-a-store\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://docs.listo.delivery/api-reference/stores/create-a-store\">\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/stores/create-a-store#webpage\",\"url\":\"https://docs.listo.delivery/es/api-reference/stores/create-a-store\",\"name\":\"Crea una tienda\",\"description\":\"Registra un punto de recolección. lat/lng son opcionales: envíalos cuando los tengas y los tomamos tal cual; si no, geocodificamos street. phone va en E.164. Un número mexicano es +52 seguido de los 10 dígitos (se acepta +52 1 seguido de 10, como lo escribe WhatsApp); un número de Estados Unidos o Canadá es +1 seguido de los 10 dígitos; un número de cualquier otro país se acepta con de 8 a 15 dígitos en total. Cualquier otra cosa se rechaza con validation_failed. timezone se deriva de la posición de la tienda, y no tienes que enviarlo. México abarca cinco zonas horarias, y la posición de la tienda es lo que decide cuál le corresponde: los horarios de recolección programados, las marcas de tiempo de envío y la semana de liquidación se leen en esa zona. Un timezone que sí envíes solo se usa cuando la posición no puede responder: una tienda sin coordenadas, o una posición que ninguna zona reclama. Uno que no coincida con la posición no cambia la tienda y no es un error: la tienda se crea, se aplica todo lo demás que enviaste, y la zona que da la posición es la que regresa. Preferimos corregirlo en silencio antes que rechazarlo, porque desde aquí no podemos distinguir los dos casos: una zona enviada por defecto desde un formulario que nunca le preguntó al usuario llega exactamente igual que una zona que alguien eligió, y la primera tienda aprovisionada con la regla anterior quedó una hora adelantada durante todo un año de horarios de apertura, marcas de tiempo de envío y semanas de liquidación. La posición de la tienda es la evidencia de dónde está. Si el reloj de una tienda parece mal, lo que hay que corregir son las coordenadas. default_business_fee_share es la parte de la tarifa de envío que esta tienda cubre por defecto, de 0 a 100, con el resto cobrado al cliente. Cada envío cash o card de la tienda la hereda, salvo que la creación la reemplace. Un envío prepaid, y una cotización que no nombre payment_method, siempre llevan 100 en lugar de eso: la tarifa completa es tuya. Una tienda también puede dividir la tarifa por un monto fijo en pesos en lugar de por un porcentaje. default_fee_split_mode en el objeto de tienda te dice cuál es el modo, y default_fee_split_amount_cents lleva el monto. Ambos son de solo lectura: el restaurante elige la forma desde la consola de Listo, y aquí no hay un campo para definirla. Lee el modo antes que la parte, porque en un modo de monto la parte no es la división vigente. Enviar default_business_fee_share regresa la tienda a percent, en este endpoint y en la actualización. owner_email es opcional, y es una precondición más que un atributo: envía la dirección de quien administra el local y la comparamos contra los restaurantes que ya tienen una cuenta de Listo propia. Si existe una, no se crea nada y recibes 409 account_exists, porque una segunda cuenta para una cocina que ya tiene una dividiría el saldo, la consola y el historial en dos. Pídele al dueño que conecte la cuenta que ya tiene con POST /v1/connect_requests, como describe Conecta un restaurante que ya usa Listo. Nada guarda la dirección y ningún objeto de tienda la repite. Tampoco crea un inicio de sesión; eso es POST /v1/stores/{id}/owner. Listo entrega en México, y una street que resuelve a otro país se rechaza con 422 unsupported_country: no se crea nada, y ninguna otra dirección de ese país funcionará tampoco. Una dirección que no podemos resolver en absoluto no se rechaza. Se guarda tal como la enviaste y se localiza en el primer envío. Lo que hace una creación para una tienda real con el Plan Listo de la tienda depende de quién lo paga en tu cuenta (ver Plan y facturación). Si tú pagas los planes de tus tiendas, la tienda inicia el Plan Listo y el primer mes se cobra a ti en esta misma solicitud, de tu saldo real o de la tarjeta guardada en tu cuenta. Fondea uno de los dos primero, y envía un Idempotency-Key en cada creación de una tienda real: una creación que se agota por tiempo y se repite sin él crea una segunda tienda, y la segunda tienda inicia un segundo plan. Una tienda cuyo primer cobro falla sigue creada y sigue respondiendo 201, con plan.status awaiting_payment: todavía no tiene plan, nada está vencido, y los envíos de esa tienda se rechazan con 402 plan_required hasta que tu saldo o tu tarjeta cubran el mes, lo que Listo entonces cobra por sí solo. Si tu cuenta está configurada para que cada restaurante pague el plan propio, no se te cobra nada: la tienda se crea sin plan (plan es null) y el restaurante compra el Plan Listo desde la consola de Listo. Los envíos de esa tienda se rechazan con 402 plan_required hasta que lo haga. Una tienda de prueba no tiene plan.\",\"dateModified\":\"2026-11-07T01:48:56.075Z\",\"isPartOf\":{\"@id\":\"https://docs.listo.delivery#website\"},\"breadcrumb\":{\"@id\":\"https://docs.listo.delivery/es/api-reference/stores/create-a-store#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.listo.delivery/es/api-reference/stores/create-a-store#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\":\"Tiendas\",\"item\":\"https://docs.listo.delivery/es/api-reference/stores/list-your-stores\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Crea una tienda\",\"item\":\"https://docs.listo.delivery/es/api-reference/stores/create-a-store\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.listo.delivery/es/api-reference/stores/create-a-store#apireference\",\"headline\":\"Crea una tienda\",\"name\":\"Crea una tienda\",\"description\":\"Registra un punto de recolección. lat/lng son opcionales: envíalos cuando los tengas y los tomamos tal cual; si no, geocodificamos street. phone va en E.164. Un número mexicano es +52 seguido de los 10 dígitos (se acepta +52 1 seguido de 10, como lo escribe WhatsApp); un número de Estados Unidos o Canadá es +1 seguido de los 10 dígitos; un número de cualquier otro país se acepta con de 8 a 15 dígitos en total. Cualquier otra cosa se rechaza con validation_failed. timezone se deriva de la posición de la tienda, y no tienes que enviarlo. México abarca cinco zonas horarias, y la posición de la tienda es lo que decide cuál le corresponde: los horarios de recolección programados, las marcas de tiempo de envío y la semana de liquidación se leen en esa zona. Un timezone que sí envíes solo se usa cuando la posición no puede responder: una tienda sin coordenadas, o una posición que ninguna zona reclama. Uno que no coincida con la posición no cambia la tienda y no es un error: la tienda se crea, se aplica todo lo demás que enviaste, y la zona que da la posición es la que regresa. Preferimos corregirlo en silencio antes que rechazarlo, porque desde aquí no podemos distinguir los dos casos: una zona enviada por defecto desde un formulario que nunca le preguntó al usuario llega exactamente igual que una zona que alguien eligió, y la primera tienda aprovisionada con la regla anterior quedó una hora adelantada durante todo un año de horarios de apertura, marcas de tiempo de envío y semanas de liquidación. La posición de la tienda es la evidencia de dónde está. Si el reloj de una tienda parece mal, lo que hay que corregir son las coordenadas. default_business_fee_share es la parte de la tarifa de envío que esta tienda cubre por defecto, de 0 a 100, con el resto cobrado al cliente. Cada envío cash o card de la tienda la hereda, salvo que la creación la reemplace. Un envío prepaid, y una cotización que no nombre payment_method, siempre llevan 100 en lugar de eso: la tarifa completa es tuya. Una tienda también puede dividir la tarifa por un monto fijo en pesos en lugar de por un porcentaje. default_fee_split_mode en el objeto de tienda te dice cuál es el modo, y default_fee_split_amount_cents lleva el monto. Ambos son de solo lectura: el restaurante elige la forma desde la consola de Listo, y aquí no hay un campo para definirla. Lee el modo antes que la parte, porque en un modo de monto la parte no es la división vigente. Enviar default_business_fee_share regresa la tienda a percent, en este endpoint y en la actualización. owner_email es opcional, y es una precondición más que un atributo: envía la dirección de quien administra el local y la comparamos contra los restaurantes que ya tienen una cuenta de Listo propia. Si existe una, no se crea nada y recibes 409 account_exists, porque una segunda cuenta para una cocina que ya tiene una dividiría el saldo, la consola y el historial en dos. Pídele al dueño que conecte la cuenta que ya tiene con POST /v1/connect_requests, como describe Conecta un restaurante que ya usa Listo. Nada guarda la dirección y ningún objeto de tienda la repite. Tampoco crea un inicio de sesión; eso es POST /v1/stores/{id}/owner. Listo entrega en México, y una street que resuelve a otro país se rechaza con 422 unsupported_country: no se crea nada, y ninguna otra dirección de ese país funcionará tampoco. Una dirección que no podemos resolver en absoluto no se rechaza. Se guarda tal como la enviaste y se localiza en el primer envío. Lo que hace una creación para una tienda real con el Plan Listo de la tienda depende de quién lo paga en tu cuenta (ver Plan y facturación). Si tú pagas los planes de tus tiendas, la tienda inicia el Plan Listo y el primer mes se cobra a ti en esta misma solicitud, de tu saldo real o de la tarjeta guardada en tu cuenta. Fondea uno de los dos primero, y envía un Idempotency-Key en cada creación de una tienda real: una creación que se agota por tiempo y se repite sin él crea una segunda tienda, y la segunda tienda inicia un segundo plan. Una tienda cuyo primer cobro falla sigue creada y sigue respondiendo 201, con plan.status awaiting_payment: todavía no tiene plan, nada está vencido, y los envíos de esa tienda se rechazan con 402 plan_required hasta que tu saldo o tu tarjeta cubran el mes, lo que Listo entonces cobra por sí solo. Si tu cuenta está configurada para que cada restaurante pague el plan propio, no se te cobra nada: la tienda se crea sin plan (plan es null) y el restaurante compra el Plan Listo desde la consola de Listo. Los envíos de esa tienda se rechazan con 402 plan_required hasta que lo haga. Una tienda de prueba no tiene plan.\",\"url\":\"https://docs.listo.delivery/es/api-reference/stores/create-a-store\",\"mainEntityOfPage\":{\"@id\":\"https://docs.listo.delivery/es/api-reference/stores/create-a-store#webpage\"},\"dateModified\":\"2026-11-07T01:48:56.075Z\",\"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/stores/create-a-store"}]},{"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","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","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","description":"Tus tiendas, las más nuevas primero, paginadas por keyset. Pasa el `cursor` de la página anterior para seguir; `has_more` te dice cuándo parar. No hay conteo total, por diseño.\n\nUna llave solo ve las tiendas de su propio modo: una llave de prueba no puede ver ni dirigirse a tiendas reales, y al revés.\n","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","description":"Obtiene una tienda por su id `st_`.\n","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":"Crea una tienda - 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"]}