# Backend interface

The backend interface allows the app to communicate with the VPN backend server. The `sdk.getBackend()` method gives you access to various backend functionalities, such as retrieving available locations, managing purchases, and getting user information. For any of the code snippets below, you can replace HYDRA\_TCP with Openvpn, Wireguard, etc…

### List available locations

```
sdk.getBackend().locations(ConnectionType.HYDRA_TCP, new Callback<AvailableLocations>() {
   @Override
   public void success(@NonNull AvailableLocations availableLocations) {
        // Handle successful retrieval of available VPN locations
   }
   
   @Override
   public void failure(@NonNull VpnException e) {
        // Handle the error if locations could not be retrieved
   }
});
```

* This code retrieves a list of available VPN locations using the HYDRA\_TCP connection type.
* `ConnectionType.HYDRA_TCP`: Specifies the connection protocol to use when getting the list of locations.
* `Callback<AvailableLocations>`: This callback handles the response from the backend.
  * `success()`: Called if the list of locations is successfully retrieved.
  * `failure()`: Called if an error occurs during the retrieval.

### Purchases functionality

#### Making a Purchase

```java
sdk.getBackend().purchase("json from google", new CompletableCallback() {
   @Override
   public void complete() {
       //purchase request success
   }

   @Override
   public void error(VpnException e) {
        //failed to process purchase
   }
});
```

* This code sends a purchase request to the backend, typically for buying a subscription or premium VPN service.
* `"json from google"`: Represents the purchase information, often provided by Google Play's billing API.
* `CompletableCallback`: This callback indicates whether the purchase was successful or failed.
  * `complete()`: Called when the purchase is successfully processed.
  * `error()`: Called if there was an issue processing the purchase.

#### Delete a Purchase

```java
sdk.getBackend().deletePurchase(purchaseID, new CompletableCallback() {
   @Override
   public void complete() {
       //request success
   }

   @Override
   public void error(VpnException e) {
        //failed to process request
   }
});
```

* This code sends a purchase request to the backend, typically for buying a subscription or premium VPN service.
* `"json from google"`: Represents the purchase information, often provided by Google Play's billing API.
* `CompletableCallback`: This callback indicates whether the purchase was successful or failed.
  * `complete()` Called when the purchase is successfully processed.
  * `error()` Called if there was an issue processing the purchase.

### Get data about user

#### Get Remaining Traffic

```
//get information about remaining traffic for user
sdk.getBackend().remainingTraffic(new Callback<RemainingTraffic>() {
    @Override
    public void success(@NonNull RemainingTraffic remainingTraffic) {
        
    }

    @Override
    public void failure(@NonNull VpnException e) {

    }
});

```

* This code retrieves information about the amount of data the user can still use (remaining traffic).
* `Callback<RemainingTraffic>`: Handles the response.
  * `success()`: Called if the remaining traffic is successfully retrieved.
  * `failure()`: Called if an error occurs.

#### Get Information About The Current User

```
//get information about current logged in user
sdk.getBackend().currentUser(new Callback<User>() {
    @Override
    public void success(@NonNull User user) {
        
    }

    @Override
    public void failure(@NonNull VpnException e) {

    }
});
```

* This code fetches details about the current logged-in user.
* `Callback<User>`: Handles the response.
  * `success()`: Called if the user information is retrieved successfully.
  * `failure()`: Called if an error occurs.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://pango.gitbook.io/paas/sdk/vpn-sdk-for-android/usage/backend-interface.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
