The project's README from github.com/littledivy/mimic. As one markdown file: README.md.
Intercept any app, then call it from Python like a library.
from hinge_client import Hinge
acc = Hinge() # reuses your captured session
recs = acc.get_recommendations()
acc.like(subject_id, comment="hi lol")
You don't write hinge_client.py. mimic captures your own app traffic and an AI
generates the client from it.
Most apps authenticate every request with the same bundle of values: a bearer token, some device ids, a session id, cookies. They're stable across calls. Capture them once from a real request you made, and you can replay them on new requests to the same API.
capture traffic -> extract auth -> generate client
(mitmproxy) (mimic.Session) (claude reads the
captured endpoints)
The generated client is plain Python on top of mimic.App, and you edit it like
any other file. It gives you named methods, body templates, and the multi-step
call chaining mobile APIs tend to need (fetch a token in one call, spend it in
the next).
sh install.sh
Installs uv if you don't have it, then mimic in an
isolated tool env. mitmproxy isn't a separate install; mimic launches it via
uvx on first record. (Manual: uv tool install mimic-client.)
mimic doctor # confirm proxy + claude are ready
mimic record # starts the proxy, prints the iPhone steps
record fills in your Mac's LAN IP and walks you through it:
<your-mac-ip>:8080http://mitm.it -> install the Apple profileThen:
mimic hosts # list captured hosts; pick your API host
mimic learn prod-api.hingeaws.net # see the endpoints mimic saw
mimic gen prod-api.hingeaws.net # generate hinge_client.py
Then from hinge_client import Hinge; Hinge().get_recommendations().
Three ways to build a session by hand, if you don't want codegen:
from mimic import Session
Session.from_mitm("prod-api.hingeaws.net") # pull auth from mitmweb
Session.from_curl(open("copied.txt").read()) # paste "Copy as cURL" from devtools
Session(base_url="https://x.com", headers={...}) # explicit
.get(path), .post(path, json=...), and the other common HTTP verb helpers
return parsed JSON and raise requests.HTTPError for failed responses. If your
token rotates, a 401 on an idempotent request triggers one re-pull from
mitmweb and a retry. Non-idempotent requests are not retried unless you explicitly
pass refresh=True.
uvx, so there's nothing extra to install.Copy as cURL in devtools,
then Session.from_curl(text). No proxy, no cert.mimic hosts --har traffic.har and
mimic gen api.example.com --har traffic.har, or build a session directly with
Session.from_har("traffic.har", "api.example.com"). No proxy, no cert.Two auth schemes get in the way, for different reasons:
mimic hosts. This
blocks capture, not replay — get past the pin and the rest works normally.
mimic unpin <ipa|bundle-id> sets up a Frida-based bypass; see
docs/pinning.md.If mimic hosts shows the app's API host, you're good.
Use it on your own accounts and data. It replays your session; it is not a tool for accessing anyone else's. Respect each app's terms of service.
MIT, see LICENSE. Provided as-is, no warranty. Use on your own accounts and data; you are responsible for complying with each app's terms.