Store it once. Serve it from your own domain.

Buckets for video, audio, documents and anything else. Public or private, held in the region you choose, reachable with the tools your team already runs. Storage is included in every plan.

Your buckets
  • course-media.plycdn.netprivateMumbai, India
  • brand-assets.plycdn.netpublicMumbai, India
  • lecture-archive.plycdn.netprivateMumbai, India

Example names.

A bucket is a name, a region and a rule about who may see it.

Name it once and it has an address, ready the moment it is created. Make it public for open assets, or private so nothing leaves without a signed link.

  • Names are unique across plycdn, so the address is yours alone.
  • A deleted bucket can be restored, files and settings intact, for seven days.
  • Caching, cross-origin rules, allowed file types, largest file and link lifetime are set per bucket.
a bucket's address
public https://brand-assets.plycdn.net/logo.svg
private https://course-media.plycdn.net/week-1/intro.mp4
?token=…&expires=…

A private link works until it expires.

Bring the tools you already have.

Every bucket answers the S3 and Azure Blob protocols as well as our own API. Point the AWS CLI, rclone, boto3, Cyberduck or the Azure tools at plycdn to move a library in, back it up or sync it from a build.

  • A file written with any of those tools is an ordinary file: counted, shown in the dashboard and ready to deliver.
  • Credentials are made in the dashboard, shown once, scoped by permission and revoked without touching your API keys.
move a library in with rclone
rclone sync ./library plycdn:course-media \
  --checksum --transfers 16

Uploads that survive a bad connection.

Your backend decides who may upload. The browser then sends the file straight to the bucket in parts, so large files never pass through your servers and a dropped connection resumes where it stopped.

  • Pause, resume, retry and abort, with progress you can show.
  • Reload mid-upload and pick up the parts that are missing.
  • A ready-made upload area and file browser in the Angular and React packages.
Upload.tsx
const upload = useUpload();

await upload.start(file, {
  bucketId: bucket.id,
  key: "week-1/intro.mp4",
});

// upload.progress -> 0.62
// upload.pause() / resume() / abort()

Signed delivery, decided by your backend.

A private bucket serves nothing without a link your backend signed, and the link stops working when it expires. Tighten it per bucket: tie it to the viewer, allow only your own pages, or restrict by country.

  • Links last 15 minutes by default, shorter or longer per bucket.
  • Replace the signing key whenever you need to; links made with the old one stop at once.
  • Purge cached copies on demand, free of charge.
your domain
CNAME cdn.example.com
TXT _plycdn.cdn.example.com

Add two records and we attach the hostname and issue the certificate. Up to eight domains per bucket, at no charge.

Held where you choose. Delivered everywhere.

Available regions: Mumbai, India. More regions open on request. A bucket stores its files in the region you pick, and can be marked for strict residency to record that its files must stay in their country.

Delivery runs through our edge so viewers far from the region are served nearby, and is reported and priced by delivery area.

Storage from ₹3 per GB-month. Delivery from ₹2.50 per GB.

Storage regions
  • Mumbai, India · strict residency available
Delivery areas
  • Europe & North America
  • India & Asia
  • Latin America
  • Middle East & Africa

See delivery by day and area in the dashboard and the API.

Put your first bucket where you need it.

We provision your organization with storage included. Bring a library and move it in with the tools you already use.