> ## Documentation Index
> Fetch the complete documentation index at: https://docs.listo.delivery/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent 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 <API 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.

# Obtén una entrada del registro de solicitudes

> Una llamada, con lo que envió (`request_body`) y lo que respondió Listo (`response_body`), ambos en JSON. En caso de fallo, la respuesta es el sobre de error que recibiste y la solicitud es lo que realmente salió por la red.

Estas son las copias guardadas. Una llave de API en cualquier parte de un cuerpo aparece con sus primeros caracteres seguidos de `[key masked]`. El enlace de un solo uso en la respuesta a `POST /v1/connect_requests` o a una llamada de incorporación de Stripe aparece como `[redacted: one-time link]`; lo que recibiste no se modifica. Un cuerpo de más de 64 KB se guarda como un objeto con `_listo_truncated: true`, su `original_bytes` y los primeros 64 KB como `text`, así que siempre se te indica cuando no estás leyendo todo. Los encabezados nunca se guardan.

Una llamada que no era tuya, o que se hizo con una llave del otro modo, es `404 not_found`.




## OpenAPI

````yaml /openapi/es.yaml get /v1/request_logs/{id}
openapi: 3.1.0
info:
  title: Listo Delivery API
  version: 1.34.0
  description: >
    Cotiza un envío, despáchalo y sigue el recorrido hasta la puerta.


    Cada solicitud se autentica con una llave de API bearer. La llave misma
    decide el modo en el que actúa: una llave de prueba despacha repartidores
    simulados y no mueve dinero, y una llave real despacha repartidores reales.
    Una llave también puede ser de solo lectura: solo puede llamar a GET y HEAD,
    y cualquier otra llamada responde `403 read_only_key`. El dinero siempre va
    en pesos mexicanos y siempre en centavos enteros, y cada marca de tiempo es
    ISO-8601 en UTC.


    Los ids son cadenas opacas con prefijo (`st_` una tienda, `qt_` una
    cotización, `dlv_` un

    envío, `wd_` un retiro, `evt_` un evento, `le_` un movimiento del historial,

    `whd_` un intento de entrega de webhook, `req_` una llamada registrada).
    Trátalos

    como cadenas de longitud ilimitada y nunca los analices.


    Los cambios a v1 son aditivos: pueden aparecer campos nuevos y valores
    nuevos de enumeración, así que ignora lo que no reconozcas en lugar de
    fallar.
servers:
  - url: https://api.listo.delivery
security: []
tags:
  - name: Authentication
    description: Verifica que una llave funciona antes de empezar a construir con ella.
    x-group: Autenticación
  - name: Stores
    description: Las ubicaciones de recolección desde las que despachas.
    x-group: Tiendas
  - name: Account connection
    description: Conectar la cuenta de Listo que ya tiene un restaurante contigo.
    x-group: Conexión de cuenta
  - name: Quotes
    description: Lo que cuesta un envío, cotizado y retenido.
    x-group: Cotizaciones
  - name: Deliveries
    description: Despachar un pedido y seguirlo hasta la puerta.
    x-group: Envíos
  - name: Balance
    description: El saldo prepagado del que salen tus envíos.
    x-group: Saldo
  - name: Withdrawals
    description: Sacar dinero de ese saldo hacia tu banco.
    x-group: Retiros
  - name: Card onboarding
    description: Conectar la cuenta que recibe los pagos con tarjeta.
    x-group: Alta de cobros con tarjeta
  - name: Events
    description: >-
      Los eventos que Listo te envió, al reenviar uno y al enviar un evento de
      prueba a tu endpoint.
    x-group: Eventos
  - name: Webhook deliveries
    description: >-
      Cada intento que hizo Listo de enviar un evento a tu endpoint, y lo que
      respondió tu endpoint.
    x-group: Entregas de webhook
  - name: Request logs
    description: >-
      Cada llamada que hicieron tus llaves a esta API, con lo que enviaste y con
      lo que respondimos.
    x-group: Registro de solicitudes
  - name: Ledger
    x-group: Historial
  - name: Webhooks
    x-group: Webhooks
