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, or never. Defaults to 12h. Use never only 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')