Panduan API

Pakai WujudTin dari aplikasimu sendiri. Semua alamat dimulai dengan https://wujudtin.com, dan jawabannya selalu berbentuk JSON.

Yang tidak ada di API 3D lain

Alamat /api/v1/estimate menjawab pertanyaan yang sebenarnya dihadapi orang sebelum mencetak: butuh berapa gram filamen, per warna, berikut yang terbuang tiap printer berganti warna. Gratis, tidak memotong kredit.

1. Dapatkan kunci

Buat kunci di halaman Kunci API. Kunci hanya ditampilkan sekali, jadi simpan baik-baik.

Kunci API terbuka setelah pembelian kredit pertama. Ini menjaga layanan dari pembuatan akun massal yang menghabiskan kapasitas untuk semua orang.

Kirim kunci di setiap permintaan:

Authorization: Bearer wjt_live_xxxxxxxxxxxxxxxx

2. Buat model 3D

POST/api/v1/modelsmemotong kredit
curl -X POST https://wujudtin.com/api/v1/models \
  -H "Authorization: Bearer KUNCI_KAMU" \
  -H "Content-Type: application/json" \
  -d '{
    "mode": "text",
    "prompt": "vas keramik bulat bermotif batik biru",
    "quality": "standard",
    "detail": "normal"
  }'
{
  "id": "aBc123...",
  "status": "pending",
  "credits_spent": 20
}
modestandardhighultra
text203040
image304050
multiview304050

Angka di atas dalam kredit. detail boleh diisi ringan, normal, padat - tidak menambah biaya, hanya mengubah kerapatan mesh dan ukuran file.

Untuk mode foto, unggah gambarnya dulu:

POST/api/v1/uploadsgratis
curl -X POST https://wujudtin.com/api/v1/uploads \
  -H "Authorization: Bearer KUNCI_KAMU" \
  -F "file=@foto.jpg"

# -> { "url": "https://....blob.vercel-storage.com/..." }

# lalu pakai alamat itu:
{ "mode": "image", "image_url": "https://....blob.vercel-storage.com/..." }

# atau beberapa sudut sekaligus (depan wajib, minimal dua foto):
{ "mode": "multiview", "views": {
    "front": "...", "left": "...", "back": "...", "right": "..." } }

Gambar wajib diunggah lewat alamat di atas. Alamat gambar dari tempat lain ditolak - itu mencegah layanan ini dipakai sebagai perantara untuk menjangkau jaringan dalam.

3. Tunggu dan ambil hasilnya

GET/api/v1/models/{id}gratis
curl https://wujudtin.com/api/v1/models/aBc123 \
  -H "Authorization: Bearer KUNCI_KAMU"
{
  "data": {
    "id": "aBc123",
    "status": "succeeded",
    "progress": 100,
    "model_url": "https://....blob.vercel-storage.com/....glb",
    "thumbnail_url": "https://....webp"
  }
}

Status berjalan: pending -> running -> succeeded atau failed. Biasanya 1-3 menit. Kalau gagal, kredit dikembalikan otomatis.

GET/api/v1/modelsgratis

Daftar model kamu. Tambahkan ?limit=50 kalau perlu.

4. Hitung gramasi

POST/api/v1/estimateGRATIS, tanpa kredit
curl -X POST https://wujudtin.com/api/v1/estimate \
  -H "Authorization: Bearer KUNCI_KAMU" \
  -H "Content-Type: application/json" \
  -d '{
    "model_id": "aBc123",
    "size_mm": 100,
    "material": "PLA",
    "infill": 0.15,
    "colors": 3
  }'
{
  "data": {
    "dimensions_mm": [68.8, 73.7, 100],
    "grams": 55.2,
    "colors": [
      { "hex": "#a7270e", "grams": 49.6, "is_base": true },
      { "hex": "#c8baa5", "grams": 3.6,  "is_base": false },
      { "hex": "#b46b52", "grams": 2,    "is_base": false }
    ],
    "purge_grams": 144,
    "swaps": 847,
    "total_grams": 199.2,
    "printability": {
      "watertight": false,
      "holes": 0,
      "non_manifold_edges": 39,
      "volume_cm3": 189,
      "ready": true
    }
  }
}

Perhatikan purge_grams: pada contoh di atas, mencetak dalam 3 warna membuang 144 gram - hampir tiga kali berat modelnya sendiri. Angka itulah yang biasanya baru ketahuan setelah filamen terlanjur habis.

size_mm: 50, 100, 150, 200 - material: PLA, PETG, ABS, TPU, RESIN - infill: 0 sampai 1 - colors: 1 sampai 4, kosongkan untuk saran otomatis. Bisa juga memakai model_url sebagai ganti model_id.

Batas dan pesan error

KodeArtinya
401Kunci salah, tidak ada, atau sudah dicabut
402Kredit tidak cukup
404Model tidak ada, atau bukan milikmu
413Berkas model terlalu besar untuk dihitung
422Berkas model tidak bisa dibaca
429Terlalu sering. Lihat header X-RateLimit-Reset
503Batas pemakaian harian layanan tercapai, coba besok

Batas per menit: 10 untuk membuat model, mengunggah, dan menghitung gramasi; 120 untuk membaca status. Tiap jawaban menyertakan sisa jatahmu di header X-RateLimit-Remaining.

Bentuk error selalu sama, jadi mudah ditangani:

{ "error": { "code": "insufficient_credits", "message": "Kredit tidak cukup. Butuh 30, tersisa 10." } }

Butuh bantuan?

API ini masih baru dan kami memang ingin tahu kalau ada yang membingungkan atau angkanya terasa meleset. Beri tahu kami - terutama kalau hasil gramasi kami berbeda jauh dari angka slicer kamu.