Introduction
Welcome to the Playfu API! You can use our API to access Playfu API endpoints.
We have language bindings in Javascript. You can view code examples in the dark area to the right.
Users
GET all users
var requestOptions = {
method: "GET",
redirect: "follow",
};
fetch("https://bop3000.azurewebsites.net/api/users", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns JSON structured like this:
{}
This endpoint retrieves all users.
HTTP Request
GET https://bop3000.azurewebsites.net/api/users/<ID>
GET a single user
var requestOptions = {
method: "GET",
redirect: "follow",
};
fetch("https://bop3000.azurewebsites.net/api/users/1", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns JSON structured like this:
{}
This endpoint retrieves all users.
HTTP Request
GET https://bop3000.azurewebsites.net/api/users/<ID>
URL Parameters
| Parameter | Description |
|---|---|
| ID | The ID of the user to retrieve |
Accounts
POST Login
var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
var raw = JSON.stringify({
email: "member@test.com",
password: "DetVar1Gang!",
});
var requestOptions = {
method: "POST",
headers: myHeaders,
body: raw,
redirect: "follow",
};
fetch("https://bop3000.azurewebsites.net/api/accounts/login", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns JSON structured like this:
{
"email": "member@test.com",
"token": "<Token>"
}
This endpoint will authorize an account.
HTTP Request
POST https://bop3000.azurewebsites.net/api/accounts/login
Body Schema
| Key | Type |
|---|---|
| string | |
| password | string |
Response Class (Status 200)
| Key | Type |
|---|---|
| string | |
| username | string |
| token | string |
POST Register
var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
var raw = JSON.stringify({
username: "member",
email: "member@test.com"
password: "DetVar1Gang!",
});
var requestOptions = {
method: "POST",
headers: myHeaders,
body: raw,
redirect: "follow",
};
fetch("https://bop3000.azurewebsites.net/api/accounts/register", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns JSON structured like this:
{
"email": "member@test.com",
"username": "member",
"token": "<Token>"
}
This endpoint will create a new account.
HTTP Request
POST https://bop3000.azurewebsites.net/api/accounts/register
Body Schema
| Key | Type |
|---|---|
| username | string |
| string | |
| password | string |
Response Class (Status 200)
| Key | Type |
|---|---|
| username | string |
| string | |
| token | string |
POST Forgotten password
var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
var raw = JSON.stringify({
email: "member2@test.com",
});
var requestOptions = {
method: "POST",
headers: myHeaders,
body: raw,
redirect: "follow",
};
fetch(
"https://bop3000.azurewebsites.net/api/accounts/forgotten_password",
requestOptions
)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns a 202 Accepted:
This endpoint will create a new token for resetting password.
HTTP Request
POST https://bop3000.azurewebsites.net/api/accounts/forgotten_password
Body Schema
| Key | Type |
|---|---|
| string |
PATCH Change forgotten password
var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
var raw = JSON.stringify({
email: "member2@test.com",
newPassword: "Detvar1gang.",
});
var requestOptions = {
method: "PATCH",
headers: myHeaders,
body: raw,
redirect: "follow",
};
fetch(
"https://bop3000.azurewebsites.net/api/accounts/change_forgotten_password?token=<Token>",
requestOptions
)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns a 204 No Content:
This endpoint will update the password to the new password.
HTTP Request
PATCH https://bop3000.azurewebsites.net/api/accounts/change_forgotten_password?token=<Token>
Query Parameters
| Parameter | Default | Description |
|---|---|---|
| token | The generated token for forgotten password |
Body Schema
| Key | Type |
|---|---|
| string | |
| newPassword | string |
PATCH Change password
var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
var raw = JSON.stringify({
currentPassword: "Playfu123!!",
newPassword: "Playfu123!",
});
var requestOptions = {
method: "PATCH",
headers: myHeaders,
body: raw,
redirect: "follow",
};
fetch("https://localhost:5001/api/accounts/change_password", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns a 204 No Content:
This endpoint will update the password to the new password.
HTTP Request
PATCH https://bop3000.azurewebsites.net/api/accounts/change_password
Body Schema
| Key | Type |
|---|---|
| currentPassword | string |
| newPassword | string |
DELETE Account
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
var requestOptions = {
method: "DELETE",
headers: myHeaders,
redirect: "follow",
};
fetch("https://bop3000.azurewebsites.net/api/accounts/delete", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns a string:
"User deleted successfully!"
This endpoint will delete a user account
HTTP Request
DELETE https://bop3000.azurewebsites.net/api/accounts/delete
Lobbies
GET Specific lobby
var requestOptions = {
method: "GET",
redirect: "follow",
};
fetch("https://bop3000.azurewebsites.net/api/lobbies/1", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns JSON structured like this:
{
"id": 1,
"maxUsers": 5,
"title": "Whats up gamers",
"gameId": 51,
"gameName": "Counter-Strike: Global Offensive",
"gameType": "Competetive",
"lobbyDescription": "Hello there",
"adminUid": 1,
"adminUsername": "adminTest",
"users": [1, 2],
"log": {
"messages": [
{
"uid": 1,
"dateSent": "2022-04-14T14:33:55.1220942",
"username": "Playfu1",
"chatMessage": "yo"
},
{
"uid": 1,
"dateSent": "2022-04-14T14:33:55.9965347",
"username": "Playfu1",
"chatMessage": "sup"
},
{
"uid": 2,
"dateSent": "2022-04-14T14:33:58.4013644",
"username": "Playfu2",
"chatMessage": "not much"
},
{
"uid": 2,
"dateSent": "2022-04-14T14:33:59.6158034",
"username": "Playfu2",
"chatMessage": "how are u"
},
{
"uid": 2,
"dateSent": "2022-04-14T14:34:00.9457239",
"username": "Playfu2",
"chatMessage": "test"
}
]
},
"lobbyRequirement": null,
"startDate": "2022-03-30T04:08:03.088913",
"finishedDate": "0001-01-01T00:00:00",
"finished": true,
"votes": [
{
"voterUid": 2,
"votedUid": 1,
"upvote": true
}
]
}
This endpoint retrieves a specific lobby.
HTTP Request
GET https://bop3000.azurewebsites.net/api/lobbies/<ID>
Response Class (Status 200)
| Key | Type |
|---|---|
| id | int |
| maxUsers | int |
| title | string |
| gameId | int |
| gameType | string |
| gameName | string |
| lobbyDescription | string, optional |
| adminUid | string |
| adminUsername | string |
| users | int[] |
| log | Log, optional |
| lobbyRequirement | LobbyRequirement |
| startDate | Date |
| finishedDate | Date, optional |
| finished | bool |
| votes | Vote[] |
LobbyRequirement
| Key | Type |
|---|---|
| gender | string, optional |
Vote
| Key | Type |
|---|---|
| voterUid | int |
| votedUid | int |
| upvote | bool |
Log
| Key | Type |
|---|---|
| messages | Message[] |
Message
| Key | Type |
|---|---|
| uid | int |
| dateSent | string |
| username | string |
| chatMessage | string |
GET All lobbies
var requestOptions = {
method: "GET",
redirect: "follow",
};
fetch("https://bop3000.azurewebsites.net/api/lobbies", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns JSON structured like this:
[
{
"id": 6,
"maxUsers": 5,
"title": "Play smth?",
"gameId": 54,
"gameName": "Dead by Daylight",
"gameType": "Casual",
"lobbyDescription": "Hah",
"adminUid": 2,
"adminUsername": "membertest",
"users": [1, 2, 3],
"log": null,
"lobbyRequirement": null,
"startDate": "2022-03-30T04:08:03.0981973",
"finishedDate": "2022-03-30T04:08:03.098157",
"finished": true,
"votes": [
{
"voterUid": 2,
"votedUid": 1,
"upvote": true
}
]
}
]
This endpoint retrieves all lobbies.
HTTP Request
GET https://bop3000.azurewebsites.net/api/lobbies
Query Parameters
| Parameter | Default | Description |
|---|---|---|
| pageNumber | 1 | Page to get results from |
| pageSize | 50 | Size of a page |
Response Class (Status 200)
| Key | Type |
|---|---|
| id | int |
| maxUsers | int |
| title | string |
| gameId | int |
| gameType | string |
| gameName | string |
| lobbyDescription | string, optional |
| adminUid | string |
| adminUsername | string |
| users | int[] |
| log | Log, optional |
| lobbyRequirement | LobbyRequirement |
| startDate | Date |
| finishedDate | Date, optional |
| finished | bool |
| votes | Vote[] |
LobbyRequirement
| Key | Type |
|---|---|
| gender | string, optional |
Vote
| Key | Type |
|---|---|
| voterUid | int |
| votedUid | int |
| upvote | int |
Log
| Key | Type |
|---|
GET Active lobbies with specific game ID
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
var requestOptions = {
method: "GET",
redirect: "follow",
};
fetch("https://bop3000.azurewebsites.net/api/lobbies/game/51", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns JSON structured like this:
[
{
"id": 1,
"maxUsers": 5,
"title": "Whats up gamers",
"gameId": 51,
"gameName": "Counter-Strike: Global Offensive",
"gameType": "Competetive",
"lobbyDescription": "Hello there",
"adminUid": 1,
"adminUsername": "adminTest",
"users": [],
"log": null,
"lobbyRequirement": null,
"startDate": "2022-03-30T04:08:03.088913",
"finishedDate": "0001-01-01T00:00:00",
"finished": true,
"votes": []
}
]
This endpoint retrieves all lobbies with a specific game ID.
HTTP Request
GET https://bop3000.azurewebsites.net/api/lobbies/game/<ID>
Query Parameters
| Parameter | Default | Description |
|---|---|---|
| pageNumber | 1 | Page to get results from |
| pageSize | 50 | Size of a page |
Response Class (Status 200)
| Key | Type |
|---|---|
| id | int |
| maxUsers | int |
| title | string |
| gameId | int |
| gameType | string |
| gameName | string |
| lobbyDescription | string, optional |
| adminUid | string |
| adminUsername | string |
| users | int[] |
| log | Log, optional |
| lobbyRequirement | LobbyRequirement |
| startDate | Date |
| finishedDate | Date, optional |
| votes | Vote[] |
LobbyRequirement
| Key | Type |
|---|---|
| gender | string, optional |
Vote
| Key | Type |
|---|---|
| voterUid | int |
| votedUid | int |
| upvote | int |
Log
| Key | Type |
|---|---|
| messages | Message[] |
Message
| Key | Type |
|---|---|
| messages | Message[] |
GET Recommended lobbies
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
var requestOptions = {
method: "GET",
headers: myHeaders,
redirect: "follow",
};
fetch(
"https://bop3000.azurewebsites.net/api/lobbies/recommended",
requestOptions
)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns JSON structured like this:
[
{
"id": 2,
"maxUsers": 5,
"title": "Road to global - DEV LOBBY",
"gameId": 1,
"gameName": "Counter-Strike: Global Offensive",
"gameType": "Competetive",
"lobbyDescription": " If you are trash don't bother - LEM is required",
"adminUid": 5,
"adminUsername": "Willym",
"adminProfilePic": "https://res.cloudinary.com/dzpzecnx5/image/upload/v1650922946/TestImages/pf5_ltqunk.jpg",
"users": [5],
"log": null,
"lobbyRequirement": null,
"startDate": "2022-04-09T12:00:00",
"finishedDate": "0001-01-01T00:00:00",
"finished": false,
"votes": []
}
]
This endpoint retrieves max 3 recommended lobbies for current user
HTTP Request
GET https://bop3000.azurewebsites.net/api/lobbies/recommended
Response Class (Status 200)
| Key | Type |
|---|---|
| id | int |
| maxUsers | int |
| title | string |
| gameId | int |
| gameType | string |
| gameName | string |
| lobbyDescription | string, optional |
| adminUid | string |
| adminUsername | string |
| users | int[] |
| log | Log, optional |
| lobbyRequirement | LobbyRequirement |
| startDate | Date |
| finishedDate | Date, optional |
| votes | Vote[] |
LobbyRequirement
| Key | Type |
|---|---|
| gender | string, optional |
Vote
| Key | Type |
|---|---|
| voterUid | int |
| votedUid | int |
| upvote | int |
Log
| Key | Type |
|---|---|
| messages | Message[] |
Message
| Key | Type |
|---|---|
| messages | Message[] |
GET Check if lobby is finished
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
var requestOptions = {
method: "GET",
headers: myHeaders,
redirect: "follow",
};
fetch(
"https://bop3000.azurewebsites.net/api/lobbies/7/finished",
requestOptions
)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns true/false
This endpoint checks if lobby is finished.
HTTP Request
GET https://bop3000.azurewebsites.net/api/lobbies/<ID>/finished
POST A new lobby
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
myHeaders.append("Content-Type", "application/json");
var raw = JSON.stringify({
MaxUsers: 10,
Title: "TestHello",
GameId: 2,
GameType: "Casual",
LobbyRequirement: {},
});
var requestOptions = {
method: "POST",
headers: myHeaders,
body: raw,
redirect: "follow",
};
fetch("https://bop3000.azurewebsites.net/api/lobbies", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns JSON structured like this:
{
"maxUsers": 10,
"title": "TestHello",
"lobbyDescription": null,
"gameId": 2,
"gameType": "Casual",
"lobbyRequirement": {
"gender": null
}
}
This endpoint will create a new lobby.
HTTP Request
POST https://bop3000.azurewebsites.net/api/lobbies
Body Schema
| Key | Type |
|---|---|
| maxUsers | int |
| title | string |
| lobbyDescription | string, optional |
| gameId | int |
| gameType | string |
| lobbyRequirement | LobbyRequirement |
LobbyRequirement
| Key | Type |
|---|---|
| gender | string, optional |
Response Class (Status 200)
| Key | Type |
|---|---|
| maxUsers | int |
| title | string |
| lobbyDescription | string |
| gameId | int |
| gameType | string |
| lobbyRequirement | LobbyRequirement |
LobbyRequirement
| Key | Type |
|---|---|
| gender | string, optional |
PATCH Upvote
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
myHeaders.append("Content-Type", "application/json");
var requestOptions = {
method: "PATCH",
headers: myHeaders,
redirect: "follow",
};
fetch(
"https://bop3000.azurewebsites.net/api/lobbies/7/upvote/1",
requestOptions
)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns a 204 (No content) status code
This endpoint will upvote another member
HTTP Request
PATCH https://bop3000.azurewebsites.net/api/lobbies/<ID>/upvote/<UID>
PATCH Downvote
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
myHeaders.append("Content-Type", "application/json");
var requestOptions = {
method: "PATCH",
headers: myHeaders,
redirect: "follow",
};
fetch(
"https://bop3000.azurewebsites.net/api/lobbies/7/downvote/1",
requestOptions
)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns a 204 (No content) status code
This endpoint will downvote another member
HTTP Request
PATCH https://bop3000.azurewebsites.net/api/lobbies/<ID>/downvote/<UID>
Members
GET All members
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
var requestOptions = {
method: "GET",
headers: myHeaders,
redirect: "follow",
};
fetch("https://bop3000.azurewebsites.net/api/members", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns JSON structured like this:
[
{
"email": "member@test.com",
"username": "membertest",
"memberProfile": {
"birthday": "1998-07-30T00:00:00",
"age": 0,
"gender": "Male",
"description": "Test2",
"countryIso": {
"id": 1,
"name": "Afghanistan",
"twoLetterCode": "AF",
"threeLetterCode": "AFG",
"numericCode": "004"
},
"memberData": {
"upvotes": 10,
"downvotes": 5,
"followers": [2, 3, 4, 6, 7],
"following": [2, 3, 4, 6, 7],
"userFavoriteGames": [2, 3, 4, 6, 7],
"finishedLobbies": [2, 3, 4, 6, 7]
},
"memberCustomization": {
"backgroundUrl": "https://res.cloudinary.com/dzpzecnx5/image/upload/v1650547054/AccountCustomizerIcons/accountbg1-icon_lsztqe.jpg"
},
"memberPhoto": {
"id": 2,
"url": "https://res.cloudinary.com/dzpzecnx5/image/upload/v1648988522/qyf8mc0optfwaebzj0cp.png"
}
}
}
]
This endpoint retrieves all members.
HTTP Request
GET https://bop3000.azurewebsites.net/api/members
Query Parameters
| Parameter | Default | Description |
|---|---|---|
| pageNumber | 1 | Page to get results from |
| pageSize | 50 | Size of a page |
Response Class (Status 200)
| Key | Type |
|---|---|
| username | string |
| string | |
| memberProfile | MemberProfile |
MemberProfile
| Key | Type |
|---|---|
| birthday | string |
| age | int |
| gender | string |
| description | string |
| countryIso | CountryIso |
| memberPhoto | MemberPhoto |
| memberData | MemberData |
| memberCustomization | MemberCustomization |
CountryIso
| Key | Type |
|---|---|
| id | int |
| name | string |
| twoLetterCode | string |
| ThreeLetterCode | string |
| numericCode | string |
MemberPhoto
| Key | Type |
|---|---|
| id | int |
| url | string |
MemberData
| Key | Type |
|---|---|
| upvotes | int |
| downvotes | int |
| followers | int[] |
| following | int[] |
| userFavoriteGames | int[] |
| finishedLobbies | int[] |
MemberCustomizaiton
| Key | Type |
|---|---|
| backgroundUrl | string |
GET A specific member
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
var requestOptions = {
method: "GET",
headers: myHeaders,
redirect: "follow",
};
fetch("https://bop3000.azurewebsites.net/api/members/1", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns JSON structured like this:
{
"email": "member@test.com",
"username": "membertest",
"memberProfile": {
"birthday": "1998-07-30T00:00:00",
"age": 0,
"gender": "Male",
"description": "Test2",
"countryIso": {
"id": 1,
"name": "Afghanistan",
"twoLetterCode": "AF",
"threeLetterCode": "AFG",
"numericCode": "004"
},
"memberData": {
"upvotes": 10,
"downvotes": 5,
"followers": [2, 3, 4, 6, 7],
"following": [2, 3, 4, 6, 7],
"userFavoriteGames": [2, 3, 4, 6, 7],
"finishedLobbies": [2, 3, 4, 6, 7]
},
"memberCustomization": {
"backgroundUrl": "https://res.cloudinary.com/dzpzecnx5/image/upload/v1650547054/AccountCustomizerIcons/accountbg1-icon_lsztqe.jpg"
},
"memberPhoto": {
"id": 2,
"url": "https://res.cloudinary.com/dzpzecnx5/image/upload/v1648988522/qyf8mc0optfwaebzj0cp.png"
}
}
}
This endpoint retrieves a specific member.
HTTP Request
GET https://bop3000.azurewebsites.net/api/members/1
URL Parameters
| Parameter | Description |
|---|---|
| ID | The ID of the user to retrieve |
Response Class (Status 200)
| Key | Type |
|---|---|
| string | |
| username | string |
| memberProfile | MemberProfile |
MemberProfile
| Key | Type |
|---|---|
| birthday | string |
| age | int |
| gender | string |
| description | string |
| countryIso | CountryIso |
| memberPhoto | MemberPhoto |
| memberCustomization | MemberCustomization |
CountryIso
| Key | Type |
|---|---|
| id | int |
| name | string |
| twoLetterCode | string |
| ThreeLetterCode | string |
| numericCode | string |
MemberPhoto
| Key | Type |
|---|---|
| id | int |
| url | string |
MemberData
| Key | Type |
|---|---|
| upvotes | int |
| downvotes | int |
| followers | int[] |
| following | int[] |
| userFavoriteGames | int[] |
| finishedLobbies | int[] |
MemberCustomizaiton
| Key | Type |
|---|---|
| backgroundUrl | string |
GET Current member info
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
var requestOptions = {
method: "GET",
redirect: "follow",
};
fetch("https://bop3000.azurewebsites.net/api/members/current", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns JSON structured like this:
{
"email": "member@test.com",
"username": "membertest",
"memberProfile": {
"birthday": "1998-07-30T00:00:00",
"age": 0,
"gender": "Male",
"description": "Test2",
"countryIso": {
"id": 1,
"name": "Afghanistan",
"twoLetterCode": "AF",
"threeLetterCode": "AFG",
"numericCode": "004"
},
"memberData": {
"upvotes": 10,
"downvotes": 5,
"followers": [2, 3, 4, 6, 7],
"following": [2, 3, 4, 6, 7],
"userFavoriteGames": [2, 3, 4, 6, 7],
"finishedLobbies": [2, 3, 4, 6, 7]
},
"memberCustomization": {
"backgroundUrl": "https://res.cloudinary.com/dzpzecnx5/image/upload/v1650547054/AccountCustomizerIcons/accountbg1-icon_lsztqe.jpg"
},
"memberPhoto": {
"id": 2,
"url": "https://res.cloudinary.com/dzpzecnx5/image/upload/v1648988522/qyf8mc0optfwaebzj0cp.png"
}
}
}
This endpoint retrieves the current member.
HTTP Request
GET https://bop3000.azurewebsites.net/api/members/current
Response Class (Status 200)
| Key | Type |
|---|---|
| string | |
| username | string |
| memberProfile | MemberProfile |
MemberProfile
| Key | Type |
|---|---|
| birthday | string |
| age | int |
| gender | string |
| description | string |
| countryIso | CountryIso |
| memberPhoto | MemberPhoto |
| memberData | MemberData |
| memberCustomization | Membercustomization |
CountryIso
| Key | Type |
|---|---|
| id | int |
| name | string |
| twoLetterCode | string |
| ThreeLetterCode | string |
| numericCode | string |
MemberPhoto
| Key | Type |
|---|---|
| id | int |
| url | string |
MemberData
| Key | Type |
|---|---|
| upvotes | int |
| downvotes | int |
| followers | int[] |
| following | int[] |
| userFavoriteGames | int[] |
| finishedLobbies | int[] |
MemberCustomization
| Key | Type |
|---|---|
| backgroundUrl | string |
GET Current member lobby status
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
var requestOptions = {
method: "GET",
redirect: "follow",
};
fetch(
"https://bop3000.azurewebsites.net/api/members/lobby-status",
requestOptions
)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns JSON structured like this:
{
"inQueue": true,
"lobbyId": 1
}
This endpoint retrieves the current member lobby status.
HTTP Request
GET https://bop3000.azurewebsites.net/api/members/lobby-status
Response Class (Status 200)
| Key | Type |
|---|---|
| inQueue | bool |
| lobbyId | int |
GET Check if following member
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
var requestOptions = {
method: "GET",
redirect: "follow",
};
fetch(
"https://bop3000.azurewebsites.net/api/members/check-follow?memberId=1",
requestOptions
)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns true/False
This endpoint checks if member is followed
HTTP Request
GET https://bop3000.azurewebsites.net/api/members/check-follow?memberId=1
Response Class (Status 200)
True/False
GET Check if mail exists
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
var requestOptions = {
method: "GET",
redirect: "follow",
};
fetch(
"https://bop3000.azurewebsites.net/api/members/check-mail-exists?mail=test",
requestOptions
)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns true/False
This endpoint checks if mail is already taken
HTTP Request
GET https://bop3000.azurewebsites.net/api/members/check-mail-exists?mail=test
Response Class (Status 200)
True/False
GET Check if blocking user
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
var requestOptions = {
method: "GET",
redirect: "follow",
};
fetch(
"https://bop3000.azurewebsites.net/api/members/check-blocking?memberId=1",
requestOptions
)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns true/False
This endpoint checks if blocking user
HTTP Request
GET https://bop3000.azurewebsites.net/api/members/check-blocking?memberId=1
Response Class (Status 200)
True/False
GET Check if blocked
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
var requestOptions = {
method: "GET",
redirect: "follow",
};
fetch(
"https://bop3000.azurewebsites.net/api/members/check-blocked?memberId=1",
requestOptions
)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns true/False
This endpoint checks if blocked by a user
HTTP Request
GET https://bop3000.azurewebsites.net/api/members/check-blocked?memberId=1
Response Class (Status 200)
True/False
GET Search for member
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
var requestOptions = {
method: "GET",
headers: myHeaders,
redirect: "follow",
};
fetch(
"https://bop3000.azurewebsites.net/api/members/search?name=admin",
requestOptions
)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns JSON structured like this:
[
{
"id": 1,
"userName": "adminTest"
}
]
This endpoint searches for members.
HTTP Request
GET https://bop3000.azurewebsites.net/api/members/search?name=admin
Response Class (Status 200)
| Key | Type |
|---|---|
| id | int |
| userName | string |
GET Current member activity log
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
var requestOptions = {
method: "GET",
headers: myHeaders,
redirect: "follow",
};
fetch(
"https://bop3000.azurewebsites.net/api/members/current/activity",
requestOptions
)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns JSON structured like this:
[
{
"date": "2022-03-31T00:00:00",
"username": "membertest",
"appUserId": 2,
"identifier": "lobby-created",
"lobbyId": 1,
"gameName": "Counter-Strike: Global Offensive",
"gameId": 1,
"headerImage": "https://cdn.akamai.steamstatic.com/steam/apps/730/header.jpg?t=1641233427",
"profilePicture": "https://res.cloudinary.com/dzpzecnx5/image/upload/v1650922825/TestImages/pf2_myeoew.png"
}
]
This endpoint gets the current logged in member's activity list
HTTP Request
GET https://bop3000.azurewebsites.net/api/members/current/activity
Response Class (Status 200)
| Key | Type |
|---|---|
| date | string |
| username | string |
| appUserId | int |
| identifier | string |
| lobbyId | int, optional |
| gameName | string, optional |
| gameId | int, optional |
| headerImage | string, optional |
| profilePicture | string, optional |
| memberFollowedId | int, optional |
| memberFollowedUsername | string, optional |
GET Discord connected status
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
var requestOptions = {
method: "GET",
headers: myHeaders,
redirect: "follow",
};
fetch("https://bop3000.azurewebsites.net/api/members/1/discord", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns JSON structured like this:
{
"discordId": 960533457853874287,
"connected": true,
"username": "playfu",
"discriminator": "2869",
"hidden": false
}
This endpoint gets the discord connected status for a user
HTTP Request
GET https://bop3000.azurewebsites.net/api/members/<ID>/discord
Response Class (Status 200)
| Key | Type |
|---|---|
| discordId | int |
| connected | bool |
| username | string, optional |
| discriminator | int, optional |
| hidden | bool |
GET Steam connected status
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
var requestOptions = {
method: "GET",
headers: myHeaders,
redirect: "follow",
};
fetch("https://bop3000.azurewebsites.net/api/members/1/steam", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns JSON structured like this:
{
"connected": false,
"steamId": 0,
"hidden": false
}
This endpoint gets the steam connected status for a user
HTTP Request
GET https://bop3000.azurewebsites.net/api/members/<ID>/steam
Response Class (Status 200)
| Key | Type |
|---|---|
| connected | bool |
| steamid | int, optional |
| hidden | bool |
POST Set profile picture
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
myHeaders.append("Content-Type", "application/json");
var formdata = new FormData();
formdata.append("File", fileInput.files[0], "Background.png");
var requestOptions = {
method: "POST",
headers: myHeaders,
body: formdata,
redirect: "follow",
};
fetch("https://bop3000.azurewebsites.net/api/members/set-photo", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns a JSON structured like this:
{
"id": 2,
"url": "https://res.cloudinary.com/dzpzecnx5/image/upload/v1648988522/qyf8mc0optfwaebzj0cp.png"
}
This endpoint sets the profile picture for the current user
HTTP Request
POST https://bop3000.azurewebsites.net/api/members/set-photo
POST Set background
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
myHeaders.append("Content-Type", "application/json");
var raw = JSON.stringify({
url: "https://res.cloudinary.com/dzpzecnx5/image/upload/v1650547054/AccountCustomizerIcons/accountbg1-icon_lsztqe.jpg",
});
var requestOptions = {
method: "POST",
headers: myHeaders,
body: raw,
redirect: "follow",
};
fetch(
"https://bop3000.azurewebsites.net/api/members/set-background",
requestOptions
)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns a 204 No Content status code
This endpoint sets the background picture for the current user
HTTP Request
POST https://bop3000.azurewebsites.net/api/members/set-background
PATCH Update a single member
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
myHeaders.append("Content-Type", "application/json");
var raw = JSON.stringify({
userName: "TestName",
email: "member@test.com",
countryid: 1,
gender: "Male",
birthday: "2012-04-23T00:00:00.000Z",
description: "Test",
});
var requestOptions = {
method: "PATCH",
headers: myHeaders,
body: raw,
redirect: "follow",
};
fetch("https://bop3000.azurewebsites.net/api/members", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns a 204 (No content) status code
This endpoint updates a single member
HTTP Request
PATCH https://bop3000.azurewebsites.net/api/members
Body Schema
| Key | Type |
|---|---|
| username | string |
| string | |
| countryId | id |
| gender | string |
| birthday | string |
| description | string |
PATCH Follow a member
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
myHeaders.append("Content-Type", "application/json");
var requestOptions = {
method: "PATCH",
redirect: "follow",
};
fetch(
"https://bop3000.azurewebsites.net/api/members/follow?memberId=1",
requestOptions
)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns a 204 (No content) status code
This endpoint will follow another member
HTTP Request
PATCH https://bop3000.azurewebsites.net/api/members/follow?memberId=1
Query Parameters
| Key | Type |
|---|---|
| memberId | int |
PATCH Unfollow a member
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
myHeaders.append("Content-Type", "application/json");
var requestOptions = {
method: "PATCH",
redirect: "follow",
};
fetch(
"https://bop3000.azurewebsites.net/api/members/unfollow?memberId=1",
requestOptions
)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns a 204 (No content) status code
This endpoint will unfollow another member
HTTP Request
PATCH https://bop3000.azurewebsites.net/api/members/unfollow?memberId=1
Query Parameters
| Key | Type |
|---|---|
| memberId | int |
PATCH Block member
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
myHeaders.append("Content-Type", "application/json");
var requestOptions = {
method: "PATCH",
headers: myHeaders,
redirect: "follow",
};
fetch("https://bop3000.azurewebsites.net/api/members/block/1", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns a 204 (No content) status code
This endpoint will block another member
HTTP Request
PATCH https://bop3000.azurewebsites.net/api/members/block/<ID>
PATCH Unblock member
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
myHeaders.append("Content-Type", "application/json");
var requestOptions = {
method: "PATCH",
headers: myHeaders,
redirect: "follow",
};
fetch("https://bop3000.azurewebsites.net/api/members/unblock/1", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns a 204 (No content) status code
This endpoint will block another member
HTTP Request
PATCH https://bop3000.azurewebsites.net/api/members/unblock/<ID>
PATCH Unlink Discord
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
myHeaders.append("Content-Type", "application/json");
var requestOptions = {
method: "PATCH",
headers: myHeaders,
redirect: "follow",
};
fetch(
"https://bop3000.azurewebsites.net/api/members/discord/unlink",
requestOptions
)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns a 204 (No content) status code
This endpoint will unlink discord from account
HTTP Request
PATCH https://bop3000.azurewebsites.net/api/members/discord/unlink
PATCH Unlink Steam
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
myHeaders.append("Content-Type", "application/json");
var requestOptions = {
method: "PATCH",
headers: myHeaders,
redirect: "follow",
};
fetch(
"https://bop3000.azurewebsites.net/api/members/steam/unlink",
requestOptions
)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns a 204 (No content) status code
This endpoint will unlink steam from account
HTTP Request
PATCH https://bop3000.azurewebsites.net/api/members/steam/unlink
PATCH Hide Steam
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
myHeaders.append("Content-Type", "application/json");
var raw = JSON.stringify({
hide: true,
});
var requestOptions = {
method: "PATCH",
headers: myHeaders,
body: raw,
redirect: "follow",
};
fetch("https://bop3000.azurewebsites.net/members/steam/hide", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns a 204 (No content) status code
This endpoint will hide steam from account
HTTP Request
PATCH https://bop3000.azurewebsites.net/api/members/steam/hide
Body Schema
| Key | Type |
|---|---|
| hide | bool |
PATCH Hide Discord
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
myHeaders.append("Content-Type", "application/json");
var raw = JSON.stringify({
hide: true,
});
var requestOptions = {
method: "PATCH",
headers: myHeaders,
body: raw,
redirect: "follow",
};
fetch("https://bop3000.azurewebsites.net/members/discord/hide", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns a 204 (No content) status code
This endpoint will hide steam from account
HTTP Request
PATCH https://bop3000.azurewebsites.net/api/members/discord/hide
Body Schema
| Key | Type |
|---|---|
| hide | bool |
Apps
GET Search for app
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
var requestOptions = {
method: "GET",
headers: myHeaders,
redirect: "follow",
};
fetch(
"https://bop3000.azurewebsites.net/api/apps/search?name=counter strike global offensive&limit=5",
requestOptions
)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns JSON structured like this:
[
{
"appId": 730,
"name": "Counter-Strike: Global Offensive"
},
{
"appId": 740,
"name": "Counter-Strike Global Offensive - Dedicated Server"
},
{
"appId": 745,
"name": "Counter-Strike: Global Offensive - SDK"
},
{
"appId": 1020710,
"name": "Counter-Strike Flair"
},
{
"appId": 453590,
"name": "Counter-Strike Nexon: Zombies - Teddy Nightmare (30 Days)"
}
]
This endpoint retrieves the results from the search.
HTTP Request
GET https://bop3000.azurewebsites.net/api/apps/search
Response Class (Status 200)
| Key | Type |
|---|---|
| appId | int |
| name | string |
Query Parameters
| Parameter | Description | Default |
|---|---|---|
| name | The name of the app | |
| limit | Max items to return | 10 |
GET Specfic app
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
var requestOptions = {
method: "GET",
redirect: "follow",
};
fetch("https://bop3000.azurewebsites.net/api/apps/2", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns JSON structured like this:
{
"id": 2,
"name": "Carnival and Girls",
"headerImage": "https://cdn.akamai.steamstatic.com/steam/apps/1573430/header.jpg?t=1617118165",
"background": "https://cdn.akamai.steamstatic.com/steam/apps/1573430/page_bg_generated_v6b.jpg?t=1617118165",
"activeLobbies": 1,
"steamAppid": 730
}
This endpoint retrieves a specific app
HTTP Request
GET https://bop3000.azurewebsites.net/api/apps/<ID>
Response Class (Status 200)
| Key | Type |
|---|---|
| id | int |
| name | string |
| headerImage | string |
| background | string |
| activeLobbies | int |
| steamAppid | int |
GET Active apps that has lobbies
var myHeaders = new Headers();
myHeaders.append("Authorization", "");
var requestOptions = {
method: "GET",
headers: myHeaders,
redirect: "follow",
};
fetch("https://localhost:5001/api/apps/active", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns JSON structured like this:
[
{
"id": 51,
"name": "Counter-Strike: Global Offensive",
"headerImage": "https://cdn.akamai.steamstatic.com/steam/apps/730/header.jpg?t=1641233427",
"background": "https://cdn.akamai.steamstatic.com/steam/apps/730/page_bg_generated_v6b.jpg?t=1641233427",
"activeLobbies": 1
},
{
"id": 52,
"name": "Lost Ark",
"headerImage": "https://cdn.akamai.steamstatic.com/steam/apps/1599340/header.jpg?t=1644892919",
"background": "https://cdn.akamai.steamstatic.com/steam/apps/1599340/page_bg_generated_v6b.jpg?t=1644892919",
"activeLobbies": 1
}
]
This endpoint retrieves all apps that has a lobby
HTTP Request
GET https://bop3000.azurewebsites.net/api/apps/active
Query Parameters
| Parameter | Default | Description |
|---|---|---|
| pageNumber | 1 | Page to get results from |
| pageSize | 50 | Size of a page |
Response Class (Status 200)
| Key | Type |
|---|---|
| id | int |
| name | string |
| headerImage | string |
| background | string |
| activeLobbies | int |
Countries
GET A specific country
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
var requestOptions = {
method: "GET",
redirect: "follow",
};
fetch("https://bop3000.azurewebsites.net/api/countries/1", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns JSON structured like this:
{
"name": "Afghanistan",
"twoLetterCode": "AF",
"threeLetterCode": "AFG",
"numericCode": "004"
}
This endpoint retrieves a specific country.
HTTP Request
GET https://bop3000.azurewebsites.net/api/countries/<ID>
URL Parameters
| Parameter | Description |
|---|---|
| ID | The ID of the country to retrieve |
Response Class (Status 200)
| Key | Type |
|---|---|
| id | int |
| name | string |
| twoLetterCode | string |
| threeLetterCode | string |
| numericCode | string |
GET All countries
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
var requestOptions = {
method: "GET",
redirect: "follow",
};
fetch("https://bop3000.azurewebsites.net/api/countries", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns JSON structured like this:
[
{
"name": "Afghanistan",
"twoLetterCode": "AF",
"threeLetterCode": "AFG",
"numericCode": "004"
}
]
This endpoint retrieves all countries.
HTTP Request
GET https://bop3000.azurewebsites.net/api/countries
Response Class (Status 200)
| Key | Type |
|---|---|
| id | int |
| name | string |
| twoLetterCode | string |
| threeLetterCode | string |
| numericCode | string |
Support
POST Create new ticket
var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
var raw = JSON.stringify({
subject: "HELP",
email: "member@test.com",
name: "Member",
description: "I cant log in to my user",
});
var requestOptions = {
method: "POST",
headers: myHeaders,
body: raw,
redirect: "follow",
};
fetch(
"https://bop3000.azurewebsites.net/api/support/create-ticket",
requestOptions
)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns a 200 status code
This endpoint will create a new ticket in the ticket system at freshdesk
HTTP Request
POST https://bop3000.azurewebsites.net/api/support/create-ticket
Body Schema
| Key | Type |
|---|---|
| subject | string |
| string | |
| name | string |
| description | string |
Images
GET Backgrounds for customizer
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <Token>");
var requestOptions = {
method: "GET",
headers: myHeaders,
redirect: "follow",
};
fetch(
"https://bop3000.azurewebsites.net/api/images/customizer_images",
requestOptions
)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
The above command returns JSON structured like this:
[
{
"backgroundUrl": "http://res.cloudinary.com/dzpzecnx5/image/upload/v1650544575/AccountBackgrounds/pexels-suzukii-xingfu-698319_brqyfl.jpg",
"iconUrl": "http://res.cloudinary.com/dzpzecnx5/image/upload/c_scale,h_140,w_206/v1650544575/AccountBackgrounds/pexels-suzukii-xingfu-698319_brqyfl.jpg"
},
{
"backgroundUrl": "http://res.cloudinary.com/dzpzecnx5/image/upload/v1650544575/AccountBackgrounds/pexels-donald-tong-55787_g8fhfo.jpg",
"iconUrl": "http://res.cloudinary.com/dzpzecnx5/image/upload/c_scale,h_140,w_206/v1650544575/AccountBackgrounds/pexels-donald-tong-55787_g8fhfo.jpg"
},
{
"backgroundUrl": "http://res.cloudinary.com/dzpzecnx5/image/upload/v1650544575/AccountBackgrounds/pexels-sebastiaan-stam-1480693_txjoxk.jpg",
"iconUrl": "http://res.cloudinary.com/dzpzecnx5/image/upload/c_scale,h_140,w_206/v1650544575/AccountBackgrounds/pexels-sebastiaan-stam-1480693_txjoxk.jpg"
}
]
This endpoint retrieves all backgrounds for the customizer.
HTTP Request
GET https://bop3000.azurewebsites.net/api/images/customizer_images
Response Class (Status 200)
| Key | Type |
|---|---|
| backgroundUrl | string |
| iconUrl | string |
Errors
The Playfu API uses the following error codes:
| Error Code | Meaning |
|---|---|
| 400 | Bad Request -- Your request is invalid. |
| 401 | Unauthorized -- Your authentication is wrong. |
| 403 | Forbidden -- The resource requested is hidden for administrators only. |
| 404 | Not Found -- The specified resource could not be found. |
| 405 | Method Not Allowed -- You tried to access a resource with an invalid method. |
| 500 | Internal Server Error -- We had a problem with our server. Try again later. |
| 503 | Service Unavailable -- We're temporarily offline for maintenance. Please try again later. |