The fastest way to build scalable apps

Complete visual app builder that makes apps intuitive to develop and easy to manage, no code required.

Codeless app builder, real-time database, serverless backend, and API service solutions so you can build apps faster.

Intuitive User Management

Managing a growing user base is a constant challenge. Successful user management today means multiple authentication options including social login, session control and concurrent login rules, automated user data validation, and the ability to enable and disable users at will. Learn how Backendless gives you these abilities and more.

Learn More
Real-Time Messaging for a Real-Time World

Anything less than real-time data and messaging means your users – and therefore your app – are falling behind. Your users interact with your app in real-time, so the app should interact with them in real-time as well. Learn how the Backendless visual app development platform (VADP) brings real-time data to every app we support.

Learn More
All Your APIs in One Place

If your APIs are scattered across different platforms, your team is not developing as efficiently as it could be. Code can easily be lost on outside servers or old employee accounts, and compartmentalization makes redundant coding common. Learn how Backendless solves these problems by managing and housing all your APIs in one place.

Learn More
Tap Into Your Existing Data

Established businesses that started in the pre-mobile era may rely on enterprise and legacy systems such as relational databases, ERP and SCM applications. These systems are often not mobile-friendly, however. As you develop your mobile strategy, it is necessary to find a way to retrospectively integrate your existing enterprise data and workflows with the new generation of mobile and web applications. Learn how Backendless makes your legacy data mobile.

Learn More
Location, Location, Location

The market for location-aware apps has never been larger thanks to the proliferation of the gig economy. Whether you’re looking to build an app that offers users the ability to perform services local to them or if you want an app that supports businesses with a local presence or mobile workforce, geolocation is a necessity. Learn how Backendless brings the power of location to your backend.

Learn More
It's Always Your Data

You’re in the business of developing a product and delivering it to your customers. You’re NOT in the business of server management, and you shouldn’t have to be. Server maintenance, security, scaling, threading, load balancing… leave these to the experts at Backendless so you can focus on growing your business. Learn how Backendless makes hosting secure, scalable, and affordable.

Learn More
APIs YOU WILL LOVE TO USE

By Developers, For Developers

Our APIs are designed and implemented with love and care. Whether you’re a brand-new builder or seasoned developer, our goal is to make your app-building experience as efficient and enjoyable as possible.

User Service API
Database API
Files API
Real-Time Messaging
Geolocation API
Push Notifications
Data Caching API
Atomic Counters API
Email Marketing
.NET
JAVA
KOTLIN
OBJECTIVE-C
SWIFT
JS
DART
REST
Codeless
Backendless.InitApp( YOUR-APP-ID, YOUR-DOTNET-API-KEY );

// ************************************************************
// USER REGISTRATION
// ************************************************************
BackendlessUser newUser = new BackendlessUser();
newUser.Email = "demouser@somedomain.com";
newUser.Password = "p@ssw0rd!";
await Backendless.UserService.RegisterAsync( newUser );

// ************************************************************
// USER LOGIN
// ************************************************************
var username = "demouser@somedomain.com";
var password = "p@ssw0rd!";
var stayLoggedIn = true;
await Backendless.UserService.LoginAsync( username, password, stayLoggedIn );
Backendless.initApp( context, YOUR_APP_ID, YOUR_API_KEY );

// ************************************************************
// USER REGISTRATION
// ************************************************************
BackendlessUser newUser = new BackendlessUser();
newUser.setEmail( "demouser@somedomain.com" );
newUser.setPassword( "p@ssw0rd" );
Backendless.UserService.register( newUser );

// ************************************************************
// USER LOGIN
// ************************************************************
String username = "demouser@somedomain.com";
String password = "p@ssw0rd";
boolean stayLoggedIn = true;
Backendless.UserService.login( username, password, stayLoggedIn );
Backendless.initApp(context, YOUR_APP_ID, YOUR_API_KEY)

// ************************************************************
// USER REGISTRATION
// ************************************************************
val newUser = BackendlessUser()
newUser.email = "demouser@somedomain.com"
newUser.password = "p@ssw0rd"
Backendless.UserService.register(newUser)

// ************************************************************
// USER LOGIN
// ************************************************************
val username = "demouser@somedomain.com"
val password = "p@ssw0rd"
val stayLoggedIn = true
Backendless.UserService.login(username, password, stayLoggedIn)
[Backendless.shared initAppWithApplicationId:YOUR_APP_ID apiKey:YOUR_IOS_API_KEY];
    
// ************************************************************
// USER REGISTRATION
// ************************************************************
    
BackendlessUser *newUser = [BackendlessUser new];
newUser.email = @"demouser@somedomain.com";
newUser.password = @"p@ssw0rd!";
[Backendless.shared.userService registerUserWithUser:newUser responseHandler:^(BackendlessUser *registeredUser) {
    // success
} errorHandler:^(Fault *fault) {
    // failure
}];
    
// ************************************************************
// USER LOGIN
// ************************************************************
    
NSString *userName = @"demouser@somedomain.com";
NSString *password = @"p@ssw0rd!";
Backendless.shared.userService.stayLoggedIn = YES;
[Backendless.shared.userService loginWithIdentity:userName password:password responseHandler:^(BackendlessUser *loggedInUser) {
    // success
} errorHandler:^(Fault *fault) {
    // failure
}];
Backendless.shared.initApp(applicationId: YOUR_APP_ID, apiKey: YOUR_IOS_API_KEY)
        
// ************************************************************
// USER REGISTRATION
// ************************************************************
        
let newUser = BackendlessUser()
newUser.email = "demouser@somedomain.com"
newUser.password = "p@ssw0rd!"
Backendless.shared.userService.registerUser(user: newUser, responseHandler: { registeredUser in
    // success
}, errorHandler: { fault in
    // failure
})
        
// ************************************************************
// USER LOGIN
// ************************************************************
        
let userName = "demouser@somedomain.com"
let password = "p@ssw0rd!"
Backendless.shared.userService.stayLoggedIn = true
Backendless.shared.userService.login(identity: userName, password: password, responseHandler: { loggedInUser in
    // success
}, errorHandler: { fault in
   // failure
})
Backendless.initApp( YOUR-APP-ID, YOUR-JS-API-KEY );

// ************************************************************
// USER REGISTRATION
// ************************************************************
var newUser = new Backendless.User();
newUser.email = 'demouser@somedomain.com';
newUser.password = 'p@ssw0rd!';

Backendless.UserService.register( newUser )
 .then( function(registeredUser) {
 })
 .catch( function(error) { 
 });

// ************************************************************
// USER LOGIN
// ************************************************************
var username = 'demouser@somedomain.com';
var password = 'p@ssw0rd!';
var stayLoggedIn = true;

Backendless.UserService.login( username, password, stayLoggedIn )
 .then( function(loggedInUser) {
 })
 .catch( function(error) {  
 });
Backendless.initApp(YOUR_APP_ID, YOUR_ANDROID_API_KEY, YOUR_IOS_API_KEY);

// ************************************************************
// USER REGISTRATION
// ************************************************************
BackendlessUser newUser = BackendlessUser();
newUser.setEmail("demouser@somedomain.com");
newUser.setPassword("p@ssw0rd");
await Backendless.UserService.register(newUser);

// ************************************************************
// USER LOGIN
// ************************************************************
String username = "demouser@somedomain.com";
String password = "p@ssw0rd";
bool stayLoggedIn = true;
await Backendless.UserService.login(username, password, stayLoggedIn);
// ************************************************************
// USER REGISTRATION
// ************************************************************

curl \
  -H Content-Type:application/json \
  -X POST \
  -d '{"name":"James Bond", "password":"p@ssw0rd!", "email":"demouser@somedomain.com"}' \
  -v https://api.backendless.com///users/register

// ************************************************************
// USER LOGIN
// ************************************************************

curl \  
  -H Content-Type:application/json   
  -X POST   
  -d '{"login":"demouser@somedomain.com", "password":"p@ssw0rd!"}'   
  -v https://api.backendless.com///users/login

.NET
JAVA
KOTLIN
OBJECTIVE-C
SWIFT
JS
DART
REST
Codeless
Backendless.InitApp( YOUR-APP-ID, YOUR-DOTNET-API-KEY );

// ***********************************************************************
// SAVE OBJECT IN DB
// ***********************************************************************
Dictionary movieObject = new Dictionary();
movieObject[ "title" ] = "Batman Returns";
movieObject[ "yearReleased" ] = 1992;
movieObject[ "director" ] = "Tim Burton";
await Backendless.Data.Of( "Movies" ).SaveAsync( movieObject );

