---
title: "List API requests"
description: "The request log: every request your API keys made (reads and writes) and every write made in the dashboard, newest first."
canonical_url: "https://twominutebilling.com/help/developers/api-reference/organization/list-api-requests"
---
# List API requests

> The request log: every request your API keys made (reads and writes) and every write made in the dashboard, newest first.

<api-operation method="GET" path="/v1/request_logs">
<template v-slot:docs="">

Secrets are masked before a request is stored, and response bodies are kept for writes and errors only. A request with an invalid key or an unknown path is not logged. A test key sees test requests only; a live key, live requests only. Reads are kept 30 days, writes 90 days. Requires the developer permission in the dashboard.

## Query parameters

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Required
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        limit
      </code>
    </td>
    
    <td>
      <code>
        integer
      </code>
    </td>
    
    <td>
      no
    </td>
    
    <td>
      Maximum number of requests to return (1–1000, default 50).
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        starting_after
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      no
    </td>
    
    <td>
      Cursor from the previous page's <code>
        next_cursor
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        offset
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      no
    </td>
    
    <td>
      Same token as <code>
        starting_after
      </code>
      
      , under the name <code>
        next_offset
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        q
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      no
    </td>
    
    <td>
      A request id (<code>
        req_…
      </code>
      
      ) matches that request. Other text matches the path, route, idempotency key or trace id.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        api_key
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      no
    </td>
    
    <td>
      Only requests made with this API key (<code>
        key_…
      </code>
      
      ).
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        business
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      no
    </td>
    
    <td>
      Only requests to this business (<code>
        biz_…
      </code>
      
      ).
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        customer
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      no
    </td>
    
    <td>
      Only requests that name this customer (<code>
        cus_…
      </code>
      
      ).
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        trace_id
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      no
    </td>
    
    <td>
      Only requests with this trace id.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        idempotency_key
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      no
    </td>
    
    <td>
      Only requests sent with this <code>
        Idempotency-Key
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        created_at[on_or_after]
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      no
    </td>
    
    <td>
      Filter on the time the request arrived (UTC days or unix seconds); every date operator applies.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        status[gte]
      </code>
    </td>
    
    <td>
      <code>
        integer
      </code>
    </td>
    
    <td>
      no
    </td>
    
    <td>
      Filter on the HTTP status, e.g. <code>
        status[gte]=400&status[lt]=500
      </code>
      
      ; every number operator applies.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        duration_ms[gte]
      </code>
    </td>
    
    <td>
      <code>
        integer
      </code>
    </td>
    
    <td>
      no
    </td>
    
    <td>
      Filter on the duration in milliseconds; every number operator applies.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        method[is]
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      no
    </td>
    
    <td>
      Filter on the HTTP method.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        kind[is]
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      no
    </td>
    
    <td>
      <code>
        read
      </code>
      
       or <code>
        write
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        source[is]
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      no
    </td>
    
    <td>
      <code>
        api
      </code>
      
       (an API key) or <code>
        dashboard
      </code>
      
       (a team member, writes only).
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        livemode[is]
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      no
    </td>
    
    <td>
      <code>
        test
      </code>
      
       or <code>
        live
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        path[contains]
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      no
    </td>
    
    <td>
      Filter on the request path; every text operator applies.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        route[is]
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      no
    </td>
    
    <td>
      Filter on the route pattern, e.g. <code>
        /v1/businesses/:biz/customers
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        error_type[is]
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      no
    </td>
    
    <td>
      Filter on <code>
        error.type
      </code>
      
       of the error answer.
    </td>
  </tr>
</tbody>
</table>

## Response

