BokaMera.API.Host

<back to all web services

SuperAdminAssistantUsageQuery

Requires Authentication
Requires the role:superadmin
The following routes are available for this service:
GET/superadmin/assistant/usageList AI assistant and MCP token usage per companyReturns, for a page of companies, how many tokens each has consumed in the current rolling window against its configured limit — separately for the admin AI assistant and for the public MCP server. Usage is read from the rolling-window store, so only the current window is available; there is no history. Ordering is by company name, because usage is not stored in a queryable form and cannot be sorted across pages.
Imports System
Imports System.IO
Imports System.Collections
Imports System.Collections.Generic
Imports System.Runtime.Serialization
Imports ServiceStack
Imports ServiceStack.DataAnnotations
Imports BokaMera.API.ServiceModel.Dtos

Namespace Global

    Namespace BokaMera.API.ServiceModel.Dtos

        Public Partial Class AssistantUsageMeter
            '''<Summary>
            '''Tokens consumed within the current rolling window.
            '''</Summary>
            <ApiMember(Description:="Tokens consumed within the current rolling window.")>
            Public Overridable Property TokensUsed As Long

            '''<Summary>
            '''The company's token limit for the window. Zero or less means no cap is applied.
            '''</Summary>
            <ApiMember(Description:="The company's token limit for the window. Zero or less means no cap is applied.")>
            Public Overridable Property TokenLimit As Integer

            '''<Summary>
            '''Tokens remaining before the limit is reached (never negative).
            '''</Summary>
            <ApiMember(Description:="Tokens remaining before the limit is reached (never negative).")>
            Public Overridable Property TokensRemaining As Long

            '''<Summary>
            '''Share of the limit consumed, as a percentage. Zero when no cap is applied.
            '''</Summary>
            <ApiMember(Description:="Share of the limit consumed, as a percentage. Zero when no cap is applied.")>
            Public Overridable Property PercentUsed As Double

            '''<Summary>
            '''True while the company is still below its token limit.
            '''</Summary>
            <ApiMember(Description:="True while the company is still below its token limit.")>
            Public Overridable Property IsWithinBudget As Boolean
        End Class

        Public Partial Class SuperAdminAssistantUsage
            '''<Summary>
            '''The company the usage applies to.
            '''</Summary>
            <ApiMember(Description:="The company the usage applies to.")>
            Public Overridable Property CompanyId As Guid

            '''<Summary>
            '''The company's name.
            '''</Summary>
            <ApiMember(Description:="The company's name.")>
            Public Overridable Property CompanyName As String

            '''<Summary>
            '''Token budget for the admin portal AI assistant. Null when it could not be read.
            '''</Summary>
            <ApiMember(Description:="Token budget for the admin portal AI assistant. Null when it could not be read.")>
            Public Overridable Property AiChat As AssistantUsageMeter

            '''<Summary>
            '''Token budget for the public MCP server. Null when it could not be read.
            '''</Summary>
            <ApiMember(Description:="Token budget for the public MCP server. Null when it could not be read.")>
            Public Overridable Property Mcp As AssistantUsageMeter
        End Class

        <ApiResponse(Description:="You were unauthorized to call this service", StatusCode:=401)>
        <ApiResponse(Description:="You have too low privileges to call this service", StatusCode:=403)>
        <ValidateRequest(Validator:="IsAuthenticated")>
        Public Partial Class SuperAdminAssistantUsageQuery
            '''<Summary>
            '''Filter on company name. Case-insensitive substring match.
            '''</Summary>
            <ApiMember(DataType:="string", Description:="Filter on company name. Case-insensitive substring match.", ParameterType:="query")>
            Public Overridable Property Search As String

            '''<Summary>
            '''Return only this company. Takes precedence over Search when both are set.
            '''</Summary>
            <ApiMember(DataType:="string", Description:="Return only this company. Takes precedence over Search when both are set.", ParameterType:="query")>
            Public Overridable Property CompanyId As Guid?

            '''<Summary>
            '''Number of companies to skip.
            '''</Summary>
            <ApiMember(DataType:="integer", Description:="Number of companies to skip.", ParameterType:="query")>
            Public Overridable Property Skip As Integer?

            '''<Summary>
            '''Number of companies to return. Capped server-side.
            '''</Summary>
            <ApiMember(DataType:="integer", Description:="Number of companies to return. Capped server-side.", ParameterType:="query")>
            Public Overridable Property Take As Integer?
        End Class

        Public Partial Class SuperAdminAssistantUsageQueryResponse
            '''<Summary>
            '''Number of companies skipped.
            '''</Summary>
            <ApiMember(Description:="Number of companies skipped.")>
            Public Overridable Property Offset As Integer

            '''<Summary>
            '''Total number of companies matching the filter.
            '''</Summary>
            <ApiMember(Description:="Total number of companies matching the filter.")>
            Public Overridable Property Total As Integer

            '''<Summary>
            '''Length of the rolling usage window, in days.
            '''</Summary>
            <ApiMember(Description:="Length of the rolling usage window, in days.")>
            Public Overridable Property WindowDays As Integer

            '''<Summary>
            '''Usage for the requested page of companies.
            '''</Summary>
            <ApiMember(Description:="Usage for the requested page of companies.")>
            Public Overridable Property Results As List(Of SuperAdminAssistantUsage) = New List(Of SuperAdminAssistantUsage)

            Public Overridable Property ResponseStatus As ResponseStatus
        End Class
    End Namespace
End Namespace

VB.NET SuperAdminAssistantUsageQuery DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .json suffix or ?format=json

To embed the response in a jsonp callback, append ?callback=myCallback

HTTP + JSON

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

GET /superadmin/assistant/usage HTTP/1.1 
Host: testapi.bokamera.se 
Accept: application/json
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: length

{"Offset":0,"Total":0,"WindowDays":0,"Results":[{"CompanyName":"String","AiChat":{"TokensUsed":0,"TokenLimit":0,"TokensRemaining":0,"PercentUsed":0,"IsWithinBudget":false},"Mcp":{"TokensUsed":0,"TokenLimit":0,"TokensRemaining":0,"PercentUsed":0,"IsWithinBudget":false}}],"ResponseStatus":{"ErrorCode":"String","Message":"String","StackTrace":"String","Errors":[{"ErrorCode":"String","FieldName":"String","Message":"String","Meta":{"String":"String"}}],"Meta":{"String":"String"}}}