Messages and translation
Send a message
POST /v1/matches/{match_id}/messages
{ "from": "user-123", "text": "Привет! Как прошли выходные?" }
The response is the message as the sender sees it:
{
"id": "…",
"from": "me",
"text": "Привет! Как прошли выходные?",
"translated": false,
"lang": "ru",
"created_at": "2026-10-24T12:00:00Z"
}
Text must be 1 to 4000 characters. Text only: photos and voice messages are not supported in version 0.14.
New members
In their first 7 days in the network, a member can start at most 20 conversations a day. Beyond that, the network returns 429 first_messages_limit. Replying in conversations that have already started is unlimited. Tell the person they can start new conversations tomorrow.
Receive a message
The other person’s platform receives a message.created event once the translation is ready:
{
"id": "evt_…",
"type": "message.created",
"data": {
"match_id": "…",
"to": "john-77",
"message": {
"id": "…",
"from": "6f1c2b4e-…",
"text": "Hi! How was your weekend?",
"text_original": "Привет! Как прошли выходные?",
"translated": true,
"lang": "en",
"created_at": "2026-10-24T12:00:00Z",
"suspicious": false,
"flags": []
}
}
}
How translation works
- The network detects the message language; short replies are matched against the author’s
languages. - If the recipient doesn’t speak it (it’s not in the recipient’s
languages), the network translates it into the recipient’s primary language — the first inlanguages— preserving tone, emoji and style. - The recipient sees the translation, and the original on tap.
Translation runs in the background: message.created goes to the other person once the translation is ready, so the message arrives already translated. If translation fails, the message is still delivered — in the original, with translated: false.
Matches across languages are possible only if both members turned on “open to chatting in other languages”. For those who haven’t, the network doesn’t show people without a shared language.
How to display a translation
- An “AI-translated” label under the message.
- Tap or long press shows the original (
text_original). - Nothing needs to be translated in the input field: the user writes in their own language.
Scam signals
The network checks every message for simple signs of fraud:
| Flag | What it means |
|---|---|
link |
A link early in the conversation |
phone |
A phone number early in the conversation |
messenger |
An invitation to another messenger early in the conversation |
money |
Talk about money |
mass_text |
The same text in several other matches within a day — only together with another flag: identical greeting templates are not flagged |
The message is delivered anyway, with suspicious: true and a list of flags:
"message": { "id": "…", "text": "Text me on Telegram, it's easier", "suspicious": true, "flags": ["messenger"], … }
Show the recipient a warning next to the message. For example: “This person is asking you to move to another messenger. Scammers often do this — don’t send money and don’t open unfamiliar links.” Only messages from the other side carry signals; your user’s own messages never do.
Read receipts
POST /v1/matches/{match_id}/read
{ "as": "user-123", "up_to": "<message id>" }
The member has read the conversation up to and including this message. Take the id from message.created or the history. The response is 204. The other person’s platform receives a message.read event with up_to and read_at and can show “read” to its user.
History
GET /v1/matches/{match_id}/messages?as=user-123&limit=50
Newest first. The other person’s messages are in the language of as, with the original and scam signals. Your user’s own messages carry read_at once the other person has read them. For older messages, pass before=<id of the oldest message>.
History is for recovery after a failure or for new devices. The network retains ordinary messages for up to 90 days from sending; store the full history on your side based on events. If an erased chat has a report, a separate hidden moderation copy is retained for 90 days from erasure; it is not user-accessible history.