// ***********************************************************************
// LOAD DATA FROM DB
// ***********************************************************************
DataQueryBuilder queryBuilder = DataQueryBuilder.Create();
queryBuilder.SetWhereClause( "director LIKE 'Tim%' and yearReleased > 2000" );
queryBuilder.AddSortBy( "title" );
queryBuilder.AddRelated( "cast" );
var foundMovies = await Backendless.Data.Of( "Movies" ).FindAsync( queryBuilder );
Backendless.initApp( context, YOUR_APP_ID, YOUR_API_KEY );

// ***********************************************************************
// SAVE OBJECT IN DB
// ***********************************************************************
Map movieObject = new HashMap<>();
movieObject.put( "title", "Batman Returns" );
movieObject.put( "yearReleased", 1992 );
movieObject.put("director", "Tim Burton");
Backendless.Data.of("Movies").save(movieObject);

// ***********************************************************************
// LOAD DATA FROM DB
// ***********************************************************************
DataQueryBuilder queryBuilder = DataQueryBuilder.create();
queryBuilder.setWhereClause("director LIKE 'Tim%' and yearReleased > 2000");
queryBuilder.addSortBy("title");
queryBuilder.addRelated("cast");
List foundMovies = Backendless.Data.of("Movies").find(queryBuilder);
Backendless.initApp(context, YOUR_APP_ID, YOUR_API_KEY)

// ***********************************************************************
// SAVE OBJECT IN DB
// ***********************************************************************
val movieObject = HashMap()
movieObject["title"] = "Batman Returns"
movieObject["yearReleased"] = 1992
movieObject["director"] = "Tim Burton"
Backendless.Data.of("Movies").save(movieObject)

// ***********************************************************************
// LOAD DATA FROM DB
// ***********************************************************************
val queryBuilder = DataQueryBuilder.create()
queryBuilder.whereClause = "director LIKE 'Tim%' and yearReleased > 2000"
queryBuilder.addSortBy("title")
queryBuilder.addRelated("cast")
val foundMovies = Backendless.Data.of("Movies").find(queryBuilder)
[Backendless.shared initAppWithApplicationId:YOUR_APP_ID apiKey:YOUR_IOS_API_KEY];
    
// ***********************************************************************
// SAVE OBJECT IN DB
// ***********************************************************************
    
NSDictionary *movieObject = @{@"title": @"Batman Returns",
                              @"yearReleased": @1992,
                              @"director": @"Tim Burton"};
[[Backendless.shared.data ofTable:@"Movies"] saveWithEntity:movieObject responseHandler:^(NSDictionary *savedMoviewObject) {
    // success
} errorHandler:^(Fault *fault) {
    // failure
}];
    
// ***********************************************************************
// LOAD DATA FROM DB
// ***********************************************************************
    
DataQueryBuilder *queryBuilder = [DataQueryBuilder new];
[queryBuilder setWhereClauseWithWhereClause:@"director LIKE ‘Tim%’ and yearReleased > 2000"];
[queryBuilder addSortBySortBy:@"title"];
[queryBuilder addRelatedWithRelated:@"cast"];
[[Backendless.shared.data ofTable:@"Movies"] findWithQueryBuilder:queryBuilder responseHandler:^(NSArray *foundMovies) {
    // success
} errorHandler:^(Fault *fault) {
    // failure
}];
Backendless.shared.initApp(applicationId: YOUR_APP_ID, apiKey: YOUR_IOS_API_KEY)
        
// ***********************************************************************
// SAVE OBJECT IN DB
// ***********************************************************************
        
let movieObject = ["title": "Batman Returns",
                   "yearReleased": 1992,
                   "director": "Tim Burton"] as [String : Any]
Backendless.shared.data.ofTable("Movies").save(entity: movieObject, responseHandler: { savedMovieObject in
    // success
}, errorHandler: { fault in
    // failure
})
        
// ***********************************************************************
// LOAD DATA FROM DB
// ***********************************************************************
        
let queryBuilder = DataQueryBuilder()
queryBuilder.setWhereClause(whereClause: "director LIKE ‘Tim%’ and yearReleased > 2000")
queryBuilder.addSortBy(sortBy: "title")
queryBuilder.addRelated(related: "cast")
Backendless.shared.data.ofTable("Movies").find(queryBuilder: queryBuilder, responseHandler: { foundMovies in
    // success
}, errorHandler: { fault in
    // failure
})
Backendless.initApp( YOUR-APP-ID, YOUR-JS-API-KEY );

// ***********************************************************************
// SAVE OBJECT IN DB
// ***********************************************************************
var movieObject = {};
movieObject.title = 'Batman Returns';
movieObject.yearReleased = 1992;
movieObject.director = 'Tim Burton';

Backendless.Data.of('Movies').save(movieObject)
 .then(function(savedObject) {

 })
 .catch(function(error) {

 });

// ***********************************************************************
// LOAD DATA FROM DB
// ***********************************************************************
var queryBuilder = new Backendless.DataQueryBuilder();
queryBuilder.setWhereClause('director LIKE \'Tim%\' and yearReleased > 2000');
queryBuilder.setSortBy('title');
queryBuilder.addRelated('cast');

Backendless.Data.of('Movies').find(queryBuilder)
 .then(function(foundMovies) {

 })
 .catch(function(error) {

 });
Backendless.initApp(YOUR_APP_ID, YOUR_ANDROID_API_KEY, YOUR_IOS_API_KEY);

// ***********************************************************************
// SAVE OBJECT IN DB
// ***********************************************************************
Map movieObject = {
  "title": "Batman Returns",
  "yearReleased": 1992,
  "director": "Tim Burton"};
await Backendless.Data.of("Movies").save(movieObject);

// ***********************************************************************
// LOAD DATA FROM DB
// ***********************************************************************
DataQueryBuilder queryBuilder = DataQueryBuilder();
queryBuilder.whereClause = "director LIKE 'Tim%' and yearReleased > 2000";
queryBuilder.addSortBy("title");
queryBuilder.addRelated("cast");
List foundMovies = await Backendless.Data.of("Movies").find(queryBuilder);
// ***********************************************************************
// SAVE OBJECT IN DB
// ***********************************************************************

curl \
-H Content-Type:application/json \
-X POST  \
-d "{\"title\":\"Batman Returns\", \"yearReleased\":1992, \"director\":\"Tim Burton\"}" \
-v https://api.backendless.com///data/Movies

// ***********************************************************************
// LOAD DATA FROM DB
// ***********************************************************************

curl "https://api.backendless.com///data/Person?where=director%20LIKE%20%E2%80%98Tim%25%E2%80%99%20and%20yearReleased%20%3E%202000&sortBy=title&loadRelations=[cast]"
.NET
JAVA
KOTLIN
OBJECTIVE-C
SWIFT
JS
DART
REST
Codeless
Backendless.InitApp( YOUR-APP-ID, YOUR-DOTNET-API-KEY );
 
// ***********************************************************************
// CREATE A REMOTE FILE
// ***********************************************************************
var fileContentsString = “The quick brown fox jumps over the lazy dog”;
var fileBytes = Encoding.ASCII.GetBytes( fileContentsString );
var remoteDirectory = “notes”;
var fileName = “reminder.txt”;
await Backendless.Files.UploadAsync( fileBytes, remoteDirectory, fileName );
 
// ***********************************************************************
// GET DIRECTORY LISTING
// ***********************************************************************
var path = “web”;
var pattern = “*.htm”;
var recursive = true;
var directoryContents = await Backendless.Files.ListingAsync( path, pattern, recursive );
foreach( var fileInfo in directoryContents )
Console.WriteLine( fileInfo.FullName );
Backendless.initApp( context, YOUR_APP_ID, YOUR_API_KEY );

// ***********************************************************************
// CREATE A REMOTE FILE
// ***********************************************************************
String fileContentsString = "The quick brown fox jumps over the lazy dog";
byte[] fileBytes = fileContentsString.getBytes();
String remoteDirectory = "notes";
String fileName = "reminder.txt";
OutputStreamRouter streamRouter = outputStream -> outputStream.write(fileBytes);
Backendless.Files.uploadFromStream( streamRouter, fileName, remoteDirectory );

// ***********************************************************************
// GET DIRECTORY LISTING
// ***********************************************************************
String path = "web";
String pattern = "*.htm";
boolean recursive = true;
List directoryContents = Backendless.Files.listing(path, pattern, recursive);
for (FileInfo fileInfo : directoryContents) {
    System.out.println(fileInfo.getName());
}
Backendless.initApp(context, YOUR_APP_ID, YOUR_API_KEY)

