Upload File API
Endpoint to upload files to the server.
Temporary API uploads do not require a web login. Permanent uploads require an account API key and active admin-approved permission ($5 USD/month). Website uploads with temporary lifetimes are anonymous; permanent website uploads require an account and active permission.
Endpoint
POST /api/upload
Upload from URL
GET /api/upload/to?url=...&namefile=...&expiresIn=2h
Request Body Parameters
file: The file to upload (multipart/form-data).expiresIn: Optional file lifetime:30m,2h,12h,2d,30d,1y, ornever. Defaults to12h. Useneveronly with an authorized account API key.
Success Response
true OK
{
"creator": "Husky_dev",
"status": true,
"message": "File uploaded successfully",
"data": {
"url": "https://cdn.huskydev.space/filename.ext",
"type": "application/pdf",
"size": "102.40 KB",
"expiresAt": "2026-11-06T01:00:00.000Z"
}
}
For permanent files, expiresAt is null. The URL upload endpoint accepts the same expiresIn options as a query parameter. Create and manage API keys from your account page; send them using Authorization: Bearer hdev_....
Error Responses
Invalid input returns 400; missing or invalid keys return 401 when permanent
storage is requested; inactive permission returns 403; and account quota exhaustion returns
413. Uploads are limited to 4 MB by default; MAX_FILE_SIZE can change this on
supported hosting.
Example · 400 Bad Request
{
"status": false,
"message": "No file uploaded."
}
Example · 500 Internal Server Error
{
"status": false,
"message": "Error uploading file."
}
Example Usage with JavaScript
import fs from 'fs'
import FormData from 'form-data'
import axios from 'axios'
// Upload file dari path lokal
const uploadFile = async (filePath) => {
const formData = new FormData()
formData.append('file', fs.createReadStream(filePath))
formData.append('expiresIn', '2h')
try {
const response = await axios.post('https://cdn.huskydev.space/api/upload', formData, {
headers: formData.getHeaders()
})
console.log('Upload berhasil:', response.data)
} catch (error) {
console.error('UploadFile Error:', error.message)
}
}
// Upload file from a public URL
const uploadFromUrl = async (sourceUrl, namefile, expiresIn = '12h') => {
try {
const params = new URLSearchParams({ url: sourceUrl, namefile, expiresIn })
const url = \`https://cdn.huskydev.space/api/upload/to?\${params}\`
const response = await axios.get(url, {
headers: { Authorization: \`Bearer \${process.env.HUSKY_CDN_API_KEY}\` }
})
console.log('Upload berhasil:', response.data)
} catch (error) {
console.error('UploadFromUrl Error:', error.message)
}
}
// Contoh penggunaan
uploadFile('./tmp/example.pdf')
uploadFromUrl('https://example.com/image.jpg', 'image', '30d')