Clickhouse Request Logs Retrieve

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(...)

Authentication

AuthorizationBearer
JWT access token or Respan API key

Path parameters

unique_idstringRequired

Response

idstring
input_wordsstringRead-only
output_wordsstringRead-only
input_charsstringRead-only
output_charsstringRead-only
organization_key_namestringRead-only
organization_idstring
warningsstringRead-only
annotation_statusstringRead-only
keywordsai_paramsstringRead-only
full_requeststringRead-only
full_responsestringRead-only
metadatastringRead-only
toolsstringRead-only
tool_callsstringRead-only
prompt_messagesstringRead-only
completion_messagestringRead-only
unique_organization_idstring
organization_namestring
error_messagestring
completion_messagesany
inputstring
outputstring
variablesany
temperaturedouble
max_tokensinteger
top_pdouble
frequency_penaltydouble
presence_penaltydouble
stopstring
response_formatany
matched_meter_idslist of any
unit_pricesmap from strings to any
component_costsmap from strings to any
custom_identifierstring<=255 characters
group_identifierstring<=120 characters
blurredboolean
start_timedatetime
timestampdatetime
load_balance_group_idstring<=100 characters
prompt_tokensinteger-2147483648-2147483647
completion_tokensinteger-2147483648-2147483647
prompt_cache_hit_tokensinteger-2147483648-2147483647
prompt_cache_creation_tokensinteger-2147483648-2147483647
reasoning_tokensinteger-2147483648-2147483647
total_request_tokensinteger-2147483648-2147483647
is_token_count_estimatedinteger0-255
costdouble
llm_gateway_markup_ratedouble
service_tierstring<=50 characters
model_discountdouble
pricing_tierstring
audio_input_filestring
audio_output_filestring
organization_key_idstring
user_emailstring
modelstring<=100 characters
provider_idstring<=100 characters
categorystring<=60 characters
propertiesstring
cache_bitinteger0-255
cache_miss_bitinteger0-255
cache_keystring<=254 characters
latencydouble
tokens_per_seconddouble
time_to_first_tokendouble
routing_timedouble
statusstring<=100 characters
has_tool_callsboolean
status_codeinteger-32768-32767
log_methodstring<=20 characters
log_typestring<=20 characters
environmentstring<=100 characters
streamboolean
evaluation_identifierstring<=100 characters
customer_identifierstring<=254 characters
customer_emailstring<=254 characters
customer_namestring<=254 characters
customer_user_unique_idstring<=255 characters
used_custom_credentialboolean
deployment_namestring<=254 characters
deployment_idstring<=100 characters
prompt_namestring<=255 characters
prompt_idstring<=100 characters
prompt_version_numberinteger0-65535
system_textstring
prompt_textstring
completion_textstring
prompt_message_countinteger-2147483648-2147483647
completion_message_countinteger-2147483648-2147483647
trace_unique_idstring<=255 characters
span_unique_idstring<=255 characters
span_namestring<=255 characters
span_parent_idstring<=100 characters
span_workflow_namestring<=255 characters
session_identifierstring<=255 characters
trace_group_identifierstring<=255 characters
thread_identifierstring<=255 characters
thread_unique_idstring
storage_object_keystring
period_startdatetime
period_enddatetime
unique_idstring<=60 characters
respan_gateway_request_idstring<=60 characters
full_textstring<=10000 characters