Anow Cloud API
Store files from any app with simple HTTPS requests. The base URL for every request is https://cloud.anowhosting.com/api/v1. If you already use the AWS S3 SDK, point it at https://cloud.anowhosting.com/s3 and it works without code changes.
Authentication
Send your secret key in the Authorization header. Create keys in Dashboard → API keys. Keep secret keys on your server only; for browsers and mobile apps use a read-only public key or a signed upload URL.
Authorization: Bearer sk_live_7Hk2mQ9xVb4L••••••••3f9a
Upload a file POST /buckets/{bucket}/files
Send the file as multipart form data. Files larger than 100 MB should use multipart upload, which the SDKs handle for you.
| Field | Type | Description |
|---|---|---|
file required | binary | The file to store. |
folder | string | Folder path, e.g. 2026/10 |
visibility | public | private | Defaults to the bucket setting. |
# Upload one image to your bucket curl -X POST https://cloud.anowhosting.com/api/v1/buckets/news-site-media/files \ -H "Authorization: Bearer $VAULTORA_KEY" \ -F "file=@cover.jpg" -F "folder=2026/10" # Response { "id": "fil_8Kq2xW", "size": 2483120, "url": "https://cloud.anowhosting.com/cdn/news-site-media/2026/10/cover.jpg" }
// Plain PHP with cURL $ch = curl_init('https://cloud.anowhosting.com/api/v1/buckets/news-site-media/files'); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ['Authorization: Bearer $VAULTORA_KEY'], CURLOPT_POSTFIELDS => ['file' => new CURLFile('cover.jpg'), 'folder' => '2026/10'], ]); $file = json_decode(curl_exec($ch), true); // $file['url'] is the CDN link to save
# .env VAULTORA_KEY=$VAULTORA_KEY VAULTORA_BUCKET=news-site-media // config/filesystems.php: a normal S3 disk pointed at the endpoint 'vaultora' => [ 'driver' => 's3', 'endpoint' => 'https://cloud.anowhosting.com/s3', 'use_path_style_endpoint' => true, 'bucket' => env('VAULTORA_BUCKET'), 'key' => env('VAULTORA_ACCESS_KEY'), 'secret' => env('VAULTORA_KEY'), 'region' => 'us-east-1', ], $path = $request->file('photo')->store('2026/10', 'vaultora'); $url = Storage::disk('vaultora')->url($path);
// npm i form-data node-fetch const form = new FormData(); form.append('file', fs.createReadStream('cover.jpg')); form.append('folder', '2026/10'); const res = await fetch('https://cloud.anowhosting.com/api/v1/buckets/news-site-media/files', { method: 'POST', headers: { Authorization: 'Bearer $VAULTORA_KEY' }, body: form, }); const { url } = await res.json();
List & delete files
GET /buckets/{bucket}/files?folder=2026/10&limit=50
GET /files/{id}
PATCH /files/{id} — rename, move or change visibility
DELETE /files/{id}
Signed links
Private files are never public. Ask for a link that works for a set time, then expires on its own.
GET /files/fil_8Kq2xW/signed-url?expires_in=3600
{ "url": "https://cloud.anowhosting.com/cdn/p/fil_8Kq2xW?sig=9fa1…&exp=1792310400" }SDK & plugins
Filesystem disk vaultora, works with Storage::put()
Media Library uploads go straight to your bucket with any S3 media plugin.
Use the official AWS S3 SDK with our endpoint.
Errors & limits
| Code | Meaning |
|---|---|
| 401 | Missing or wrong API key |
| 403 | Key has no access to this bucket |
| 413 | File is bigger than your plan allows |
| 507 | Storage limit reached — upgrade or free space |
| 429 | Too many requests (600 per minute per key) |
Large files
Start an upload, send the parts in order, then complete it. Each part can be up to 100 MB; the upload may stay open for 24 hours.
POST /buckets/{bucket}/uploads — name, folder, size
PUT /uploads/{id}/parts/{number} — raw bytes as the request body
POST /uploads/{id}/complete
S3 endpoint
Use any S3 SDK with path-style addressing. The access key ID is shown with your key; the secret is the full key you copied once.
# AWS CLI aws s3 cp cover.jpg s3://news-site-media/2026/10/cover.jpg \ --endpoint-url https://cloud.anowhosting.com/s3 # supported: PutObject, GetObject, HeadObject, DeleteObject, CopyObject, # ListObjectsV2 and multipart uploads
Image resizing
On buckets with resizing turned on, add parameters to any public image link: ?w=600 &h=400 &format=webp &q=80. The longest side is limited to 4000 px and results are cached.
Webhooks
Add an endpoint in Dashboard → Webhooks. Every request carries a signature header; compute the HMAC-SHA256 of {timestamp}.{body} with your signing secret and compare it with v1.
POST /your/endpoint
Vaultora-Signature: t=1792303800,v1=5b1f0c…
{ "event": "file.uploaded", "bucket": "news-site-media", "file": { "id": "fil_8Kq2xW", … } }