Resources

The client exposes 11 resource groups, each grouping a related set of endpoints:

Resource

What it covers

client.session

login page, login, logout

client.users

profile lookup by username or uid; returns UserProfile

client.usercp

notepad, signature, options, profile, change username/password/email

client.reputation

reputation page, send reputation

client.credits

donate page, stats page, send credits, parse recently-sent transactions

client.messages

PM inbox, conversation, compose, send, tracking, delete

client.notifications

notifications page, alerts, mark alerts read

client.feed

explore feed, home feed, thread-summary extraction

client.threads

view thread, view forum, reply, create thread

client.search

full-text search form + post

client.members

member list, top, statistics, team, groups, vouches, awards, reputation history

Auto-form behavior

Every state-changing call (messages.send, threads.reply, credits.send, usercp.update_*, session.login, reputation.send, …) accepts an optional hidden= mapping (and my_post_key= where relevant). When omitted, the SDK loads the corresponding form page itself, extracts the hidden fields and my_post_key, then submits.

For tight loops where you already have a logged-in page parsed, pass them through to skip the extra round-trip:

inbox = await client.messages.inbox()

for recipient in recipients:
    await client.messages.send(
        to = recipient,
        message = 'hello',
        my_post_key = inbox.my_post_key,
    )

inbox.my_post_key (or extract_my_post_key() on any logged-in page) is reusable across many requests within the same session.

Typed dataclasses

Method

Returns

client.users.get_by_username(name)

UserProfile

client.users.get_by_id(uid)

UserProfile

client.messages.inbox()

Inbox

client.feed.explore()

list[ThreadSummary]

client.feed.home()

list[ThreadSummary]

client.credits.recently_sent()

list[RecentTransaction]

client.reputation.get_page(uid)

ReputationPage

For raw tls_client.response.Response access, every resource keeps a get_*_page() (or get_page_*()) variant. Static extract_* parsers are exposed too if you want to feed your own HTML in.

Raw HTTP escape hatch

client.http exposes the underlying HttpClient. Drop down when an endpoint isn’t covered:

response = await client.http.get('/some-page.php')
print(response.status_code, response.text[:200])

The same retry, error-mapping, and cookie behavior applies.