hinge-client
Typed, async Python client for the Hinge dating-app API — auth, recommendations,
profiles, rating, preferences, content, prompts, and Sendbird chat — built on httpx
and pydantic.
⚠️ Unofficial & reverse-engineered. For educational and research purposes only. Not affiliated with, authorized, or endorsed by Hinge / Match Group. Using it may violate Hinge's Terms of Service and can get your account banned. Use at your own risk.
Install
pip install hinge-client
# or
uv add hinge-client
Requires Python 3.14+.
Quickstart
import asyncio
from hinge import HingeClient, configure_logging
configure_logging() # opt-in colored console logs (no-op until you call it)
async def main() -> None:
client = HingeClient("+15555550123")
# --- auth (lifecycle lives on the client) ---
await client.initiate_login() # sends an SMS OTP
await client.submit_otp(input("OTP: "))
# If Hinge requires email 2FA, it raises HingeEmail2FAError carrying the
# case id; complete it with: await client.submit_email_code(code, case_id)
# --- data lives in resource namespaces ---
recs = await client.recommendations.list()
for feed in recs.feeds:
for subject in feed.subjects:
print(subject.subject_id)
me = await client.profile.me()
prefs = await client.profile.preferences()
limit = await client.rating.limit()
# human-readable enum labels, resolved in memory (no DB)
print(client.catalog.enums.label("religions", 6)) # -> "Muslim"
# the prompt library is fetched live and cached in memory
prompts = await client.prompts.fetch()
print(prompts.get_prompt_display_text("5b5799a05b162c2841794201"))
asyncio.run(main())
API at a glance
Client lifecycle (auth & session): initiate_login, submit_otp, submit_email_code,
ensure_fresh_token, is_session_valid, check_session_health, switch_session,
list_sessions, refresh_all_sessions.
Resource namespaces (data):
| Namespace | Examples |
|---|---|
client.recommendations |
list, repeat, standouts, standouts_v3, likes_received, matches, remove |
client.profile |
me, preferences, update, update_preferences, get, get_v2, content, traits, put_photos |
client.rating |
rate, respond, block, limit |
client.content |
settings, update_settings, evaluate_prompt, config, boost_status, store_account |
client.prompts |
fetch |
client.chat |
conversations, messages, send, react, mark_read, unread_count |
Catalog (client.catalog): in-memory enum-label lookup (enums.label/ordinal/is_valid)
plus the live prompt library. Logging: structlog throughout; call
configure_logging(level=..., pretty=...) for the colored console renderer — the library
never configures global logging on import.
Sessions persist to a per-phone JSON file under ./hinge_sessions/ (override with the
HINGE_SESSIONS_DIR env var).
Development
uv sync # install
uv run pre-commit install
make check # ruff + format + ty + leak-canary
make cov # tests with the 100% branch-coverage gate
License
MIT — see LICENSE.md.
Disclaimer
For educational and research purposes only. Don't be a creep. Don't use this for malicious purposes. Not responsible if you get banned, cursed, ghosted into oblivion, or matched with your cousin. If Hinge sends a C&D, they should also send a job offer.
Metadata
Release files for hinge-client 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| hinge_client-0.1.0.tar.gz | 31.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| hinge_client-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 70.7 kB
Release files / hinge_client-0.1.0.tar.gz
| Download URL | hinge_client-0.1.0.tar.gz |
|---|---|
| Size | 31.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0a00aeebf9a4fcb53282cee8e3bdb098937f7d94faa7bd901027bffecc277914
|
|
BLAKE2b-256 checksum How to use checksums |
6d5f399b817edce36e09a9dd8eb0a0acec189e37e8363b398dfa37e2d08fe1dc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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 Jun 30, 2026.
Transparency logRelease files / hinge_client-0.1.0-py3-none-any.whl
| Download URL | hinge_client-0.1.0-py3-none-any.whl |
|---|---|
| Size | 39.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
af2bc0572d4888e1d5d385feeaf59814e2018567aa32c5f721632144477ee394
|
|
BLAKE2b-256 checksum How to use checksums |
f0335513efd60252186f5913715416e22894d6ec9bd8302d46833ca2ddce4443
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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 Jun 30, 2026.
Transparency log