# SteadyLink > SteadyLink is a media delivery platform for storing, versioning, transforming, securing, and serving files through stable edge URLs. Use the guides for dashboard workflows and the reference for REST API, SDK, CLI, and S3 contracts. API keys must never be exposed in browser code. The canonical site is https://steadylink.io. ## Integration facts - The management API base URL is https://api.steadylink.io. - Authenticate trusted server requests with X-API-Key. Keys are workspace-scoped. - Send file bytes to the short-lived presigned URL returned by an upload session. Do not send an API key to object storage. - Complete the upload session with an Idempotency-Key and use the returned request ID when reporting a failure. - The TypeScript SDK is published on npm as @steadylink/sdk, the CLI as @steadylink/cli (or npx steadylink), and the Python client on PyPI as steadylink. - An S3-compatible API is available at https://api.steadylink.io/s3 with per-user app keys. ## Important pages - [SteadyLink](https://steadylink.io/): Product overview for stable, versioned media delivery. - [Platform](https://steadylink.io/products): Feature reference for storage, revisions, delivery, transforms, security, and analytics. - [File converter](https://steadylink.io/convert): Temporary browser-based file conversion with optional permanent workspace storage. - [Solutions](https://steadylink.io/solutions): Use cases for file sharing, photography, teams, developers, and creators: portfolios, press kits, course files, price lists, link-in-bio pages, and resumes. - [Documentation](https://steadylink.io/docs): Overview of the SteadyLink docs: quickstart, guides, concepts, reference, and security. - [Quickstart](https://steadylink.io/docs/quickstart): Upload a file, get its stable link, replace it, and confirm the link still works. - [REST API reference](https://steadylink.io/docs/reference/api): Base URL, authentication, conventions, and every REST resource. - [TypeScript SDK](https://steadylink.io/docs/reference/sdk): Every method in @steadylink/sdk. - [CLI](https://steadylink.io/docs/reference/cli): Every command and flag in @steadylink/cli. - [S3-compatible API](https://steadylink.io/docs/reference/s3): Use rclone, restic, Cyberduck, and the AWS CLI with SteadyLink buckets. - [Privacy policy](https://steadylink.io/legal/privacy): SteadyLink privacy and data handling terms. - [Terms of service](https://steadylink.io/legal/terms): Terms governing use of SteadyLink. ## Documentation ### Get started - [SteadyLink documentation](https://steadylink.io/docs): Host files behind links that never change. Upload once, replace the file whenever you need to, and every place that uses the link gets the new version. - [Quickstart](https://steadylink.io/docs/quickstart): Upload a file, get its permanent link, replace the file, and watch the same link serve the new version. About five minutes. ### Guides - [Guides](https://steadylink.io/docs/guides): Step-by-step walkthroughs for the jobs people use SteadyLink for, from replacing a live file to collecting assets from clients. - [Upload and replace files](https://steadylink.io/docs/guides/upload-and-replace): Upload files in batches, follow them through finalization and malware scanning, and publish new versions behind the same link from the dashboard, API, SDKs, or CLI. - [Buckets and folders](https://steadylink.io/docs/guides/buckets-and-folders): Decide where files live, organize them with folders, rename and move them without breaking links, and control who can open them by default. - [Image transformations](https://steadylink.io/docs/guides/image-transformations): Resize, crop, and convert images by adding query parameters to their stable link, with focal points for crops and cached variants that follow every replacement. - [Collections and portals](https://steadylink.io/docs/guides/collections-and-portals): Put a curated set of files behind one link, choose who can open it, and keep it current as the files change. - [Client proofing and watermarks](https://steadylink.io/docs/guides/client-proofing): Let clients heart their favorite photos in a collection and send you their picks, with downloads off or a watermark burned into every image. - [Replacement requests](https://steadylink.io/docs/guides/replacement-requests): Send someone outside your workspace a link to upload a new version of one file, review it, then publish it now or at a time you choose. - [Asset requests](https://steadylink.io/docs/guides/asset-requests): Collect a defined set of files from people outside your workspace through one expiring link, then review each file before it lands in a bucket. - [Upload widget](https://steadylink.io/docs/guides/upload-widget): Accept files from visitors on your own website with an origin-restricted embed, review them before they go live, and react to completed uploads in JavaScript. - [Browser uploads](https://steadylink.io/docs/guides/browser-uploads): Let people upload files from your web app straight to SteadyLink storage, with progress, while your API key stays on your server. - [Website migration](https://steadylink.io/docs/guides/website-migration): Crawl a public website, see every image and file it references, import the ones you want into a bucket, and get a map from old URLs to stable SteadyLink links. - [File conversions](https://steadylink.io/docs/guides/file-conversions): Convert images, documents, spreadsheets, audio, video, archives, and ebooks between formats, understand what each job costs, and save results into a bucket. - [Notifications](https://steadylink.io/docs/guides/notifications): Choose which workspace events reach you, whether they arrive by email as they happen or once a day, and check that they were delivered. - [Images in Next.js](https://steadylink.io/docs/guides/nextjs-images): Serve responsive images through next/image from SteadyLink links, so replacing a file updates every page without a redeploy. - [Connect rclone in one command](https://steadylink.io/docs/guides/rclone): Use SteadyLink as S3-compatible storage for rclone. Install it, connect with an app key, mount buckets as a drive, or back up a folder on a schedule. - [Use SteadyLink in Claude, ChatGPT, Cursor and more](https://steadylink.io/docs/guides/mcp): Add SteadyLink to Claude, ChatGPT, Codex, Cursor, VS Code and other AI tools with one URL, so you can upload files and get permanent links from a chat. - [Set up SteadyLink with an AI assistant](https://steadylink.io/docs/guides/ai-assistants): Point ChatGPT, Claude, Cursor or any other AI assistant at the SteadyLink docs so it can walk you through setup or write the integration for you. ### Concepts - [Concepts](https://steadylink.io/docs/concepts): The ideas behind SteadyLink. Read these once and the rest of the docs, the API, and the dashboard will make sense. - [Stable links](https://steadylink.io/docs/concepts/stable-links): How one link keeps pointing at the right bytes while you replace a file, how to pin a specific revision, and what caches do in between. - [Revisions](https://steadylink.io/docs/concepts/revisions): What SteadyLink keeps for every version of a file, how to label and restore revisions, and exactly what deleting one removes. - [Upload lifecycle](https://steadylink.io/docs/concepts/uploads): The states an upload passes through, from upload session to scanned revision, and every check that can stop a file along the way. - [Workspaces and roles](https://steadylink.io/docs/concepts/workspaces-and-roles): How workspaces separate files, people, and billing, what each member role can do, and how API keys and S3 app keys fit alongside signed-in users. - [Usage and limits](https://steadylink.io/docs/concepts/usage-and-limits): What counts toward storage, delivery, and API usage, what happens at 50, 80, and 100 percent, and the limits on each plan. ### Reference - [Reference](https://steadylink.io/docs/reference): Complete, exact reference for the SteadyLink REST API, client libraries, command-line tools, S3-compatible API, webhooks, and errors. - [REST API: REST API](https://steadylink.io/docs/reference/api): Base URL, authentication headers, request and response conventions, pagination, idempotency, request IDs, and an index of every REST API resource. - [REST API: Authentication](https://steadylink.io/docs/reference/api/authentication): Create, scope, expire, and revoke workspace API keys, and understand the plan limits and rate-limit headers that apply to every key. - [REST API: Buckets](https://steadylink.io/docs/reference/api/buckets): List, create, read, configure, and delete buckets, the top-level containers that hold a workspace's folders and files. - [REST API: Files and folders](https://steadylink.io/docs/reference/api/files): List, search, and inspect files, create and move folders, rename files, change visibility, replace a file's bytes without changing its link, and delete files. - [REST API: Uploads](https://steadylink.io/docs/reference/api/uploads): Upload up to 100 files per batch, send bytes straight to storage or through the API, complete each session safely, and track finalization and scanning by polling or live events. - [REST API: Revisions](https://steadylink.io/docs/reference/api/revisions): List the revisions behind a stable link, label them, roll back by promoting an earlier revision, and delete revisions you no longer need. - [REST API: Delivery and signed links](https://steadylink.io/docs/reference/api/delivery): Serve files from their stable link, resize and convert images with query parameters, understand caching after replacements, and share private files with revocable signed links. - [REST API: Analytics API](https://steadylink.io/docs/reference/api/analytics): Read delivery totals, zero-filled time series, top files, traffic sources, workspace activity, and storage ownership for one workspace. - [REST API: Workspaces API](https://steadylink.io/docs/reference/api/workspaces): Read workspace identity and API entitlement, change workspace settings, manage members and invitations, and issue or revoke API keys. - [REST API: Conversions API](https://steadylink.io/docs/reference/api/conversions): Convert images, documents, spreadsheets, audio, video, archives, and ebooks, then download the result or save it to a bucket. - [REST API: Requests and migration API](https://steadylink.io/docs/reference/api/requests): Collect files from people outside your workspace, schedule revisions, import a website's media, and manage personal notification preferences. - [REST API: Widgets and collections API](https://steadylink.io/docs/reference/api/sharing): Manage origin-restricted upload widgets and their submissions, and publish ordered collections as branded file portals. - [REST API: Platform controls API](https://steadylink.io/docs/reference/api/platform): Configure regional delivery, image focal points, bulk migrations, delivery domains, encryption of originals, and single sign-on. - [TypeScript SDK](https://steadylink.io/docs/reference/sdk): Every export in @steadylink/sdk 0.2.0, the official TypeScript client for uploads, replacements, links, revisions, collections, and workspace controls. - [Python SDK](https://steadylink.io/docs/reference/python-sdk): Every public method in the steadylink Python package 0.1.0, a synchronous client with no runtime dependencies for uploads, replacements, and workspace controls. - [CLI](https://steadylink.io/docs/reference/cli): Every command, flag, environment variable, exit code, and JSON output shape in @steadylink/cli 0.2.0. - [GitHub Action](https://steadylink.io/docs/reference/github-action): Inputs, outputs, job summary, and failure behavior of SteadyLink-io/upload-action, which uploads or replaces files from a GitHub workflow. - [S3-compatible API](https://steadylink.io/docs/reference/s3): Connect rclone, restic, Cyberduck, the AWS CLI, boto3, and NAS backup apps to SteadyLink buckets with app keys and AWS Signature Version 4. - [Webhooks](https://steadylink.io/docs/reference/webhooks): Register webhook endpoints, receive signed events when revisions publish, scans finish, files or photo picks come in, migrations complete, or delivery crosses a threshold, and verify each request. - [Errors](https://steadylink.io/docs/reference/errors): The SteadyLink error body, every status code and error code, rate limits and their headers, request IDs, and when it is safe to retry. ### Security - [Security](https://steadylink.io/docs/security): How SteadyLink checks every upload, controls who can open a file, protects stored bytes, and records what happens in your workspace. - [Two-step verification](https://steadylink.io/docs/security/two-factor): Require a code from an authenticator app when you sign in, keep recovery codes for a lost phone, and know what to do when something goes wrong. - [Passkeys](https://steadylink.io/docs/security/passkeys): Sign in to SteadyLink with Face ID, Touch ID, Windows Hello, your phone or a security key instead of a password, and manage the passkeys saved to your account. - [Private links](https://steadylink.io/docs/security/private-links): Decide who can open each file, share private files with expiring signed links, and revoke access before a link expires. - [API key safety](https://steadylink.io/docs/security/api-keys): Give each integration the least access it needs, expire and rotate keys without downtime, and revoke them the moment something leaks. - [Single sign-on](https://steadylink.io/docs/security/single-sign-on): Connect your OpenID Connect identity provider, limit it to your email domains, test it, and then require it for everyone in the workspace. ## Engineering notes - [SteadyLink Storage Architecture (Overview)](https://steadylink.io/blog/architecture-overview): This overview traces a file request through SteadyLink's edge, API, database, and object storage. It also explains where access checks, caching, and background jobs fit into that path. - [How to Change the File Behind a QR Code Without Reprinting It](https://steadylink.io/blog/change-file-behind-qr-code): A QR code stores a URL, not a file. If that URL always serves the current version of your file, you can change the file as often as you like and the printed code keeps working. With SteadyLink, you encode the file's stable link in the QR code, then use Replace whenever the menu, flyer, or manual changes. - [Fast Asset Delivery with Canonical URLs](https://steadylink.io/blog/delivery-caching): We serve assets through canonical routes and cache them aggressively at the edge. - [How to Get a Permanent Link to a File You Can Update](https://steadylink.io/blog/permanent-link-to-file-you-can-update): You need a host that gives each file an address based on the file's identity rather than its contents or filename, and that stores new uploads as versions of the same file. SteadyLink does this: every file gets one link of the form `https://cdn.steadylink.io/a/ASSET_ID`, and when you replace the file, that link serves the new version while older versions stay in its history. - [How to Replace a File and Keep the Same URL](https://steadylink.io/blog/replace-file-keep-same-url): To replace a file and keep the same URL, the URL has to point at the file's identity, not at one stored copy of it. In SteadyLink every file has a stable link, `https://cdn.steadylink.io/a/ASSET_ID`; replacing the file publishes the new bytes as its next revision, and the same link starts serving them. Older revisions stay available, so you can roll back. - [How to Replace an Image Without Changing Its URL](https://steadylink.io/blog/replace-image-without-changing-url): Host the image somewhere that gives it a stable URL tied to the file's identity rather than its bytes, then upload the new version as a replacement instead of as a new file. In SteadyLink, every file gets a link like `https://cdn.steadylink.io/a/ASSET_ID`; when you choose Replace and upload new artwork, that same link starts serving the new image, and every page, email, and app that uses it updates without being edited. Caches can show the old image for up to about five minutes after the change. - [How to Update a PDF Without Changing the Link](https://steadylink.io/blog/update-pdf-without-changing-link): To update a PDF without changing its link, host it somewhere that keeps one permanent URL per file and publishes new uploads as revisions of that file. In SteadyLink you upload the PDF once, share its link, and later choose Replace on the same file; the link stays the same and starts serving the new PDF, usually within about five minutes for anyone who opened it recently. ## Optional - [Complete LLM context](https://steadylink.io/llms-full.txt): Product concepts, API conventions, the full text of every documentation page, and engineering notes, in one file. - [Sitemap](https://steadylink.io/sitemap.xml): Machine-readable list of public site routes.