// ***********************************************************************
// CREATE A REMOTE FILE
// ***********************************************************************
val fileContentsString = "The quick brown fox jumps over the lazy dog"
val fileBytes = fileContentsString.toByteArray()
val remoteDirectory = "notes"
val fileName = "reminder.txt"
val streamRouter = OutputStreamRouter { outputStream -> outputStream.write(fileBytes) }
Backendless.Files.uploadFromStream(streamRouter, fileName, remoteDirectory)

// ***********************************************************************
// GET DIRECTORY LISTING
// ***********************************************************************
val path = "web"
val pattern = "*.htm"
val recursive = true
val directoryContents = Backendless.Files.listing(path, pattern, recursive)
directoryContents.forEach {
    println(it.name)
}
[Backendless.shared initAppWithApplicationId:YOUR_APP_ID apiKey:YOUR_IOS_API_KEY];
    
// ***********************************************************************
// CREATE A REMOTE FILE
// ***********************************************************************
    
NSString *fileContentsString = @"The quick brown fox jumps over the lazy dog";
NSData *fileBytes = [fileContentsString dataUsingEncoding:NSASCIIStringEncoding];
NSString *remoteDirectory = @"notes";
NSString *fileName = @"reminder.txt";
[Backendless.shared.file uploadFileWithFileName:fileName filePath:remoteDirectory content:fileBytes responseHandler:^(BackendlessFile *uploadedFile) {
    // success
} errorHandler:^(Fault *fault) {
    // failure
}];
    
// ***********************************************************************
// GET DIRECTORY LISTING
// ***********************************************************************
    
NSString *path = @"web";
NSString *pattern = @"*.htm";
BOOL recursive = YES;
[Backendless.shared.file listingWithPath:path pattern:pattern recursive:recursive responseHandler:^(NSArray *directoryContents) {
    for (BackendlessFileInfo *fileInfo in directoryContents) {
        NSLog(@"%@", fileInfo.name);
    }
} errorHandler:^(Fault *fault) {
    // failure
}];
Backendless.shared.initApp(applicationId: YOUR_APP_ID, apiKey: YOUR_IOS_API_KEY)
        
// ***********************************************************************
// CREATE A REMOTE FILE
// ***********************************************************************
        
let fileContentsString = "The quick brown fox jumps over the lazy dog"
let fileBytes = fileContentsString.data(using: .ascii)!
let remoteDirectory = "notes"
let fileName = "reminder.txt"
let filePath = remoteDirectory + "/" + fileName
Backendless.shared.file.uploadFile(fileName: fileName, filePath: filePath, content: fileBytes, responseHandler: { uploadedFile in
    // success
}, errorHandler: { fault in
    // failure
})
        
// ***********************************************************************
// GET DIRECTORY LISTING
// ***********************************************************************
        
let path = "web"
let pattern = "*.htm"
let recursive = true
Backendless.shared.file.listing(path: path, pattern: pattern, recursive: recursive, responseHandler: { directoryContents in
    for fileInfo in directoryContents {
        print(fileInfo.name ?? "")
    }
}, errorHandler: { fault in
    // failure
})
Backendless.initApp(YOUR-APP-ID, YOUR-JS-API-KEY);
 
// ***********************************************************************
// CREATE A REMOTE FILE
// ***********************************************************************
var fileContentsString = 'The quick brown fox jumps over the lazy dog';
var byteArray = new Blob( [ fileContentsString ] );
var remoteDirectory = 'notes';
var fileName = 'reminder.txt';
var overwrite = true;

Backendless.Files.saveFile( remoteDirectory, fileName, byteArray, overwrite )
 .then( function( savedFileURL ) {
 })
 .catch( function( error ) {
 });

// ***********************************************************************
// GET DIRECTORY LISTING
// ***********************************************************************
var path = 'web';
var pattern = '*.htm';
var recursive = true;

Backendless.Files.listing( path, pattern, recursive )
 .then( function( directoryContents ) {
   directoryContents.forEach( function( fileInfo ) {
     console.log( fileInfo.name );
   })
 })
 .catch( function( error ) {
 });
Backendless.initApp(YOUR_APP_ID, YOUR_ANDROID_API_KEY, YOUR_IOS_API_KEY);

// ***********************************************************************
// CREATE A REMOTE FILE
// ***********************************************************************
String fileContentsString = "The quick brown fox jumps over the lazy dog";
List fileBytes = utf8.encode(fileContentsString);
String remoteDirectory = "notes";
String fileName = "reminder.txt";
await Backendless.Files.uploadFromStream((outputStream) => outputStream.write(fileBytes), fileName, remoteDirectory);

// ***********************************************************************
// GET DIRECTORY LISTING
// ***********************************************************************
String path = "web";
String pattern = "*.htm";
bool recursive = true;
List directoryContents = await Backendless.Files.listing(path, pattern, recursive);
directoryContents.forEach((fileInfo) => print(fileInfo.name));
// ***********************************************************************
// CREATE A REMOTE FILE
// ***********************************************************************
curl -H Content-Type:“multipart/form-data” \
–form upload=@reminder.txt \
-X POST \
-v https://api.backendless.com///files/notes/reminder.txt

// ***********************************************************************
// GET DIRECTORY LISTING
// ***********************************************************************
curl “https://api.backendless.com///files/web?pattern=*.htm&sub=true”
.NET
JAVA
KOTLIN
OBJECTIVE-C
SWIFT
JS
DART
REST
Codeless
Backendless.InitApp( YOUR-APP-ID, YOUR-DOTNET-API-KEY );
 
// ***********************************************************************
// SUBSCRIBE TO RECEIVE MESSAGES
// ***********************************************************************
var channel = Backendless.Messaging.Subscribe( “demoChannel” );
var selector = “importance = ‘high'”;
channel.AddMessageListener( selector,
new MessageReceived( receivedMessage =>
{
Console.WriteLine( $”received – {receivedMessage}” );
}));
 
// ***********************************************************************
// BROADCAST A MESSAGE
// ***********************************************************************
var message = “All your base are belong to us”;
var publishOptions = new PublishOptions();
publishOptions.AddHeader( “importance”, “high” );
await Backendless.Messaging.PublishAsync( message, “demoChannel”, publishOptions );
Backendless.initApp( context, YOUR_APP_ID, YOUR_API_KEY );

// ***********************************************************************
// SUBSCRIBE TO RECEIVE MESSAGES
// ***********************************************************************
Channel channel = Backendless.Messaging.subscribe( "demoChannel" );
String selector = "importance = ‘high'";
channel.addMessageListener( selector, new AsyncCallback() {
    @Override
    public void handleResponse( String receivedMessage ) {
        System.out.println("received - " + receivedMessage);
    }

    @Override
    public void handleFault( BackendlessFault fault ) {
        // Failure
    }
});

// ***********************************************************************
// BROADCAST A MESSAGE
// ***********************************************************************
String message = "All your base are belong to us";
PublishOptions publishOptions = new PublishOptions();
publishOptions.putHeader( "importance", "high" );
Backendless.Messaging.publish( "demoChannel", message, publishOptions );
Backendless.initApp(context, YOUR_APP_ID, YOUR_API_KEY)

// ***********************************************************************
// SUBSCRIBE TO RECEIVE MESSAGES
// ***********************************************************************
val channel = Backendless.Messaging.subscribe("demoChannel")
val selector = "importance = 'high'"
channel.addMessageListener(selector, object : AsyncCallback {
    override fun handleResponse(receivedMessage: String) = println("received - $receivedMessage")
    override fun handleFault(fault: BackendlessFault) { /* Failure */ }
})

// ***********************************************************************
// BROADCAST A MESSAGE
// ***********************************************************************
val message = "All your base are belong to us"
val publishOptions = PublishOptions()
publishOptions.putHeader("importance", "high")
Backendless.Messaging.publish("demoChannel", message, publishOptions)
[Backendless.shared initAppWithApplicationId:YOUR_APP_ID apiKey:YOUR_IOS_API_KEY];
    
// ***********************************************************************
// SUBSCRIBE TO RECEIVE MESSAGES
// ***********************************************************************
    
Channel *channel = [Backendless.shared.messaging subscribeWithChannelName:@"demoChannel"];
NSString *selector = @"importance = 'high'";
RTSubscription *subscription = [channel addStringMessageListenerWithSelector:selector responseHandler:^(NSString *receivedMessage) {
    NSLog(@"received - %@", receivedMessage);
} errorHandler:^(Fault *fault) {
    // failure
}];
    
