Telnyx Storage: Object Storage — Full Documentation
Complete page content for Object Storage (Storage section) of the Telnyx developer docs (https://developers.telnyx.com). Root index: https://developers.telnyx.com/llms.txt · Lightweight index for this subsection: https://developers.telnyx.com/development/llms/storage-object-storage-llms-txt.md
Overview
Overview
Source: https://developers.telnyx.com/docs/cloud-storage/overview.mdS3-compatible object storage for files, media, backups, and static assets — reached over the AWS S3 API you already know, or directly from inside a Telnyx Edge Function. With Telnyx Cloud Storage, you can:
- Use your existing S3 tooling — the AWS SDKs, AWS CLI, and third-party S3 clients work unchanged; authenticate with your Telnyx API key
-
Store data in the US, EU, or AP — buckets in
us-central-1,us-east-1,us-west-1,eu-central-1, andap-southeast-1 - Reach buckets from Edge Compute — bind a bucket to a function and read or write objects with no S3 keys in your code
- Control access and lifecycle — presigned URLs, public buckets, object lock and retention, SSE-C encryption, and lifecycle rules
- Pay for what you use — a monthly free tier plus simple usage-based pricing Create a bucket, generate S3 credentials, and upload your first object Bind a bucket and read or write objects with no S3 keys in your code Copy-paste examples for Node, Python, Java, Go, Ruby, PHP, .NET, and Elixir Regional endpoints and how requests are routed
Ways to access
From inside a Telnyx Edge Function — pre-authenticated, no S3 keys Node, Python, Java, Go, Ruby, PHP, .NET, or Elixir Scripting and one-off operations from a terminal Move data at scale without codeLearn the essentials
Some behavior differs from AWS S3 — review these before going to production:- Compatibility matrix — which S3 operations are supported, by region
- Authentication — your Telnyx API key as the S3 credential
- Presigned URLs — the Telnyx-specific way to generate them safely
- Billing — storage and request pricing
Get Started
Quick Start Guide
Source: https://developers.telnyx.com/docs/cloud-storage/quick-start.mdThere are five ways to get started on Telnyx cloud storage:
- Cloud Storage binding — from inside a Telnyx Edge Function
- AWS SDK
- AWS CLI
- S3-compatible third-party tools
- Telnyx Mission Control Portal
Available Regions
Specify the region via the
--endpoint-url flag in the AWS CLI or the equivalent SDK configuration. See API Endpoints & Organization for details on regional behavior.
Some features are currently available only in US and APAC regions, including presigned URLs, public buckets, and SSL certificates. EU buckets do not support these features. See the compatibility matrix for full details.
Use a Cloud Storage binding
Bind an existing bucket to a Telnyx Edge Function and read, write, and list objects through a pre-authenticatedenv binding — the runtime injects the credential, so your code holds no S3 keys. This is the fastest path if your code already runs on Telnyx Edge Compute.
See Use a bucket from an Edge Function to declare the binding and call env.MY_BUCKET.get/put/head/delete/list.
Use the AWS SDK
Telnyx Cloud Storage is S3-compatible, so the AWS SDKs work against it. See the ready-to-run examples for Node, Python, Java, Go, Ruby, PHP, .NET, and Elixir.Use the AWS CLI
Follow the procedure here. Use a recent AWS CLI v2. The Cloud Storage endpoint accepts the AWS CLI’s default checksums (CRC64NVME) on bothput-object and aws s3 cp multipart uploads.
- Inject your Telnyx API key twice, once as access key and once as secret key.
- Leave the region as blank; regionality is specified via
--endpoint-urlas shown subsequently.
BucketAlreadyExists error is expected on first attempt.
Use S3-compatible third-party tools
Many excellent tools exist to upload data at scale without any code. You can find the configuration guides here.Use the Telnyx Mission Control Portal
Follow this support article. The Mission Control Portal is not the right tool to: Use theaws s3 cp CLI command or multipart upload API for more concurrency, better reliability, and bigger throughput.
Use one of the S3 compatible third party tools when moving large object counts.
Read these documentations
Some key differences exist between Telnyx cloud storage and AWS S3. It’s advisable that they are reviewed and comprehended prior to Telnyx cloud storage is put into production.- Understand API endpoints & organizations
- Review supported API methods
- Heed the warning on presigned URL
- Pay attention to billing
- Know the restrictions on policy and ACL
Additional Resources
- All available AWS S3 CLI Commands
Concepts
API Endpoints & Organization
Source: https://developers.telnyx.com/docs/cloud-storage/api-endpoints.mdThere exists two suites of Storage APIs:
- S3 compatible, and
- JSON companion
S3 Compatible APIs
This suite of APIs is compatible with AWS S3; as a result, minimal changes to existing integration are needed for migration to Telnyx. Endpoint URL Region us-central-1.telnyxcloudstorage.com us-central-1 us-east-1.telnyxcloudstorage.com us-east-1 us-west-1.telnyxcloudstorage.com us-west-1 eu-central-1.telnyxcloudstorage.com eu-central-1 ap-southeast-1.telnyxcloudstorage.com ap-southeast-1ListBuckets and GetBucketLocation are global: any regional endpoint returns every bucket in your account regardless of the region it is homed in. However, all other API methods need to be directed at the regional endpoint that the bucket is homed. Otherwise an error will be returned. Hence, it is advisable to query the location of the bucket first before forming the correct regional endpoint for all subsequent API operations.
Supported S3 APIs are documented in this table.
JSON Companion API
This suite of APIs is an extension to the S3 API, accommodating the following functionalities: API endpoint to be used isapi.telnyx.com.
Authentication
Source: https://developers.telnyx.com/docs/cloud-storage/authentication.mdAPI requests are authenticated with API Keys. Telnyx Storage requires passing an AWS Signature Version 4 authorization header in the API request. Telnyx Storage also requires that the Telnyx API key is substituted into the authorization header as the
access-key-id. When an API request is made, Telnyx will parse the API key from the header, validate it, and then authorize the request.
The remaining components of the authorization header (date, aws-region, aws-service, secret-key) are irrelevant to us. These values, as well as the generated signature from the secret key are all ignored. They only remain in the authorization header to maintain S3 compatibility. As long as you are passing an AWS Signature Version 4 authorization header, and the Telnyx API key is substituted into the header as the access-key-id, the request can be authenticated.
An example is shown below, where {{your_telnyx_api_key_here}} is where you will substitute in your Telnyx API Key:
AWS CLI and S3 third party applications
A general rule of thumb when trying to use Telnyx Storage with a third party application is:Access Key→ substitute in the Telnyx API tokenSecret Access Key→ either leave blank, or type something random in as a placeholder, or duplicate Telnyx API tokens
Bucket Addressing
Source: https://developers.telnyx.com/docs/cloud-storage/bucket-addressing.md
Path-style requests
https://[region].telnyxcloudstorage.com/[bucketname]/[objectname]
Virtual-hosted-style requests
https://[bucketname].[region].telnyxcloudstorage.com/[objectname]
Access via S3 API
Node.js
Source: https://developers.telnyx.com/docs/cloud-storage/sdk/node.mdRecent AWS SDK v3 versions work against Cloud Storage with default checksum settings. If you hit a checksum error on an older v3 release, set all checksum calculation and validation options to
WHEN_REQUIRED (as shown in the client config below).
The following example shows how the AWS Node.js SDK can be used to interact with Telnyx Cloud Storage.
Python
Source: https://developers.telnyx.com/docs/cloud-storage/sdk/python.mdRecent boto3 versions (1.36+) work against Cloud Storage with default checksum settings. If you hit a checksum error, disable checksum calculation and verification with the
Config shown below.
The following example shows how AWS Python SDK can be used to interact with Telnyx Cloud Storage.
Java
Source: https://developers.telnyx.com/docs/cloud-storage/sdk/java.mdIf you hit a checksum error with AWS SDK for Java v2 (2.30+), set request checksum calculation and response checksum validation to
WHEN_REQUIRED, as shown in the client builder below.
The following example shows how AWS Java SDK can be used to interact with Telnyx Cloud Storage.
Add Dependency
Create S3 Bucket
Upload an Object
List Objects
Download Object
Generate Presigned URLs for Upload and Download
In order for this part to work, we will need to add json decoding library and http client. Any libraries will do, but for this example we picked: gson and okhttp3.Go
Source: https://developers.telnyx.com/docs/cloud-storage/sdk/golang.mdThe following example shows how AWS Golang SDK can be used to interact with Telnyx Cloud Storage.
Ruby
Source: https://developers.telnyx.com/docs/cloud-storage/sdk/ruby.mdThe following example shows how AWS Ruby SDK can be used to interact with Telnyx Cloud Storage.
PHP
Source: https://developers.telnyx.com/docs/cloud-storage/sdk/php.mdThe following example shows how AWS PHP SDK can be used to interact with Telnyx Cloud Storage.
.NET
Source: https://developers.telnyx.com/docs/cloud-storage/sdk/dotnet.mdChunk encoding is not supported by the Cloud Storage API. Please set
putObjectRequest.UseChunkEncoding = false.
The following example shows how AWS .Net SDK can be used to interact with Telnyx Cloud Storage.
Elixir
Source: https://developers.telnyx.com/docs/cloud-storage/sdk/elixir.mdThe following example shows how AWS Elixir SDK can be used to interact with Telnyx Cloud Storage. This example requires the following dependencies be added to your mix.exs file
Third Party Applications
Source: https://developers.telnyx.com/docs/cloud-storage/third-party.mdAll S3 third-party tools, applications, clients, and libraries can be used to interact with Telnyx Cloud Storage. This includes popular applications like Cyberduck, S3 Browser, Wal-G, and many others. Visit our support page to find configuration guides for many of these commonly used third-party tools. If you don’t see a guide for a particular application, please don’t hesitate to reach out to us through our contact page. We would be happy to create a configuration guide for you.
Access from Edge Compute
Edge Function Binding
Source: https://developers.telnyx.com/docs/cloud-storage/bindings.mdA Cloud Storage binding gives a Telnyx Edge Function a pre-authenticated handle to one of your buckets. You declare the binding in
func.toml; the runtime resolves it to env. and injects the credential — your code holds no access key or secret key, and nothing sensitive appears in your bundle or logs.
The handle is a small, focused surface — get, put, head, delete, list. It is the in-function counterpart of the S3-compatible API: same buckets, same objects, reached from inside a function instead of over HTTP.
Cloud Storage bindings are TypeScript-only — the typed env handle comes from the @telnyx/edge-runtime SDK (≥ 0.5.0). Other runtimes (JS, Go, Python) don’t get a typed binding.
This guide builds one complete function end to end: a small file API backed by a bucket — PUT, GET, and DELETE an object by key, and list objects by prefix.
1. Scaffold the function
Create a TypeScript function. You also need an existing bucket for it to use — the binding points at a bucket, it doesn’t create one. If you don’t have one, create it first via the Mission Control portal, the AWS CLI, or an S3 SDK.2. Declare the binding
Add a[storage.cloudstorage.] block to the generated func.toml. The block key is a name you choose — it becomes the property on env. Here it’s ASSETS, reached as env.ASSETS:
[storage.cloudstorage.] becomes env..
3. Install and generate types
new-func already lists @telnyx/edge-runtime and @aws-sdk/client-s3 in package.json. Install them, then generate the typed env:
telnyx-edge types writes telnyx-env.d.ts, which types env.ASSETS as CloudStorageBucket so the calls below type-check.
4. Write the function
Replaceindex.ts with the complete file API. Every bucket operation — list, put, get, delete — goes through env.ASSETS; there are no credentials anywhere in the code.
5. Ship it
6. Try it
WithURL set to your function’s invoke URL:
Beyond the basics
This file API sticks to the coreget/put/delete/list calls. The same binding also does ranged and conditional reads, batch delete, hierarchical (folder) listing, multipart uploads for objects past the request/response size cap, and SSE‑C customer-key encryption — all on env.. See the Binding API reference for every method, option, and object type.
Related
- Binding API reference — every method, option, and object type
- Bindings overview — how bindings work across Telnyx API, Secrets, KV, and Cloud Storage
- S3-compatible quick start — the same buckets over HTTP
Binding API Reference
Source: https://developers.telnyx.com/docs/cloud-storage/bindings/reference.md
env. (a CloudStorageBucket) is the in-function handle to a Cloud Storage bucket, declared with a [storage.cloudstorage.] block. It’s a pre-authenticated wrapper over the bucket — the runtime injects the credential, so your code holds no S3 access key or secret key.
This reference tracks @telnyx/edge-runtime ≥ 0.5.0. Ranged and conditional reads, batch delete, hierarchical listing, SSE-C, and the version / writeHttpMetadata object fields need ≥ 0.4.0; multipart uploads need ≥ 0.5.0.
- Missing keys read as
null—getandheadresolve tonullfor a key that doesn’t exist, not an error. - A failed conditional read returns a body-less object — when a
getonlyIfprecondition isn’t met,getresolves to a plainCloudStorageObject(metadata only, nobodyand no readers) so you can reuse your cached copy. Check for a body before reading it. deleteis idempotent — deleting a missing key (single or in a batch) succeeds and resolves tovoid.putreturns partial metadata — the resolved object carrieskey,etag,httpEtag,version, and any metadata you set, but notsizeoruploaded. Useheadto read those after a write.- Custom metadata keys are lower-cased on read —
x-amz-meta-*header names are stored lower-cased, socustomMetadatakeys come back lower-cased (uploadedBy→uploadedby). - SSE-C applies to US and APAC (ap-southeast-1) region buckets —
ssecKeyis honored for buckets in US regions.
get(key, options?)
Read an object and its body. Returns null if the key does not exist.
CloudStorageObjectBody — a CloudStorageObject plus the body stream and one-shot readers arrayBuffer(), text(), json(), and blob().
Ranged reads
Passrange to fetch part of an object instead of the whole thing — byte-range streaming, reading a header, or resuming a download. The resolved object echoes the requested range.
Conditional reads
PassonlyIf to read only when a precondition holds — cache revalidation and “only fetch if changed.” A CloudStorageConditional maps to If-Match / If-None-Match / If-Unmodified-Since / If-Modified-Since; you can also pass a Headers object directly.
onlyIf applies to get/head only.
put(key, body, options?)
Write an object. Resolves to a CloudStorageObject describing the write.
key, etag (unquoted MD5 for a single-part write), httpEtag (the quoted, header-ready form), version (when bucket versioning is enabled), and the metadata you set. size and uploaded are not populated on the put result — read them back with head if you need them.
head(key, options?)
Read an object’s metadata without its body. Returns null if the key does not exist. Accepts the same onlyIf preconditions as get.
put, head returns the full CloudStorageObject including size and uploaded.
delete(key | keys)
Remove one object, or many in a single call. Idempotent — deleting a missing key resolves normally.
list(options?)
Enumerate objects (metadata only — list does not return bodies).
truncated is true, pass the returned cursor back in list({ cursor }) to fetch the next page.
By default a list entry carries only key, size, etag, and uploaded. Pass include to also populate httpMetadata and/or customMetadata on each returned object — a heavier listing, so ask for it only when you need it.
Hierarchical (“folder”) listing
Setdelimiter to / to browse one level of a key hierarchy: keys below the current level collapse into delimitedPrefixes, and only keys directly at the level appear in objects.
Multipart upload
Upload a large object in parts from inside a function — for objects past the Edge Compute request/response size cap, or for parallel/resumable uploads. Available on US and APAC (ap-southeast-1) region buckets.createMultipartUpload(key, options?)starts the upload and returns a handle.optionstakes the samehttpMetadata/customMetadata/ssecKeyasput.uploadPart(partNumber, body, options?)uploads one part and returns its{ partNumber, etag }. Parts are numbered from 1; every part except the last must be at least 5 MiB.complete(parts)assembles the object. You may pass the parts in any order — they’re sorted bypartNumber.abort()discards an in-progress upload and its parts.resumeMultipartUpload(key, uploadId, options?)rebuilds a handle for an existinguploadId(no server round-trip) so you can upload more parts orcomplete()/abort()from a later invocation.
Server-side encryption (SSE-C)
PassssecKey on get, put, and multipart calls to encrypt with a customer-provided key. The key is a 256-bit (32-byte) AES key, given as an ArrayBuffer or a 64-character hex string. Supply the same key on read that you used on write; the object exposes ssecKeyMd5 (hex) so you can identify which key encrypted it. SSE-C applies to US and APAC (ap-southeast-1) region buckets.
Object types
head and each list entry populate size and uploaded; put’s result does not. The body readers on CloudStorageObjectBody consume the stream once — call a single one per get, and bodyUsed flips to true once you do. writeHttpMetadata is handy for serving an object straight back out of a function with its stored headers:
Related
- Use a bucket from an Edge Function — declare the binding and get started
- Bindings overview — bindings across Telnyx API, Secrets, KV, and Cloud Storage
- S3-compatible API reference — the same buckets over HTTP
Features
Multipart Upload
Source: https://developers.telnyx.com/docs/cloud-storage/multipart-upload.mdLarge objects should be uploaded to your bucket via multipart upload.
Using AWS CLI
Assuming you have AWS CLI set up already:~/Projects/s3-test/testdata/10Gfileis the path to the raw bytes stored locallys3://target-bucket/10Gfileis the target bucket name and the object key (aka object name)
Using AWS API/SDK
The general procedure to use the API/SDK is as follows: Initiate the upload session with CreateMultipartUpload. Stream each chunk with UploadPart. Finalize the transfer by calling CompleteMultipartUpload.Presigned URLs
Source: https://developers.telnyx.com/docs/cloud-storage/presigned-urls.mdThis is currently supported for buckets located in the US and APAC (ap-southeast-1). We do NOT follow how AWS does authentication — hence, you MUST NOT use the existing AWS SDK or CLI to generate presigned URLs. Otherwise, you will expose your API key to the public. Please use the JSON companion API to generate ephemeral presigned URLs to allow anonymous downloads and uploads of objects to your bucket(s). In addition, creating long-lived presigned URL is a privileged action. Non-verified accounts are limited to presigned URLs with TTL no greater than 5 minutes. To verify your account, request and obtain Level 2 verification status.
Examples
Considering8f0nh1jk8qvf as an example of a presigned URL token, you can perform the following actions:
Downloading an object using a presigned URL
Uploading an object using a presigned URL
a-new-object.bin is the file you want to upload in my-bucket. If the object already exists, it will be overwritten.
Object Encryption
Source: https://developers.telnyx.com/docs/cloud-storage/object-encryption.mdThis is supported for buckets located in the US and APAC (ap-southeast-1). On EU buckets the SSE-C headers are silently ignored: the object is stored unencrypted and can be retrieved without the key. We support SSE-C. Here is an example on how to
PutObject with encryption.
PutObject with SSE-C
Don’t forget to update--sse-customer-key here.
Public Buckets
Source: https://developers.telnyx.com/docs/cloud-storage/public-buckets.mdThis is currently supported for buckets located in the US and APAC (ap-southeast-1). Making a bucket public (via policy or ACL) is a privileged action. Follow the following procedure: Request and obtain Level 2 verification status. Use the CLI, API, or SDK to apply the desired policy to your bucket.
HTTPS with Custom Domain
Source: https://developers.telnyx.com/docs/cloud-storage/ssl-certificates.mdThis is currently supported for buckets located in the US and APAC (ap-southeast-1).
1. Validate availability of bucket
You must ensure the subdomain is available as a bucket name. If so, you may create the bucket. In this example, we created asset.gardening-homes.com.
2. Make the bucket public
Since the content of this bucket will be publicly accessible, you need to apply a public read policy to it. Follow the instructions here: Put Bucket Policy
3. Configure DNS
Through your domain/DNS provider, you need to set up an alias to the bucket with virtual addressing style (Bucket Addressing)
4. Upload Certificate and Matching Key
Select the bucket you created, under SSL/TLS, upload the certificate and matching key.
- The bucket name must match one of the certificate SNIs (Server Name Indication) exactly. If you have a wildcard SNI *.example.com, help.example.com will work, but example.com will not work.
- If you have intermediate certificates, you must include them in the certificate file with the leaf certificate being at the top.
- You may omit the root certificate, as we will verify known root certificates automatically. However, if you’d like to guarantee that your certificate will be accepted, it is better to include it.
5. Test
Assuming all of the above is successful and there is an object named demo-image.jpg in the bucket, you may put https://asset.gardening-homes.com/demo-image.jpg in your browser and expect the following- The image shows up in your browser, and
- Your browser will show “Connection is secure” and “Certificate is valid”

Data Protection & Retention
Source: https://developers.telnyx.com/docs/cloud-storage/lock-and-retention.mdThis is currently supported for buckets located in the US and APAC (ap-southeast-1). To enable this feature, object lock MUST be enabled at bucket creation time.
Emptying Buckets
Source: https://developers.telnyx.com/docs/cloud-storage/emptying-bucket.mdWhen a bucket has more than 1000 objects, it’s burdensome to empty it synchronously. The best solution is to take advantage of lifecycle rules which asynchronously operate on destination bucket. Here is a sample lifecycle rule
Sample lifecycle rule
lifecycle.json and you can apply that to the bucket you intend to empty ---
Compatibility & Migration
AWS S3 Compatibility
Source: https://developers.telnyx.com/docs/cloud-storage/aws-s3-compatibility.mdThis table documents all the supported S3 APIs. When an unsupported API method is invoked, an S3-compatible, XML-formatted
NotImplemented error response is returned.
For the supported API methods documented, not all of the AWS S3 parameters, headers, and body XML elements are supported.
AWS S3 PutObject
For example, AWS S3 PutObject supports many headers. However, we only support what’s documented under the PutObject section. They are unsupported by default unless otherwise explicitly specified.Compatibility Matrix
Source: https://developers.telnyx.com/docs/cloud-storage/supported.md
Migration from AWS S3
Source: https://developers.telnyx.com/docs/cloud-storage/migrating-from-aws.mdThe migration API moves all data from a source AWS S3 bucket to a destination Telnyx Storage bucket without the user incurring a data egress charge by AWS. This is currently supported for buckets located in the US and APAC (ap-southeast-1).
Feature
The owner of the AWS account does not get charged by AWS on data transfer to Telnyx when this API is employed.Achieving minimal costs
There are 3 components to this data pipeline: User’s AWS S3 bucket in AWS Region X. Telnyx’s migration engine in the same AWS Region X. Telnyx’s direct connects with AWS used to transfer the data. Cost minimization is achieved via the following billing practices by AWS. Intra-region data transfer between S3 and EC2, within the same account, or across different accounts, is free of charge.


AWS S3 vs Telnyx Storage Costs Revisited
Assume a user has the following pattern in us-east-2 Ohio.


API Concepts and Procedure
Coverage
This API shows you the supported AWS S3 regions. Prior to using the API for migration, ensure the AWS S3 bucket you want to migrate is among the supported regions.Migration Sources
Only standard class is supported. Restore data in glacier before attempting migration. This API allows you to define the source bucket in AWS. In order to use this API, you need to provide it with a pair of AWS access key and secret access key. We advise you to create an IAM role with a Read Only user for this purpose.Migrations
Lastly, you can create a migration. If the target bucket doesn’t exist, the API will attempt to create it for you. If the desired bucket name is not available or invalid, you will receive an error right away. In addition, you do not have to match source bucket region to target bucket region; in other words, you can migrate data from an AWS source bucket in us-west-1 to Telnyx target bucket in us-east-1. You will not be charged for DTO by AWS as the API will use a migration engine in us-west-1. When the refresh parameter is set to false, a one time migration will be created. Otherwise, the API will periodically synchronize the source and destination bucket.Checking Migration Progress
You can periodically poll the API to see its status.
Platform
Limits & Quotas
Source: https://developers.telnyx.com/docs/cloud-storage/limits.md
General API limits
These limits are subject to change. If you require higher throughput, please contact support to discuss your use case.
Specific limits
- Max count of buckets per account is 100
- Max size of single object upload via PUT request is 5 GB
- Max size of single part upload of a multi-part upload is 5 GB
- Min size of single part upload of a multi-part upload is 5 MiB, except for the final part
- Max count of parts of a multi-part upload is 10,000
- Max size of a completed multi-part upload is 5 TiB
- Max count of objects per bucket is 50 million
Billing & Pricing
Source: https://developers.telnyx.com/docs/cloud-storage/billing.mdYou are billed on two things
- The bytes stored
- The count of API operations invoked
Storage billing explained
The minimum billable object size is 4 KiB. Here is an example — if you have two 11-byte objects in a bucket, they will be counted as 4 KiB each, i.e. 8 KiB in total. Storage consumed by each bucket is billed in multiples of 4 KiB, rounded up; Metadata counts towards storage consumed.US Storage
Every month, your first 10 GiB is free of charge. Any bytes beyond that are billed at:- $0.006 per GiB per month for regular storage
- $0.60 per GiB per month for AI embedded storage
EU Storage
EU storage has no free tier and is billed at:- $0.025 per GiB per month for regular storage
- $0.60 per GiB per month for AI embedded storage
- You have a $10 balance in your account.
- At time
t, you uploaded 11 GiB of objects into various buckets in your account. - At the next whole clock hour after time
t- a snapshot of your total storage is recorded as 11 GiB
- your usage is calculated as (11 GiB - 10 GiB) x ($ 0.006 / 30 days / 24 hrs)
- that usage is then debited from your $10 balance
- You have a $10 balance in your account
- Through usage of Voice and Messaging API, you’ve depleted your balance and resulted in a negative available credit of -0.1 USD.
- You will not be able to create a bucket and upload objects until your available credit is restored.
API operations billing explained
API operations are classified and billed the following way —US Storage
Categories Applicable API Ops Prices Class A PUT, COPY, POST, LIST requests Every month, the first 1 Million is free of charge, thereafter 0.04 per 1 MillionEU Storage
Categories Applicable API Ops Prices State-change operations PUT, COPY, POST, LIST requests 0.40 per 1 MillionAccount suspension and loss of data
When an account’s available credit becomes negative:- You will be notified via email of insufficient balance.
- Your data is still retained in the system but API requests will fail with error message
UserSuspended. - Access will be restored when available credit is made positive via payment.
Relevant companion APIs
Two companion APIs exist to allow for querying of usage:- Bucket Snapshot is a snapshot of the bytes your bucket is taking up at the moment of query.
- API Usage shows the stats of your API requests.
Query bucket snapshot
Example RequestQuery API usage
Example RequestPerformance Benchmarks
Source: https://developers.telnyx.com/docs/cloud-storage/performance-benchmarks.md
Storage benchmark summary
We achieved the following throughput results given the bench test setup described in the subsequent sections.- PutObject Aggregate: 2.029 GiB/s
- GetObject Aggregate: 2.714 GiB/s
- We did not exhaustively search the client configuration that produces the highest achievable throughputs.
- This result is only indicative of what can be achieved with the available testbed hardware specifications and arrangement.
- The test clients are not subjected to the limits outlined in the previous section.
- As we launch new sites, we will continuously update our test results and methodology.
Benchmark environment explained
Client hardware
(8) of the following bare metal machines are used as clients initiating requests to one of the regional endpoints. They are located off network with 100 Gbps uplink to the public internet. Type Count of nodes CPU Mem Storage Network Type 1 4 64 2 TiB 4 x 6.4TiB NVMe 100 Gbps Type 2 4 32 2 TiB 1 x 960GiB NVMe 100 Gbps No special optimizations are made on the client OS.Benchmark Software
https://github.com/wasabi-tech/s3-benchmarkClient Setup
Each client bare metal reads and writes to their individual bucket.Results


API Reference (S3-Compatible)
Create bucket
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/bucket-operations/create-bucket.md
CreateBucket
CreateBucket - Amazon Simple Storage ServiceSupported headers and XML elements
✅Supported Headersx-amz-acl
privatepublic-read
LocationConstraint
- must be unique.
- cannot be formatted as IP address.
- can be between 3 and 63 characters long.
- must not contain uppercase characters or underscores.
- must start with a lowercase letter or number.
- can contain a dash (-).
- must be a series of one or more labels. Adjacent labels are separated by a single period (.). Bucket names can contain lowercase letters, numbers, and hyphens. Each label must start and end with a lowercase letter or a number.
Delete bucket
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/bucket-operations/delete-bucket.md
DeleteBucket
DeleteBucket - Amazon Simple Storage ServiceExample DeleteBucket request
Delete bucket CORS
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/bucket-operations/delete-bucket-cors.md
DeleteBucketCors
Example DeleteBucketCors request
Delete bucket lifecycle
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/bucket-operations/delete-bucket-lifecycle.md
DeleteBucketLifecycle
DeleteBucketLifecycle - Amazon Simple Storage ServiceExample DeleteBucketLifecycle request
Delete bucket policy
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/bucket-operations/delete-bucket-policy.md
DeleteBucketPolicy
DeleteBucketPolicy - Amazon Simple Storage ServiceExample DeleteBucketPolicy request
Delete bucket tagging
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/bucket-operations/delete-bucket-tagging.md
DeleteBucketTagging
DeleteBucketTagging - Amazon Simple Storage ServiceExample DeleteBucketTagging request
Get bucket ACL
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/bucket-operations/get-bucket-acl.md
GetBucketAcl
GetBucketAcl - Amazon Simple Storage ServiceExample GetBucketAcl request
Example GetBucketAcl Response
Get bucket CORS
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/bucket-operations/get-bucket-cors.md
GetBucketCors
Example GetBucketCors request
Get bucket lifecycle configuration
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/bucket-operations/get-bucket-lifecycle-configuration.md
GetBucketLifecycleConfiguration
GetBucketLifecycleConfiguration - Amazon Simple Storage ServiceExample GetBucketLifecycleConfiguration request
Example GetBucketLifecycleConfiguration response
Get bucket location
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/bucket-operations/get-bucket-location.md
GetBucketLocation
GetBucketLocation - Amazon Simple Storage ServiceExample GetBucketLocation request
Example GetBucketLocation response
Get bucket policy
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/bucket-operations/get-bucket-policy.md
GetBucketPolicy
GetBucketPolicy - Amazon Simple Storage ServiceExample GetBucketPolicy request
Get bucket policy status
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/bucket-operations/get-bucket-policy-status.md
GetBucketPolicyStatus
GetBucketPolicyStatus - Amazon Simple Storage ServiceExample GetBucketPolicyStatus request
Get bucket tagging
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/bucket-operations/get-bucket-tagging.md
GetBucketTagging
GetBucketTagging - Amazon Simple Storage ServiceExample GetBucketTagging request
Example GetBucketTagging response
Get bucket versioning
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/bucket-operations/get-bucket-versioning.md
GetBucketVersioning
GetBucketVersioning - Amazon Simple Storage ServiceExample GetBucketVersioning request
Example GetBucketVersioning response
Head bucket
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/bucket-operations/head-bucket.md
HeadBucket
HeadBucket - Amazon Simple Storage ServiceExample HeadBucket request
Example HeadBucket response
List buckets
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/bucket-operations/list-bucket.md
ListBuckets
ListBuckets - Amazon Simple Storage ServiceExample ListBuckets request
Example ListBuckets response
Put bucket ACL
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/bucket-operations/put-bucket-acl.md
PutBucketAcl
Warning: Only verified users can update bucket policy. To request KYC on your account, go to Portal Account Verifications PutBucketAcl - Amazon Simple Storage Service ✅ Supported Headersx-amz-acl
privatepublic-read
Example PutBucketAcl request
Put bucket CORS
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/bucket-operations/put-bucket-cors.md
PutBucketCors
Example PutBucketCors request
Prepare a JSON file like this
Then apply it to the target bucket
Put bucket lifecycle configuration
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/bucket-operations/put-bucket-life-cycle-configuration.md
PutBucketLifecycleConfiguration
PutBucketLifecycleConfiguration - Amazon Simple Storage Service ✅ Supported XML ElementsIDStatusPrefixExpirationAbortIncompleteMultipartUpload
Example PutBucketLifecycleConfiguration request — Non-versioned bucket
Example PutBucketLifecycleConfiguration request - versioned bucket
Put bucket policy
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/bucket-operations/put-bucket-policy.md
PutBucketPolicy
PutBucketPolicy - Amazon Simple Storage Service Warning: Only verified users can update bucket policy. To request KYC on your account, go to Portal Account VerificationsExample PutBucketPolicy request
Create a bucket where the objects stored in there can be read publicly without authentication Create a JSON file locally, e.g.public_read_policy.json
Prepare a JSON file like this
Then apply that to an existing bucket
Put bucket tagging
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/bucket-operations/put-bucket-tagging.md
PutBucketTagging
PutBucketTagging - Amazon Simple Storage ServiceExample PutBucketTagging request
Put bucket versioning
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/bucket-operations/put-bucket-versioning.md
PutBucketVersioning
PutBucketVersioning - Amazon Simple Storage Service ✅ Supported XML elementStatus
Example PutBucketVersioning request
Delete object
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/object-operations/delete-object.md
DeleteObject
DeleteObject - Amazon Simple Storage ServiceExample DeleteObject Request
Delete object tagging
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/object-operations/delete-object-tagging.md
DeleteObjectTagging
DeleteObjectTagging - Amazon Simple Storage ServiceExample DeleteObjectTagging request
Delete objects
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/object-operations/delete-objects.md
DeleteObjects
DeleteObjects - Amazon Simple Storage ServiceExample DeleteObjects request (using AWS S3 CLI)
- Originally 3 objects exists in this bucket
- Delete 2 objects
Get object
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/object-operations/get-object.md
GetObject
GetObject - Amazon Simple Storage Service ✅ Supported HeadersIf-Match``If-Modified-SinceIf-None-MatchIf-Unmodified-SinceRange
Example GetObject request
Get object ACL
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/object-operations/get-object-acl.md
GetObjectAcl
GetObjectAcl - Amazon Simple Storage ServiceExample GetObjectAcl request
Example GetObjectAcl response
Get object tagging
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/object-operations/get-object-tagging.md
GetObjectTagging
GetObjectTagging - Amazon Simple Storage ServiceExample GetObjectTagging request
Example GetObjectTagging response
Head object
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/object-operations/head-object.md
HeadObject
HeadObject - Amazon Simple Storage Service ✅ Supported HeadersIf-MatchIf-Modified-SinceIf-None-MatchIf-Unmodified-SinceRange
Example HeadObject request
Example HeadObject response
List object versions
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/object-operations/list-object-versions.md
ListObjectVersions
ListObjectVersions - Amazon Simple Storage Service ✅ Supported Parametersprefixdelimitermarkermax-keys
Example ListObjectVersions request
Example ListObjectVersions response
List objects
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/object-operations/list-objects.md
ListObjects
ListObjects - Amazon Simple Storage Service ✅ Supported Parametersprefixdelimitermarkermax-keys
Example ListObjects request
Example ListObjects response
Put object
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/object-operations/put-object.md
PutObject
PutObject - Amazon Simple Storage Service ✅ Supported Headersx-amz-acl
privatepublic-read
x-amz-storage-class
STANDARD
x-amz-meta-*
x-amz-server-side-encryption-customer-algorithm
x-amz-server-side-encryption-customer-key
x-amz-server-side-encryption-customer-key-MD5
Put object ACL
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/object-operations/put-object-acl.md
PutObjectACL
Warning: Only verified users can update bucket policy. To request KYC on your account, go to Portal Account Verifications PutObjectAcl - Amazon Simple Storage Service ✅ Supported Headersx-amz-acl
privatepublic-read
versionId
Example PutObjectACL request
Put object tagging
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/object-operations/put-object-tagging.md
PutObjectTagging
PutObjectTagging - Amazon Simple Storage Service ✅ Supported HeadersversionId
Example PutObjectTagging request
Abort multipart upload
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/multipart-operations/abort-multipart-upload.md
AbortMultipartUpload
AbortMultipartUpload - Amazon Simple Storage Service ✅ Supported ParametersuploadId
Example AbortMultipartUpload Request
Complete multipart upload
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/multipart-operations/complete-multipart-upload.md
CompleteMultipartUpload
CompleteMultipartUpload - Amazon Simple Storage Service ✅ Supported ParametersuploadId
Etag``PartNUmber
Example CompleteMultipartUpload request
Example CompleteMultipartUpload response
Create multipart upload
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/multipart-operations/create-multipart-upload.md
CreateMultipartUpload
CreateMultipartUpload - Amazon Simple Storage Service ✅ Supported Headersx-amz-acl
privatepublic-read
x-amz-storage-class
STANDARD
Example CreateMultipartUpload request
Example CreateMultipartUpload response
List multipart uploads
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/multipart-operations/list-multipart-uploads.md
ListMultipartUploads
ListMultipartUploads - Amazon Simple Storage Service ✅Supported Parametersprefixdelimiterkey-markemax-keysmax-uploadsupload-id-marker
Example ListMultipartUploads request
Example ListMultipartUploads response
Upload parts
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/multipart-operations/upload-part.md
UploadPart
UploadPart - Amazon Simple Storage Service ✅Supported ParameterspartNumberuploadId
Example UploadPart request
List parts
Source: https://developers.telnyx.com/docs/cloud-storage/api-reference/multipart-operations/list-parts.md
ListParts
ListParts - Amazon Simple Storage Service ✅ Supported ParametersuploadIdmax-partspart-number-marker
Example ListParts request
Example ListParts response
API Reference (Object Storage)
Presigned Object URLs
- Create Presigned Object URL: Returns a timed and authenticated URL to download (GET) or upload (PUT) an object. This is the equivalent to AWS S3’s “presigned” URL. Please note that Telnyx…
Bucket SSL Certificate
- Get Bucket SSL Certificate: Returns the stored certificate detail of a bucket, if applicable.
- Add SSL Certificate: Uploads an SSL certificate and its matching secret so that you can use Telnyx’s storage as your CDN.
- Remove SSL Certificate: Deletes an SSL certificate and its matching secret.
Bucket Usage
- Get API Usage: Returns the detail on API usage on a bucket of a particular time period, group by method category.
- Get Bucket Usage: Returns the amount of storage space and number of files a bucket takes up.
Data Migration
- List Migration Source coverage
- List all Migration Sources
- Create a Migration Source: Create a source from which data can be migrated from.
- Get a Migration Source
- Delete a Migration Source
- List all Migrations
- Create a Migration: Initiate a migration of data from an external provider into Telnyx Cloud Storage. Currently, only S3 is supported.
- Get a Migration
- Stop a Migration