NAV
javascript

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
email string
password string

Response Class (Status 200)

Key Type
email 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
email string
password string

Response Class (Status 200)

Key Type
username string
email 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
email 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
email 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[]
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
email 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
email 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
email 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
email 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>

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

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
email 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.