// ***********************************************************************
// BROADCAST A MESSAGE
// ***********************************************************************
    
NSString *message = @"All your base are belong to us";
PublishOptions *publishOptions = [PublishOptions new];
[publishOptions addHeaderWithName:@"importance" value:@"high"];
[Backendless.shared.messaging publishWithChannelName:@"demoChannel" message:message publishOptions:publishOptions responseHandler:^(MessageStatus *messageStatus) {
    // success
} errorHandler:^(Fault *fault) {
    // failure
}];
Backendless.shared.initApp(applicationId: YOUR_APP_ID, apiKey: YOUR_IOS_API_KEY)
        
// ***********************************************************************
// SUBSCRIBE TO RECEIVE MESSAGES
// ***********************************************************************
        
let channel = Backendless.shared.messaging.subscribe(channelName: "demoChannel")
let selector = "importance = 'high'"
let subscription = channel.addStringMessageListener(selector: selector, responseHandler: { receivedMessage in
    print("received - \(receivedMessage)")
}, errorHandler: { fault in
    // failure
})
        
// ***********************************************************************
// BROADCAST A MESSAGE
// ***********************************************************************
        
let message = "All your base are belong to us"
let publishOptions = PublishOptions()
publishOptions.addHeader(name: "importance", value: "high")
Backendless.shared.messaging.publish(channelName: "demoChannel", message: message, publishOptions: publishOptions, responseHandler: { messageStatus in
    // success
}, errorHandler: { fault in
   // failure
})
Backendless.initApp(YOUR-APP-ID, YOUR-JS-API-KEY);
 
// ***********************************************************************
// SUBSCRIBE TO RECEIVE MESSAGES
// ***********************************************************************
var channel = Backendless.Messaging.subscribe( 'demoChannel' );
var selector = 'importance = \'high\'';

channel.addMessageListener( selector, function( receivedMessage ) {
 console.log( receivedMessage );
});

// ***********************************************************************
// BROADCAST A MESSAGE
// ***********************************************************************
var message = 'All your base are belong to us';
var publishOptions = new Backendless.PublishOptions( { headers: { importance: 'high' } } );

Backendless.Messaging.publish( 'demoChannel', message, publishOptions )
 .then( function( response ) {
 })
 .catch( function( error ) {
 });
Backendless.initApp(YOUR_APP_ID, YOUR_ANDROID_API_KEY, YOUR_IOS_API_KEY);

// ***********************************************************************
// SUBSCRIBE TO RECEIVE MESSAGES
// ***********************************************************************
Channel channel = Backendless.Messaging.subscribe("demoChannel");
String selector = "importance = 'high'";
channel.addMessageListener((receivedMessage) => print("received - $receivedMessage"), selector: selector);

// ***********************************************************************
// BROADCAST A MESSAGE
// ***********************************************************************
String message = "All your base are belong to us";
PublishOptions publishOptions = PublishOptions();
publishOptions.putHeader("importance", "high");
await Backendless.Messaging.publish(message, channelName: "demoChannel", publishOptions: publishOptions);
// ***********************************************************************
// SUBSCRIBE TO RECEIVE MESSAGES
// ***********************************************************************
// Establishing a subscription:
curl -H Content-Type:application/json -X POST -d ‘{}’ \
-v https://api.backendless.com///messaging/demoChannel/subscribe

// Response:
{
“subscriptionId”: “1BA31C04-CDCA-2AC0-FF76-6E6F81101100”
}

// Retrieving messages for the subscription:
curl -X GET
-v https://api.backendless.com///messaging/demoChannel/1BA31C04-CDCA-2AC0-FF76-6E6F81101100

// ***********************************************************************
// BROADCAST A MESSAGE
// ***********************************************************************
curl -H Content-Type:application/json -X POST \
-d ‘{“message”:”All your base are belong to us”, “headers”:{“importance”:”high”}}’ \
-v https://api.backendless.com///messaging/demoChannel
.NET
JAVA
KOTLIN
OBJECTIVE-C
SWIFT
JS
DART
REST
Codeless
Backendless.InitApp( YOUR-APP-ID, YOUR-DOTNET-API-KEY );
 
// ***********************************************************************
// LOAD GEO POINTS
// ***********************************************************************
var geoQuery = new BackendlessGeoQuery();
// search for geopoints in the “restaurants” category
geoQuery.Categories = new List( new string[] {“restaurants”} );
// ….in 1 mile radius
geoQuery.Radius = 1;
geoQuery.Units = Units.MILES;
// ….from this cool location
geoQuery.Latitude = 33.077497;
geoQuery.Longitude = -96.823402;
// ….where location rating is greater than 4 and they serve Italian
geoQuery.WhereClause = “rating > 4 AND cuisine = ‘Italian'”;
var geoPoints = await Backendless.Geo.GetPointsAsync( geoQuery );
foreach( var geoPoint in geoPoints )
Console.WriteLine( $” coordinates are {geoPoint.Latitude}, {geoPoint.Longitude}”);
Backendless.initApp( context, YOUR_APP_ID, YOUR_API_KEY );

// ***********************************************************************
// LOAD GEO POINTS
// ***********************************************************************
BackendlessGeoQuery geoQuery = new BackendlessGeoQuery();
// search for geopoints in the “restaurants” category
geoQuery.setCategories( Arrays.asList( "restaurants" ) );
// ….in 1 mile radius
geoQuery.setRadius( 1.0 );
geoQuery.setUnits( Units.MILES );
// ….from this cool location
geoQuery.setLatitude( 33.077497 );
geoQuery.setLongitude( -96.823402 );
// ….where location rating is greater than 4 and they serve Italian
geoQuery.setWhereClause( "rating > 4 AND cuisine = 'Italian'" );
List geoPoints = Backendless.Geo.getPoints( geoQuery );
for ( GeoPoint geoPoint : geoPoints ) {
    System.out.println(String.format("coordinates are %f, %f", geoPoint.getLatitude(), geoPoint.getLongitude()));
}
Backendless.initApp(context, YOUR_APP_ID, YOUR_API_KEY)

// ***********************************************************************
// LOAD GEO POINTS
// ***********************************************************************
val geoQuery = BackendlessGeoQuery()
// search for geopoints in the “restaurants” category
geoQuery.categories = listOf("restaurants")
// ….in 1 mile radius
geoQuery.radius = 1.0
geoQuery.units = Units.MILES
// ….from this cool location
geoQuery.latitude = 33.077497
geoQuery.longitude = -96.823402
// ….where location rating is greater than 4 and they serve Italian
geoQuery.whereClause = "rating > 4 AND cuisine = 'Italian'"
val geoPoints = Backendless.Geo.getPoints(geoQuery)
geoPoints.forEach {
    println("coordinates are ${it.latitude}, ${it.longitude}")
}
[Backendless.shared initAppWithApplicationId:YOUR_APP_ID apiKey:YOUR_IOS_API_KEY];
    
// ***********************************************************************
// LOAD GEO POINTS
// ***********************************************************************
    
BackendlessGeoQuery *geoQuery = [BackendlessGeoQuery new];
    
// search for geopoints in the "restaurants" category
geoQuery.categories = @[@"restaurants"];
    
// ….in 1 mile radius
geoQuery.radius = @1;
[geoQuery setUnitsWithUnits:UnitsMILES];
    
// ….from this cool location
geoQuery.geoPoint = [[GeoPoint alloc] initWithLatitude:33.077497 longitude:-96.823402];
    
// ….where location rating is greater than 4 and they serve Italian
geoQuery.whereClause = @"rating > 4 AND cuisine = 'Italian'";
    
[Backendless.shared.geo getPointsWithGeoQuery:geoQuery responseHandler:^(NSArray *geoPoints) {
    for (GeoPoint *geoPoint in geoPoints) {
        NSLog(@"coordinates are %f, %f", geoPoint.latitude, geoPoint.longitude);
    }
} errorHandler:^(Fault *fault) {
    // failure
}];
Backendless.sharedInstance()?.initApp(YOUR_APP_ID, apiKey: YOUR_IOS_API_KEY)
        
Backendless.shared.initApp(applicationId: YOUR_APP_ID, apiKey: YOUR_IOS_API_KEY)
        
// ***********************************************************************
// LOAD GEO POINTS
// ***********************************************************************
        
let geoQuery = BackendlessGeoQuery()
        
// search for geopoints in the "restaurants" category
geoQuery.categories = ["restaurants"]
        
// ….in 1 mile radius
geoQuery.radius = 1
geoQuery.setUnits(units: Units.MILES.rawValue)
        
