universal api

Simplify your integration strategy

SIGN UP FOR FREE

WE HELP THOUSANDS OF DEVELOPERS WITH INTEGRATIONS

Code once, integrate many

Develop once with Kloudless’s universal API and connect your application to many services. We maintain the integrations so you don’t have to.

SIGN UP
VIEW CONNECTORS
one api to integrate dropbox box google salesforce onedrive sharepoint o365 servicenow api

Varying documentation, object data, features, data formatting, and more make it challenging to navigate API integrations.

Kloudless manages all the complexities while making sure that you have a feature and data rich experience.

You (and your developer team) only need to build with our clean, universal API in order to get all the integrations you want.

Built by developers for developers

Kloudless provides a clean, RESTful API with all the features and data you need. We take care of the heavy lifting so you can focus on building great products.

SIGN UP
VIEW FILE STORAGE DOCS
VIEW CRM DOCS
PREVIEW FEATURES
  • Files
  • Folders
  • Links
  • Access Controls
  • Search
  • Python
  • NodeJS
  • Java/Android
  • iOS
  • cURL
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()
              
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()
              
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
              
var kloudless = require('kloudless')('your-api-key-goes-here!');
              
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"
});
              
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",
});
              
// 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";

// 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();
              
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);
              
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)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];
}
              
- (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);
}
              
- (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);
}
              
# 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"
              
# 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"
              
# 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"
              

Our integration products

Tools built to reduce engineering overhead and accelerate your time to market.

Loved by developers, trusted by enterprises

SIGN UP
LEARN MORE
api_pricingcheck@2x

Sensitive data encrypted at rest with 4096-bit RSA keys.

api_pricingcheck@2x

All data encrypted in transit. Files are never stored on our servers.

api_pricingcheck@2x

Multiple security tiers, with hardened servers and locked-down firewalls.

api_pricingcheck@2x

Dedicated ops team on call 24/7.

api_pricingcheck@2x

On-premises, hosted in your own private infrastructure.

api_pricingcheck@2x

No data ever passes through Kloudless infrastructure.

api_pricingcheck@2x

Inherits your security and regulatory compliance promises.

api_pricingcheck@2x

24/7 support and Service Level Agreement available.

We’re your partners

Our entire team is dedicated to helping you build your integration strategy, accelerate development, and increase your solution’s market coverage.

“Kloudless lets us serve a broad range of customers without needing to devote our resources to behind-the-scenes integration work. It lets us focus on what we do best. It’s a win for everyone!”
Ian Fisher, CTO
taptera