I build a backend
Media on a post with ccs-files-client: your API creates the ticket, your app PUTs the bytes, your API completes and links the file. Start with the backend quickstart.
The CCS File Service stores the files of your tenant applications: photos and videos on a post, a team’s documents, a user’s avatar. It is the one place where every Central Code Station product and every tenant backend keeps files, with folders, versions, previews, search, per-folder and per-file permissions, share links, quotas, a trash and an audit log.
File bytes never pass through the API. An upload is a ticket: the service checks the name, type, size and quota, then answers a short-lived signed URL the bytes go to directly. A download is a signed URL too. Your code needs no storage vendor SDK and holds no storage credentials.
It is business-agnostic. It never interprets what a file is for: your backend links the file_id to a post, a contract or a chat message, and decides who may see it, or lets the service decide with its permission model. CCS Chat stores the photos, videos and files of its messages here the same way: see Media in Chat.
I build a backend
Media on a post with ccs-files-client: your API creates the ticket, your app PUTs the bytes, your API completes and links the file. Start with the backend quickstart.
I build a web or mobile app
Uploads with progress, pause and resume, previews and video playback with ccs-files-user-client or the Flutter package. Start with the web quickstart or the Flutter quickstart.
I build on another stack
Java, C#, Python, Go or PHP: the OpenAPI document and the upload protocol. See Other languages.
I administer a tenant
Roles and permissions, allowed types and sizes, retention, usage and the audit log in the Files console. Start with Administration.
I run the Identity Server
The resource, the scopes, the backend client and token exchange. See the checklist.
I am evaluating it
Read folders and files, permissions, delivery and visibility and the limits.
Your backend. It holds a machine client with files:manage. It creates upload tickets on behalf of its users, completes them, stores the file_id in its own records and mints download and preview URLs when it renders a page: up to 200 in one call.
Your app. It sends the bytes to the URLs your backend handed out, with progress and retries, and shows the URLs your backend minted. In the backend-mediated flow it never holds a File Service token at all. The web and Flutter user clients run the upload for you, and can also call the service as the signed-in user.
The service. After an upload it detects the real type, checks it against the application’s policy, scans it for known malware, removes camera metadata from images, reads dimensions and durations, makes thumbnails, previews and playable video, and extracts the text of documents for search. It tells the owner through the Notification Service, and your backend through a webhook, when the file is ready.
Administrators. The tenant owner decides, per application, which roles may view, download, edit, share, delete or approve everything, and who may change the settings or read the audit log, in the Files console.
ccs-files-clientPress Ctrl + K (⌘ + K on macOS) to search.