Matchmaking API
| Endpoint | Method | Description |
|---|---|---|
| matchmaking:getQuestionnaireTemplate | websocket | Get questionnaire template |
| matchmaking:getQuestionnaireData | websocket | Get questionnaire data |
| matchmaking:saveQuestionnaireData | websocket | Save questionnaire data |
| matchmaking:getUserMatchmakingRoom | websocket | Get user matchmaking room |
| matchmaking:publishMatchmakingRoom | websocket | Publish matchmaking room |
| matchmaking:unpublishMatchmakingRoom | websocket | Unpublish matchmaking room |
| matchmaking:searchMatchmakingRooms | websocket | Search matchmaking rooms |
| matchmaking:searchMatchmakingStorylines | websocket | Search matchmaking storylines |
| matchmaking:searchMatchmakingUsers | websocket | Search matchmaking users |
| matchmaking:sendIdealMatchRequest | websocket | Send ideal match request |
| matchmaking:deleteIdealMatchRoom | websocket | Delete ideal match room |
| matchmaking:listIdealMatchRooms | websocket | List ideal match rooms |
| matchmaking:becomeSupporter | websocket | Become supporter |
| matchmaking:removeUserSupporter | websocket | Remove user supporter |
| matchmaking:removeSupportedUser | websocket | Remove supported user |
| matchmaking:listUserSupporters | websocket | List user supporters |
| matchmaking:listSupportedUsers | websocket | List supported users |
| matchmaking:recommendIdealMatch | websocket | Recommend ideal match |
| matchmaking:inviteSupportersToIdealMatchRoom | websocket | Invite supporters to ideal match room |
| matchmaking:listSearchCards | websocket | List search cards |
| matchmaking:updateSearchCard | websocket | Update search card |
| matchmaking:searchBySearchCard | websocket | Search matchmaking rooms by search card |
| matchmaking:idealMatchRoomCreated | websocketEvent | Ideal match room created event |
| matchmaking:idealMatchRoomDeleted | websocketEvent | Ideal match room deleted event |
| matchmaking:idealMatchRoomEntered | websocketEvent | On ideal match room entrance event |
| matchmaking:searchCardUpdated | websocketEvent | Matchmaking search card updated event |
| matchmaking:searchCardDeleted | websocketEvent | Matchmaking search card deleted event |
| matchmaking:supporterAdded | websocketEvent | On supporter added event |
| matchmaking:supporterRemoved | websocketEvent | On supporter removed event |
| matchmaking:questionnaireDataUpdated | websocketEvent | On questionnaire data updated event |
| matchmaking:matchmakingRoomPublished | websocketEvent | Matchmaking room published event |
| matchmaking:matchmakingRoomUnpublished | websocketEvent | Matchmaking room unpublished event |
| matchmaking:matchmakingRoomEntrance | websocketEvent | Matchmaking room entrance event |
Get questionnaire template
Method: websocket
Endpoint: matchmaking:getQuestionnaireTemplate
Description: List of questionnaire field types:
| Field | Value type | Search type | Nested field depends on value type | Description |
|---|---|---|---|---|
| Tags | array of strings | array of strings | string | Can select and search none, one or all of the tags |
| OneOfTags | string | string / array of strings | string | Can select and search for one of provided values |
| Gender | string | string | string | One of: male/female; search is using the opposite gender by default |
| Bool | boolean | boolean | not applicable | |
| StringInput | string | string | not applicable | |
| DateOfBirth | timestamp | range of integers | not applicable |
While search, man is [0-5] years older than woman and both are 18+ by default
Request:
{ empty }
Response:
{
"data": {
"template": {
"fields": [{
"fieldId": string // unique id
"type": string // Tags/OneOfTags/Gender/Bool/StringInput/DateOfBirth
"isRequired": bool // this field is required to be filled in
"isSearchable": bool // questionnaire could be searched by this field
"profileSection": string // personal information/company information/social media profile
"title": string // title for questionnaire
"searchTitle": string // title for search
"profileTitle": string // title for profile information
"values": { custom structure } // available values in case of Tags/OneOfTags/Gender
"default": { custom structure } // default from values
"isNested": bool // this field has parent question
"nestedDependsOnFieldId": string // fieldId of parent question
"nestedDependsOnValue": { custom structure } // value of parent question
}]
}
}
"error": { "status": bool, "code": int, "message": string }
}
Get questionnaire data
Method: websocket
Endpoint: matchmaking:getQuestionnaireData
Description: fields: map[ name of the field ] value of the field, depending on type; see matchmaking:getQuestionnaireTemplate for details
Request:
{
"data": {
"targetUser": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"questionnaire": {
"fields": map[string]{ custom structure }
}
}
"error": { "status": bool, "code": int, "message": string }
}
Save questionnaire data
Method: websocket
Endpoint: matchmaking:saveQuestionnaireData
Description: fields: map[ name of the field ] value of the field, depending on type; see matchmaking:getQuestionnaireTemplate for details
Request:
{
"data": {
"questionnaire": {
"fields": map[string]{ custom structure }
}
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Get user matchmaking room
Method: websocket
Endpoint: matchmaking:getUserMatchmakingRoom
Request:
{
"data": {
"targetUser": string // if targetUser empty - returns current user matchmaking room
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"room": {
"id": string
"name": string
"tags": [ string ]
"ownerIds": [ string ]
"subscriptionStatus": string
}
}
"error": { "status": bool, "code": int, "message": string }
}
Publish matchmaking room
Method: websocket
Endpoint: matchmaking:publishMatchmakingRoom
Description: User can publish only one matchmaking room. If he tries to publish second mm room, he will receive error status code 3001. If he tries to publish mm room while questionnaire is not filled, he will receive error code 3002.
Request:
{
"data": {
"roomId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Unpublish matchmaking room
Method: websocket
Endpoint: matchmaking:unpublishMatchmakingRoom
Request:
{
"data": {
"roomId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Search matchmaking rooms
Method: websocket
Endpoint: matchmaking:searchMatchmakingRooms
Description: Parameters: map[ name of the field ] value of the field, depending on search type; see matchmaking:getQuestionnaireTemplate for details.
Api searches for MM published rooms if network type is Matchmaking and for all public rooms if network type is BusinessSocial. In both cases, users should fill in questionnaire before their rooms appear in search result.
Request:
{
"data": {
"targetUser": string // supporter's search for target user
"parameters": map[string]{ custom structure }
"offset": int
"size": int
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"rooms": [{
"id": string
"name": string
"tags": [ string ]
"thumbnailId": string
"subscriptionStatus": string
"ownerIds": [ string ]
}]
}
"error": { "status": bool, "code": int, "message": string }
}
Search matchmaking storylines
Method: websocket
Endpoint: matchmaking:searchMatchmakingStorylines
Description: Parameters: map[ name of the field ] value of the field, depending on search type; see matchmaking:getQuestionnaireTemplate for details.
Only in BusinessSocial network.
Api searches for published storylines in public rooms. Users should fill in questionnaire before their storylines appear in search result.
Request:
{
"data": {
"targetUser": string // supporter's search for target user
"parameters": map[string]{ custom structure }
"offset": int
"size": int
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"storylines": [{
"id": string
"title": string
"roomId": string
"roomName": string
"roomThumbnailId": string
"owners": [ string ]
}]
}
"error": { "status": bool, "code": int, "message": string }
}
Search matchmaking users
Method: websocket
Endpoint: matchmaking:searchMatchmakingUsers
Description: Parameters: map[ name of the field ] value of the field, depending on search type; see matchmaking:getQuestionnaireTemplate for details.
Only in BusinessSocial network.
Users should fill in questionnaire before they appear in search result.
Request:
{
"data": {
"targetUser": string // supporter's search for target user
"parameters": map[string]{ custom structure }
"offset": int
"size": int
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"users": [{ user simple structure }]
}
"error": { "status": bool, "code": int, "message": string }
}
Send ideal match request
Method: websocket
Endpoint: matchmaking:sendIdealMatchRequest
Description: See requests API for further steps. If user has not published matchmaking room, he will receive error code 3000.
Request:
{
"data": {
"roomId": string
"message": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Delete ideal match room
Method: websocket
Endpoint: matchmaking:deleteIdealMatchRoom
Request:
{
"data": {
"roomId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
List ideal match rooms
Method: websocket
Endpoint: matchmaking:listIdealMatchRooms
Request:
{
"data": {
"offset": int
"size": int
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"rooms": [{
"id": string
"name": string
"tags": [ string ]
"thumbnailId": string
"subscriptionStatus": string
"ownerIds": [ string ]
}]
}
"error": { "status": bool, "code": int, "message": string }
}
Become supporter
Method: websocket
Endpoint: matchmaking:becomeSupporter
Description: See requests API for further steps
Request:
{
"data": {
"targetUser": string
"message": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Remove user supporter
Method: websocket
Endpoint: matchmaking:removeUserSupporter
Request:
{
"data": {
"targetUser": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Remove supported user
Method: websocket
Endpoint: matchmaking:removeSupportedUser
Request:
{
"data": {
"targetUser": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
List user supporters
Method: websocket
Endpoint: matchmaking:listUserSupporters
Description: Fetch list of supporters who help to find current user ideal match
Request:
{
"data": {
"exclude": [ string ]
"offset": int
"size": int
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"users": [{ user simple structure }]
}
"error": { "status": bool, "code": int, "message": string }
}
List supported users
Method: websocket
Endpoint: matchmaking:listSupportedUsers
Description: Get list of users who are supported by current user
Request:
{
"data": {
"exclude": [ string ]
"offset": int
"size": int
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"users": [{ user simple structure }]
}
"error": { "status": bool, "code": int, "message": string }
}
Recommend ideal match
Method: websocket
Endpoint: matchmaking:recommendIdealMatch
Description: See requests API for further steps
Request:
{
"data": {
"targetUser": string
"roomId": string
"message": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Invite supporters to ideal match room
Method: websocket
Endpoint: matchmaking:inviteSupportersToIdealMatchRoom
Request:
{
"data": {
"roomId": string
"permissions": {
"view": bool
"comment": bool
"contribute": bool
"edit": bool
"manage": bool
}
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"invitations": [{
"id": string
"created": timestamp
"updated": timestamp
"status": string
"description": string
"permissions": {
"view": bool
"comment": bool
"contribute": bool
"edit": bool
"manage": bool
}
"invitedById": string
"userId": string
"roomId": string
"roomPrivacy": string
}]
}
"error": { "status": bool, "code": int, "message": string }
}
List search cards
Method: websocket
Endpoint: matchmaking:listSearchCards
Description: Api returns search cards for all supported users. If search card doesn't exist, it will be generated automatically.
Request:
{ empty }
Response:
{
"data": {
"searchCards": [{
"targetUserId": string
"parameters": map[string]{ custom structure }
}]
}
"error": { "status": bool, "code": int, "message": string }
}
Update search card
Method: websocket
Endpoint: matchmaking:updateSearchCard
Description: parameters: map[ name of the field ] value of the field, depending on search type; see matchmaking:getQuestionnaireTemplate for details
Request:
{
"data": {
"targetUser": string
"parameters": map[string]{ custom structure }
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"searchCard": {
"targetUserId": string
"parameters": map[string]{ custom structure }
}
}
"error": { "status": bool, "code": int, "message": string }
}
Search matchmaking rooms by search card
Method: websocket
Endpoint: matchmaking:searchBySearchCard
Request:
{
"data": {
"targetUser": string
"offset": int
"size": int
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"rooms": [{
"id": string
"name": string
"tags": [ string ]
"thumbnailId": string
"subscriptionStatus": string
"ownerIds": [ string ]
}]
}
"error": { "status": bool, "code": int, "message": string }
}
Ideal match room created event
Event: matchmaking:idealMatchRoomCreated
Data:
{
"data": {
"roomId": string
"participants": [ string ]
}
"error": { "status": bool, "code": int, "message": string }
}
Ideal match room deleted event
Event: matchmaking:idealMatchRoomDeleted
Data:
{
"data": {
"roomId": string
}
"error": { "status": bool, "code": int, "message": string }
}
On ideal match room entrance event
Event: matchmaking:idealMatchRoomEntered
Data:
{
"data": {
"userId": string
"roomId": string
}
"error": { "status": bool, "code": int, "message": string }
}
Matchmaking search card updated event
Event: matchmaking:searchCardUpdated
Data:
{
"data": {
"searchCard": {
"targetUserId": string
"parameters": map[string]{ custom structure }
}
}
"error": { "status": bool, "code": int, "message": string }
}
Matchmaking search card deleted event
Event: matchmaking:searchCardDeleted
Data:
{
"data": {
"targetUser": string
}
"error": { "status": bool, "code": int, "message": string }
}
On supporter added event
Event: matchmaking:supporterAdded
Data:
{
"data": {
"supporterId": string
"supportedUserId": string
}
"error": { "status": bool, "code": int, "message": string }
}
On supporter removed event
Event: matchmaking:supporterRemoved
Data:
{
"data": {
"supporterId": string
"supportedUserId": string
}
"error": { "status": bool, "code": int, "message": string }
}
On questionnaire data updated event
Event: matchmaking:questionnaireDataUpdated
Data:
{
"data": {
"questionnaire": {
"fields": map[string]{ custom structure }
}
}
"error": { "status": bool, "code": int, "message": string }
}
Matchmaking room published event
Event: matchmaking:matchmakingRoomPublished
Data:
{
"data": {
"roomId": string
}
"error": { "status": bool, "code": int, "message": string }
}
Matchmaking room unpublished event
Event: matchmaking:matchmakingRoomUnpublished
Data:
{
"data": {
"roomId": string
}
"error": { "status": bool, "code": int, "message": string }
}
Matchmaking room entrance event
Event: matchmaking:matchmakingRoomEntrance
Description: Event sends useful information about matchmaking network room. Request field has both received and sent requests.
Data:
{
"data": {
"roomId": string
"isOwner": bool // is current user - room owner
"isMatchmakingRoom": bool // is room participates in matchmaking
"isIdealMatchRoom": bool // is combined room
"isInvited": bool // is current user invited to the room
"matchmakingParticipant": string // not empty when isMatchmakingRoom == true
"idealMatchRoomUsers": [ string ] // not empty when IsIdealMatchRoom == true
"requests": [{ user request structure }] // Matchmaking/Recommendation requests
"commonIdealMatchRoomId": string // not empty when user has common ideal match room with matchmaking room owner
}
"error": { "status": bool, "code": int, "message": string }
}
Models
User Simple
{
"id": string
"firstName": string
"lastName": string
"privacyMode": int // 0 - Default, 1 - Incognito
"avatar": string
"avatar3D": { // field is not returned if empty
"assetId": string
"assetSkins": map[string]string // map of selected skins per variants
"avatarUrl": string // url to gbl file (Ready Player Me)
"avatarUserId": string // user id for session recovery (Ready Player Me)
}
"companyName": string // name of company that user represents
"companyTitle": string // user title in the company
}
User Request
{
"id": string
"created": timestamp
"updated": timestamp
"initiatorUserId": string
"recipientUserId": string
"type": string // Connection/Invitation/Matchmaking/Supporter/Recommendation/Meeting
"status": string // pending/accepted/declined
"message": string
"data": {
"roomId": string // parameter is used for Invitation and Recommendation requests
"invitationId": string // parameter is used for Invitation request
"meetingId": string // parameter is used for Meeting request
"groupId": string // parameter is used for Group request
"communityId": string // parameter is used for Community request
"messageId": string // parameter is used for AttestationClaim request
}
"fromUser": { user simple structure }
"toUser": { user simple structure }
}