// ….from this cool location
geoQuery.geoPoint = GeoPoint(latitude: 33.077497, longitude: -96.823402)
        
// ….where location rating is greater than 4 and they serve Italian
geoQuery.whereClause = "rating > 4 AND cuisine = 'Italian'"
        
Backendless.shared.geo.getPoints(geoQuery: geoQuery, responseHandler: { geoPoints in
    for geoPoint in geoPoints {
        print("coordinates are \(geoPoint.latitude), \(geoPoint.longitude)")
    }
}, errorHandler: { fault in
    // failure
})
Backendless.initApp(YOUR-APP-ID, YOUR-JS-API-KEY);

// ***********************************************************************
// LOAD GEO POINTS
// ***********************************************************************
var geoQuery = {};

// search for geopoints in the "restaurants" category
geoQuery.categories = [ 'restaurants' ];
// ...in 1 mile radius
geoQuery.radius = 1;
geoQuery.units = Backendless.Geo.UNITS.MILES;
// ...from this cool location
geoQuery.latitude = 33.077497;
geoQuery.longitude = -96.823402;
// ...where location rating is greater than 4 and they serve Italian
geoQuery.whereClause = 'rating > 4 AND cuisine = \'Italian\'';

Backendless.Geo.find( geoQuery )
 .then( function( geoPoints ) {
   geoPoints.forEach( function( point ) {
     console.log(`coordinates are ${ point.latitude }, ${ point.longitude }`)
   })
 })
 .catch( function( error ) {
 });
Backendless.initApp(YOUR_APP_ID, YOUR_ANDROID_API_KEY, YOUR_IOS_API_KEY);

// ***********************************************************************
// LOAD GEO POINTS
// ***********************************************************************
BackendlessGeoQuery geoQuery = BackendlessGeoQuery();
// search for geopoints in the “restaurants” category
geoQuery.categories = ["restaurants"];
// ….in 1 mile radius
geoQuery.radius = 1.0;
geoQuery.units = Units.MILES;
// ….from this cool location
geoQuery.latitude = 33.077497;
geoQuery.longitude = -96.823402;
// ….where location rating is greater than 4 and they serve Italian
geoQuery.whereClause = "rating > 4 AND cuisine = 'Italian'";
List geoPoints = await Backendless.Geo.getPoints(query: geoQuery);
geoPoints.forEach((geoPoint) => print("coordinates are ${geoPoint.latitude}, ${geoPoint.longitude}"));
// ***********************************************************************
// LOAD GEO POINTS
// ***********************************************************************
curl ‘https://api.backendless.com///geo/points?units=MILES&categories=restaurants&r=1&units=MILES&lat=33.077497&lon=-96.823402’
.NET
JAVA
KOTLIN
OBJECTIVE-C
SWIFT
JS
DART
REST
Backendless.InitApp( YOUR-APP-ID, YOUR-DOTNET-API-KEY );

// ***********************************************************************
// SEND A PUSH NOTIFICATION
// ***********************************************************************
PublishOptions publishOptions = new PublishOptions();
publishOptions.AddHeader( "android-ticker-text", "You just got a push notification!" );
publishOptions.AddHeader( "android-content-title", "This is a notification title" );
publishOptions.AddHeader( "android-content-text", "Push Notifications are cool" );
var messageStatus = await Backendless.Messaging.PublishAsync( "Welcome", publishOptions );


// ***********************************************************************
// SEND A PUSH NOTIFICATION WITH A TEMPLATE
// ***********************************************************************
await Backendless.Messaging.PushWithTemplateAsync( "WelcomeTemplate" );
Backendless.initApp( context, YOUR_APP_ID, YOUR_API_KEY );

// ***********************************************************************
// SEND A PUSH NOTIFICATION
// ***********************************************************************
PublishOptions publishOptions = new PublishOptions();
publishOptions.putHeader( "android-ticker-text", "You just got a push notification!" );
publishOptions.putHeader( "android-content-title", "This is a notification title" );
publishOptions.putHeader( "android-content-text", "Push Notifications are cool" );
MessageStatus messageStatus = Backendless.Messaging.publish( "default", "Welcome", publishOptions );

// ***********************************************************************
// SEND A PUSH NOTIFICATION WITH A TEMPLATE
// ***********************************************************************
Backendless.Messaging.pushWithTemplate( "WelcomeTemplate" );
Backendless.initApp(context, YOUR_APP_ID, YOUR_API_KEY)

// ***********************************************************************
// SEND A PUSH NOTIFICATION
// ***********************************************************************
val publishOptions = PublishOptions()
publishOptions.putHeader("android-ticker-text", "You just got a push notification!")
publishOptions.putHeader("android-content-title", "This is a notification title")
publishOptions.putHeader("android-content-text", "Push Notifications are cool")
val messageStatus = Backendless.Messaging.publish("default", "Welcome", publishOptions)

// ***********************************************************************
// SEND A PUSH NOTIFICATION WITH A TEMPLATE
// ***********************************************************************
Backendless.Messaging.pushWithTemplate("WelcomeTemplate")
[Backendless.shared initAppWithApplicationId:YOUR_APP_ID apiKey:YOUR_IOS_API_KEY];
    
// ***********************************************************************
// SEND A PUSH NOTIFICATION
// ***********************************************************************
    
PublishOptions *publishOptions = [PublishOptions new];
[publishOptions addHeaderWithName:@"ios-alert" value:@"Push Notifications are cool"];
[publishOptions addHeaderWithName:@"ios-badge" value:@1];
[publishOptions addHeaderWithName:@"ios-sound" value:@"default"];
[Backendless.shared.messaging publishWithChannelName:@"default" message:@"Welcome" publishOptions:publishOptions responseHandler:^(MessageStatus *messageStatus) {
    // success
} errorHandler:^(Fault *fault) {
    // failure
}];
    
// ***********************************************************************
// SEND A PUSH NOTIFICATION WITH A TEMPLATE
// ***********************************************************************
     
[Backendless.shared.messaging pushWithTemplateWithTemplateName:@"WelcomeTemplate" responseHandler:^(MessageStatus *messageStatus) {
    // success
} errorHandler:^(Fault *fault) {
    // failure
}];
Backendless.shared.initApp(applicationId: YOUR_APP_ID, apiKey: YOUR_IOS_API_KEY)
        
// ***********************************************************************
// SEND A PUSH NOTIFICATION
// ***********************************************************************
        
let publishOptions = PublishOptions()
publishOptions.addHeader(name: "ios-alert", value: "Push Notifications are cool")
publishOptions.addHeader(name: "ios-badge", value: 1)
publishOptions.addHeader(name: "ios-sound", value: "default")
        
Backendless.shared.messaging.publish(channelName: "default", message: "Welcome", publishOptions: publishOptions, responseHandler: { messageStatus in
    // success
}, errorHandler: { fault in
    // failure
})
        
// ***********************************************************************
// SEND A PUSH NOTIFICATION WITH A TEMPLATE
// ***********************************************************************
        
Backendless.shared.messaging.pushWithTemplate(templateName: "WelcomeTemplate", responseHandler: { messageStatus in
    // success
}, errorHandler: { fault in
    // failure
})
Backendless.initApp(YOUR-APP-ID, YOUR-JS-API-KEY);

// ***********************************************************************
// SEND A PUSH NOTIFICATION
// ***********************************************************************
var publishOptions = new Backendless.PublishOptions({
 headers: {
   'android-ticker-text'  : 'You just got a push notification!',
   'android-content-title': 'This is a notification title',
   'android-content-text' : 'Push Notifications are cool',
 }
});

var channelName = 'Welcome';

Backendless.Messaging.publish( channelName, publishOptions )
 .then( function( messageStatus ) {
   console.log( 'message has been published, message status - ' + messageStatus.status );
 })
 .catch( function( error ) {
 });

// ***********************************************************************
// SEND A PUSH NOTIFICATION WITH A TEMPLATE
// ***********************************************************************
var templateName = 'WelcomeTemplate';

Backendless.Messaging.pushWithTemplate( templateName )
 .then( function( messageStatus ) {  
 })
 .catch( function( error ) {
 });
Backendless.initApp(YOUR_APP_ID, YOUR_ANDROID_API_KEY, YOUR_IOS_API_KEY);

// ***********************************************************************
// SEND A PUSH NOTIFICATION
// ***********************************************************************
PublishOptions publishOptions = PublishOptions();
publishOptions.putHeader("android-ticker-text", "You just got a push notification!");
publishOptions.putHeader("android-content-title", "This is a notification title");
publishOptions.putHeader("android-content-text", "Push Notifications are cool");
MessageStatus messageStatus = await Backendless.Messaging.publish("Welcome", channelName: "default", publishOptions: publishOptions);