<table>
<thead>
  <tr>
    <th>
      Field
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        object
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      The object type; always <code>
        list
      </code>
      
      . One of <code>
        list
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        data
      </code>
    </td>
    
    <td>
      <code>
        array of object
      </code>
    </td>
    
    <td>
      The rows on this page.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        data.object
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      The object type; always <code>
        request_log
      </code>
      
      . One of <code>
        request_log
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        data.id
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      <code>
        req_…
      </code>
      
      ; the <code>
        Request-Id
      </code>
      
       header of the response.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        data.created_at
      </code>
    </td>
    
    <td>
      <code>
        string · ISO-8601
      </code>
    </td>
    
    <td>
      When the request log was created (ISO-8601 UTC).
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        data.method
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      The method.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        data.path
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      Without the query string.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        data.route
      </code>
    </td>
    
    <td>
      `string
    </td>
    
    <td>
      null`
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        data.query
      </code>
    </td>
    
    <td>
      `string
    </td>
    
    <td>
      null`
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        data.api_version
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      The request log's api version. One of <code>
        v1
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        data.kind
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      The request log's kind. One of <code>
        read
      </code>
      
      , <code>
        write
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        data.status
      </code>
    </td>
    
    <td>
      `integer
    </td>
    
    <td>
      null`
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        data.duration_ms
      </code>
    </td>
    
    <td>
      `integer
    </td>
    
    <td>
      null`
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        data.source
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      Where the request log comes from. One of <code>
        api
      </code>
      
      , <code>
        dashboard
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        data.api_key
      </code>
    </td>
    
    <td>
      `object
    </td>
    
    <td>
      null`
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        data.member
      </code>
    </td>
    
    <td>
      `object
    </td>
    
    <td>
      null`
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        data.business
      </code>
    </td>
    
    <td>
      `string
    </td>
    
    <td>
      null`
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        data.livemode
      </code>
    </td>
    
    <td>
      `string
    </td>
    
    <td>
      null`
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        data.idempotency_key
      </code>
    </td>
    
    <td>
      `string
    </td>
    
    <td>
      null`
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        data.idempotency_outcome
      </code>
    </td>
    
    <td>
      `string
    </td>
    
    <td>
      null`
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        data.error_type
      </code>
    </td>
    
    <td>
      `string
    </td>
    
    <td>
      null`
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        data.trace_id
      </code>
    </td>
    
    <td>
      `string
    </td>
    
    <td>
      null`
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        data.customer
      </code>
    </td>
    
    <td>
      `string
    </td>
    
    <td>
      null`
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        data.ip
      </code>
    </td>
    
    <td>
      `string
    </td>
    
    <td>
      null`
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        data.user_agent
      </code>
    </td>
    
    <td>
      `string
    </td>
    
    <td>
      null`
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        has_more
      </code>
    </td>
    
    <td>
      <code>
        boolean
      </code>
    </td>
    
    <td>
      Whether more rows exist after this page.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        next_cursor
      </code>
    </td>
    
    <td>
      `string
    </td>
    
    <td>
      null`
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        total
      </code>
    </td>
    
    <td>
      `integer
    </td>
    
    <td>
      null`
    </td>
  </tr>
</tbody>
</table>

## Status codes

<table>
<thead>
  <tr>
    <th>
      Status
    </th>
    
    <th>
      Meaning
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        200
      </code>
    </td>
    
    <td>
      A page of requests (no bodies)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        400
      </code>
    </td>
    
    <td>
      Unknown filter or invalid value
    </td>
  </tr>
</tbody>
</table>
</template>

<template v-slot:request="">

```bash [Request]
curl "$TMBILLING_URL/v1/request_logs?limit=10" \
  -H "Authorization: Bearer $TMBILLING_API_KEY"
```

</template>

<template v-slot:response="">
<code-group>

```json [200 OK]
{
  "object": "list",
  "data": [
    {
      "object": "request_log",
      "id": "req_XXXXXXXXXXXX01",
      "created_at": "2026-03-14T09:30:00Z",
      "method": "POST",
      "path": "Path",
      "route": "Route"
    }
  ],
  "has_more": false,
  "next_cursor": "eyJvZmZzZXQiOjEwfQ",
  "total": 2900
}
```

```json [400 Bad Request]
{
  "error": {
    "type": "invalid_request_error",
    "message": "Unknown filter or invalid value"
  }
}
```

</code-group>
</template>
</api-operation>


## Sitemap

See the full [sitemap](https://twominutebilling.com/sitemap.md) for all pages.
