Storage API

Storage API Mini

Solusi upload & penyimpanan gambar yang ringan, aman, dan mudah diintegrasikan ke aplikasi apapun.

Fitur Utama

Apa saja yang tersedia di Storage API Mini?

API Key Auth

Setiap request upload dilindungi API Key permanen yang dikelola dari dashboard.

Token HMAC

Token upload bertanda tangan HMAC-SHA256, dilindungi secret key saat request.

3 Ukuran Otomatis

Gambar otomatis di-resize ke original, medium (800px), dan thumb (200px).

Format Support

Mendukung JPEG, PNG, dan WebP dengan batas ukuran 5MB per file.

API Endpoints

Endpoint yang tersedia di Storage API Mini.

GET /token.php Generate upload token

Mendapatkan token upload yang ditandatangani HMAC-SHA256. Wajib menyertakan API Key via header X-API-KEY atau query param ?api_key=.

Auth (salah satu)
Header / Param Tipe Keterangan
X-API-KEY (header) string required API Key yang valid dari dashboard.
api_key (query) string Alternatif via query param bila tidak bisa set header.
Contoh Request
# Via header (direkomendasikan)
curl "https://storage.testdev.my.id/token.php" -H "X-API-KEY: your_api_key_here"

# Via query param
curl "https://storage.testdev.my.id/token.php?api_key=your_api_key_here"
Response
{
  "token":  "dGltZXN0YW1wfHNpZ25hdHVyZQ==",
  "expire": 1740000300
}
POST /upload.php Upload gambar

Upload file gambar. Wajib menyertakan API Key di header dan token yang valid di form data.

Headers
Header Tipe Keterangan
X-API-KEY string required API Key yang valid dan belum expired.
Form Data (multipart/form-data)
Field Tipe Keterangan
token string required Token dari /token.php.
file file required File gambar JPEG / PNG / WebP, maks 5MB.
folder string optional Sub-folder tujuan upload, pisahkan level dengan /. Contoh: products/2024. Maks 5 level, hanya huruf kecil, angka, - dan _.
Contoh Request (cURL)
# Step 1: Ambil token
TOKEN=$(curl -s "https://storage.testdev.my.id/token.php" \
  -H "X-API-KEY: your_api_key_here" \
  | python3 -c "import sys,json; print(json.load(sys.stdin)['token'])")

# Step 2a: Upload tanpa folder (ke root)
curl -X POST https://storage.testdev.my.id/upload.php \
  -H "X-API-KEY: your_api_key_here" \
  -F "token=$TOKEN" \
  -F "file=@/path/to/image.jpg"

# Step 2b: Upload ke sub-folder products/2024
curl -X POST https://storage.testdev.my.id/upload.php \
  -H "X-API-KEY: your_api_key_here" \
  -F "token=$TOKEN" \
  -F "folder=products/2024" \
  -F "file=@/path/to/image.jpg"
POST /delete.php Hapus file batch / hapus folder

Hapus banyak file sekaligus atau hapus satu folder penuh (termasuk original, medium, thumb). Wajib menyertakan API Key di header dan token valid.

Headers
Header Tipe Keterangan
X-API-KEY string required API Key yang valid dan belum expired.
Contoh 1: Batch delete files via cURL (JSON body)
# Step 1: Ambil token
TOKEN=$(curl -s "https://storage.testdev.my.id/token.php" \
  -H "X-API-KEY: your_api_key_here" \
  | python3 -c "import sys,json; print(json.load(sys.stdin)['token'])")

# Step 2: Hapus banyak file sekaligus
curl -X POST "https://storage.testdev.my.id/delete.php" \
  -H "X-API-KEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "token": "'"$TOKEN"'",
    "action": "files",
    "files": [
      "products/2024/img_a.jpg",
      "products/2024/img_b.jpg"
    ]
  }'
Contoh 2: Hapus folder via cURL
curl -X POST "https://storage.testdev.my.id/delete.php" \
  -H "X-API-KEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "token": "'"$TOKEN"'",
    "action": "folder",
    "folder": "products/2024"
  }'

Cara Pakai

Ikuti langkah-langkah berikut untuk mengintegrasikan Storage API.

Dapatkan API Key

Login ke Admin Dashboard lalu generate API Key. Simpan key dengan aman.

Ke Dashboard
Minta Upload Token

Request token dari /token.php menggunakan API Key di header X-API-KEY.

Upload Gambar

POST ke /upload.php dengan API Key di header dan token di form data.

Response & Error Codes

Format response yang dikembalikan oleh API.

200 OK — Upload berhasil
{
  "status":   "ok",
  "filename": "img_6789abcd1234.jpg",
  "folder":   "products/2024",  // null jika tanpa folder
  "original": "https://domain.com/uploads/original/products/2024/img_xxx.jpg",
  "medium":   "https://domain.com/uploads/medium/products/2024/img_xxx.jpg",
  "thumb":    "https://domain.com/uploads/thumbs/products/2024/img_xxx.jpg"
}
401 — Tidak terotorisasi
{
  "error": "API Key tidak valid"
}

// Kemungkinan lainnya:
"error": "Token wajib disertakan"
"error": "Token expired"
"error": "Token tidak valid"
400 — Bad Request
{
  "error": "File tidak ada"
}
"error": "File terlalu besar (maks 5MB)"
"error": "Tipe file tidak diizinkan (JPEG, PNG, WebP)"