Code Buckets
Create a bucket
Add a bucket to a project.
Creates an empty bucket with its own encryption key. A project can have up to 100 buckets; each holds up to 10 GB.
Authorizations
AuthorizationstringrequiredYour API key as a bearer token: Bearer clsk_.... Create keys in the Console with the Code Buckets permissions you need.
X-Clatter-AccountstringrequiredThe Account ID that owns the key, like CL-7K2M9QXA. Find it in Console › Settings. A missing value answers 401 missing_account_id; someone else's answers 401 account_mismatch.
Path parameters
project_idstringrequiredThe Project ID (cbp_…).
Body
application/json
namestringrequiredUp to 80 characters.
descriptionstringUp to 500 characters.
previewbooleandefault: trueUnpack uploaded zips into a browsable code tree. false keeps code only in encrypted archives.
Response
201 · application/json
objectstringAlways bucket.
idstringThe bucket id, like cbk_q7c1r9t2y6u0i3o8p5a4.
project_idstringThe Project ID it belongs to.
name / descriptionstringYour name and description.
previewbooleanWhether uploaded zips are unpacked into a browsable code tree.
visibilitystringprivate (default) or public. In a public bucket, every stored file that follows the bucket default has a public link. See Public files.
codeobject{ ref, files, bytes }: the current code tree. ref is null until the first zip is unpacked.
storageobject{ used_bytes, pending_bytes, limit_bytes }. used_bytes counts stored zips and assets; pending_bytes is reserved by unfinished uploads; the limit is 10 GB (10,737,418,240 bytes).
encryptionobjectHow stored files are encrypted.
created_at / updated_atstringISO 8601 timestamps.
Errors
| Status | Code | When |
|---|---|---|
400 | bad_request | name is missing or too long. |
401 | invalid_api_key / missing_account_id / account_mismatch | The key or Account ID is wrong. |
402 | quota_exceeded | This month's free tokens are used up. |
403 | insufficient_scope | The key lacks the permission. |
404 | not_found | No project with that id on your account. |
409 | limit_reached | The project already has 100 buckets. |
503 | storage_unavailable | Storage couldn't be set up; try again. |
curl -X POST "https://api.codebuckets.clatterlabs.xyz/v1/projects/PROJECT_ID/buckets" \
-H "Authorization: Bearer $CLATTER_API_KEY" \
-H "X-Clatter-Account: $CLATTER_ACCOUNT_ID" \
-H "Content-Type: application/json" \
-d '{
"name": "web",
"preview": true
}'import os
import requests
headers = {
"Authorization": f"Bearer {os.environ['CLATTER_API_KEY']}",
"X-Clatter-Account": os.environ["CLATTER_ACCOUNT_ID"],
}
r = requests.post(
"https://api.codebuckets.clatterlabs.xyz/v1/projects/PROJECT_ID/buckets",
headers=headers,
json={
"name": "web",
"preview": True
},
)
print(r.json())const headers = {
Authorization: `Bearer ${process.env.CLATTER_API_KEY}`,
"X-Clatter-Account": process.env.CLATTER_ACCOUNT_ID,
"Content-Type": "application/json",
};
const res = await fetch("https://api.codebuckets.clatterlabs.xyz/v1/projects/PROJECT_ID/buckets", {
method: "POST",
headers,
body: JSON.stringify({
"name": "web",
"preview": true
}),
});
console.log(await res.json());{
"object": "bucket",
"id": "cbk_q7c1r9t2y6u0i3o8p5a4",
"project_id": "cbp_4k9x2m7q1n8v3c6z0b5w",
"name": "web",
"description": null,
"preview": true,
"visibility": "private",
"code": {
"ref": null,
"files": 0,
"bytes": 0
},
"storage": {
"used_bytes": 0,
"pending_bytes": 0,
"limit_bytes": 10737418240
},
"encryption": {
"algorithm": "AES-256-GCM",
"key": "per-bucket data key, wrapped by a Clatter Labs master key"
},
"created_at": "2026-10-28T14:05:11.482Z",
"updated_at": "2026-10-28T14:05:11.482Z"
}