Understanding an unofficial API

What "unofficial API" means

Tinder's iOS, Android and web apps all get their data from the same server: api.gotinder.com. The contract between the apps and that server is an API, but it was never opened up to outsiders:

  • There is no documentation. Everything known comes from developers who watched the traffic and took notes.
  • There is no versioning guarantee. An endpoint can be removed or change shape without a day's notice.
  • There is no access program. There are no API keys, OAuth apps or developer portal. The only credential is a normal user session.

These three facts frame the rest of the book. Every statement here means "this was observed at a given time in a given client".

A short history

PeriodWhat happenedEffect
2014A widely shared gist published the first comprehensive endpoint list.It became the common ancestor of almost every later project.
2014–2017The first libraries appeared (pynder, tinderjs, tinder_pro). Login used a Facebook token.πŸ”΄ Most libraries from this era no longer work.
2018An updated community reference documented the /v2/... endpoints and SMS login.It became the most cited endpoint table.
2019–2020Facebook Account Kit shut down. Tinder moved to its own phone OTP flow (/v2/auth/sms/...) and added CAPTCHA (Arkose Labs).Automated login got harder. The community moved to copying the token from the browser.
2021–2023An async Python client, a Java wrapper and the first OpenAPI schema appeared.The API got its first machine-readable description.
2024–2026Login moved to protobuf over /v3/auth/login. The first MCP server was published.The app API stayed largely JSON. The login layer is what changed.

Architecture overview

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   HTTPS + JSON     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Client            β”‚ ─────────────────▢ β”‚ api.gotinder.com        β”‚
β”‚  (app / web /      β”‚  X-Auth-Token      β”‚  /v2/profile, /v2/recs, β”‚
β”‚   library)         β”‚ ◀───────────────── β”‚  /like, /v2/matches …   β”‚
β”‚                    β”‚                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚                    β”‚   HTTPS + protobuf β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    β”‚ ─────────────────▢ β”‚ /v3/auth/login          β”‚
β”‚                    β”‚  (login flow)      β”‚  SMS, email, CAPTCHA    β”‚
β”‚                    β”‚                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚                    β”‚   WebSocket        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    β”‚ ◀════════════════▢ β”‚ keepalive.gotinder.com  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  (new messages…)   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

There are three separate layers:

  1. The app API (REST + JSON). Profile, recommendations, likes, matches and messages. Most of this book is about this layer.
  2. The authentication gateway (protobuf). Phone login, OTP, email verification and CAPTCHA. Covered in chapter 2.
  3. The real-time channel (WebSocket). Notifications for new messages and matches. Covered in chapter 7.

Versioning

Tinder's paths follow no consistent versioning scheme:

PrefixExampleStatus
(none)/like/{id}, /pass/{id}, /user/matches/{id}, /boost🟒 They look old but are still used by 2026 clients
/v1//v1/activity/feedπŸ”΄ Rare
/v2//v2/profile, /v2/recs/core, /v2/matches, /v2/meta🟒 The main app API
/v3//v3/auth/login🟒 Login only

Rule of thumb: if a /v2 version exists, use it. Unprefixed paths are still the primary route only for single-purpose actions such as liking, passing, sending a message and boosting.

How each fact is checked

For every endpoint this book asks three questions:

  1. Who documented it?
  2. Which client code actually calls it?
  3. When was it last seen?

An endpoint that only appears in documentation, and in no current client code, is marked 🟑 or πŸ”΄.