---
title: "Api Request Logs List List"
method: GET
path: "/api/request-logs/list/"
tags: ["logs"]
---

# Api Request Logs List List

`GET /api/request-logs/list/`

Mixin for views that need superadmin access to all resources.

Provides FOUR key features (all bundled - no separate mixins needed):
1. Queryset routing (superadmin sees all, regular user sees own org)
2. Organization injection (post/patch/put auto-inject org)
3. Object ownership checking (auto-registers ObjectOwnershipPermission)
4. Superadmin-only field protection (certain fields can only be modified by superadmins)

Inherits from:
- ObjectOwnershipMixin: Config attributes + auto-permission registration
- OrganizationInjectionMixin: Cross-org write protection + org injection

Config attributes (inherited from ObjectOwnershipMixin):
- ownership_object_field_name: Field on object (default: "organization_id")
- ownership_user_field_name: Field on user (default: "curr_org_id")
- is_allowing_global_object_read: Allow reading global objects (default: False)
- is_allowing_org_admin_access: Allow org admins access to any object in their org (default: False)
- is_requiring_org_admin_for_write: Require org admin for writes (default: False)

Config attributes (superadmin-only fields):
- superadmin_only_fields: List of field names that only superadmins can modify (default: [])
  On CREATE: Fields are stripped from non-superadmin requests (model defaults apply)
  On UPDATE: Non-superadmins trying to change these fields get PermissionDenied

- superadmin_lock_field: Field name that locks the entire object for non-superadmins (default: None)
  When this field is truthy on the instance, non-superadmins cannot modify ANY field.
  Common use case: is_managed=True means Keywords AI manages this resource, users can't edit it.

Note: Writing to global objects (ownership field is None) always requires superadmin.

Usage (detail view):

    class MyDetailView(SuperAdminMixin, JWTAndAPIKeyAuthenticationViewMixin, RetrieveUpdateDestroyAPIView):
        # Optional: customize ownership config (inherited from ObjectOwnershipMixin)
        is_allowing_global_object_read = True

        def get_regular_user_queryset(self):
            return MyModel.objects.filter(organization_id=self.request.user.curr_org_id)

        def get_superadmin_queryset(self):
            return MyModel.objects.all()

Usage (superadmin-only fields):

    class IntegrationView(SuperAdminMixin, JWTAndAPIKeyAuthenticationViewMixin, RetrieveUpdateDestroyAPIView):
        superadmin_only_fields = ['is_managed']  # Only superadmins can modify is_managed
        superadmin_lock_field = 'is_managed'  # When is_managed=True, object is locked for non-superadmins

        def get_regular_user_queryset(self):
            return Integration.objects.filter(organization_id=self.request.user.curr_org_id)

        def get_superadmin_queryset(self):
            return Integration.objects.all()

Usage (related-object org pattern like PromptVersion - PREFERRED: annotate queryset):

    from django.db.models import F

    class PromptVersionView(SuperAdminMixin, JWTAndAPIKeyAuthenticationViewMixin, RetrieveUpdateDestroyAPIView):
        def get_regular_user_queryset(self):
            # Annotate organization_id so ownership checks work automatically
            return PromptVersion.objects.filter(
                prompt__organization_id=self.request.user.curr_org_id
            ).annotate(organization_id=F("prompt__organization_id"))

        def get_superadmin_queryset(self):
            return PromptVersion.objects.annotate(organization_id=F("prompt__organization_id"))

Alternative (override method - only if annotation not possible):

    class PromptVersionView(SuperAdminMixin, JWTAndAPIKeyAuthenticationViewMixin, RetrieveUpdateDestroyAPIView):
        def get_affiliated_object_organization_id(self, instance):
            return instance.prompt.organization_id  # Org is on parent object

DO NOT use inline checks like this:
    # ❌ BAD - easy to forget in branching code
    def get_queryset(self):
        if has_staff_role(self.request.user):
            return MyModel.objects.all()
        return MyModel.objects.filter(...)

## Query parameters

- `page` integer
- `page_size` integer

## Headers

- `Authorization` string, required

## Response `200`

