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

# List your request log

> Every call your keys made to this API, newest first, keyset-paginated
like every list here. Use it to answer "what did my code send, and what
did Listo say?" without asking anyone.

A key only ever sees the calls of its own world: a live key reads live
calls and a test key reads test calls, and neither can read the other's.

Filter by `status` (`failed` is every answer of 400 or more),
`endpoint`, `created_after` and `created_before`. A filter narrows the
whole history, never only the page you are on.

What is recorded: calls that identified a key. A call with no key or a
wrong one is not yours and is not here, and neither is a call refused for
rate limiting. Calls are kept indefinitely. Reading this list, one entry
or your events or webhook deliveries is itself logged, but without
bodies, so the log does not copy itself every time you read it.

The list carries no bodies. `GET /v1/request_logs/{id}` returns the call
with them.




## OpenAPI

````yaml /openapi/en.yaml get /v1/request_logs
openapi: 3.1.0
info:
  title: Listo Delivery API
  version: 1.34.0
  description: |
    Quote a delivery, dispatch it, and follow it to the door.

    Every request authenticates with a bearer API key. The key itself decides
    the world it acts in: a test key dispatches simulated couriers and moves no
    money, a live key dispatches real ones. A key can also be read-only: it
    may call GET and HEAD and nothing else, and any other call answers
    `403 read_only_key`. Money is always in Mexican pesos and
    always in integer cents, and every timestamp is ISO-8601 in UTC.

    Ids are opaque prefixed strings (`st_` a store, `qt_` a quote, `dlv_` a
    delivery, `wd_` a withdrawal, `evt_` an event, `le_` a ledger entry,
    `whd_` a webhook delivery attempt, `req_` a logged request). Treat
    them as strings of unbounded length and never parse them.

    Changes to v1 are additive: new fields and new enum values can appear, so
    ignore what you do not recognise rather than failing on it.
servers:
  - url: https://api.listo.delivery
security: []
tags:
  - name: Authentication
    description: Checking that a key works before you build against it.
  - name: Stores
    description: The pickup locations you dispatch from.
  - name: Account connection
    description: Connecting a restaurant's existing Listo account to you.
  - name: Quotes
    description: What a delivery costs, priced and held.
  - name: Deliveries
    description: Dispatching an order and following it to the door.
  - name: Balance
    description: The prepaid balance your deliveries draw on.
  - name: Withdrawals
    description: Moving money out of that balance to your bank.
  - name: Card onboarding
    description: Connecting the account that takes card payments.
  - name: Events
    description: >-
      The events Listo sent you, resending one, and sending a test event to your
      endpoint.
  - name: Webhook deliveries
    description: >-
      Every attempt Listo made to send an event to your endpoint, and what came
      back.
  - name: Request logs
    description: >-
      Every call your keys made to this API, with what you sent and what we
      answered.
