Testing
Version and availability
The documentation pins the 1.0.0 release contract, not a confirmed production deployment. First check GET /v1/capabilities with the target environment’s key. Do not enable a feature solely because it appears in OpenAPI. A 404 means the capabilities contract is not supported yet; a missing response does not enable features. /readyz checks only the database; capabilities describe configuration, not external service health. Test translation and photo checks separately; do not send clips when videos: false.
Test environment
Every platform has two environments in the dashboard: test and live. Each has its own API key, signing secret, webhook URL and statistics. The API URL is the same — https://api.pereval.dating; the key decides the environment.
Test profiles are visible only to other test platforms and the network sandbox. They never reach real people, so debug freely. A test webhook URL may also be http://, e.g. a tunnel.
Sandbox
The test environment comes with sandbox profiles — “Песочница Перевала” in the partner field. They live in Moscow, St Petersburg, Kazan, Yekaterinburg and Novosibirsk, speak Russian or English, male and female. They behave like real people, only faster — within a couple of seconds:
- like a sandbox profile — it likes you back, you get
match.created; - message it — it replies, you get
message.created; if the languages differ, the reply is translated; - send a new profile in one of these cities — two sandbox profiles nearby like it, you get
like.received.
So you can test the whole flow without a second app of your own:
- Issue a test key and set your webhook URL.
- Click “Send a test event” in the dashboard — a
pingwith a valid signature should arrive. - Send a profile in one of the sandbox cities — two
like.receivedarrive. - Get the feed — it shows sandbox profiles.
- Like one —
match.createdarrives. - Message a Russian-speaking profile in English — check the translation and
message.created. - Delete the chat for one side, delete the pair, block, delete the profile — check
match.erasedandmatch.closed(withpeer_deleted).
The dashboard shows a log of recent events and an API request chart: you see what arrived and what went to retry.
Local webhook development
The network must be able to reach your handler. For local development, use a tunnel (ngrok, cloudflared, tuna) and set its URL as the webhook URL of your test environment.
You can also do without a tunnel: leave the webhook URL empty and pull events yourself with GET /v1/events — see Events and webhooks.
Pre-launch checklist
- The API key is stored only on the server.
- Webhook signatures are verified against the raw body; an invalid signature returns
401. - A repeated event with the same
iddoesn’t duplicate anything. - The network participation toggle is off by default, with a link to pereval.dating next to it.
- Consents are shown with their texts; time and version are saved.
- Turning off participation sends the profile with
consent.network: false; erasing data from the network and deleting an account callDELETE /v1/members/{id}right away (ordeactivateif you give time to restore). - Cards show when a profile comes from the Pereval network. Translated text has an “AI-translated” label and a way to see the original.
- In a swipe app, a skip without a like goes to
POST /v1/dislikes. On a search site, the page followscursor, and a dislike is only an explicit rejection. - Messages with
suspicious: trueare shown with a warning. -
409 location_change_limitedand429 first_messages_limitare explained to the user in plain words. - Blocking and reporting work for network profiles too.
- Photos have no EXIF location data.
Optional services
Test network services with a test spending account: quotes/orders, order and action replays, missing/expired entitlements, incognito before/during a boost and integration restart. TEST SKUs use the -test suffix; rewind-day-test and incognito-day-test use days. Test prices are arbitrary. An administrator provisions credits and the separate key; the dashboard does not do this yet. Live checkout uses separate zero-price RUB SKUs, not TEST credits.