title: Storage -> Base API
## Base API ##
* [list_containers](#containers)
* [list_container_object](#list_container_object)
* [get_container](#get_container)
* [get_object](#get_object)
* [create_container](#create_container)
* [upload_object](#upload_object)
* [upload_object_via_stream](#upload_object_via_stream)
* [download_object](#download_object)
* [download_object_as_stream](#download_object_as_stream)
* [delete_container](#delete_container)
* [delete_object](#delete_object)
list_containers
**Method signature**:
[driver.list_containters()](/apidocs/current/libcloud.storage.base.StorageDriver.html#list_containters)
**Description**: Return a list of all the containers belonging to your account.
The returned object is actually an instance of `LazyList` class which implements
an iterator interface and transparently handles pagination for you.
list_container_object
[driver.list_container_object()](/apidocs/current/libcloud.storage.base.StorageDriver.html#list_container_object)
**Description**: Return a list of all the object inside the container.
Similar to the list_containers this method also returns a `LazyList` instance.
get_container>
[driver.get_container(container_name)](/apidocs/current/libcloud.storage.base.StorageDriver.html#get_container)
**Description**: Return a `Container` instance. This method is useful if you
know the container name and want perform operations on it. Usually it is also
more efficient then calling `list_containers()` and manually iterating over the
list to find the container you are interested in.
get_object
[driver.get_object(container_name, object_name)](/apidocs/current/libcloud.storage.base.StorageDriver.html#get_object)
**Description**: Return an `Object` instance. Similar to the `get_container`
this method is also useful if you know the name of the object and the container
holding this object and you want to perform operations on it.
create_container
[driver.create_container(container_name)](/apidocs/current/libcloud.storage.base.StorageDriver.html#create_container)
**Description**: Create a new container.
upload_object
[driver.upload_object(file_path, container, object_name, extra=None, verify_hash)](/apidocs/current/libcloud.storage.base.StorageDriver.html#upload_object),
[container.upload_object(file_path, object_name, extra=None, verify_hash)](/apidocs/current/libcloud.storage.base.Container.html#upload_object)
**Description**: Upload a file stored on a disk.
upload_object_via_stream
[driver.upload_object_via_stream(iterator, container, object_name, extra)](/apidocs/current/libcloud.storage.base.StorageDriver.html#upload_object_via_stream),
[container.upload_object_via_stream(file_path, object_name, extra=None, verify_hash)](/apidocs/current/libcloud.storage.base.Container.html#upload_object_via_stream)
**Description**: Upload an object using an iterator. If a provider supports
chunked transfer encoding this method doesn't require you to know the object
size in advance. This allows you to directly stream data to the provider without
buffering it on disk.
Good example of this are backups - you can directly stream tar output to the
provider without buffering or temporary storing data on the disk.
**Note: If the provider doesn't support chunked transfer encoding this function
will first exhaust your iterator to determine the file size and then send it to
the provider. Exhausting the iterator means that the whole iterator content
must be buffered in the memory which might lead to the resource exhaustion.**
download_object
[driver.download_object(obj, destination_path, overwrite_existing, delete_on_failure)](/apidocs/current/libcloud.storage.base.StorageDriver.html#download_object),
[container.download_object(obj, destination_path, overwrite_existing, delete_on_failure)](/apidocs/current/libcloud.storage.base.Container.html#download_object),
[object.download(destination_path, overwrite_existing, delete_on_failure)](/apidocs/current/libcloud.storage.base.Object.html#download_object)
**Description**: Download an object and save it to a file on disk.
download_object_as_stream
[driver.download_object_as_stream(obj, chunk_size)](/apidocs/current/libcloud.storage.base.StorageDriver.html#download_object_as_stream),
[container.download_object_as_stream(obj, chunk_size)](/apidocs/current/libcloud.storage.base.Container.html#download_object_as_stream),
[object.as_stream(chunk_size)](/apidocs/current/libcloud.storage.base.Object.html#as_stream)
**Description**: Return a generator which yields object data. This method is
useful if you don't want to directly save object on disk and want to perform
some other operations with it.
delete_container
[driver.delete_container(container)](/apidocs/current/libcloud.storage.base.StorageDriver.html#delete_container),
[container.delete()](/apidocs/current/libcloud.storage.base.Container.html#delete)
**Description**: Delete a container.
delete_object
[driver.delete_object(obj)](/apidocs/current/libcloud.storage.base.StorageDriver.html#delete_object),
[container.delete_object(obj)](/apidocs/current/libcloud.storage.base.Container.html#delete_object),
[object.delete()](/apidocs/current/libcloud.storage.base.Object.html#delete)
**Description**: Delete an object.