Your pain-free integration strategy

The all-in-one REST API for the developer’s integration needs.

Trusted by 15,000 + developers,
loved by enterprises.

Your fastest route to native integrations

The Kloudless Platform is your end-to-end integration solution with a deep set of REST endpoints and pre-built, drop-in UIs.

Working with multiple third-party APIs creates a "cloudy" experience with disparate data models, documentation, and features.

Minimize development effort and get to market faster by letting Kloudless handle the complexities.

Kloudless takes care of updates and maintenance, so you don’t have to.

Out-of-the-box, native integrations

Integrate one and scale to many services by coding just one time.

Kloudless is built by developers, for developers.

Building and maintaining integrations can be repetitive, tedious, and messy. We clean it all up into a simple, easy-to-use RESTful API, so that you can focus on more important things.

View Documentation for: File Storage | CRM
					# Retrieve metadata on a file
curl https://api.kloudless.com/v1/accounts/$ACCT_ID/storage/files/$FILE_ID \
    -H "Authorization: ApiKey $API_KEY"
 
# Download the file's contents
curl https://api.kloudless.com/v1/accounts/$ACCT_ID/storage/files/$FILE_ID/contents \
    -H "Authorization: ApiKey $API_KEY"
 
# Move the file to the root folder of another account
curl -X PATCH https://api.kloudless.com/v1/accounts/$ACCT_ID/storage/files/$FILE_ID \
    -d '{"parent_id": "root", "account": $NEW_ACCT_ID}' \
    -H "Authorization: ApiKey $API_KEY" \
    -H "Content-Type: application/json"
				
					import kloudless; kloudless.configure(api_key=API_KEY)
account = kloudless.Account.all()[0]
 
# Retrieve metadata on a file
kfile = account.files.retrieve(file_id)
 
# Download the file's contents
data = kfile.contents().content
 
# Move the file to the root folder of a different account
kfile.parent_id = "root"
kfile.account = kloudless.Account.all()[1].id
kfile.save()
				
					var kloudless = require('kloudless')(api_key);
 
// Retrieve metadata on a file
kloudless.files.get({
  "account_id": account_id,
  "file_id": file_id,
  }, function(err, res) {
    metadata = res;
  }
);
 
// Download file contents
kloudless.files.contents({
  "account_id": account_id,
  "file_id": file_id,
  }, function(err, filestream) {
    filecontents = "";
    filestream.on('data', function(chunk){
      filecontents += chunk;
    });
    filestream.on('end',function(){
      console.log("finished reading file!");
    });
  }
);
 
// Move the file to the root folder of a different account
kloudless.files.move({
  "account_id": account_id,
  "new_account_id": other_account_id,
  "parent_id": "root"
});
				
					Kloudless.apiKey = "API KEY";
 
// Retrieve metadata on a file
File fileInfo = File.retrieve(fileId, accountId, params);
 
// Download the file's contents to a path
KloudlessResponse response = File.contents(fileId, accountId, params);
ByteArrayOutputStream outputStream = response.getResponseStream();
FileOutputStream out = new FileOutputStream(path);
outputStream.writeTo(out);
out.close();
				
					- (void)getFileMetadata
{
  // Retrieve Metadata on a file
  NSString *fileId = "abcdef";
  ;
}
- (void)restClient:(KClient*)client getFileLoaded:
    (NSDictionary *)fileInfo
{
  // The metadata is returned in the delegate method
  NSLog(@"File Info: %@", fileInfo);
}
 
- (void)downloadFile
{
  // Download a file's contents
  NSString *fileId = "abcdef";
  ;
}
- (void)restClient:(KClient*)client downloadFileLoaded:
    (NSData *)fileData
{
  // The contents are returned in the delegate method
  NSString *path = "PATH";
  [fileData writeToFile:path atomically:YES];
}
				
					import kloudless; kloudless.configure(api_key=API_KEY)
account = kloudless.Account.all()[0]
 
# Retrieve the root folder's contents
items = account.folders().contents()
 
# Create a folder within the root folder.
new_folder = account.folders.create(name="New Folder", parent_id="root")
 
# Rename the folder
new_folder.name = "Not-so-new Folder"
new_folder.save()
				
					var kloudless = require('kloudless')(api_key);
 
// Retrieve the root folder's contents
kloudless.folders.contents({
  "account_id": account_id,
  "folder_id": "root"
  }, function(err, res) {
    contents = res;
  }
);
 
// Create a folder within the root folder.
var new_folder_id;
kloudless.folders.create({
  "account_id": account_id,
  "name": "New Folder",
  "parent_id": "root"
  }, function(err, res) {
    new_folder_id = res['id'];
  }
);
 
// Rename the folder
kloudless.folders.rename({
  "account_id": account_id,
  "folder_id": new_folder_id,
  "name": "Not-so-new Folder",
});
				
					Kloudless.apiKey = "API KEY";
 
// Retrieve folder's contents
MetadataCollection contents = Folder.contents(folderId, accountId,
    params);
 
// Create a folder within the root folder
HashMap params = new HashMap();
params.put("name", "new new folder");
params.put("parent_id", "root");
Folder folderInfo = Folder.create(accountId, params);
 
