Skip to content

keys

keys

Per-user API key resolution with encryption at rest.

Users can configure their own API keys via the account settings panel. Keys are encrypted with Fernet before storing in the database. Only admin accounts fall back to global system keys.

resolve_user_keys async

resolve_user_keys(user_id: str) -> dict[str, str | None]

Resolve effective API keys for a user.

Checks the database for the user's personal API keys. For admin and guest accounts, falls back to the global system keys configured via environment variables. Regular users must configure their own keys.

Parameters:

Name Type Description Default
user_id str

The user's UUID.

required

Returns:

Type Description
dict[str, str | None]

Dict with keys 'deepseek', 'tavily', 'scrapingant'. Values are

dict[str, str | None]

the API key strings or None if not configured.

save_user_keys async

save_user_keys(user_id: str, keys: dict[str, str]) -> None

Save personal API keys for a user (partial update).

Only keys present in the dict are updated; others are left unchanged.

Parameters:

Name Type Description Default
user_id str

The user's UUID.

required
keys dict[str, str]

Dict with one or more of 'deepseek', 'tavily', 'scrapingant'.

required

clear_user_keys async

clear_user_keys(user_id: str) -> None

Remove all personal API keys for a user, reverting to system keys.

Parameters:

Name Type Description Default
user_id str

The user's UUID.

required

get_user_key_status async

get_user_key_status(user_id: str) -> dict[str, str]

Return the key status for a user (redacted).

Parameters:

Name Type Description Default
user_id str

The user's UUID.

required

Returns:

Type Description
dict[str, str]

Dict with keys 'deepseek', 'tavily', 'scrapingant' and values

dict[str, str]

'personal', 'system', or 'none'.