// ***********************************************************************
// SEND A PUSH NOTIFICATION WITH A TEMPLATE
// ***********************************************************************
await Backendless.Messaging.pushWithTemplate("WelcomeTemplate");
// ***********************************************************************
// SEND A PUSH NOTIFICATION
// ***********************************************************************
curl -H Content-Type:application/json -X POST \
-d ‘{“message”:”Hi Devices!”, \
“headers”:{ \
          “android-ticker-text”: “You just got a push notification!”, \
          “android-content-title”: “This is a notification title”,  \
          “android-content-text”: “Push Notifications are cool”  \
}}’  \
-v https://api.backendless.com///messaging/push/Welcome

// ***********************************************************************
// SEND A PUSH NOTIFICATION WITH A TEMPLATE
// ***********************************************************************
curl -H Content-Type:application/json -X POST \
-d ‘{“message”:”Hi Devices!”, \
“headers”:{ \
          “android-ticker-text”: “You just got a push notification!”, \
          “android-content-title”: “This is a notification title”,  \
          “android-content-text”: “Push Notifications are cool”  \
}}’  \
-v https://api.backendless.com///messaging/push/WelcomeTemplate
.NET
JAVA
KOTLIN
OBJECTIVE-C
SWIFT
JS
DART
REST
Backendless.InitApp( YOUR-APP-ID, YOUR-DOTNET-API-KEY ); 

// PUT DATA INTO CACHE
var countries = new [] { "Afghanistan", "Albania", "Algeria", "..." }; 
await Backendless.Cache.PutAsync( "countriesList", countries );

// EXTEND TIME IN CACHE
await Backendless.Cache.ExpireInAsync( "countriesList", 7200 );

// GET VALUE FROM CACHE
var valueFromCache = await Backendless.Cache.GetAsync( "countriesList" );
Backendless.initApp(context, YOUR_APP_ID, YOUR_API_KEY);

// PUT DATA INTO CACHE
List countries = Arrays.asList( "Afghanistan", "Albania", "Algeria", "..." );
Backendless.Cache.put( "countriesList", countries );

// EXTEND TIME IN CACHE
Backendless.Cache.expireIn( "countriesList", 7200 );

// GET VALUE FROM CACHE
List valueFromCache = Backendless.Cache.get( "countriesList", List.class );
Backendless.initApp(context, YOUR_APP_ID, YOUR_API_KEY)

// PUT DATA INTO CACHE
val countries = listOf("Afghanistan", "Albania", "Algeria", "...")
Backendless.Cache.put("countriesList", countries)

// EXTEND TIME IN CACHE
Backendless.Cache.expireIn("countriesList", 7200)

// GET VALUE FROM CACHE
val valueFromCache = Backendless.Cache.get("countriesList", List::class.java)
[Backendless.shared initAppWithApplicationId:YOUR_APP_ID apiKey:YOUR_IOS_API_KEY];
    
// ***********************************************************************
// PUT DATA INTO CACHE
// ***********************************************************************
    
NSArray *countries = @[@"Afghanistan", @"Albania", @"Algeria", @"..."];
[Backendless.shared.cache putWithKey:@"countriesList" object:countries responseHandler:^{
    // success
} errorHandler:^(Fault *fault) {
    // failure
}];
    
// ***********************************************************************
// EXTEND TIME IN CACHE
// ***********************************************************************
    
[Backendless.shared.cache expireInKey:@"countriesList" seconds:7200 responseHandler:^{
    // success
} errorHandler:^(Fault *fault) {
    // failure
}];
    
// ***********************************************************************
// GET VALUE FROM CACHE
// ***********************************************************************
    
[Backendless.shared.cache getWithKey:@"countriesList" responseHandler:^(id result) {
    // success
} errorHandler:^(Fault *fault) {
    // failure
}];
Backendless.shared.initApp(applicationId: YOUR_APP_ID, apiKey: YOUR_IOS_API_KEY)
        
// ***********************************************************************
// PUT DATA INTO CACHE
// ***********************************************************************
        
let countries = ["Afghanistan", "Albania", "Algeria", "..."]
Backendless.shared.cache.put(key: "countriesList", object: countries, responseHandler: {
    // success
}, errorHandler: { fault in
    // failure
})
        
// ***********************************************************************
// EXTEND TIME IN CACHE
// ***********************************************************************
        
Backendless.shared.cache.expireIn(key: "countriesList", seconds: 7200, responseHandler: {
    // success
}, errorHandler: { fault in
    // failure
})
        
// ***********************************************************************
// GET VALUE FROM CACHE
// ***********************************************************************
        
Backendless.shared.cache.get(key: "countriesList", responseHandler: { result in
    // success
}, errorHandler: { fault in
    // failure
 })
Backendless.initApp( YOUR-APP-ID, YOUR-JS-API-KEY );

// PUT DATA INTO CACHE
var countries = [ 'Afghanistan', 'Albania', 'Algeria', '...' ];
var key = 'countriesList';

var timeToLive = 3600; // default value is 7200 seconds

Backendless.Cache.put( key, countries, timeToLive )
 .then( function( result ) {
 })
 .catch( function( error ) {
 });

// EXTEND TIME IN CACHE
Backendless.Cache.expireIn( key, 7200 )
 .then( function( result ) {
 })
 .catch( function( error ) {
 });

// GET VALUE FROM CACHE
Backendless.Cache.get( 'countriesList' )
 .then( function( valueFromCache ) {
 })
 .catch( function( error ) {
 });
Backendless.initApp(YOUR_APP_ID, YOUR_ANDROID_API_KEY, YOUR_IOS_API_KEY);

// PUT DATA INTO CACHE
List countries = ["Afghanistan", "Albania", "Algeria", "..."];
await Backendless.Cache.put("countriesList", countries);

// EXTEND TIME IN CACHE
await Backendless.Cache.expireIn("countriesList", 7200);

// GET VALUE FROM CACHE
dynamic valueFromCache = await Backendless.Cache.get("countriesList",);
// INCREMENT COUNTER BY 1
curl ‘https://api.backendless.com///counters/ordersReceived/increment/get’ -X PUT

// INCREMENT COUNTER BY 5
curl ‘https://api.backendless.com///counters/ordersReceived/incrementby/get?value=5’ -X PUT

// GET COUNTER VALUE
curl ‘https://api.backendless.com///counters/ordersReceived’

// RESET COUNTER
curl ‘https://api.backendless.com///counters/ordersReceived/reset’ -X PUT
.NET
JAVA
KOTLIN
OBJECTIVE-C
SWIFT
JS
DART
REST
Backendless.InitApp( YOUR-APP-ID, YOUR-DOTNET-API-KEY ); 

// INCREMENT COUNTER BY 1
await Backendless.Counters.IncrementAndGetAsync( "ordersReceived" );

// INCREMENT COUNTER BY 5
await Backendless.Counters.AddAndGetAsync( "ordersReceived", 5 );

// GET COUNTER VALUE
var ordersReceived = await Backendless.Counters.GetAsync( "ordersReceived" );

// RESET COUNTER
await Backendless.Counters.ResetAsync( "ordersReceived" );
Backendless.initApp( context, YOUR_APP_ID, YOUR_API_KEY );

// INCREMENT COUNTER BY 1
Backendless.Counters.incrementAndGet( "ordersReceived" );

// INCREMENT COUNTER BY 5
Backendless.Counters.addAndGet( "ordersReceived", 5 );

// GET COUNTER VALUE
Long ordersReceived = Backendless.Counters.get( "ordersReceived" );

// RESET COUNTER
Backendless.Counters.reset( "ordersReceived" );
Backendless.initApp(context, YOUR_APP_ID, YOUR_API_KEY)

// INCREMENT COUNTER BY 1
Backendless.Counters.incrementAndGet("ordersReceived")

// INCREMENT COUNTER BY 5
Backendless.Counters.addAndGet("ordersReceived", 5)

// GET COUNTER VALUE
val ordersReceived = Backendless.Counters.get("ordersReceived")

// RESET COUNTER
Backendless.Counters.reset("ordersReceived")
[Backendless.shared initAppWithApplicationId:YOUR_APP_ID apiKey:YOUR_IOS_API_KEY];
    
// ***********************************************************************
// INCREMENT COUNTER BY 1
// ***********************************************************************
    
[Backendless.shared.counters incrementAndGetWithCounterName:@"ordersReceived" responseHandler:^(NSInteger countersValue) {
    // success
} errorHandler:^(Fault *fault) {
    // failure
}];
    
