Skip to content

Users

Resource

UsersResource

Operations on user accounts.

Source code in src/assured/resources/users.py
class UsersResource:
    """Operations on user accounts."""

    def __init__(self, client: AssuredClient) -> None:
        self._client = client

    async def list(self, params: UserListParams | None = None, **kwargs: Any) -> list[User]:
        """Return a single page of users."""
        raw_params = params.model_dump(exclude_none=False) if params else {}
        raw_params.update(kwargs)
        data = await self._client._get_page(_PATH, params=raw_params)
        return [User.model_validate(item) for item in data.get("results", [])]

    async def list_all(self, params: UserListParams | None = None, **kwargs: Any) -> list[User]:
        """Auto-paginate and return *all* users."""
        raw_params = params.model_dump(exclude_none=False) if params else {}
        raw_params.update(kwargs)
        records = await self._client._get_all_pages(_PATH, params=raw_params)
        return [User.model_validate(item) for item in records]

    async def list_df(self, params: UserListParams | None = None, **kwargs: Any) -> pd.DataFrame:
        """Return all users as a DataFrame."""
        raw_params = params.model_dump(exclude_none=False) if params else {}
        raw_params.update(kwargs)
        records = await self._client._get_all_pages(_PATH, params=raw_params)
        return self._client.to_dataframe(records)

    async def login(self, email: str, password: str, remember: bool = True) -> str:
        """Programmatic login to acquire a short-lived session JWT.

        The Assured API natively relies on static long-lived API keys for integrations,
        but some undocumented and browser-specific endpoints (like the SSN update endpoint)
        strictly demand Bearer JWT authorization.

        This dynamically trades a user email and password for the active JWT access token.

        Returns:
            The raw JWT access string.
        """
        payload = {
            "email": email,
            "password": password,
            "remember": remember,
        }
        resp = await self._client._post("/api/v1/users/login/", json=payload)

        try:
            return resp["data"]["jwt"]["access"]
        except KeyError as e:
            from assured.exceptions import AssuredAPIError

            raise AssuredAPIError(
                500, f"Unexpected login response payload format: missing {e}", url="/api/v1/users/login/"
            ) from e

    async def password_reset(self, email: str) -> dict[str, Any]:
        """Trigger a password reset email for a given user or provider.

        Args:
            email: The email address to send the password reset link to.

        Returns:
            The raw JSON response from the server (typically empty on 200 OK).
        """
        return await self._client._post("/api/v1/users/password-reset/", json={"email": email})

list(params=None, **kwargs) async

Return a single page of users.

Source code in src/assured/resources/users.py
async def list(self, params: UserListParams | None = None, **kwargs: Any) -> list[User]:
    """Return a single page of users."""
    raw_params = params.model_dump(exclude_none=False) if params else {}
    raw_params.update(kwargs)
    data = await self._client._get_page(_PATH, params=raw_params)
    return [User.model_validate(item) for item in data.get("results", [])]

list_all(params=None, **kwargs) async

Auto-paginate and return all users.

Source code in src/assured/resources/users.py
async def list_all(self, params: UserListParams | None = None, **kwargs: Any) -> list[User]:
    """Auto-paginate and return *all* users."""
    raw_params = params.model_dump(exclude_none=False) if params else {}
    raw_params.update(kwargs)
    records = await self._client._get_all_pages(_PATH, params=raw_params)
    return [User.model_validate(item) for item in records]

list_df(params=None, **kwargs) async

Return all users as a DataFrame.

Source code in src/assured/resources/users.py
async def list_df(self, params: UserListParams | None = None, **kwargs: Any) -> pd.DataFrame:
    """Return all users as a DataFrame."""
    raw_params = params.model_dump(exclude_none=False) if params else {}
    raw_params.update(kwargs)
    records = await self._client._get_all_pages(_PATH, params=raw_params)
    return self._client.to_dataframe(records)

login(email, password, remember=True) async

Programmatic login to acquire a short-lived session JWT.

The Assured API natively relies on static long-lived API keys for integrations, but some undocumented and browser-specific endpoints (like the SSN update endpoint) strictly demand Bearer JWT authorization.

This dynamically trades a user email and password for the active JWT access token.

Returns:

Type Description
str

The raw JWT access string.

Source code in src/assured/resources/users.py
async def login(self, email: str, password: str, remember: bool = True) -> str:
    """Programmatic login to acquire a short-lived session JWT.

    The Assured API natively relies on static long-lived API keys for integrations,
    but some undocumented and browser-specific endpoints (like the SSN update endpoint)
    strictly demand Bearer JWT authorization.

    This dynamically trades a user email and password for the active JWT access token.

    Returns:
        The raw JWT access string.
    """
    payload = {
        "email": email,
        "password": password,
        "remember": remember,
    }
    resp = await self._client._post("/api/v1/users/login/", json=payload)

    try:
        return resp["data"]["jwt"]["access"]
    except KeyError as e:
        from assured.exceptions import AssuredAPIError

        raise AssuredAPIError(
            500, f"Unexpected login response payload format: missing {e}", url="/api/v1/users/login/"
        ) from e

password_reset(email) async

Trigger a password reset email for a given user or provider.

Parameters:

Name Type Description Default
email str

The email address to send the password reset link to.

required

Returns:

Type Description
dict[str, Any]

The raw JSON response from the server (typically empty on 200 OK).

Source code in src/assured/resources/users.py
async def password_reset(self, email: str) -> dict[str, Any]:
    """Trigger a password reset email for a given user or provider.

    Args:
        email: The email address to send the password reset link to.

    Returns:
        The raw JSON response from the server (typically empty on 200 OK).
    """
    return await self._client._post("/api/v1/users/password-reset/", json={"email": email})

Models

User

Bases: BaseModel

A user account on the Assured platform.

Source code in src/assured/models/users.py
class User(BaseModel):
    """A user account on the Assured platform."""

    id: str | None = None
    email: str | None = None
    first_name: str | None = None
    last_name: str | None = None
    name: str | None = None
    is_active: bool | None = None
    user_type: str | None = None
    date_joined: datetime | None = None
    email_verified_at: datetime | None = None
    invited_at: datetime | None = None
    activated_at: datetime | None = None
    deactivated_at: datetime | None = None
    source_of_joining: str | None = None
    client: str | None = None
    client_name: str | None = None

UserListParams

Bases: BaseModel

Query parameters for the users list endpoint.

Source code in src/assured/models/users.py
class UserListParams(BaseModel):
    """Query parameters for the users list endpoint."""

    is_active: bool | None = None
    limit: int | None = None
    offset: int | None = None
    ordering: str | None = None
    provider_profile__ready_for_credentialing: bool | None = None
    search: str | None = None
    user_type: str | None = None
    users_deactivated: bool | None = None
    users_invited: bool | None = None