Skip to content
On this page

Matchmaking API

EndpointMethodDescription
matchmaking:getQuestionnaireTemplatewebsocketGet questionnaire template
matchmaking:getQuestionnaireDatawebsocketGet questionnaire data
matchmaking:saveQuestionnaireDatawebsocketSave questionnaire data
matchmaking:getUserMatchmakingRoomwebsocketGet user matchmaking room
matchmaking:publishMatchmakingRoomwebsocketPublish matchmaking room
matchmaking:unpublishMatchmakingRoomwebsocketUnpublish matchmaking room
matchmaking:searchMatchmakingRoomswebsocketSearch matchmaking rooms
matchmaking:searchMatchmakingStorylineswebsocketSearch matchmaking storylines
matchmaking:searchMatchmakingUserswebsocketSearch matchmaking users
matchmaking:sendIdealMatchRequestwebsocketSend ideal match request
matchmaking:deleteIdealMatchRoomwebsocketDelete ideal match room
matchmaking:listIdealMatchRoomswebsocketList ideal match rooms
matchmaking:becomeSupporterwebsocketBecome supporter
matchmaking:removeUserSupporterwebsocketRemove user supporter
matchmaking:removeSupportedUserwebsocketRemove supported user
matchmaking:listUserSupporterswebsocketList user supporters
matchmaking:listSupportedUserswebsocketList supported users
matchmaking:recommendIdealMatchwebsocketRecommend ideal match
matchmaking:inviteSupportersToIdealMatchRoomwebsocketInvite supporters to ideal match room
matchmaking:listSearchCardswebsocketList search cards
matchmaking:updateSearchCardwebsocketUpdate search card
matchmaking:searchBySearchCardwebsocketSearch matchmaking rooms by search card
matchmaking:idealMatchRoomCreatedwebsocketEventIdeal match room created event
matchmaking:idealMatchRoomDeletedwebsocketEventIdeal match room deleted event
matchmaking:idealMatchRoomEnteredwebsocketEventOn ideal match room entrance event
matchmaking:searchCardUpdatedwebsocketEventMatchmaking search card updated event
matchmaking:searchCardDeletedwebsocketEventMatchmaking search card deleted event
matchmaking:supporterAddedwebsocketEventOn supporter added event
matchmaking:supporterRemovedwebsocketEventOn supporter removed event
matchmaking:questionnaireDataUpdatedwebsocketEventOn questionnaire data updated event
matchmaking:matchmakingRoomPublishedwebsocketEventMatchmaking room published event
matchmaking:matchmakingRoomUnpublishedwebsocketEventMatchmaking room unpublished event
matchmaking:matchmakingRoomEntrancewebsocketEventMatchmaking room entrance event

Get questionnaire template

Method: websocket

Endpoint: matchmaking:getQuestionnaireTemplate

Description: List of questionnaire field types:

FieldValue typeSearch typeNested field depends on value typeDescription
Tagsarray of stringsarray of stringsstringCan select and search none, one or all of the tags
OneOfTagsstringstring / array of stringsstringCan select and search for one of provided values
GenderstringstringstringOne of: male/female; search is using the opposite gender by default
Boolbooleanbooleannot applicable
StringInputstringstringnot applicable
DateOfBirthtimestamprange of integersnot 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 }
}