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

# Lista tu registro de solicitudes

> Todas las llamadas que tus llaves hicieron a esta API, las más nuevas primero, paginadas por keyset
como cada lista de aquí. Úsalo para responder «¿qué mandó mi código y qué
respondió Listo?» sin preguntarle a nadie.

Una llave solo ve las llamadas de su propio mundo: una llave real lee llamadas reales
y una llave de prueba lee llamadas de prueba, y ninguna puede leer las de la otra.

Filtra por `status` (`failed` son todas las respuestas de 400 o más),
`endpoint`, `created_after` y `created_before`. Un filtro acota todo el
historial, nunca solo la página en la que estás.

Se registran las llamadas que identificaron una llave. Una llamada sin llave o con una equivocada no es tuya y no está aquí, tampoco una llamada rechazada por límite de tasa. Las llamadas se guardan indefinidamente. Leer esta lista, una entrada o tus eventos o entregas de webhook también queda registrado, pero sin cuerpos, para que el registro no se copie a sí mismo cada vez que lo lees.

La lista no trae cuerpos. `GET /v1/request_logs/{id}` devuelve la llamada con ellos.




## OpenAPI

````yaml /openapi/es.yaml get /v1/request_logs
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:
    get:
      tags:
        - Request logs
      summary: Lista tu registro de solicitudes
      description: >
        Todas las llamadas que tus llaves hicieron a esta API, las más nuevas
        primero, paginadas por keyset

        como cada lista de aquí. Úsalo para responder «¿qué mandó mi código y
        qué

        respondió Listo?» sin preguntarle a nadie.


        Una llave solo ve las llamadas de su propio mundo: una llave real lee
        llamadas reales

        y una llave de prueba lee llamadas de prueba, y ninguna puede leer las
        de la otra.


        Filtra por `status` (`failed` son todas las respuestas de 400 o más),

        `endpoint`, `created_after` y `created_before`. Un filtro acota todo el

        historial, nunca solo la página en la que estás.


        Se registran las llamadas que identificaron una llave. Una llamada sin
        llave o con una equivocada no es tuya y no está aquí, tampoco una
        llamada rechazada por límite de tasa. Las llamadas se guardan
        indefinidamente. Leer esta lista, una entrada o tus eventos o entregas
        de webhook también queda registrado, pero sin cuerpos, para que el
        registro no se copie a sí mismo cada vez que lo lees.


        La lista no trae cuerpos. `GET /v1/request_logs/{id}` devuelve la
        llamada con ellos.
      operationId: listRequestLogs
      parameters:
        - name: status
          in: query
          required: false
          description: >-
            Solo llamadas que fallaron (`failed`: respondidas con un estado de
            400 o más) o que tuvieron éxito (`succeeded`). Cualquier otro valor
            no coincide con nada.
          schema:
            type: string
            enum:
              - failed
              - succeeded
          example: failed
        - name: endpoint
          in: query
          required: false
          description: >-
            Solo llamadas a una operación, por el valor exacto de `endpoint` que
            muestra una fila.
          schema:
            type: string
          example: api/v1/deliveries#create
        - name: request_id
          in: query
          required: false
          description: >-
            Solo la llamada con este id de solicitud, con coincidencia exacta:
            el encabezado de respuesta `X-Request-Id` de esa llamada, que
            también es `error.request_id` en el cuerpo de un error. Un id que no
            coincida con ninguna de tus llamadas devuelve una lista vacía.
          schema:
            type: string
          example: 0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10
        - name: created_after
          in: query
          required: false
          description: >-
            Solo llamadas recibidas en este momento o después (ISO-8601). Un
            valor que no se pueda interpretar es `422 validation_failed` con
            `param: "created_after"`.
          schema:
            type: string
          example: '2026-07-28T09:00:00Z'
        - name: created_before
          in: query
          required: false
          description: >-
            Solo las llamadas recibidas en este instante o antes (ISO-8601). Un
            valor que no se puede leer es `422 validation_failed` con `param:
            "created_before"`.
          schema:
            type: string
          example: '2026-07-30T09:00:00Z'
        - name: cursor
          in: query
          required: false
          description: >-
            El `cursor` de la página anterior, para leer la siguiente. Es opaco:
            nunca lo construyas ni lo analices.
          schema:
            type: string
          example: 1785628920000000-1024
      responses:
        '200':
          description: La solicitud fue exitosa.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestLogList'
              example:
                data:
                  - 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'
                  - id: req_4f9c2b7e1a8d3056b1c2d3e4
                    method: POST
                    path: null
                    endpoint: api/v1/deliveries#create
                    status: 201
                    error_code: null
                    duration_ms: 120
                    request_id: null
                    api_key_prefix: lst_live_Ab1
                    test: false
                    created_at: '2026-07-01T12:00:00Z'
                has_more: false
                cursor: null
      security:
        - BearerAuth: []
components:
  schemas:
    RequestLogList:
      type: object
      description: Una página de llamadas registradas, de la más reciente a la más antigua.
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/RequestLog'
        has_more:
          type: boolean
          description: Verdadero cuando existe una página siguiente.
        cursor:
          type:
            - string
            - 'null'
          description: >-
            Pásalo como `cursor` para leer la siguiente página. Null en la
            última página.
      required:
        - data
        - has_more
        - cursor
    RequestLog:
      type: object
      description: |
        Una llamada que hizo tu llave a esta API: qué se llamó, cómo se
        respondió y cuánto tardó. La lista no trae cuerpos; lee una llamada
        para obtenerlos.
      properties:
        id:
          type: string
          description: >-
            El id de la llamada, con prefijo `req_`. Pásalo a `GET
            /v1/request_logs/{id}`.
          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: >
            Qué operación recibió la llamada, como `controller#action`. Este es
            el valor exacto por el que filtra `?endpoint=`.
          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`. Cítalo cuando escribas a soporte. 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, el mismo
            texto que muestra la página de llaves del panel, nunca el secreto.
            Null cuando no hay ninguna 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'
      required:
        - id
        - method
        - path
        - endpoint
        - status
        - error_code
        - duration_ms
        - request_id
        - api_key_prefix
        - test
        - created_at
  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.