paths:
  /v1/request_logs/{id}:
    get:
      tags:
        - Request logs
      summary: Obtén una entrada del registro de solicitudes
      description: >
        Una llamada, con lo que envió (`request_body`) y lo que respondió Listo
        (`response_body`), ambos en JSON. En caso de fallo, la respuesta es el
        sobre de error que recibiste y la solicitud es lo que realmente salió
        por la red.


        Estas son las copias guardadas. Una llave de API en cualquier parte de
        un cuerpo aparece con sus primeros caracteres seguidos de `[key
        masked]`. El enlace de un solo uso en la respuesta a `POST
        /v1/connect_requests` o a una llamada de incorporación de Stripe aparece
        como `[redacted: one-time link]`; lo que recibiste no se modifica. Un
        cuerpo de más de 64 KB se guarda como un objeto con `_listo_truncated:
        true`, su `original_bytes` y los primeros 64 KB como `text`, así que
        siempre se te indica cuando no estás leyendo todo. Los encabezados nunca
        se guardan.


        Una llamada que no era tuya, o que se hizo con una llave del otro modo,
        es `404 not_found`.
      operationId: getRequestLog
      parameters:
        - name: id
          in: path
          required: true
          description: >-
            El id `req_` de la llamada, de `GET /v1/request_logs`. Una llamada
            que no es tuya, o que se hizo con una llave del otro modo, es `404
            not_found`.
          schema:
            type: string
          example: req_4f9c2b7e1a8d3056b1c2d3e4
      responses:
        '200':
          description: La solicitud fue exitosa.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestLogDetail'
              example:
                id: req_4f9c2b7e1a8d3056b1c2d3e4
                method: POST
                path: /v1/deliveries
                endpoint: api/v1/deliveries#create
                status: 201
                error_code: null
                duration_ms: 120
                request_id: 0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10
                api_key_prefix: lst_live_Ab1
                test: false
                created_at: '2026-08-01T12:00:00Z'
                request_body:
                  reference: order-1042
                response_body:
                  id: dlv_7hK2mQ9xR4tV6bN1cZ8sLwYe
                  status: pending
      security:
        - BearerAuth: []
components:
  schemas:
    RequestLogDetail:
      type: object
      description: >
        Una llamada con lo que se envió y lo que regresó. Los cuerpos son la
        copia guardada: una llave de API en cualquier parte de ellos se lee como
        sus primeros caracteres y `[key masked]`, el enlace en la respuesta de
        `POST /v1/connect_requests` o de una llamada de onboarding de Stripe se
        lee `[redacted: one-time link]`, y un cuerpo de más de 64 KB es un
        objeto con `_listo_truncated: true`, sus `original_bytes` y los primeros
        64 KB como `text`. Los encabezados nunca se guardan.
      properties:
        id:
          type: string
          description: El id de la llamada, con prefijo `req_`.
          example: req_4f9c2b7e1a8d3056b1c2d3e4
        method:
          type: string
          description: El método HTTP de la llamada.
          example: POST
        path:
          type:
            - string
            - 'null'
          description: >
            La ruta que se llamó, con su cadena de consulta. Null en una llamada
            hecha

            antes de que se guardaran las rutas.
          example: /v1/deliveries
        endpoint:
          type: string
          description: A qué operación llegó la llamada, como `controller#action`.
          example: api/v1/deliveries#create
        status:
          type: integer
          description: El estado HTTP con el que respondió Listo.
          example: 422
        error_code:
          type:
            - string
            - 'null'
          description: El `error.code` de la respuesta cuando fue un error; si no, null.
          example: validation_failed
        duration_ms:
          type:
            - integer
            - 'null'
          description: >-
            Cuánto tardó Listo en responder, en milisegundos. Null cuando no se
            midió.
          example: 118
        request_id:
          type:
            - string
            - 'null'
          description: >-
            El id de solicitud de la llamada, el valor del encabezado de
            respuesta `X-Request-Id`. Null en una llamada hecha antes de que se
            guardaran los ids de solicitud.
          example: 0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10
        api_key_prefix:
          type:
            - string
            - 'null'
          description: >-
            Los primeros caracteres de la llave que hizo la llamada, nunca el
            secreto. Null cuando no hay una llave registrada para la llamada.
          example: lst_test_Ab1
        test:
          type: boolean
          description: Verdadero cuando la llamada se hizo con una llave de prueba.
        created_at:
          type: string
          format: date-time
          description: Cuándo recibió Listo la llamada, en ISO-8601 y en UTC.
          example: '2026-11-06T16:02:11Z'
        request_body:
          description: >
            Lo que envió la llamada, como JSON. Null cuando no se envió nada, en
            una llamada

            hecha antes de que se guardaran los cuerpos, y en las tres consultas
            de depuración

            mismas, que no guardan cuerpos.
        response_body:
          description: |
            Lo que respondió Listo, como JSON. Null en las mismas filas que
            `request_body`.
      required:
        - id
        - method
        - path
        - endpoint
        - status
        - error_code
        - duration_ms
        - request_id
        - api_key_prefix
        - test
        - created_at
        - request_body
        - response_body
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: >-
        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.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.