paths:
  /v1/request_logs:
    get:
      tags:
        - Request logs
      summary: List your request log
      description: >
        Every call your keys made to this API, newest first, keyset-paginated

        like every list here. Use it to answer "what did my code send, and what

        did Listo say?" without asking anyone.


        A key only ever sees the calls of its own world: a live key reads live

        calls and a test key reads test calls, and neither can read the other's.


        Filter by `status` (`failed` is every answer of 400 or more),

        `endpoint`, `created_after` and `created_before`. A filter narrows the

        whole history, never only the page you are on.


        What is recorded: calls that identified a key. A call with no key or a

        wrong one is not yours and is not here, and neither is a call refused
        for

        rate limiting. Calls are kept indefinitely. Reading this list, one entry

        or your events or webhook deliveries is itself logged, but without

        bodies, so the log does not copy itself every time you read it.


        The list carries no bodies. `GET /v1/request_logs/{id}` returns the call

        with them.
      operationId: listRequestLogs
      parameters:
        - name: status
          in: query
          required: false
          description: >-
            Only calls that failed (`failed`: answered with a status of 400 or
            more) or that succeeded (`succeeded`). Any other value matches
            nothing.
          schema:
            type: string
            enum:
              - failed
              - succeeded
          example: failed
        - name: endpoint
          in: query
          required: false
          description: >-
            Only calls to one operation, by the exact `endpoint` value a row
            shows.
          schema:
            type: string
          example: api/v1/deliveries#create
        - name: request_id
          in: query
          required: false
          description: >-
            Only the call with this request id, matched exactly: the
            `X-Request-Id` response header of that call, which is also
            `error.request_id` in an error body. An id that matches no call of
            yours gives an empty list.
          schema:
            type: string
          example: 0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10
        - name: created_after
          in: query
          required: false
          description: >-
            Only calls received at or after this instant (ISO-8601). A value
            that does not parse is `422 validation_failed` with `param:
            "created_after"`.
          schema:
            type: string
          example: '2026-07-28T09:00:00Z'
        - name: created_before
          in: query
          required: false
          description: >-
            Only calls received at or before this instant (ISO-8601). A value
            that does not parse is `422 validation_failed` with `param:
            "created_before"`.
          schema:
            type: string
          example: '2026-07-30T09:00:00Z'
        - name: cursor
          in: query
          required: false
          description: >-
            The `cursor` of the previous page, to read the next one. Opaque:
            never build or parse one.
          schema:
            type: string
          example: 1785628920000000-1024
      responses:
        '200':
          description: The request succeeded.
          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: One page of logged calls, newest first.
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/RequestLog'
        has_more:
          type: boolean
          description: True when a further page exists.
        cursor:
          type:
            - string
            - 'null'
          description: Pass as `cursor` to read the next page. Null on the last page.
      required:
        - data
        - has_more
        - cursor
    RequestLog:
      type: object
      description: |
        One call your key made to this API: what was called, how it was
        answered and how long it took. The list carries no bodies; read one call
        to get them.
      properties:
        id:
          type: string
          description: >-
            The call's id, `req_` prefixed. Pass it to `GET
            /v1/request_logs/{id}`.
          example: req_4f9c2b7e1a8d3056b1c2d3e4
        method:
          type: string
          description: The HTTP method of the call.
          example: POST
        path:
          type:
            - string
            - 'null'
          description: |
            The path that was called, with its query string. Null on a call made
            before paths were kept.
          example: /v1/deliveries
        endpoint:
          type: string
          description: |
            Which operation the call reached, as `controller#action`. This is
            the exact value `?endpoint=` filters by.
          example: api/v1/deliveries#create
        status:
          type: integer
          description: The HTTP status Listo answered with.
          example: 422
        error_code:
          type:
            - string
            - 'null'
          description: The `error.code` of the answer when it was an error, otherwise null.
          example: validation_failed
        duration_ms:
          type:
            - integer
            - 'null'
          description: >-
            How long Listo took to answer, in milliseconds. Null when it was not
            measured.
          example: 118
        request_id:
          type:
            - string
            - 'null'
          description: |
            The call's request id, the value of the `X-Request-Id` response
            header. Quote it when you write to support. Null on a call made
            before request ids were kept.
          example: 0b1f6c9a-7e2d-4c53-9a41-5d8e3f2a6b10
        api_key_prefix:
          type:
            - string
            - 'null'
          description: |
            The first characters of the key that made the call, the same text
            the dashboard's keys page shows, never the secret. Null when no key
            is on record for the call.
          example: lst_test_Ab1
        test:
          type: boolean
          description: True when the call was made with a test key.
        created_at:
          type: string
          format: date-time
          description: When Listo received the call, ISO-8601 in 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: >-
        Your API key, sent as `Authorization: Bearer <key>`. Live and test keys
        are separate; the key you send decides which world the call acts in. To
        try calls, use a test key (it starts with `lst_test_`): no real courier
        is sent and no real money moves, but webhooks fire and the
        `dropoff.phone` you give can receive WhatsApp messages, so use your own
        number. A live key (it starts with `lst_live_`) books and charges real
        deliveries.

````

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