For BioStar 2 v2.7.10 or higher, you can use the new BioStar 2 Local API.
The following article has detailed information on how to start using BioStar 2 New Local API :
[BioStar 2 API] How To Use BioStar 2 New Local API
In this article, we'll take a closer look at a sample application that I made for those who are familiar with C# or standalone Windows applications.
Since BioStar 2 New Local API is RESTful API, those who are not familiar with RESTful API might have difficulties implementing their own applications with BioStar 2 New Local API.
Therefore, I’d like to guide them to kick-start their development with the sample application in this article.
Step 1: Install HTTPS Certificate
1) Please confirm if BioStar 2 Server is running with HTTPS option. In addition, please check whether BioStar 2 Page is Not secure or not. BioStar 2 enables HTTPS as default and the administrator needs to have HTTPS certificate in advance.
[Figure 1. BioStar 2 Page]
2) If you do not install HTTPS certificate, you would see the Not secure page like above. In this case, you should install HTTPS Certificate first. Access BioStar 2 webpage where you can find [Download https certification install program] as follows.

[Figure 2. HTTPS Certificate Program]
Unzip the downloaded file.

[Figure 3. Unzip files]
3) Run cert-register.exe as administrator and enter the server IP address with the port number that you have configured on BioStar Setting,( by default https port used is 443).
[Figure 4. BioStar 2 Server Setting]

[Figure 5. BioStar 2 HTTPS Certificate Program
Enter BioStar 2 Server IP address with the port (in the example port used is456)]

[Figure 6. Popup: Please confirm if the IP address is your entered IP address(Server IP)]
Step 2: Refer to the below example
This sample application is a Visual C# console application and includes a basic function: login.
Since BioStar 2 uses HTTPS, below codes need to be added to the source code.
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; Without the above code, you may have the below error code.
- The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel, and then, implement your original source code.
We highly recommend that searching StackOverflow and then, add more lines that are relevant to HTTPS trusted certificate.
(Example: Login API)
static async void LoginTask()
{
string resourceAddress = "https://192.168.13.32:456/api/login"; //Enter your BioStar 2 address
HttpClient httpClient = new HttpClient();
JavaScriptSerializer serializer = new JavaScriptSerializer();
Dictionary<string, string> dicLoginUser = new Dictionary<string, string>();
dicLoginUser.Add("login_id", "admin"); // Enter BioStar 2 Admin Login ID
dicLoginUser.Add("password", "biostar2"); // Enter your password of BioStar 2 Admin
Dictionary<string, object> dicLogin = new Dictionary<string, object>();
dicLogin.Add("User", dicLoginUser);
string jsonLoginUser = serializer.Serialize(dicLogin);
StringContent sc = new StringContent(jsonLoginUser, Encoding.UTF8, "application/json");
// To load HTTPS Certificate
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
//This is an example line to allow the certificate check is secure. You can have your own line for better secure of your application.
//Please search stackoverflow for the error description - The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.
//A common reason you may receive the error above Could not establish trust relationship for the SSL/TLS secure channel is because the SSL certificate isn't trusted.
System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
HttpResponseMessage httpResponse = await httpClient.PostAsync(resourceAddress, sc);
if(httpResponse.IsSuccessStatusCode == true)
{
Console.WriteLine(httpResponse.ToString());
string httpResponseBody = await httpResponse.Content.ReadAsStringAsync();
Console.WriteLine(httpResponseBody);
MemoryStream responseMemoryStream = new MemoryStream();
StreamWriter sw = new StreamWriter(responseMemoryStream);
sw.Write(httpResponse.ToString());
sw.Flush();
bool isSessionIDContained = httpResponse.Headers.Contains("bs-session-id");
if (isSessionIDContained == true)
{
IEnumerable<string> sessionEnum = httpResponse.Headers.GetValues("bs-session-id");
foreach (string element in sessionEnum)
{
Console.WriteLine("bs-session-id: " + element);
string[] strCookieArr = element.Split(new string[] { "bs-session-id=" }, StringSplitOptions.None);
//string[] strCookieArr2 = strCookieArr[1].Split(new string[] { ";" }, StringSplitOptions.None);
sessionID = strCookieArr[0];
}
}
else if (isSessionIDContained != false)
{
Console.WriteLine("Session ID not found");
}
}
else
{
Console.WriteLine("Failed to log in");
Console.WriteLine(httpResponse.ToString());
}
}