Soraa API Docs
REST API — Deploy, Clone & Rating — @depstore11
https://soraa.xte.web.id
Autentikasi
Semua endpoint kecuali /api/status membutuhkan API Key di header:
X-API-Key: YOUR_KEY atau Authorization: Bearer YOUR_KEY
GET /api/status Cek status server
Tidak membutuhkan API Key
Contoh Request
php
$res  = file_get_contents('https://soraa.xte.web.id/api/status');
$data = json_decode($res, true);
echo $data['bot'];
curl
curl https://soraa.xte.web.id/api/status
js
const data = await (await fetch('/api/status')).json();
console.log(data.bot);
python
import requests
data = requests.get('https://soraa.xte.web.id/api/status').json()
print(data['bot'])
Response 200
{
  "ok":      true,
  "bot":     "Soraa.dev",
  "owner":   "@KaodepstoreID",
  "channel": "@depstore11",
  "domain":  "soraa.xte.web.id",
  "deploy":  12,
  "clone":   7,
  "rating":  5,
  "uptime":  3600
}
POST /api/deploy Deploy ZIP ke Surge.sh
Request — multipart/form-data
FieldTypeWajibKeterangan
domainstringYaSubdomain tanpa .surge.sh
filefile (.zip)YaZIP berisi file website
Contoh Request
php
$ch = curl_init('https://soraa.xte.web.id/api/deploy');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['X-API-Key: YOUR_KEY']);
curl_setopt($ch, CURLOPT_POSTFIELDS, [
    'domain' => 'namaweb',
    'file'   => new CURLFile('/path/website.zip', 'application/zip', 'website.zip')
]);
$data = json_decode(curl_exec($ch), true);
echo $data['url'];
curl
curl -X POST https://soraa.xte.web.id/api/deploy \
  -H "X-API-Key: YOUR_KEY" \
  -F "domain=namaweb" \
  -F "file=@/path/website.zip"
js
const form = new FormData();
form.append('domain', 'namaweb');
form.append('file', zipBlob, 'website.zip');
const data = await (await fetch('/api/deploy', {
    method: 'POST', headers: { 'X-API-Key': 'YOUR_KEY' }, body: form
})).json();
console.log(data.url);
python
import requests
with open('/path/website.zip', 'rb') as f:
    r = requests.post('https://soraa.xte.web.id/api/deploy',
        headers={'X-API-Key': 'YOUR_KEY'},
        data={'domain': 'namaweb'},
        files={'file': f})
print(r.json()['url'])
Response
200Deploy sukses
{ "ok": true, "url": "https://namaweb.surge.sh", "message": "Deploy sukses" }
401API key salah
400Field tidak lengkap
500Surge error
POST /api/clone Clone website ke ZIP
Request — application/json
FieldTypeWajibKeterangan
urlstringYaURL website yang ingin di-clone
Contoh Request
php
$ch = curl_init('https://soraa.xte.web.id/api/clone');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    'X-API-Key: YOUR_KEY'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(['url' => 'https://example.com']));
$zip = curl_exec($ch);
file_put_contents('clone.zip', $zip);
curl
curl -X POST https://soraa.xte.web.id/api/clone \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_KEY" \
  -d '{"url":"https://example.com"}' \
  --output clone.zip
js
const res  = await fetch('/api/clone', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json', 'X-API-Key': 'YOUR_KEY' },
    body: JSON.stringify({ url: 'https://example.com' })
});
const blob = await res.blob();
const a = document.createElement('a');
a.href = URL.createObjectURL(blob);
a.download = 'clone.zip';
a.click();
python
r = requests.post('https://soraa.xte.web.id/api/clone',
    headers={'X-API-Key': 'YOUR_KEY'},
    json={'url': 'https://example.com'})
with open('clone.zip', 'wb') as f:
    f.write(r.content)
Response
200Binary ZIP (application/zip)
401API key salah
500Crawl gagal
POST /api/rating Kirim rating ke Telegram
Request — application/json
FieldTypeWajibKeterangan
namestringYaNama pengirim
ratingnumber 1-5YaRating bintang
messagestringYaIsi testimoni
Contoh Request
php
$ch = curl_init('https://soraa.xte.web.id/api/rating');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    'X-API-Key: YOUR_KEY'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
    'name'    => 'Budi',
    'rating'  => 5,
    'message' => 'Keren banget!'
]));
$data = json_decode(curl_exec($ch), true);
echo $data['message'];
curl
curl -X POST https://soraa.xte.web.id/api/rating \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_KEY" \
  -d '{"name":"Budi","rating":5,"message":"Keren!"}'
js
const data = await (await fetch('/api/rating', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json', 'X-API-Key': 'YOUR_KEY' },
    body: JSON.stringify({ name: 'Budi', rating: 5, message: 'Keren!' })
})).json();
console.log(data.message);
python
r = requests.post('https://soraa.xte.web.id/api/rating',
    headers={'X-API-Key': 'YOUR_KEY'},
    json={'name': 'Budi', 'rating': 5, 'message': 'Keren!'})
print(r.json())
Response
200Rating terkirim ke Telegram
{ "ok": true, "message": "Rating berhasil dikirim ke channel Telegram" }
401API key salah
400Field tidak lengkap