> ## Documentation Index
> Fetch the complete documentation index at: https://docs.leviacloud.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart

> Buat API key, lalu jalankan dan hapus VM pertama Anda dengan curl.

Panduan ini membawa Anda dari nol sampai VM berjalan, lalu menghapusnya lagi. Anda butuh akun Levia Cloud dengan saldo atau voucher, `curl`, dan (opsional) [`jq`](https://jqlang.org) untuk membaca JSON.

**1. Buat API key di dashboard**

1. Buka dashboard, lalu **Pengaturan Organisasi → tab API Key → Buat API Key**.
2. Isi **Nama** (mis. `quickstart`) dan pilih **Masa Berlaku** (bawaan 90 hari).
3. Di **Akses Open API**, pilih akses per layanan: *Tidak ada*, *Baca*, atau *Baca & tulis*. Untuk panduan ini pilih **Compute: Baca & tulis** dan **SSH key: Baca & tulis**. Katalog (region, zona, paket, image) selalu bisa dibaca.
4. Klik **Buat API Key**, lalu salin key yang tampil (`sk_…`).

> [!WARNING]
>
> Key hanya ditampilkan **sekali**. Simpan di password manager atau secret store. Bila hilang, cabut key itu lalu buat yang baru. Lihat [Autentikasi](https://docs.leviacloud.com/konsep/autentikasi.md).

Tab API Key hanya terlihat oleh role yang boleh mengelola resource organisasi.

**2. Siapkan variabel**

```bash theme={null}
export LEVIA_API=https://api.leviacloud.com/v1
export LEVIA_KEY=sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   # ganti dengan key Anda
```

**3. Pilih region dan zona**

```bash theme={null}
curl -s "$LEVIA_API/regions" -H "Authorization: Bearer $LEVIA_KEY"
```

Ambil `id` region yang `available: true`, lalu lihat zonanya:

```bash theme={null}
export REGION=7f1c2d3e-0000-4000-8000-000000000001   # id region dari jawaban di atas
curl -s "$LEVIA_API/regions/$REGION/zones" -H "Authorization: Bearer $LEVIA_KEY"
export ZONE=7f1c2d3e-0000-4000-8000-000000000005     # id zona
```

**4. Pilih paket dan image**

```bash theme={null}
curl -s "$LEVIA_API/plans?region_id=$REGION" -H "Authorization: Bearer $LEVIA_KEY"
curl -s "$LEVIA_API/images?region_id=$REGION&zone_id=$ZONE" -H "Authorization: Bearer $LEVIA_KEY"
```

Pilih paket dengan `available: true` (simpan `id`-nya) dan image dengan `available: true` di zona itu. `id` image berupa slug, mis. `ubuntu-24-04`.

```bash theme={null}
export PLAN=7f1c2d3e-0000-4000-8000-000000000002
export IMAGE=ubuntu-24-04
```

**5. Tambahkan SSH key**

```bash theme={null}
curl -s -X POST "$LEVIA_API/ssh-keys" \
  -H "Authorization: Bearer $LEVIA_KEY" -H "Content-Type: application/json" \
  -d '{"name": "laptop", "public_key": "ssh-ed25519 AAAA... me@laptop"}'
```

Jawaban `201` memuat `data.id`. SSH key milik user yang membuat API key, sama seperti di dashboard.

```bash theme={null}
export SSH=7f1c2d3e-0000-4000-8000-000000000003
```

**6. Buat VM**

```bash theme={null}
curl -s -X POST "$LEVIA_API/vms" \
  -H "Authorization: Bearer $LEVIA_KEY" -H "Content-Type: application/json" \
  -H "Idempotency-Key: quickstart-web-1" \
  -d '{
    "name": "web-1",
    "region_id": "'$REGION'",
    "zone_id": "'$ZONE'",
    "plan_id": "'$PLAN'",
    "image": "'$IMAGE'",
    "ssh_key_id": "'$SSH'"
  }'
```

VM mulai ditagih seperti dari dashboard, dan saldo diperiksa lebih dulu. Tanpa `vpc_id`/`subnet_id`, VPC default organisasi di region itu dipakai. Jawaban `201`:

```json theme={null}
{
  "data": {
    "id": "7f1c2d3e-0000-4000-8000-000000000001",
    "name": "web-1",
    "status": "provisioning",
    "image": "ubuntu-24-04",
    "login_user": "ubuntu",
    "created_at": "2026-11-08T07:15:00Z"
  }
}
```

Header `Idempotency-Key` membuat request ini aman diulang: bila koneksi putus lalu Anda mengirim ulang request yang sama, VM kedua tidak dibuat. Lihat [Idempotency](https://docs.leviacloud.com/konsep/idempotency.md).

**7. Tunggu sampai running**

```bash theme={null}
export VM=7f1c2d3e-0000-4000-8000-000000000001
until curl -s "$LEVIA_API/vms/$VM" -H "Authorization: Bearer $LEVIA_KEY" \
    | jq -e '.data.status == "running"' > /dev/null; do
  sleep 10
done
curl -s "$LEVIA_API/vms/$VM" -H "Authorization: Bearer $LEVIA_KEY" | jq '.data | {status, private_ip, public_ip, login_user}'
```

Hentikan loop bila `status` menjadi `error`. Lihat [Operasi asinkron](https://docs.leviacloud.com/konsep/operasi-asinkron.md).

**8. Hapus VM dan SSH key**

```bash theme={null}
curl -s -X DELETE "$LEVIA_API/vms/$VM" -H "Authorization: Bearer $LEVIA_KEY"
curl -s -X DELETE "$LEVIA_API/ssh-keys/$SSH" -H "Authorization: Bearer $LEVIA_KEY"
```

Hapus VM menjawab `202` dengan `status: "deleting"` selama penghapusan berjalan; VM hilang dari daftar setelah selesai, dan tagihannya berhenti.

## Selanjutnya

* [Scope](https://docs.leviacloud.com/konsep/scope.md): akses minimum yang dibutuhkan integrasi Anda.
* [Rate limit](https://docs.leviacloud.com/konsep/rate-limit.md) dan [format error](https://docs.leviacloud.com/konsep/respons-error.md) sebelum masuk produksi.
* [Siklus hidup VM](https://docs.leviacloud.com/produk/vm.md): start, stop, resize, snapshot.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.