{"openapi":"3.1.0","servers":[{"url":"./"}],"info":{"title":"Smartloop Platform API","version":"1.0.0","description":"Effortless fine-tuning platform"},"paths":{"/v1/auth/jwt/login":{"post":{"tags":["auth"],"summary":"Log in with email and password","description":"OAuth2 password flow: `username` is the account email. Returns an access token and a refresh token.","requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"}},"required":["username","password"]}}}},"responses":{"200":{"description":"Signed in","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenPair"}}}},"400":{"description":"LOGIN_BAD_CREDENTIALS: wrong password, unknown email or inactive account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/jwt/logout":{"post":{"tags":["auth"],"summary":"Log out","description":"Tokens are stateless, so this only checks the caller is signed in; clients discard their tokens.","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"responses":{"204":{"description":"Logged out"},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/auth/jwt/refresh":{"post":{"tags":["auth"],"summary":"Exchange a refresh token for a new token pair","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"refresh_token":{"type":"string"}},"required":["refresh_token"]}}}},"responses":{"200":{"description":"New token pair","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenPair"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/register":{"post":{"tags":["auth"],"summary":"Create an account","description":"Sends a verification email. With a valid `invite_code` for the same email the account is verified and premium immediately.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"password":{"type":"string"},"name":{"type":"string"},"is_premium":{"type":["boolean","null"],"default":false},"invite_code":{"type":["string","null"],"default":null}},"required":["email","password","name"]}}}},"responses":{"200":{"description":"The new account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRead"}}}},"400":{"description":"User already exists, the password is too weak, or the invite code is invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/request-verify-token":{"post":{"tags":["auth"],"summary":"Resend the verification email","description":"Always 202, whether or not the address has an account, so it cannot be used to probe for accounts.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"}},"required":["email"]}}}},"responses":{"202":{"description":"Accepted"},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/verify":{"post":{"tags":["auth"],"summary":"Verify an email address with the emailed token","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"]}}}},"responses":{"200":{"description":"The verified account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRead"}}}},"400":{"description":"VERIFY_USER_BAD_TOKEN or VERIFY_USER_ALREADY_VERIFIED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/forgot-password":{"post":{"tags":["auth"],"summary":"Email a password reset link","description":"Always 202, whether or not the address has an account.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"}},"required":["email"]}}}},"responses":{"202":{"description":"Accepted"},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/reset-password":{"post":{"tags":["auth"],"summary":"Set a new password with the emailed reset token","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string"},"password":{"type":"string"}},"required":["token","password"]}}}},"responses":{"200":{"description":"Password changed","content":{"application/json":{"schema":{"type":"null"}}}},"400":{"description":"RESET_PASSWORD_BAD_TOKEN, or RESET_PASSWORD_INVALID_PASSWORD with a `reason`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/google/authorize":{"get":{"tags":["auth"],"summary":"Start Google sign-in (web)","description":"Returns the Google consent URL. Google redirects back to the web app, which calls /v1/auth/google/callback.","parameters":[{"schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"required":false,"name":"scopes","in":"query"}],"responses":{"200":{"description":"Consent URL","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthorizationURL"}}}}}}},"/v1/auth/google/callback":{"get":{"tags":["auth"],"summary":"Finish Google sign-in (web)","description":"Creates the account on first sign-in, or links it to an existing account with the same email.","parameters":[{"schema":{"type":"string"},"required":true,"name":"code","in":"query"},{"schema":{"type":"string"},"required":true,"name":"state","in":"query"},{"schema":{"type":"string"},"required":false,"name":"error","in":"query"}],"responses":{"200":{"description":"Signed in","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenPair"}}}},"400":{"description":"OAUTH_NOT_AVAILABLE_EMAIL, an invalid state, or LOGIN_BAD_CREDENTIALS","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/google/desktop/authorize":{"get":{"tags":["auth"],"summary":"Start Google sign-in from Smartloop Studio","description":"Redirects to Google. `port` is the local Studio service's port; it travels in a signed state that expires in 10 minutes.","parameters":[{"schema":{"type":["integer","null"],"example":51234},"required":false,"name":"port","in":"query"}],"responses":{"307":{"description":"Redirect to Google"},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/google/desktop/exchange":{"post":{"tags":["auth"],"summary":"Exchange a Google desktop code for tokens","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"state":{"type":"string"}},"required":["code","state"]}}}},"responses":{"200":{"description":"Signed in","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenPair"}}}},"400":{"description":"Invalid or expired desktop sign-in state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/google/desktop/callback":{"get":{"tags":["auth"],"summary":"Google desktop redirect target","description":"Browser page that hands the tokens to Studio on localhost, or explains why sign-in did not complete.","parameters":[{"schema":{"type":"string"},"required":false,"name":"code","in":"query"},{"schema":{"type":"string"},"required":false,"name":"state","in":"query"},{"schema":{"type":"string"},"required":false,"name":"error","in":"query"}],"responses":{"200":{"description":"Hand-off page","content":{"text/html":{"schema":{"type":"string"}}}},"400":{"description":"Sign-in cancelled or failed","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/v1/auth/github/authorize":{"get":{"tags":["auth"],"summary":"Start GitHub sign-in (web)","description":"Returns the GitHub consent URL. GitHub redirects back to the web app, which calls /v1/auth/github/callback.","parameters":[{"schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"required":false,"name":"scopes","in":"query"}],"responses":{"200":{"description":"Consent URL","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthorizationURL"}}}}}}},"/v1/auth/github/callback":{"get":{"tags":["auth"],"summary":"Finish GitHub sign-in (web)","description":"Creates the account on first sign-in, or links it to an existing account with the same email.","parameters":[{"schema":{"type":"string"},"required":true,"name":"code","in":"query"},{"schema":{"type":"string"},"required":true,"name":"state","in":"query"},{"schema":{"type":"string"},"required":false,"name":"error","in":"query"}],"responses":{"200":{"description":"Signed in","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenPair"}}}},"400":{"description":"OAUTH_NOT_AVAILABLE_EMAIL, an invalid state, or LOGIN_BAD_CREDENTIALS","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/apple/authorize":{"get":{"tags":["auth"],"summary":"Start Sign in with Apple (web)","responses":{"200":{"description":"Consent URL","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthorizationURL"}}}}}}},"/v1/auth/apple/callback":{"post":{"tags":["auth"],"summary":"Sign in with Apple redirect target","description":"Apple posts here (form_post). Answers with a page that hands the tokens to the web app, or to Studio when the state carries a desktop port.","requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"code":{"type":"string"},"id_token":{"type":"string"},"state":{"type":"string"},"user":{"type":"string"}},"required":["code"]}}}},"responses":{"200":{"description":"Hand-off page","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/apple/desktop/authorize":{"get":{"tags":["auth"],"summary":"Start Sign in with Apple from Smartloop Studio","parameters":[{"schema":{"type":["integer","null"],"example":51234},"required":false,"name":"port","in":"query"}],"responses":{"307":{"description":"Redirect to Apple"},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/otp/request":{"post":{"tags":["auth"],"summary":"Email a 6-digit sign-in code","description":"Sign-in only: never creates an account. Codes last 10 minutes; a new one can be requested after 30 seconds. Errors carry `detail.code`: OTP_INVALID_EMAIL (422), OTP_NO_ACCOUNT (404), OTP_ACCOUNT_INACTIVE (403), OTP_RATE_LIMITED (429), OTP_SEND_FAILED (502).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]}}}},"responses":{"200":{"description":"Code sent","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OTPSent"}}}},"403":{"description":"OTP_ACCOUNT_INACTIVE","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"OTP_NO_ACCOUNT","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"OTP_INVALID_EMAIL, or a malformed body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"OTP_RATE_LIMITED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"OTP_SEND_FAILED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/auth/otp/verify":{"post":{"tags":["auth"],"summary":"Sign in with an emailed code","description":"Codes are single use; after 5 wrong attempts the code is burned. Verifies the email on success. Errors carry `detail.code`: OTP_INVALID, OTP_EXPIRED, OTP_TOO_MANY_ATTEMPTS (400), OTP_NO_ACCOUNT (404), OTP_ACCOUNT_INACTIVE (403).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string"},"code":{"type":"string"}},"required":["email","code"]}}}},"responses":{"200":{"description":"Signed in","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenPair"}}}},"400":{"description":"OTP_INVALID, OTP_EXPIRED or OTP_TOO_MANY_ATTEMPTS","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"OTP_ACCOUNT_INACTIVE","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"OTP_NO_ACCOUNT","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/users/me":{"get":{"tags":["users"],"summary":"GET /v1/users/me","parameters":[],"responses":{"200":{"description":"Successful Response"}}},"delete":{"tags":["users"],"summary":"DELETE /v1/users/me","parameters":[],"responses":{"200":{"description":"Successful Response"}}},"patch":{"tags":["users"],"summary":"PATCH /v1/users/me","parameters":[],"responses":{"200":{"description":"Successful Response"}}}},"/v1/users/{id}":{"get":{"tags":["users"],"summary":"GET /v1/users/{id}","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful Response"}}},"patch":{"tags":["users"],"summary":"PATCH /v1/users/{id}","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful Response"}}},"delete":{"tags":["users"],"summary":"DELETE /v1/users/{id}","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful Response"}}}},"/v1/unsubscribe":{"get":{"tags":["unsubscribe"],"summary":"GET /v1/unsubscribe","parameters":[],"responses":{"200":{"description":"Successful Response"}}},"post":{"tags":["unsubscribe"],"summary":"POST /v1/unsubscribe","parameters":[],"responses":{"200":{"description":"Successful Response"}}}},"/v1/users/me/tokens":{"get":{"tags":["tokens"],"summary":"GET /v1/users/me/tokens","parameters":[],"responses":{"200":{"description":"Successful Response"}}},"post":{"tags":["tokens"],"summary":"POST /v1/users/me/tokens","parameters":[],"responses":{"200":{"description":"Successful Response"}}}},"/v1/users/{user_id}/tokens":{"get":{"tags":["tokens"],"summary":"GET /v1/users/{user_id}/tokens","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful Response"}}}},"/v1/users/me/tokens/{token_id}":{"delete":{"tags":["tokens"],"summary":"DELETE /v1/users/me/tokens/{token_id}","parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful Response"}}}},"/v1/invites":{"get":{"tags":["invites"],"summary":"GET /v1/invites","parameters":[],"responses":{"200":{"description":"Successful Response"}}},"post":{"tags":["invites"],"summary":"POST /v1/invites","parameters":[],"responses":{"200":{"description":"Successful Response"}}}},"/v1/invites/{invite_id}":{"get":{"tags":["invites"],"summary":"GET /v1/invites/{invite_id}","parameters":[{"name":"invite_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful Response"}}},"delete":{"tags":["invites"],"summary":"DELETE /v1/invites/{invite_id}","parameters":[{"name":"invite_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful Response"}}}},"/v1/mcp-catalog":{"get":{"tags":["mcp-catalog"],"summary":"GET /v1/mcp-catalog","parameters":[],"responses":{"200":{"description":"Successful Response"}}}},"/v1/models":{"get":{"tags":["models"],"summary":"GET /v1/models","parameters":[],"responses":{"200":{"description":"Successful Response"}}}},"/v1/models/{name}":{"get":{"tags":["models"],"summary":"GET /v1/models/{name}","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful Response"}}}},"/v1/models/{name}/download":{"get":{"tags":["models"],"summary":"GET /v1/models/{name}/download","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful Response"}}}},"/v1/bootstrap/models":{"get":{"tags":["bootstrap"],"summary":"GET /v1/bootstrap/models","parameters":[],"responses":{"200":{"description":"Successful Response"}}}},"/v1/websearch/status":{"get":{"tags":["websearch"],"summary":"GET /v1/websearch/status","parameters":[],"responses":{"200":{"description":"Successful Response"}}}},"/v1/websearch":{"get":{"tags":["websearch"],"summary":"GET /v1/websearch","parameters":[],"responses":{"200":{"description":"Successful Response"}}}},"/v1/chat/session":{"post":{"tags":["chat"],"summary":"POST /v1/chat/session","parameters":[],"responses":{"200":{"description":"Successful Response"}}}},"/v1/chat/sessions/sweep":{"post":{"tags":["chat"],"summary":"POST /v1/chat/sessions/sweep","parameters":[],"responses":{"200":{"description":"Successful Response"}}}},"/v1/chat/quota":{"get":{"tags":["chat"],"summary":"GET /v1/chat/quota","parameters":[],"responses":{"200":{"description":"Successful Response"}}}},"/v1/chat/status":{"get":{"tags":["chat"],"summary":"GET /v1/chat/status","parameters":[],"responses":{"200":{"description":"Successful Response"}}}},"/v1/chat/ledger":{"get":{"tags":["chat"],"summary":"GET /v1/chat/ledger","parameters":[],"responses":{"200":{"description":"Successful Response"}}}},"/v1/usage/tokens":{"post":{"tags":["usage"],"summary":"POST /v1/usage/tokens","parameters":[],"responses":{"200":{"description":"Successful Response"}}},"get":{"tags":["usage"],"summary":"GET /v1/usage/tokens","parameters":[],"responses":{"200":{"description":"Successful Response"}}}},"/v1/logs/access":{"get":{"tags":["logs"],"summary":"GET /v1/logs/access","parameters":[],"responses":{"200":{"description":"Successful Response"}}}},"/v1/contact":{"post":{"tags":["contact"],"summary":"POST /v1/contact","parameters":[],"responses":{"200":{"description":"Successful Response"}}}},"/v1/releases/download/{platform}":{"get":{"tags":["releases"],"summary":"GET /v1/releases/download/{platform}","parameters":[{"name":"platform","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful Response"}}}},"/v1/releases/latest":{"get":{"tags":["releases"],"summary":"GET /v1/releases/latest","parameters":[],"responses":{"200":{"description":"Successful Response"}}}},"/v1/releases/{version}":{"get":{"tags":["releases"],"summary":"GET /v1/releases/{version}","parameters":[{"name":"version","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful Response"}}}},"/v1/payments/create-checkout-session":{"post":{"tags":["payments"],"summary":"POST /v1/payments/create-checkout-session","parameters":[],"responses":{"200":{"description":"Successful Response"}}}},"/v1/payments/plans":{"get":{"tags":["payments"],"summary":"GET /v1/payments/plans","parameters":[],"responses":{"200":{"description":"Successful Response"}}}},"/v1/payments/webhook":{"post":{"tags":["payments"],"summary":"POST /v1/payments/webhook","parameters":[],"responses":{"200":{"description":"Successful Response"}}}},"/v1/payments/subscription":{"get":{"tags":["payments"],"summary":"GET /v1/payments/subscription","parameters":[],"responses":{"200":{"description":"Successful Response"}}}},"/v1/payments/apple/verify":{"post":{"tags":["payments"],"summary":"POST /v1/payments/apple/verify","parameters":[],"responses":{"200":{"description":"Successful Response"}}}},"/v1/payments/apple/notifications":{"post":{"tags":["payments"],"summary":"POST /v1/payments/apple/notifications","parameters":[],"responses":{"200":{"description":"Successful Response"}}}},"/":{"get":{"tags":["root"],"summary":"GET /","parameters":[],"responses":{"200":{"description":"Successful Response"}}}},"/health":{"get":{"tags":["system"],"summary":"GET /health","parameters":[],"responses":{"200":{"description":"Successful Response"}}}}},"components":{"schemas":{"TokenPair":{"type":"object","properties":{"access_token":{"type":"string"},"refresh_token":{"type":"string"},"token_type":{"type":"string","enum":["bearer"]}},"required":["access_token","refresh_token","token_type"]},"ErrorResponse":{"type":"object","properties":{"detail":{"anyOf":[{"type":"string"},{"type":"object","additionalProperties":{}}],"description":"A code such as LOGIN_BAD_CREDENTIALS, or an object with `code` and `message`/`reason`."}},"required":["detail"]},"HTTPValidationError":{"type":"object","properties":{"detail":{"type":"array","items":{"type":"object","properties":{"loc":{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"number"}]}},"msg":{"type":"string"},"type":{"type":"string"}},"required":["loc","msg","type"]}}},"required":["detail"]},"UserRead":{"type":"object","properties":{"id":{"type":"string","example":"671b9cafb05654c242d58f0e"},"email":{"type":"string","format":"email"},"is_active":{"type":"boolean"},"is_superuser":{"type":"boolean"},"is_verified":{"type":"boolean"},"name":{"type":["string","null"]},"notify":{"type":"boolean"},"is_premium":{"type":"boolean"},"is_paid":{"type":"boolean"},"plan":{"type":"string","example":"free"},"number_of_tokens_processed":{"type":"integer"},"capabilities":{"type":"array","items":{"type":"string"}},"subscription_id":{"type":["string","null"]},"subscription_status":{"type":["string","null"]},"subscription_cancel_at_period_end":{"type":"boolean"},"plan_id":{"type":["string","null"]},"subscription_current_period_end":{"type":["string","null"],"format":"date-time"},"default_temperature":{"type":"number"},"default_memory":{"type":"boolean"},"onboarded":{"type":"boolean"}},"required":["id","email","is_active","is_superuser","is_verified","name","notify","is_premium","is_paid","plan","number_of_tokens_processed","capabilities","subscription_id","subscription_status","subscription_cancel_at_period_end","plan_id","subscription_current_period_end","default_temperature","default_memory","onboarded"]},"OTPSent":{"type":"object","properties":{"sent":{"type":"boolean","enum":[true]},"expires_in_minutes":{"type":"integer"}},"required":["sent","expires_in_minutes"]},"AuthorizationURL":{"type":"object","properties":{"authorization_url":{"type":"string","format":"uri"}},"required":["authorization_url"]}},"securitySchemes":{"OAuth2PasswordBearer":{"type":"oauth2","flows":{"password":{"scopes":{},"tokenUrl":"v1/auth/jwt/login"}}},"APIKeyHeader":{"type":"apiKey","in":"header","name":"x-api-key"}}}}