How the network works

Who is who

Term What it is
Platform A dating app, website or bot connected to the network. In the API, a platform is called partner
Environment Each platform has two: test and live. Each has its own API key, signing secret and webhook URL. The test environment sees only other test platforms and the sandbox
Member A platform’s user who turned on “show me in the network”. The platform knows them by their external_id; the network, by their network_id
Feed Profiles of members from other platforms who are a good fit for your user
Like, dislike, match A like means “I like them”; a dislike means “saw them and didn’t like”. A mutual like creates a match and opens chat
Event A notification from the network to your server: a like arrived, a match was created, a new message, a message was read. It arrives as a webhook, or you pull it yourself with GET /v1/events

How data flows

Anna uses your app, and John has an account on another platform. They meet through their own apps. The platform servers call the Pereval network API.

  1. Profiles. Anna and John opt in to the network. Each platform’s server sends its user’s profile with PUT /v1/members/{external_id}.
  2. Feed. Anna opens her feed. Your server calls GET /v1/members/{external_id}/feed for Anna. If John meets the feed criteria, the network returns his profile.
  3. Like. Anna likes John. Your server calls POST /v1/likes, and the network delivers a like.received event to John’s platform server.
  4. Match. John likes Anna back. His server calls POST /v1/likes. The network creates a match and delivers a match.created event to both servers.
  5. Message. Anna writes to John. Your server calls POST /v1/matches/{match_id}/messages. The network delivers the message to John’s platform server in a message.created event and adds a translation when needed.

Who the feed shows

A person appears in your user’s feed if all of the following are true:

  • they are of the opposite gender;
  • each person’s age is within the other’s range;
  • they are within 50 km or the viewer’s radius_km filter (or in the same city and country if there are no coordinates) — in the Worldwide feed distance doesn’t matter, but both turned Worldwide on;
  • they share a language, or both agreed to chat in other languages;
  • they share an intent;
  • they were active in the last 30 days;
  • your user has not liked them and has not disliked them in the last 30 days, and neither has blocked the other.

Recently active people come first. The network does not return your own users in the feed: you show them yourself, as before.

Pages are returned with a next_cursor. Repeating the same request returns the same people. A member gets at most 200 distinct people a day: showing them again does not spend the limit. Details are in Feed, likes, matches. Which request to send from a swipe app, a search site and a bot is in the starts.

Translation

Each member has a primary language — the first one in languages. The member speaks every language in languages, and the network never translates from them. If a text — a profile bio or a message — is in a language the reader doesn’t speak, the network translates it into the reader’s primary language and returns the original alongside it:

  • in the feed and profiles — bio, bio_original, bio_translated;
  • in messages — text, text_original, translated.

Translation runs in the background. A bio is translated into the languages of the people reading it: when a reader with a new primary language appears, they get the original on first view, and the translation is prepared for their next feeds. A message is delivered to the other person once its translation is ready.

The network detects the language of the text itself. Short replies (“ok”, “hi!”) can’t be detected reliably, so the language is picked among the author’s languages — keep them accurate, primary first.

Show an “AI-translated” label and let the user see the original. If translation fails, the message is still delivered — in the original, with translated: false.

Since version 0.5 the network translates into 38 languages: ru, en, uk, be, kk, de, fr, es, it, pt, nl, pl, cs, sk, ro, hu, bg, sr, hr, el, tr, sv, da, fi, he, ar, fa, hi, ja, ko, zh, vi, th, id, ka, hy, az, uz. GET /v1/languages returns the list. Other languages may be listed in languages — the person speaks them, but there is no translation into them.

What the network stores and what it doesn’t

Stores Does not store
The member’s profile, while they are in the network Email, phone number, documents
The time and version of the consent text Exact coordinates — rounds them to ~1 km
Likes and matches
Messages within matches — up to 90 days from sending
Events — 7 days, dislikes — 30 days

When a member is removed from the live network database, their profile, likes, dislikes and blocks are erased; the other person’s conversation history remains without the name and photos. If an erased chat has a report, a moderation copy is retained in the live database for 90 days from erasure. Separately, reports and personal photo-check materials, including unresolved disputes, are kept for up to 60 days in the live database from original report submission or check creation, then up to 30 days in closed backups. Appeals, updates and decisions do not extend the period. Deleting materials does not approve photos or lift a block; seek review before the 60-day deadline. Turned-off participation is not removal: the person is hidden and their chats go on. All retention periods, separate backup retention and platform obligations are in the network rules.

Reliability

  • Each change and its events are written together — an event is not lost even if your server was unavailable.
  • Undelivered webhooks are retried for up to 3 days. You can also pull what you missed: GET /v1/events returns events from the last 7 days.
  • All write requests are idempotent wherever possible: a repeated profile PUT, a repeated like and a repeated block break nothing.

Unclear? Ask a developer

Read the reply and continue the conversation on this site using the private link you receive after sending. Incoming email is not accepted.