// Rename the folder
String newFolderId = folderInfo.id;
params.put("name", "new folder name");
Folder newFolderInfo = Folder.save(newFolderId, accountId, params);
				
					- (void)testGetFolderContents:(id)sender
{
    // Retrieve the contents of the folder 'root'
    NSString *folderId = @"root";
    ;
}
- (void)restClient:(KClient*)client getFolderContentsLoaded:
    (NSDictionary *)folderContents
{
    // The contents of the folder will be returned
    NSLog(@"Folder Contents: %@", folderContents);
}
 
- (void)testCreateFolder:(id)sender
{
    // Create a folder named "upload" in the "root" folder
    NSDictionary *params = [NSDictionary
        dictionaryWithObjectsAndKeys:@"uploadfolder", @"name",
        @"root", @"parent_id", nil];
    ;
}
- (void)restClient:(KClient*)client createFolderLoaded:
    (NSDictionary *)folderInfo
{
    // The new folder metadata will be returned
    NSLog(@"Folder Info: %@", folderInfo);
}
 
- (void)testUpdateFolder:(id)sender
{
    // Update the folder with id "12345" with a new name
    NSString *folderId = @"12345";
    NSString *folderName = @"New Folder Name";
 
    NSDictionary *params = [NSDictionary dictionaryWithObject:
      folderName forKey:@"name"];
    ;
}
- (void)restClient:(KClient*)client updateFolderLoaded:
    (NSDictionary *)folderInfo
{
    // The new folder metadata will be returned
    NSLog(@"Folder Info: %@", folderInfo);
}
				
					# Retrieve the root folder's contents
curl https://api.kloudless.com/v1/accounts/$ACCT_ID/storage/folders/root/contents \
    -H "Authorization: ApiKey $API_KEY"
 
# Create a folder within the root folder.
curl -X POST https://api.kloudless.com/v1/accounts/$ACCT_ID/storage/folders \
    -d '{"parent_id": "root", "name": "New Folder"}' \
    -H "Authorization: ApiKey $API_KEY" \
    -H "Content-Type: application/json"
 
# Rename the folder
curl -X PATCH https://api.kloudless.com/v1/accounts/$ACCT_ID/storage/folders/$FOLDER_ID \
    -d '{"name": "Not-so-new Folder"}' \
    -H "Authorization: ApiKey $API_KEY" \
    -H "Content-Type: application/json"
				
					import kloudless; kloudless.configure(api_key=API_KEY)
account = kloudless.Account.all()[0]
 
# Create a link
link = account.links.create(file_id=file_id)
 
# Update a link to be inactive
link = account.links.retrieve(link_id)
link.active = False
link.save()
 
# Delete a link
link.delete()
				
					var kloudless = require('kloudless')(api_key);
 
// Create a link
var link_id;
kloudless.links.create({
  "account_id": account_id,
  "file_id": file_id
  }, function(err, res){
    link_id = res['id'];
  }
);
 
// Update a link to be inactive
kloudless.links.update({
  "account_id": account_id,
  "link_id": link_id,
  "active": false
  }
);
 
// Delete a link
kloudless.links.delete({
  "account_id": account_id,
  "link_id": link_id
});
				
					Kloudless.apiKey = "API KEY";
 
// Create a link
params.put("file_id", fileId);
Link linkInfo = Link.create(accountId, params);
 
// Update a link to be inactive
String linkId = linkInfo.id;
params.put("active", false);
linkInfo = Link.save(linkId, accountId, params);
 
// Delete a link
Link.delete(linkId, accountId, params);
				
					- (void)testCreateLink:(id)sender
{
    // Create a link from the file with id "12345"
    NSString *fileId = @"12345";
    NSDictionary *params = [NSDictionary dictionaryWithObject:
        fileId forKey:@"file_id"];
    ;
}
- (void)restClient:(KClient*)client createLinkLoaded:
    (NSDictionary *)linkInfo
{
    // The Link metadata will be returned
    NSLog(@"Link Info: %@", linkInfo);
}
 
- (void)testUpdateLink:(id)sender
{
    // Update a link to be inactive
    NSString *linkId = @"67890";
    NSDictionary *params = [NSDictionary dictionaryWithObject:NO
        forKey:@"active"];
    ;
}
- (void)restClient:(KClient*)client updateLinkLoaded:
  (NSDictionary *)linkInfo
{
    // The Link metadata will be returned
    NSLog(@"Link Info: %@", folderInfo);
}
				
					# Create a link
curl -X POST https://api.kloudless.com/v1/accounts/$ACCT_ID/storage/links \
    -d '{"file_id": "$FILE_ID"}' \
    -H "Authorization: ApiKey $API_KEY" \
    -H "Content-Type: application/json"
 
# Update a link to be inactive
curl -X PATCH https://api.kloudless.com/v1/accounts/$ACCT_ID/storage/links/$LINK_ID \
    -d '{"active": false}' \
    -H "Authorization: ApiKey $API_KEY" \
    -H "Content-Type: application/json"
 
