Partner API
src/main/integrations/partner-api/ — цільові контракти партнерських API для Golden, Chathouse, Prime й Udate.
Тут зібрані тільки поля, потрібні логікам нового Electron. Це не повна схема партнерських відповідей.
Формат картки:
- назва операції — стабільна назва для посилань із сервісів;
- окремий endpoint кожного проєкту;
RequestіResponseзгорнуті, як блоки у Swagger;TODOозначає, що контракт треба підтвердити живою відповіддю.
Огляд
✓ — API придатне; △ — є обмеження або непідтверджений контракт; — — окремого API немає.
| # | Операція | Golden | Chathouse | Prime | Udate |
|---|---|---|---|---|---|
| 1 | Логін TU | ✓ | ✓ | ✓ | ✓ |
| 2 | Online RU | ✓ | ✓ | ✓ | ✓ |
| 3 | Перевірка online RU | — | — | ✓ | — |
| 4 | Профіль RU | △ | ✓ | ✓ | ✓ |
| 5 | Chat history | ✓ | ✓ | △ | ✓ |
| 6 | Mail history | △ | ✓ | ✓ | ✓ |
| 7 | Unanswered | ✓ | ✓ | ✓ | ✓ |
| 8 | Open Limits | — | ✓ | ✓ | △ |
| 9 | Блокування | △ | △ | ✓ | ✓ |
| 10 | Медіа TU | ✓ | △ | ✓ | ✓ |
| 11 | Chat-повідомлення | ✓ | ✓ | ✓ | ✓ |
| 12 | Лист | ✓ | ✓ | ✓ | ✓ |
| 13 | Створення діалогу | — | — | ✓ | ✓ |
| 14 | Newsfeed | — | — | ✓ | — |
| 15 | Усі діалоги | — | ✓ | ✓ | ✓ |
| 16 | Тримання online TU | ✓ | ✓ | — | — |
| 17 | Перевірка online TU | ✓ | ✓ | ✓ | — |
| 18 | Activity Alerts | — | — | — | ✓ |
| 19 | Stories | — | — | — | ✓ |
| 20 | Exclusive Posts | — | — | ✓ | — |
1. Логін TU
Використовує: логін TU.
Golden · основна chat-сесія
POST https://goldenbride.net/goldenbride/services/rlogin
Request
{ username: string // TU id userpass: string doremember: true requestType: 'login' }
Response
{ success: boolean result: { id: number loginTokenChat: string isOnline?: boolean url?: string } }Куки сесії приходять у
Set-Cookie.loginTokenChatпотрібен Golden socket.
Golden · official API-сесія
POST https://goldenbride.net/usermodule/services/agencyhelper/v2
Request
{ command: 'login' login: string // TU id pass: string }
Response
{ success: boolean }Окрема
JSESSIONIDприходить уSet-Cookie. Решта командagencyhelper/v2використовують цю куку і не повторюютьlogin/pass.
Chathouse
POST https://external-api.chatshouse.com/v1/truq/login
Request
{ email: string password: string auth_code: string }
Response
{ access_token: string expires_in: number }
access_tokenпередається далі як Bearer token.auth_codeмає бути виданий нашим сервером для правильної атрибуції.
Prime
POST https://talkytimes.com/platform/auth/login
Request
{ captcha: '' email: string password: string referral_code: number }
Response
{ status: boolean | string verification_status?: 'need' | string }Робоча сесія зберігається у cookie jar.
2. Отримання online RU
Використовує: RU-онлайн сервіс.
Golden
POST https://goldenbride.net/goldenbride/services/chat/v26
Request
{ mode: 'update_v2' isPublishStream: boolean }
Response
{ auth: boolean camStatus: boolean online: number[] hasStream: number[] mobile: number[] }Один запит повертає повний online-пул TU.
camStatusіhasStreamтакож використовує Golden stream-логіка.
Chathouse
GET https://external-api.chatshouse.com/v1/truq/dialogs
Query
{ tab: 'all' is_online: true }
Response
{ data: Array<{ id: number last_message_body: string last_message_sent_at: string last_message_format: number last_message_type: number is_last_message_incoming: boolean blocked_by_ru: boolean contact: { ulid_id: string name: string age: number main_photo: object | null is_online: boolean } }> limits: { [ruId: string]: { id: string message_limit: number mail_limit: number sticker_limit: number gift_private_limit: number gift_social_limit: number } } next: string }Наступна сторінка запитується за URL із
next. Кінець — порожнійnext; поточний клієнт додатково вважає останньою сторінку коротшу за 50 записів.
Prime
POST https://talkytimes.com/platform/chat/dialogs/by-criteria
Request
{ cursor: '' limit: 40 criteria: ['active', 'online'] }
Response
{ cursor: string dialogs: Array<{ idUser: number idInterlocutor: number type: string isBlocked: boolean isActive: boolean isBookmarked: boolean hasNewMessage: boolean lastMessage: { id: number | string dateCreated: string idUserFrom: number idUserTo: number type: string content: object } dateUpdated: string messagesLeft: number }> }Наступна сторінка використовує
cursorіз відповіді. Поточні проходи завершуються на сторінці коротшій заlimit.
3. Точкова перевірка online RU
Використовується лише коли RU id уже відомий. Не будує повний online-пул.
Prime
POST https://talkytimes.com/platform/online
Request
{ ids: number[] }
Response
{ [ruId: string]: boolean }
Golden / Chathouse
Окремий цільовий запит поки не використовується.
4. Отримання профілю RU
Використовує: сервіс профілів RU.
Golden
POST https://goldenbride.net/usermodule/services/agencyhelper/v2
Request
{ command: 'getMan' userId: number }
Response
{ success: boolean man: { id: number publicId: number firstName: string age: number url: string mainPhotoDTO?: { urlThumbnailSmall: string urlThumbnailMedium: string urlPhoto: string } } }
isSatelliteУ перевіреному DTO
getManполяisSatelliteнемає. Треба зняти живі відповіді для звичайного RU і satellite та визначити, чи ознака приходить іншим полем або іншим API.
Chathouse · точково
GET https://external-api.chatshouse.com/v1/truq/profile/{ruUlid}
Response
{ data: { ulid_id: string name: string lastname: string age: number main_photo: { profile_url: string } | null is_active: boolean is_online: boolean } }
Chathouse · inline
GET /dialogs, GET /dialogs/{ruUlid}, mail і socket payload уже можуть містити contact, user або sender. Отриманий профіль передається у RUProfileService.upsertProfiles() без окремого запиту.
Prime
POST https://talkytimes.com/platform/connections/profiles
Request
{ ids: number[] // до 50 за один запит }
Response
{ profiles: Array<{ id: number name: string is_online: boolean is_blocked: boolean personal: { name: string age: number avatar_small: string avatar_large: string avatar_xl: string } }> }
5. Отримання chat history
Використовують: таски, відкриття діалогу, історія контакту.
Golden
POST https://goldenbride.net/usermodule/services/agencyhelper/v2
Request
{ command: 'chatHistory' manID: number start: number count: number // target: 50 }
Response
{ success: boolean total: number result: Array<{ ladyId: number userId: number message: string | null date: number tsDate: number direction: boolean description: string paidChatStarted: boolean media?: Array<{ id: string type: 'PHOTO' | 'VIDEO' preview: string url: string }> }> }
direction=true— від RU;false— від TU.
Chathouse
GET https://external-api.chatshouse.com/v1/truq/dialogs/{ruUlid}
Query
{ date_before?: string id_before?: number page_load_id?: string }
Response
{ data: Array<{ id: string body: string sent_at: string format: number type: number }> limits: object dialog: object next: string }
Prime
POST https://talkytimes.com/platform/chat/messages
Request
{ idRegularUser: number idLastMessage: number limit: number withoutTranslation: false }
Response
{ messages: Array<{ id: number dateCreated: string idUserFrom: number idUserTo: number type: string content: object }> }Точну назву top-level поля та cursor-механіку треба повторно звірити з живою відповіддю перед реалізацією нового adapter.
6. Отримання mail history
Використовують: mail-таски, відкриття листування, перевірка перед Follow-up mail.
Golden
POST https://goldenbride.net/usermodule/services/agencyhelper/v2
Request
{ command: 'getMail' manID: number start: number count: number // target: 50 }
Response
{ success: boolean total: number result: Array<{ id: number manId: number ladyId: number sentDate: string letterText: string direction: 'LADY_TO_MAN' | 'MAN_TO_LADY' isOpened: boolean isFree: boolean listAttach: Array<{ id: number isPaid: boolean url?: string }> }> }
Побічний запит поточного клієнта
Поточний
getMail()автоматично викликаєloadLetterдля кожного непрочитаного вхідного листа. У цільовому adapter треба вирішити окремо: читання списку не повинно непомітно створювати додаткові запити й змінювати статус листа.
Chathouse
GET https://external-api.chatshouse.com/v1/truq/inmails/{ruUlid}
Query
{ id_before?: number date_before?: string page_load_id?: string }
Response
{ data: Array<{ id: number format: number is_incoming: number body: string sent_at: string read_at: string user: object contact: object photos: object[] videos: object[] paid: boolean }> limits: { mail: number message: number } next: string }
Prime · знайти correspondence
POST https://talkytimes.com/platform/correspondence/get
Request
{ idInterlocutor: number }
Response
{ last?: { id_correspondence: number } }
Prime · сторінка листів
POST https://talkytimes.com/platform/correspondence/emails-history
Request
{ id_user: number id_interlocutor: number id_correspondence: number page: number limit: number without_translation: false }
Response
{ status: string history: Array<{ id: string id_user_from: string id_user_to: string content: string status: string date_created: string date_read: string }> limit: number page: number }Якщо
id_correspondenceневідомий, одне завантаження історії =correspondence/get+emails-history.
7. Отримання unanswered
Використовує: RU Unanswered сервіс. Запускається після логіну TU, реконекту socket і далі за страховочним інтервалом.
Golden
Повної колонки немає. Перевіряються лише відомі кандидати через chat history і mail history.
Chathouse
GET https://external-api.chatshouse.com/v1/truq/dialogs
Query
{ tab: 'new' }Прохід усіх сторінок за
next.
Відповідь має форму з отримання online RU. Один прохід дає кандидатів на Unanswered chat/mail, Like та Open Limits.
Prime · chat
POST https://talkytimes.com/platform/chat/dialogs/by-criteria
Request
{ cursor: '' limit: 40 criteria: ['unanswered'] }Прохід усіх cursor-сторінок.
Prime · mail
POST https://talkytimes.com/platform/connections/mails
Request
{ femaleIds: number[] // TU id limit: number offset: number type: 'inbox/unanswered' }
Response
{ counters: { countTotal: number countNew: number } inboxCounters: { countTotal: number countNew: number } mails: Array<{ id: number idTrustedUser: number idRegularUser: number correspondence: { last: { id: number id_user_from: number id_user_to: number status: string date_created: number } } }> }
8. Пошук Open Limits
Використовує: Open Limits сервіс.
Chathouse
Окремого запиту немає. Кандидати беруться з уже виконаного tab='new' у RU Unanswered проході.
Prime · кандидати
Основні кандидати надходять із criteria=[] у RU All Dialogs проході.
Поточний окремий прохід
POST
https://talkytimes.com/platform/chat/dialogs/by-criteriaRequest:
{ cursor: string limit: 15 criteria: ['active'] }Перевірити, що
criteria=[]стабільно повертає всі потрібні Open Limits-кандидати, і прибрати цей запит. Якщо залишиться — запускати після завершення RU All Dialogs.
Prime · актуальні chat/mail limits
POST https://talkytimes.com/platform/chat/restriction
Request
{ idRegularUser: number }
Response
{ messagesLeft: number lettersLeft: number }
Prime · блокування і relation
POST https://talkytimes.com/platform/connection/get
Request
{ idsInterlocutor: number[] }
Response
Array<{ idUser: number idInterlocutor: number blockedByMe: boolean blockedByInterlocutor: boolean }>
Golden
Open Limits не підтримується.
9. Отримання блокувань
Використовує: сервіс блокувань.
Golden
POST https://goldenbride.net/usermodule/services/agencyhelper/v2
Request
{ command: 'blackList' }
Response, який очікує поточна логіка
{ success: boolean result: Array<{ manId: number date: number }> }
Перевірити live response
Поточний service читає поле
result, а TypeScript response-interface описуєlist. Перед реалізацією потрібен контракт-тест живої відповіді.
Chathouse
Окремого повного endpoint не знайдено:
GET /dialogsповертаєblocked_by_ru;- socket може віддати
trusted_user_block; - зняття блокування треба підтвердити на живому трафіку.
Prime
Використовує POST /platform/connection/get, описаний у Open Limits. Він повертає обидва напрямки: blockedByMe та blockedByInterlocutor.
10. Отримання медіа TU
Використовує: медіа.
Golden · chat media
POST https://goldenbride.net/goldenbride/services/chat/v21
Request
{ mode: 'getMediaLibraries' }
Response
Array<{ id: number userId: number mediaType: 'PHOTO' | 'VIDEO' dataFileId: number thumbnailFileId: number thumbnailBlurId?: number moderate: boolean parsed: boolean removed: boolean }>
Golden · mail photo
POST https://goldenbride.net/usermodule/services/agencyhelper/v2
Request
{ command: 'attach' isModerate: false }
Response
{ success: boolean list: Array<{ id: number imageId: number isModerate: boolean imageUrls: { smallSizeUrl: string originalSizeUrl: string } }> }
Chathouse
GET https://external-api.chatshouse.com/v1/truq/media
Response
{ photo: Array<{ id: number big_url: string profile_url: string sent: boolean seen: boolean }> video: Array<{ id: number url: string preview_url: string sent: boolean seen: boolean }> }Поточна точна форма photo/video item має бути звірена з live response;
sent/seenпідтверджені типами клієнта.
Prime · photo
POST https://talkytimes.com/platform/gallery/photo/list
Request
{ cursor?: string limit?: number // target: 40 statuses?: string[] tags?: string[] }
Response
{ cursor: string photos: Array<{ idPhoto: number status: object tags: object[] urls: { urlOriginal: string urlPreview: string urlStandard: string } }> }
Prime · video
POST https://talkytimes.com/platform/gallery/video/list
Request
{ cursor?: string limit?: number // target: 40 statuses?: string[] tags?: string[] }
Response
{ cursor: string videos: Array<{ idVideo: number duration: number status: object tags: object[] urls: { urlMp4Hd: string urlMp4Sd: string urlThumbnail: string } }> }
Prime · audio
POST https://talkytimes.com/platform/upload/get-mail-media-gallery
Response
{ audio: Array<{ id: number title: string url_mp3: string url_ogg: string duration: number }> }
11. Відправлення chat-повідомлення
Використовують: ручний чат і сендер.
Golden · socket
WebSocket method sendPrivateMessage
Payload
{ toId: string method: 'sendPrivateMessage' messageIdForConfirm: string content: string }Успіх або помилка приходять окремою socket-подією за
messageIdForConfirm.
Chathouse
POST https://external-api.chatshouse.com/v1/truq/messages
Request
{ contact_id: string body?: string front_message_id?: string format: number media_id?: number sticker_id?: number gift_id?: number }
Response
{ data: { id: number sent_at: string body: string } }Для фото/відео спочатку викликається
POST /messages/media/from-catalog, а отриманий media id передається в основний send.
Prime
POST https://talkytimes.com/platform/chat/send/text
Request
{ idRegularUser: number message: string captchaToken: string }
Response
{ idMessage: number }
12. Відправлення листа
Використовують: ручний лист і сендер.
Golden · один лист
POST https://goldenbride.net/usermodule/services/agencyhelper/v2
Request
{ command: 'saveLetter' manId: number letterText: string attach1?: string attach2?: string }
Response
{ success: boolean letterId: number }
Golden · mail sender
POST https://goldenbride.net/usermodule/services/agencyhelper/v2
Request
{ command: 'send' list: string // JSON number[] text: string attach1?: string attach2?: string }
Response
{ status: 'start' | string }Це запуск batch-відправлення. Стан поточної batch-процедури перевіряється окремою командою
status.
Chathouse
POST https://external-api.chatshouse.com/v1/truq/inmails
Request
{ receiver_id: string format: number body: string // 250–3000 символів photos: number[] | null videos: number[] | null }
Response
{ data: { id: number sent_at: string body: string photos: object[] videos: object[] } }Для кожного фото/відео спочатку викликається
POST /inmail/media/from-catalog; отримані ids передаються в основний send.
Prime
POST https://talkytimes.com/platform/correspondence/send-letter
Request
{ idUserTo: number content: string images?: Array<{ idPhoto: number }> videos?: Array<{ idVideo: number }> }
Response
{ status: string details: unknown }Мінімальна довжина листа в поточному Prime DTO — 100 символів.
13. Створення діалогу Prime
Використовує: створення діалогів Prime.
Доступні chat-request limits TU
POST https://talkytimes.com/platform/chat/dialogs/request-limit/info-list
Response
{ items: Array<{ type: 'chat_request' limitsAvailable: number dateAvailable: string }> }
Доступність RU
POST https://talkytimes.com/platform/chat/dialogs/request-limit/users-info
Request
{ idsRegularUsers: number[] // batch до 50 }
Response
Array<{ idRegularUser: number restrictions: Array<{ type: 'chat_request' isAvailable: boolean }> }>
Online batch перевіряється операцією перевірки online RU. Відсутність попереднього діалогу — chat history, поточні chat/mail limits — POST /platform/chat/restriction.
Captcha
POST https://talkytimes.com/platform/captcha/get
Response
{ type: string key: string challenge: string }
POST https://talkytimes.com/platform/captcha/verify
Request
{ key: string solution: string type: string }
Response
{ success: boolean }
Відкрити діалог
POST https://talkytimes.com/platform/chat/dialog/request-limit
Request
{ token: string idInterlocutor: number captchaProvider: 'self' type: 'chat_request' }
Після успіху перше повідомлення надсилається звичайною операцією відправлення chat-повідомлення.
14. Newsfeed Prime
Використовує: Newsfeed Prime.
Список
POST https://talkytimes.com/platform/news-feed/post/list
Request
{ idLast: number limit: number // default 20 statuses: string[] type: 'post' }
Response
Array<{ id: number idUser: number status: string type: 'post' content: { text: string images: Array<{ id: number urlPreview: string urlStandart: string }> } dateCreated: string }>
Створити
POST https://talkytimes.com/platform/news-feed/post/create
Request
{ type: 'post' content: { text: string // 100–1500 images: [number] // рівно одне фото } }
Response
{ id: number }
Опублікувати
POST https://talkytimes.com/platform/news-feed/post/send
Request
{ id: number }
Видалити
POST https://talkytimes.com/platform/news-feed/post/delete
Request
{ id: number status: string }
15. Отримання всіх діалогів
Використовує: RU All Dialogs сервіс.
Chathouse
GET https://external-api.chatshouse.com/v1/truq/dialogs
Query
{ tab: 'all' }
Прохід сторінок за next. Відповідь має форму Chathouse з отримання online RU і містить chat/mail limits для RU сторінки.
Prime
POST https://talkytimes.com/platform/chat/dialogs/by-criteria
Request
{ cursor: string limit: 20 criteria: [] }
Відповідь має форму Prime з отримання online RU. Dialog містить chat limit. Окремий mail-limit запит не належить цьому проходу: його викликає конкретна логіка після відбору кандидата.
16. Тримання online TU
Використовує: сервіс онлайну TU.
Golden
POST https://goldenbride.net/goldenbride/services/chat/v5
Request
{ mode: 'setAuthUserOnline' }Запит виконується в chat-сесії конкретної TU.
Response
Порожній текст означає успіх.
Chathouse
POST https://external-api.chatshouse.com/v1/sup/trusted-user/ping-list
Request
{ trusted_user_ids: number[] }Один batch для всіх TU одного admin.
Response
Тіло відповіді не використовується.
Prime
Окремого ping-запиту немає. Online TU тримає активний Centrifuge WS-конект.
17. Перевірка online TU
Використовує: сервіс онлайну TU.
Golden · список TU агенції
POST https://goldenbride.net/usermodule/services/agencyhelper/v2
Request
{ command: 'getOnlineLadies' userId: 0 }
Response
{ success: boolean result: Array<{ id: number isOnline: boolean isCamOn: boolean }> }
userId: 0повертає TU агенції одним списком. Запит використовуєJSESSIONIDofficial API-сесії.
Chathouse · список TU admin
GET https://external-api.chatshouse.com/v1/sup/trusted-user
Pagination
Наступна сторінка береться з
links.next.
Response
{ links: { next: string | null } data: Array<{ id: number is_online: boolean }> }
Prime · список TU admin
POST https://datame.cloud/platform/trusted-user/collection
Request
{ limit: 15 status: 'all_active' id_last?: number }
Response
Array<{ id: number is_online: boolean }>Наступний cursor —
idостаннього елемента; порожній масив завершує прохід.
18. Activity Alerts Udate
Використовує: Activity Alerts Udate.
GraphQL operation ActivityAlerts
Variables
{ limit: number cursor?: string }
Потрібні поля response
{ currentUser: { user: { activityAlerts: { cursor: string | null activityAlerts: Array<{ id: string type: string dateCreated: string isRead: boolean marketingUser: { id: string; legacyId: number; name: string } referredUser: { id: string; legacyId: number; name: string } }> } } } }
Для Task Factory зараз використовується лише type = ONLINE_LIMIT. Наступна сторінка запитується за cursor.
19. Stories Udate
Використовує: Stories Udate.
| Операція | GraphQL operation | Основні параметри |
|---|---|---|
| Активна Story TU | ReferredUserStory | id TU |
| Доступні media | ReferredUserStoryMedia | id TU |
| Опублікувати Story | ComposeStory | idReferredUser, content[] |
ReferredUserStory повертає pages із timeLeft, viewCount та photo/video content. ReferredUserStoryMedia повертає photo/video, moderationStatus і storyUsageLimitReached. ComposeStory приймає AgencyStoryInput[] і повертає створену Story.
Масове видалення Stories Director/Client Manager виконується окремою Udate server-операцією через admin media API.
20. Exclusive Posts Prime
Використовує: Exclusive Posts Prime.
| Операція | Endpoint |
|---|---|
| Список posts у діалозі | POST /platform/chat/dialog/media/posts |
| Один post | POST /platform/chat/dialog/post |
| Відправити post | POST /platform/chat/send/new-post |
Список
{ idRegularUser: number idLastPost: number limit: number }
Відправлення
{ idRegularUser: number text: string // від 200 символів idsGalleryPhotos?: number[] idsGalleryVideos?: number[] }
Успішне відправлення повертає idMessage. Post у списку містить id, textPreview, photo/video, isPurchased, price і discount.
Заповнити
- Golden
isSatellite: знайти фактичне джерело ознаки. - Chathouse media: підтвердити точні поля photo/video item.
- Prime chat history: підтвердити top-level response і pagination.
- Golden
blackList: підтвердитиresultчиlist. - Додати partner API блокування/розблокування з боку TU після проєктування ручної дії.
- Додати детальні Udate-контракти основних операцій 1–17 під час проєктування відповідних Electron-сервісів.