ApiRequest

The API request log: every write and every failed request made with your keys and sessions (successful reads aren't logged), newest first.

page = noclick.ApiRequest.list_page(method="POST", status="4xx", key="nk_live_ab12")
class ApiRequest

One logged request. actor is key, session or owner; route is the template (/v1/agents/{agent_id}/messages).

Attributes
idstr
actorstr | None
key_idstr | None
user_idstr | None
session_idstr | None
methodstr
routestr
path_paramsdict[str, Any]
statusint | None
error_typestr | None
duration_msint | None
idempotency_replayedbool
operation_idstr | None
request_idstr | None
created_atAny
rawdict[str, Any]

The response JSON exactly as the API sent it.

listclassmethodasync

noclick.ApiRequest.list(
    *, method=None, status=None, error_type=None, key=None, route=None, since=None,
    until=None, limit=None, user_filter=None, user=..., client=None
) -> list[ApiRequest]

Every matching request (or the first limit). status is a class ("4xx") or a code; key a key id or prefix.

Parameters
methodstr | Nonedefault None
statusstr | int | Nonedefault None
error_typestr | Nonedefault None
keystr | Nonedefault None
routestr | Nonedefault None
sinceAnydefault None
untilAnydefault None
limitint | None

Return at most this many.

(default None)
user_filterAny

Which users a read covers: noclick.ALL_USERS, noclick.NO_USER, a User, or your id for one. It filters without acting as that user.

(default None)
userAny

Who the call acts for. Defaults to the user set by noclick.as_user (none: the account itself).

(defaults to the current user)
clientClient | None

The client to send with; defaults to the module client built from NOCLICK_API_KEY.

(default None)
Returns
list[ApiRequest]

Every matching request, newest first, fetched page by page.

Usage

See the writes one key had refused:

for request in noclick.ApiRequest.list(method="POST", status="4xx", key="nk_live_ab12", limit=50):
    print(request.created_at, request.route, request.status, request.error_type)

Or every request a spend cap turned away:

capped = noclick.ApiRequest.list(error_type="spend_cap_exceeded", limit=20)

route takes the template, and status a single code:

limited = noclick.ApiRequest.list(route="/v1/agents/{agent_id}/messages", status=429)

list_pageclassmethodasync

noclick.ApiRequest.list_page(
    *, cursor=None, limit=None, method=None, status=None, error_type=None, key=None,
    route=None, since=None, until=None, user_filter=None, user=..., client=None
) -> Page

One page of matching requests; pass next_cursor back as cursor.

Parameters
cursorstr | None

The next_cursor of the page before; omit it for the first page.

(default None)
limitint | None

Return at most this many.

(default None)
methodstr | Nonedefault None
statusstr | int | Nonedefault None
error_typestr | Nonedefault None
keystr | Nonedefault None
routestr | Nonedefault None
sinceAnydefault None
untilAnydefault None
user_filterAny

Which users a read covers: noclick.ALL_USERS, noclick.NO_USER, a User, or your id for one. It filters without acting as that user.

(default None)
userAny

Who the call acts for. Defaults to the user set by noclick.as_user (none: the account itself).

(defaults to the current user)
clientClient | None

The client to send with; defaults to the module client built from NOCLICK_API_KEY.

(default None)
Returns
Page

A page whose data holds up to limit requests (at most 200) and whose next_cursor is None on the last page.

Usage
page = noclick.ApiRequest.list_page(status="5xx", limit=200)
while True:
    for request in page.data:
        print(request.request_id, request.route, request.status)
    if page.next_cursor is None:
        break
    page = noclick.ApiRequest.list_page(status="5xx", limit=200, cursor=page.next_cursor)