Admin surface — /api/v1/admin/*.
Requires an admin credential: a msk_a_* / msk_p_* API key or an admin
JWT. Calls from a user-role credential return {:error, %Miosa.Error{status: 403}}.
For endpoints not covered by the typed helpers below, use request/5
which accepts an arbitrary method + path.
Example
client = Miosa.client("msk_a_...")
{:ok, _} = Miosa.Admin.grant_credits(client, "tenant-uuid", 1000, "goodwill")
{:ok, users} = Miosa.Admin.list_users(client, limit: 50, status: "active")
{:ok, _} = Miosa.Admin.change_tenant_plan(client, "tenant-uuid", "pro")
Summary
Functions
Read the platform audit log.
Create an API key on behalf of a tenant/user.
List API keys across tenants.
List all computers across tenants.
List users.
Call any admin endpoint directly.
Types
@type result() :: {:ok, map()} | {:error, Miosa.Error.t()}
Functions
@spec api_key_stats(Miosa.Client.t()) :: result()
@spec audit_log( Miosa.Client.t(), keyword() ) :: result()
Read the platform audit log.
Options: :limit, :cursor.
@spec ban_user(Miosa.Client.t(), String.t(), String.t(), keyword()) :: result()
@spec billing_summary(Miosa.Client.t()) :: result()
@spec bulk_revoke_api_keys(Miosa.Client.t(), [String.t()]) :: result()
@spec bulk_user_action(Miosa.Client.t(), [String.t()], String.t(), keyword()) :: result()
@spec change_tenant_plan(Miosa.Client.t(), String.t(), String.t(), keyword()) :: result()
@spec change_user_role(Miosa.Client.t(), String.t(), String.t()) :: result()
@spec create_api_key( Miosa.Client.t(), keyword() ) :: result()
Create an API key on behalf of a tenant/user.
Required options: :name, :tenant_id, :user_id.
Optional: :key_type (default "user"), :purpose (default "api"),
:rate_limit_rpm, :expires_at, :allowed_ips.
@spec dashboard(Miosa.Client.t()) :: result()
@spec deduct_credits(Miosa.Client.t(), String.t(), integer(), String.t()) :: result()
@spec delete_computer(Miosa.Client.t(), String.t()) :: result()
@spec delete_tenant(Miosa.Client.t(), String.t()) :: result()
@spec delete_user(Miosa.Client.t(), String.t()) :: result()
@spec detailed_health(Miosa.Client.t()) :: result()
@spec force_logout(Miosa.Client.t(), String.t()) :: result()
@spec get_user(Miosa.Client.t(), String.t()) :: result()
@spec list_api_keys( Miosa.Client.t(), keyword() ) :: result()
List API keys across tenants.
Options: :limit, :cursor, :tenant_id, :status ("active" | "revoked" | "expired").
@spec list_computers( Miosa.Client.t(), keyword() ) :: result()
List all computers across tenants.
Options: :limit, :cursor, :status, :tenant_id.
@spec list_optimal_models(Miosa.Client.t()) :: result()
@spec list_tenants( Miosa.Client.t(), keyword() ) :: result()
@spec list_users( Miosa.Client.t(), keyword() ) :: result()
List users.
Options: :limit, :cursor, :q, :status ("active" | "suspended" | "deleted").
@spec optimal_status(Miosa.Client.t()) :: result()
@spec purge_stale_computers(Miosa.Client.t()) :: result()
Call any admin endpoint directly.
method is one of :get, :post, :put, :patch, :delete.
path is relative to /api/v1 and should include the /admin prefix.
@spec restart_computer(Miosa.Client.t(), String.t()) :: result()
@spec resume_computer(Miosa.Client.t(), String.t()) :: result()
@spec revoke_api_key(Miosa.Client.t(), String.t()) :: result()
@spec stats(Miosa.Client.t()) :: result()
@spec suspend_computer(Miosa.Client.t(), String.t()) :: result()
@spec suspend_tenant(Miosa.Client.t(), String.t(), keyword()) :: result()
@spec suspend_user(Miosa.Client.t(), String.t(), keyword()) :: result()
@spec switch_optimal_model(Miosa.Client.t(), String.t()) :: result()
@spec tenant_balance(Miosa.Client.t(), String.t()) :: result()
@spec tenant_credit_history(Miosa.Client.t(), String.t(), keyword()) :: result()
@spec tenant_detail(Miosa.Client.t(), String.t()) :: result()
@spec unban_user(Miosa.Client.t(), String.t()) :: result()
@spec unsuspend_tenant(Miosa.Client.t(), String.t()) :: result()
@spec unsuspend_user(Miosa.Client.t(), String.t()) :: result()
@spec update_user(Miosa.Client.t(), String.t(), map()) :: result()