- PaginatedPublicCHLogV2DetailList
  - `count` integer, required
  - `next` string, uri, nullable
  - `previous` string, uri, nullable
  - `total_count` integer
  - `current_filters` FilterParamDictPydantic — Pydantic model for FilterParamDict. A dictionary that maps metric names to their filter parameters. Each key is a metric name (str), and each value can be: - A single MetricFilterParamPydantic (one condition) - A List[MetricFilterParamPydantic] (multiple conditions for same metric) - A FilterBundlePydantic (nested filter bundle with connector) Note: Uses extra="allow" for dynamic metric name fields. The __pydantic_extra__ annotation tells Pydantic what types to expect for extra fields, and generates typed additionalProperties in JSON Schema.
  - `filters_data` PaginatedPublicChLogV2DetailListFiltersData
  - `results` PublicCHLogV2Detail[], required
    - `id` string, required
    - `organization_key_name` string, required
    - `organization_id` string
    - `unique_organization_id` string
    - `error_message` string
    - `warnings` string, required
    - `status_in_eval_set` string, required
    - `full_request` string, required
    - `full_response` string, required
    - `metadata` string, required
    - `scores` string, required
    - `tools` string, required
    - `tool_calls` string, required
    - `prompt_messages` string, required
    - `completion_message` string, required
    - `completion_messages` unknown
    - `input` string
    - `output` string
    - `variables` unknown
    - `temperature` number, double
    - `max_tokens` integer
    - `top_p` number, double
    - `frequency_penalty` number, double
    - `presence_penalty` number, double
    - `stop` string
    - `response_format` unknown
    - `matched_meter_ids` unknown[]
      - unknown
    - `unit_prices` object
    - `component_costs` object
    - `custom_identifier` string
    - `group_identifier` string
    - `blurred` boolean
    - `start_time` string, date-time
    - `timestamp` string, date-time
    - `load_balance_group_id` string
    - `prompt_tokens` integer
    - `completion_tokens` integer
    - `prompt_cache_hit_tokens` integer
    - `prompt_cache_creation_tokens` integer
    - `reasoning_tokens` integer
    - `total_request_tokens` integer
    - `cost` number, double
    - `llm_gateway_markup_rate` number, double
    - `service_tier` string
    - `model_discount` number, double
    - `pricing_tier` string
    - `audio_input_file` string
    - `audio_output_file` string
    - `organization_key_id` string
    - `user_email` string
    - `model` string
    - `provider_id` string
    - `category` string
    - `properties` string
    - `cache_bit` integer
    - `cache_miss_bit` integer
    - `cache_key` string
    - `latency` number, double
    - `tokens_per_second` number, double
    - `time_to_first_token` number, double
    - `routing_time` number, double
    - `status` string
    - `has_tool_calls` boolean
    - `status_code` integer
    - `log_method` string
    - `log_type` string
    - `environment` string
    - `stream` boolean
    - `evaluation_identifier` string
    - `customer_identifier` string
    - `customer_email` string
    - `customer_name` string
    - `customer_user_unique_id` string
    - `used_custom_credential` boolean
    - `deployment_name` string
    - `deployment_id` string
    - `prompt_name` string
    - `prompt_id` string
    - `prompt_version_number` integer
    - `system_text` string
    - `prompt_text` string
    - `completion_text` string
    - `prompt_message_count` integer
    - `completion_message_count` integer
    - `trace_unique_id` string
    - `span_unique_id` string
    - `span_name` string
    - `span_parent_id` string
    - `span_workflow_name` string
    - `session_identifier` string
    - `span_links` string
    - `trace_group_identifier` string
    - `thread_identifier` string
    - `thread_unique_id` string
    - `storage_object_key` string
    - `period_start` string, date-time
    - `period_end` string, date-time
    - `unique_id` string
    - `respan_gateway_request_id` string
    - `full_text` string

---

[API](https://skmtc.net/keywordsai/apis/api-reference.md) · [All operations](https://skmtc.net/keywordsai/apis/api-reference/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/keywordsai/api-reference/versions/c26d550029f8/schema)