// ***********************************************************************
// INCREMENT COUNTER BY 5
// ***********************************************************************
    
[Backendless.shared.counters addAndGetWithCounterName:@"ordersReceived" value:5 responseHandler:^(NSInteger countersValue) {
    // success
} errorHandler:^(Fault *fault) {
    // failure
}];
    
// ***********************************************************************
// GET COUNTER VALUE
// ***********************************************************************\
    
[Backendless.shared.counters getWithCounterName:@"ordersReceived" responseHandler:^(NSInteger countersNumber) {
    // success
} errorHandler:^(Fault *fault) {
    // failure
}];
    
// ***********************************************************************
// RESET COUNTER
// ***********************************************************************
    
[Backendless.shared.counters resetWithCounterName:@"ordersReceived" responseHandler:^{
    // success
} errorHandler:^(Fault *fault) {
    // failure
}];
Backendless.shared.initApp(applicationId: YOUR_APP_ID, apiKey: YOUR_IOS_API_KEY)
        
// ***********************************************************************
// INCREMENT COUNTER BY 1
// ***********************************************************************
        
Backendless.shared.counters.incrementAndGet(counterName: "ordersReceived", responseHandler: { counterValue in
    // success
}, errorHandler: { fault in
    // failure
})
        
// ***********************************************************************
// INCREMENT COUNTER BY 5
// ***********************************************************************
        
Backendless.shared.counters.addAndGet(counterName: "ordersReceived", value: 5, responseHandler: { counterValue in
    // success
}, errorHandler: { fault in
    // failure
})
        
// ***********************************************************************
// GET COUNTER VALUE
// ***********************************************************************
        
Backendless.shared.counters.get(counterName: "ordersReceived", responseHandler: { counterValue in
    // success
}, errorHandler: { fault in
    // failure
})
        
// ***********************************************************************
// RESET COUNTER
// ***********************************************************************
        
 Backendless.shared.counters.reset(counterName: "ordersReceived", responseHandler: {
    // success
}, errorHandler: { fault in
    // failure
})
Backendless.initApp( YOUR-APP-ID, YOUR-JS-API-KEY );

// INCREMENT COUNTER BY 1
Backendless.Counters.incrementAndGet('ordersReceived')
 .then(function(ordersReceived) {
 })
 .catch(function(error) {
 });

// INCREMENT COUNTER BY 5
Backendless.Counters.addAndGet('ordersReceived', 5)
 .then(function(ordersReceived) {
 })
 .catch(function(error) {
 });

// GET COUNTER VALUE
Backendless.Counters.get('ordersReceived')
 .then(function(ordersReceived) {
 })
 .catch(function(error) {
 });

// RESET COUNTER
Backendless.Counters.reset('ordersReceived')
 .then(function(result) {  
 })
 .catch(function(error) {  
 });
Backendless.initApp(YOUR_APP_ID, YOUR_ANDROID_API_KEY, YOUR_IOS_API_KEY);

// INCREMENT COUNTER BY 1
await Backendless.Counters.incrementAndGet("ordersReceived");

// INCREMENT COUNTER BY 5
await Backendless.Counters.addAndGet("ordersReceived", 5);

// GET COUNTER VALUE
int ordersReceived = await Backendless.Counters.getValue("ordersReceived");

// RESET COUNTER
await Backendless.Counters.reset("ordersReceived");
// INCREMENT COUNTER BY 1
curl ‘https://api.backendless.com///counters/ordersReceived/increment/get’ -X PUT

// INCREMENT COUNTER BY 5
curl ‘https://api.backendless.com///counters/ordersReceived/incrementby/get?value=5’ -X PUT

// GET COUNTER VALUE
curl ‘https://api.backendless.com///counters/ordersReceived’

// RESET COUNTER
curl ‘https://api.backendless.com///counters/ordersReceived/reset’ -X PUT
.NET
JAVA
KOTLIN
OBJECTIVE-C
SWIFT
JS
DART
REST
Backendless.InitApp( YOUR-APP-ID, YOUR-DOTNET-API-KEY ); 

// ***********************************************************************
// BASIC EMAIL API
// ***********************************************************************
var subject = "Cool title of an email marketing campaign";
var message = "Hello!\n\n" +

              "This is an example of an email message delivered with Backendless.\n" +
              "Just something basic to give you an idea of how the API works,\n" +
              "however, there is so much more you can do with the platform\n\n" +

              "Enjoy!\n" +
              "Your friends @ Backendless";
var recipients = new List( new [] {"developers@world.com" } );
await Backendless.Messaging.SendHTMLEmailAsync( subject, message, recipients );

// ***********************************************************************
// EMAIL WITH TEMPLATE AND DYNAMIC USERS
// ***********************************************************************
var templateName = "CustomersWhoShowedInterest";
var recipientsQuery = $"shoppingCart.hasItems = 1 and lastVisit > '03/22/2019'";
await Backendless.Messaging.SendEmailWithTemplateAsync( templateName, recipientsQuery );
Backendless.initApp( context, YOUR_APP_ID, YOUR_API_KEY );

// ***********************************************************************
// BASIC EMAIL API
// ***********************************************************************
String subject = "Cool title of an email marketing campaign";
String message = "Hello!\n\n" +

        "This is an example of an email message delivered with Backendless.\n" +
        "Just something basic to give you an idea of how the API works,\n" +
        "however, there is so much more you can do with the platform\n\n" +

        "Enjoy!\n" +
        "Your friends @ Backendless";
List recipients = Arrays.asList( "developers@world.com" );
Backendless.Messaging.sendHTMLEmail( subject, message, recipients );

// ***********************************************************************
// EMAIL WITH TEMPLATE AND DYNAMIC USERS
// ***********************************************************************
String templateName = "CustomersWhoShowedInterest";
String recipientsQuery = "shoppingCart.hasItems = 1 and lastVisit > '03/22/2019'";
// TODO: send email with template
// Backendless.Messaging.sendEmailWithTemplate( templateName, recipientsQuery );
Backendless.initApp(context, YOUR_APP_ID, YOUR_API_KEY)

// ***********************************************************************
// BASIC EMAIL API
// ***********************************************************************
val subject = "Cool title of an email marketing campaign"
val message = "Hello!\n\n" +

        "This is an example of an email message delivered with Backendless.\n" +
        "Just something basic to give you an idea of how the API works,\n" +
        "however, there is so much more you can do with the platform\n\n" +

        "Enjoy!\n" +
        "Your friends @ Backendless"
val recipients = listOf("developers@world.com")
Backendless.Messaging.sendHTMLEmail(subject, message, recipients)

// ***********************************************************************
// EMAIL WITH TEMPLATE AND DYNAMIC USERS
// ***********************************************************************
val templateName = "CustomersWhoShowedInterest"
val recipientsQuery = "shoppingCart.hasItems = 1 and lastVisit > '03/22/2019'"
// TODO: send email with template
// Backendless.Messaging.sendEmailWithTemplate(templateName, recipientsQuery);
[Backendless.shared initAppWithApplicationId:YOUR_APP_ID apiKey:YOUR_IOS_API_KEY];
    
// ***********************************************************************
// BASIC EMAIL API
// ***********************************************************************
    
NSString *subject = @"Cool title of an email marketing campaign";
EmailBodyparts *body = [EmailBodyparts new];
body.htmlMessage = @"Hello\n\nThis is an example of an email message delivered with Backendless.\nJust something basic to give you an idea of how the API works,\nhowever, there is so much more you can do with the platform\n\nEnjoy!\nYour friends @ Backendless";
NSArray *recipients = @[@"developers@world.com"];
[Backendless.shared.messaging sendEmailWithSubject:subject bodyparts:body recipients:recipients attachments:nil responseHandler:^(MessageStatus *messageStatus) {
     // success
} errorHandler:^(Fault *fault) {
    // failure      
}];
    
// ***********************************************************************
// EMAIL WITH TEMPLATE AND DYNAMIC USERS
// ***********************************************************************
    
NSString *templateName = @"CustomersWhoShowedInterest";
EnvelopeWithQuery *envelope = [EmailEnvelope templateWithQuery];
[envelope setRecipientsQueryWithRecipientsQuery:@"shoppingCart.hasItems = 1 and lastVisit > '03/22/2019'"];        
[Backendless.shared.messaging sendEmailsWithTemplateName:templateName envelope:envelope responseHandler:^(MessageStatus *messageStatus) {
    // success
} errorHandler:^(Fault *fault) {
    // failure
}];
Backendless.shared.initApp(applicationId: YOUR_APP_ID, apiKey: YOUR_IOS_API_KEY)
        