# Delete a link
curl -X DELETE https://api.kloudless.com/v1/accounts/$ACCT_ID/storage/links/$LINK_ID \
    -H "Authorization: ApiKey $API_KEY"
				
					import kloudless; kloudless.configure(api_key=API_KEY)
account = kloudless.Account(id=account_id)
 
# Create a link with a password
link = account.links.create(file_id=file_id, password="p4ssw0rd")
 
# Update the link's expiration date to 24 hours from now.
from datetime import datetime, timedelta
link.expiration = datetime.utcnow() + timedelta(days=1)
link.save()
 
# Print the URL of the link
print link.url
				
					// Create a link with a password
var link_id;
var link_url;
kloudless.links.create({
  "account_id": account_id,
  "file_id": file_id,
  "password": "p4ssw0rd",
  }, function(err, res){
    link_id = res['id'];
    link_url = res['url'];
  }
);
 
// 24 hours from right now
var expiration_milliseconds = Date.now() + 86400000;
 
// Update the link's expiration date to 24 hours from now
kloudless.links.update({
  "account_id": account_id,
  "link_id": link_id,
  "expiration": expiration_milliseconds
  }
);
 
// Print the URL of the link
console.log(link_url);
				
					Kloudless.apiKey = "API KEY";
 
// Create a link with a password
HashMap params = new HashMap();
params.put("file_id", fileId);
params.put("password", "p4ssw0rd");
Link linkInfo = Link.create(accountId, params);
 
// Print the URL of the link
System.out.println(linkInfo.url);

				
					- (void)testCreateLink:(id)sender
{
    // Create a link from the file with id "12345" with a password
    NSString *fileId = @"12345";
    NSString *password = @"p4ssw0rd";
    NSDictionary *params = [NSDictionary
        dictionaryWithObjectsAndKeys:fileId, @"file_id",
        password, @"password", nil];
    ;
}
- (void)restClient:(KClient*)client createLinkLoaded:
    (NSDictionary *)linkInfo
{
    // The Link metadata will be returned
    NSLog(@"Link Info: %@", linkInfo);
}
				
					# Create a link with a password
curl -X POST https://api.kloudless.com/v1/accounts/$ACCT_ID/storage/links \
    -d '{"file_id": "$FILE_ID", "password": "p4ssw0rd"}' \
    -H "Authorization: ApiKey $API_KEY" \
    -H "Content-Type: application/json"
 
# Update the link's expiration date to 24 hours from now.
curl -X PATCH https://api.kloudless.com/v1/accounts/$ACCT_ID/storage/links/$LINK_ID \
    -d "{\"expiration\": \"$(date -v'+1d' -u +'%Y-%m-%dT%H:%M:%SZ')\"}" \
    -H "Authorization: ApiKey $API_KEY" \
    -H "Content-Type: application/json"
				
					import kloudless; kloudless.configure(api_key=API_KEY)
account = kloudless.Account(id=account_id)
 
# Retrieve metadata of search results for 'pdf'.
items = account.search.all(q="pdf")
 
# Search across multiple accounts simultaneously
accounts = kloudless.Account(id="id_1,id_2,id_3")
items = accounts.search.all(q="test")
				
					var kloudless = require('kloudless')(api_key);
 
// Retrieve metadata of search results for 'pdf'
kloudless.accounts.search({
  "account_id": account_id
  "q": "pdf"
  }, function(err, res) {
    metadata = res;
  }
);
 
// Search across multiple accounts simultaneously
kloudless.accounts.search({
  "account_id": "id_1,id_2,id_3",
  "q": "test"
});
				
					Kloudless.apiKey = "API KEY";
 
// Retrieve metadata of search results for 'pdf'
HashMap params = new HashMap();
params.put("query", "pdf");
MetadataCollection results = Account.search(accountId, params);
 
// Search across multiple accounts simultaneously
String accountIds = "123,456";
MetadataCollection multipleResults = Account.search(accountId,
    params);

				
					- (void)searchAccount
{
  // Retrieve metadata of search results for 'pdf'
  NSString *query = "pdf";
  ;
}
- (void)restClient:(KClient*)client searchAccountLoaded:
    (NSDictionary *)searchInfo
{
  // The metadata is returned in the delegate method
  NSLog(@"Search Results: %@", searchInfo);
}
				
					# Retrieve metadata of search results for 'pdf'.
curl "https://api.kloudless.com/v1/accounts/$ACCT_ID/storage/search?q=pdf" \
    -H "Authorization: ApiKey $API_KEY"
 
# Search across multiple accounts simultaneously
curl "https://api.kloudless.com/v1/accounts/$ID1,$ID2,$ID3/storage/search?q=pdf" \
    -H "Authorization: ApiKey $API_KEY"
				

Popular Kloudless Solutions

Data Security

Monitor organization-wide activity in real time to power your security solution.

Data Loss Prevention
User Behavior Analytics
Incident Management

Sales Enablement

Empower sales teams to win more deals with access to sales data from dozens of services.

Calendar Sync
Sales Collateral Management
CRM Enhancement

Project Management

Build seamless workflows across services to make your users more productive.

Task Management Calendar
Sales Collateral Management
CRM Enhancement