JuicyChat Client
Unofficial Python client for JuicyChat. It handles login, encrypted request/response payloads, and provides a CLI for interactive chat, character search, user discovery, personas, and tasks.
Features
- Authentication — Login with user number and password
- Characters — Search characters by term, tags, gender, and sort order; get character details
- Chat — Send messages and stream replies; list, clear, and delete chat history
- Users — Search users, view profiles, follow/unfollow
- Creator Rankings — Browse ranked creators (monthly, all-time, new creators)
- Personas — Create personas and attach them to character chats
- Tasks — View task list, check progress, claim task rewards
- Content Filter — Toggle NSFW content filter
- Crypto — AES-encrypted API payloads; key/IV from env or auto-discovered from the site bundle
- Bundle Discovery — Extract crypto keys, app version, and API endpoints from the site JS bundle
Requirements
- Python 3.11+
cryptography,python-dotenv,requests(seepyproject.toml)
Installation
pip install juicychat-client
Configuration
Credentials and crypto can be set via environment variables or a .env file.
| Variable | Description |
|---|---|
JUICYCHAT_USERNUMBER |
Account user number |
JUICYCHAT_PASSWORD |
Account password |
JUICYCHAT_KEY |
16-byte AES key (UTF-8) for request/response encryption |
JUICYCHAT_IV |
16-byte AES IV (UTF-8) |
If JUICYCHAT_KEY and JUICYCHAT_IV are not set, the client will fetch the site's JS bundle and extract the current key/IV automatically. For stability, setting them in .env is recommended once you have them.
Usage
CLI
Run the interactive menu (login uses env or prompts for user number/password):
juicychat
# or
python -m juicychat.cli
Menu options (available options depend on whether a conversation is selected):
- Select Conversation — Pick from existing chat relations
- Continue Conversation — View history and send messages in the selected chat
- Clear Conversation — Clear message history for the selected chat
- Delete Conversation — Remove the selected chat relation
- Character Detail — View details for the selected character
- Search Characters — Search and select a character
- Get Task List — View available tasks
- Create Persona — Create a new persona (title, name, description, gender, age)
- User Info — View current user details
- Toggle Content Filter — Toggle the NSFW content filter on/off
- Search Users — Search for users and view their profiles
Library
import os
from dotenv import load_dotenv
from juicychat.client import JuicyChatClient, Gender, SortName
load_dotenv()
client = JuicyChatClient(
user_number=os.getenv("JUICYCHAT_USERNUMBER"),
password=os.getenv("JUICYCHAT_PASSWORD"),
key=os.getenv("JUICYCHAT_KEY"),
iv=os.getenv("JUICYCHAT_IV"),
)
info = client.get_user_info()
characters = client.search_characters("elf", gender=Gender.FEMALE, sort_name=SortName.POPULAR)
relations = client.get_chat_relations()
reply = client.send_chat_message(character_id="...", message="Hello")
Client Methods
User
get_user_info()— Current user detailsget_other_user_info(user_id)— Another user's profileget_user_coins()— Coin balanceget_user_progress()— Task/level progressget_user_checkin_prompt()— Daily check-in promptget_user_claim_coupon()— Claim available couponupdate_content_filter(allow_nsfw)— Toggle NSFW content filter
Characters
search_characters(search_content, character_tags, gender, sort_name, page_no, page_size)— Search charactersget_character_list_and_config(...)— Characters with site configget_character_detail(character_id)— Full character details
Chat
get_chat_relations(page_no, page_size)— List chat relationsget_chat_config(character_id)— Chat configuration for a characterget_chat_messages(character_id, chat_id)— Message historysend_chat_message(character_id, message, request_type)— Send message and get streamed replyclear_chat_history(character_id)— Clear chat messagesdelete_chat_relation(character_id)— Remove a chat relation
Personas
get_personas(page_no, page_size)— List personascreate_persona(title, name, description, gender, age)— Create a personaset_persona(character_id, persona_id)— Attach a persona to a chat
Tasks
get_tasks()— List available tasksget_task_progress(task_id)— Progress for a specific taskclaim_task_reward(task_id)— Claim a task reward
Social
search_users(search_content, page_no, page_size)— Search usersfollow_user(user_id)/unfollow_user(user_id)— Follow or unfollow a userget_ranked_creators(ranking_type, page_no, page_size)— Creator leaderboard
Other
get_launch_data()— App launch/config data
Enums
SortName—EDITOR_CHOICE,FOLLOWING,NEW,POPULAR,RECENT,TRENDINGGender—ALL,FEMALE,MALE,NON_BINARY,TRANS_MALE,TRANS_FEMALETaskId—DAILY_CHECK_IN,SEND_10_MESSAGES,CHAT_3_CHARACTERS,DAILY_FOLLOWING,GENERATE_IMAGERankingType—ALL_CREATORS_MONTHLY,NEW_CREATORS_MONTHLY,ALL_CREATORS_ALL_TIME,NEW_CREATORS_ALL_TIME
Standalone Tools
Bundle discovery — extract crypto keys, app version, and API endpoints:
python -m juicychat.discover
Decrypt response data — decrypt an encrypted API response from a file or stdin:
python -m juicychat.crypto response.txt
# or
echo "..." | python -m juicychat.crypto
Notes
- Unofficial — This project is not affiliated with JuicyChat. The API may change; key/IV discovery depends on the current web bundle.
- Credentials — Store user number, password, and key/IV securely.
Release files for juicychat-client 0.2.26
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| juicychat_client-0.2.26.tar.gz | 16.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| juicychat_client-0.2.26-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 31.5 kB
Release files / juicychat_client-0.2.26.tar.gz
| Download URL | juicychat_client-0.2.26.tar.gz |
|---|---|
| Size | 16.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b6779be3972cb7817e0d6c0bb6957d36efc71ea75f08f77d201c51795dae7045
|
|
BLAKE2b-256 checksum How to use checksums |
252a67a96f90ffaa858f362fd77bbc0394678c31057f1eeb9c264ef9b7970510
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 20, 2026.
Transparency logRelease files / juicychat_client-0.2.26-py3-none-any.whl
| Download URL | juicychat_client-0.2.26-py3-none-any.whl |
|---|---|
| Size | 15.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
50dbb36c185e981291141bf26f42aa99f64461eb9ef5b65587bb90926180ffed
|
|
BLAKE2b-256 checksum How to use checksums |
fc26b7f6d5c73cd7831e499c71d497b6302e469583dbdc390cf94e146767ab55
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 20, 2026.
Transparency log