// ***********************************************************************
// BASIC EMAIL API
// ***********************************************************************
        
let subject = "Cool title of an email marketing campaign"
let body = EmailBodyparts()
body.htmlMessage = """
Hello!
 
This is an example of an email message delivered with Backendless.
Just something basic to give you an idea of how the API works,
however, there is so much more you can do with the platform
 
Enjoy!
Your friends @ Backendless
"""
let recipients = ["developers@world.com"]
Backendless.shared.messaging.sendEmail(subject: subject, bodyparts: body, recipients: recipients, attachments: nil, responseHandler: { messageStatus in
    // success
}, errorHandler: { fault in
   // failure
})
        
// ***********************************************************************
// EMAIL WITH TEMPLATE AND DYNAMIC USERS
// ***********************************************************************
 
let templateName = "CustomersWhoShowedInterest"
let envelope = EmailEnvelope.templateWithQuery()
envelope.setRecipientsQuery(recipientsQuery: "shoppingCart.hasItems = 1 and lastVisit > '03/22/2019'")
Backendless.shared.messaging.sendEmails(templateName: templateName, envelope: envelope, responseHandler: { messageStatus in
    // success
}, errorHandler: { fault in
    // failure
})
Backendless.initApp(YOUR-APP-ID, YOUR-JS-API-KEY);

// ***********************************************************************
// BASIC EMAIL API
// ***********************************************************************
var subject = 'Cool title of an email marketing campaign';
var message = 'Hello!\n\n' +

 'This is an example of an email message delivered with Backendless.\n' +
 'Just something basic to give you an idea of how the API works,\n' +
 'however, there is so much more you can do with the platform\n\n' +

 'Enjoy!\n' +
 'Your friends @ Backendless';

var recipients = ['developers@world.com'];
var bodyParts = new Backendless.Bodyparts( { htmlmessage: message } );

Backendless.Messaging.sendEmail( subject, bodyParts, recipients )
 .then( function( response ) {  
 })
 .catch( function( error ) { 
 });

// ***********************************************************************
// EMAIL WITH TEMPLATE AND DYNAMIC USERS
// ***********************************************************************
var templateName = 'CustomersWhoShowedInterest';
var recipientsQuery = 'shoppingCart.hasItems = 1 and lastVisit > \'03/22/2019\'';

Backendless.Messaging.sendEmailWithTemplate( templateName, recipientsQuery )
 .then( function( response ) {
 })
 .catch( function( error ) {
 });
Backendless.initApp(YOUR_APP_ID, YOUR_ANDROID_API_KEY, YOUR_IOS_API_KEY);

// ***********************************************************************
// BASIC EMAIL API
// ***********************************************************************
String subject = "Cool title of an email marketing campaign";
String message = """Hello!\n\n

        This is an example of an email message delivered with Backendless.\n
        Just something basic to give you an idea of how the API works,\n
        however, there is so much more you can do with the platform\n\n

        Enjoy!\n
        Your friends @ Backendless""";
List recipients = ["developers@world.com"];
await Backendless.Messaging.sendHTMLEmail(subject, message, recipients);

// ***********************************************************************
// EMAIL WITH TEMPLATE AND DYNAMIC USERS
// ***********************************************************************
String templateName = "CustomersWhoShowedInterest";
String recipientsQuery = "shoppingCart.hasItems = 1 and lastVisit > '03/22/2019'";
// TODO: send email with template
// await Backendless.Messaging.sendEmailWithTemplate(templateName, recipientsQuery);
// ***********************************************************************
// BASIC EMAIL API
// ***********************************************************************
curl ‘https://api.backendless.com/F351D657-23B3-D14F-FF45-9DCB5345CE00/2F593D90-ED1A-340F-FF42-047920591F00/messaging/email’ \
-H ‘Content-Type: application/json’ \
-d ‘{“subject”:”Cool title of an email marketing campaign”,”bodyparts”:{“htmlmessage”:”Hello!\n\nThis is an example of an email message delivered with Backendless.\nJust something basic to give you an idea of how the API works,\nhowever, there is so much more you can do with the platform\n\nEnjoy!\nYour friends @ Backendless”},”to”:[“developers@world.com”]}’
Backendless Your Way

Your Place or Ours
(or a Little of Both)

Whether you’re looking to start with a cloud-based, full-service app development solution, consolidate your backend servers and expand with a platform hosted on your own servers, or a mixture of both, we have the perfect product for you.

Backendless Cloud

A centralized, secure, cloud-based installation of the Backendless Platform.

Learn more
Backendless Pro

A dedicated instance on your on-premise or cloud servers with on-call support.

Learn more
Managed Backendless

The Backendless Platform, installed anywhere & managed by our team.

Learn more

Client Showcase

We serve clients of all sizes spanning dozens of industries. From small startups with one or two team members to large multinational corporations with millions of users worldwide, Backendless has experience with a business just like yours.

FindMy+1

Matt Boring, founder of FindMy+1, had an app idea. It was not just any app idea, however. It was one of those ideas that wouldn’t go away, that just felt like it would work. There was just one problem – Matt isn’t a developer. So Matt turned to the Backendless team to bring his app to life for him.

Matt Boring, founder of FindMy+1, had an app idea. It was not just any app idea, however. It was one of those ideas that wouldn’t go away, that just felt like it would work. There was just one problem – Matt isn’t a developer. So Matt turned to the Backendless team to bring his app to life for him.

Learn More
StayShure

StayShure, an expert Bubble agency, needed to overcome the inability of Bubble’s built-in backend to process complex data. Needing a powerful backend and database to bolster their clients’ apps, they turned to Backendless, marrying two leading no-code platforms in an innovative way.

StayShure, an expert Bubble agency, needed to overcome the inability of Bubble’s built-in backend to process complex data. Needing a powerful backend and database to bolster their clients’ apps, they turned to Backendless, marrying two leading no-code platforms in an innovative way.

Learn More
Delevante Technologies

Modernizing legacy software with a large, jumbled codebase presents a massive challenge. Delevante Technologies chose Backendless to build a bolt-on feature, then leveraged Backendless to grow the project scope into a full rebuild on the platform.

Modernizing legacy software with a large, jumbled codebase presents a massive challenge. Delevante Technologies chose Backendless to build a bolt-on feature, then grew the project scope into a full rebuild on the platform.

Learn More
Bettercast.io

When the pandemic struck, industries across the world saw a massive disruption to their conference cycle. Ben Powell created Bettercast.io in just months to change the dynamic and open new avenues for virtual events across the world.

When the pandemic struck, industries across the world saw a massive disruption to their conference cycle. Ben Powell created Bettercast.io in just months to change the dynamic and open new avenues for virtual events.

Learn More
Second Warehouse

Second Warehouse makes it much easier to coordinate equipment rental for bands and musical artists. Their web app, built with a Backendless backend, provides a marketplace for organizers and vendors to negotiate prices and delivery dates for all of the AV equipment the band needs while on tour.

Second Warehouse makes it much easier to coordinate equipment rental for bands and musical artists. Their web app, built with a Backendless backend, provides a marketplace for organizers and vendors.

Learn More
Bank al Etihad

Bank al Etihad uses Backendless to power its mobile app as they offer financial services such as checking and savings accounts, credit cards, and home and business loans to individuals, entrepreneurs, local and global businesses, and the next generation of female leaders.

Bank al Etihad uses Backendless to power its mobile app as they offer financial services to individuals, entrepreneurs, local and global businesses, and the next generation of female leaders.

Learn More
FUNX

Digital Copel by FUNX is packed full of fun and educational lessons for young children ages 0-6 – although the app developer guarantees older children and adults alike will also find them challenging! Read on to learn how FUNX has leveraged Backendless technology to make learning fun.

Digital Copel by FUNX is packed full of fun and educational lessons for young children ages 0-6. Read on to learn how FUNX has leveraged Backendless technology to make learning fun.

Learn More
YTCount

Starting as a fun side project, YTCount has grown to over 60,000 monthly active users on iOS alone. YTCount shows the powerful versatility and scalability of Backendless to support a startup from infancy through explosive growth.

Starting as a fun side project, YTCount has grown to over 60,000 monthly active users on iOS alone. YTCount shows the scalability of Backendless to support a startup from infancy through explosive growth.

Learn More

What's New

We are constantly adding educational and informative content to our blog, including examples, tutorials, and user success stories. Check out our latest offerings below, or click here to see all posts.

The next great app is waiting. No code, no limits.