Local API

Kendalikan Q-Booth yang sedang berjalan dari aplikasi Anda lewat HTTP, di PC yang sama atau jaringan lokal: mulai event, ambil foto, cetak, tampilkan QR, dan baca status booth.

7 menit baca Diperbarui 26 Oct 2026

Local API memungkinkan aplikasi Anda sendiri mengendalikan Q-Booth yang sedang berjalan lewat HTTP — dari PC yang sama atau perangkat lain di jaringan lokal. Mulai event, bawa tamu melewati sesi foto, cetak, tampilkan kode QR, dan baca posisi booth kapan saja.

Catatan

Halaman ini mendokumentasikan API versi 1. Booth melaporkan versi yang dijalankannya di status → app.apiVersion. API ini hanya bekerja di jaringan lokal — tidak bisa diakses lewat internet.

Memulai

  1. Buka jendela Pengaturan Aplikasi, masuk ke Lanjutan → Local API, lalu nyalakan Aktifkan Local API. (Jika Lanjutan tidak terlihat, aktifkan dulu Tampilkan semua pengaturan.)
  2. Biarkan Kata sandi kosong agar dibuatkan otomatis, atau ketik sendiri. Port bawaan adalah 8730.
  3. Untuk memanggilnya dari perangkat lain, nyalakan Izinkan perangkat lain di jaringan. Windows mungkin sekali meminta izin agar Q-Booth bisa melewati firewall — izinkan.
  4. Klik Simpan Pengaturan, lalu Buka halaman uji. Halaman uji berisi tombol untuk setiap perintah, plus salinan referensi ini dari booth itu sendiri.

Alamatnya http://<pc-booth>:8730 (http://localhost:8730 di PC booth itu sendiri). Semua perintah ada di bawah /api/v1/.

curl http://localhost:8730/api/v1/status -H "Authorization: Bearer KATA_SANDI_ANDA"

Kata sandi

Setiap panggilan kecuali GET /api/v1/commands membutuhkan kata sandi. Kirim dengan salah satu cara berikut:

  • Authorization: Bearer <kata sandi> (disarankan)
  • X-QBooth-Key: <kata sandi>
  • ?key=<kata sandi> di URL, untuk alat yang hanya bisa membuka tautan

Kata sandi salah atau tidak ada akan dijawab 401. Sepuluh percobaan salah dalam satu menit dari satu alamat akan diblokir selama satu menit (429). Kata sandi ini adalah kunci operator — siapa pun yang memilikinya bisa mengendalikan booth, jadi jaga kerahasiaannya.

Balasan

Pembacaan memakai GET dan dijawab 200 beserta datanya:

{ "ok": true, "data": { ... } }

Aksi memakai POST dengan body JSON (atau query string). GET juga bisa, untuk alat pemicu yang hanya bisa mengirim GET. Aksi yang diterima dijawab 202 begitu booth menerimanya — tidak menunggu foto, cetakan, atau tamu:

{ "ok": true, "accepted": "camera/capture" }

Panggilan yang ditolak menyebutkan alasannya, dengan kode yang bisa Anda tindak lanjuti:

{ "ok": false, "error": { "code": "wrong_page", "message": "The booth is on the welcome page. This needs the Camera page." } }

API tidak pernah mengantrekan perintah untuk nanti. Jika booth tidak dalam kondisi yang mengizinkan, perintah langsung ditolak. Pesan error selalu dalam bahasa Inggris; gunakan code untuk logika aplikasi Anda.

Status

GET /api/v1/status memberi tahu posisi booth. Panggil berkala untuk mengikuti apa yang terjadi setelah sebuah aksi — setiap 300 sampai 1000 ms sudah cukup. Jika panggilan sama sekali tidak bisa terhubung, Q-Booth tidak berjalan (atau Local API mati).

{
  "app":     { "name": "QBooth", "version": "5.9.1.0", "apiVersion": "1" },
  "event":   { "id": "1781706869_H5A4", "name": "Wedding" },
  "page":    "camera",
  "session": { "active": true, "templateId": "…", "templateName": "Strip 3" },
  "camera":  { "phase": "review", "shot": 3, "shots": 3, "captured": 3, "feed": "live", "retakesLeft": 1 },
  "result":  null,
  "busy":    { "dialog": false, "processing": false },
  "available": ["camera/retake", "camera/process", "session/end", "event/stop"]
}
FieldArti
eventEvent yang sedang berjalan, atau null jika booth tidak menjalankan event.
pagenone, welcome, survey, categoryPicker, templatePicker, input, camera atau result.
sessionactive setelah tamu memulai (dan membayar, jika event berbayar), serta template yang sudah dipilih.
cameraHanya di halaman Kamera. phase berisi liveIdle, counting, recording, capturing, reveal, shotDelay atau review. retakesLeft bernilai null jika tidak dibatasi.
resultHanya di halaman Hasil: hasil mana yang tampil, dari berapa.
busyAda dialog di layar (pembayaran, PIN, QR, pemberitahuan) atau foto sedang diproses. Aksi ditolak selama salah satunya aktif.
availableAksi yang saat ini akan diterima booth — dihitung dengan pemeriksaan yang sama dengan aksinya, jadi bisa Anda pakai untuk mengaktifkan atau meredupkan tombol di aplikasi Anda.

Satu tamu, langkah demi langkah

Alur umum, setiap langkah menunggu halaman atau fase yang tertera di status:

PanggilanLalu tunggu
POST event/start {"id": "…"}page: welcome
POST session/startpage: templatePicker (atau categoryPicker / survey, tergantung event)
POST template/select {"index": 1}page: camera, camera.phase: liveIdle, camera.feed: live
POST camera/capturecamera.phase: review
POST camera/processpage: result
POST result/print—
POST session/endpage: welcome
Tips

API mengikuti aturan yang sama dengan tamu. Survei, formulir, pembayaran, atau PIN muncul di layar booth persis seperti setelah ketukan, dan API tidak mengisinya untuk tamu. Batas cetak dan PIN cetak juga berlaku.

Perintah

Semua path diawali /api/v1/. index dimulai dari 1, sesuai urutan kartu yang dilihat tamu (galeri kiri atas lebih dulu). Kirim id atau index, bukan keduanya; kalau keduanya dikirim, yang dipakai id.

PerintahBerlaku saatFungsi
GET statusSelaluPosisi booth dan aksi yang akan diterimanya. Lihat Status.
GET commandsSelalu, tanpa kata sandiDaftar perintah beserta versi API — dasar halaman uji.
GET eventsSelaluSemua event di PC: id, name, archived, templateCount, running.
POST event/start
{"id": "…"}
Tidak ada event berjalan, tidak ada dialog, editor event tidak terbuka di event lain atau dengan perubahan belum disimpanMemulai event, seperti tombol Launch-nya. Peringatan template, jika ada, muncul dulu di layar booth.
POST event/stopEvent berjalan, tidak ada dialog, tidak sedang memprosesMengakhiri sesi booth dan kembali ke aplikasi. PIN keluar tidak ditanyakan.
GET templates
?eventId=… (opsional)
Selalu dengan eventId; tanpa itu, event harus berjalanTemplate yang bisa dipilih tamu. Dengan eventId: event tersimpan mana pun, berjalan atau tidak. Tanpa itu: event yang sedang berjalan, dan di Template Picker-nya (atau halaman Welcome yang punya galeri template) onScreen dan index menunjukkan kartu yang tampil.
GET categories
?eventId=… (opsional)
Selalu dengan eventId; tanpa itu, event harus berjalanKategori yang aktif di event, dengan aturan eventId yang sama. Di Category Picker event yang berjalan, onScreen dan index menunjukkan kartu yang tampil.
POST session/startHalaman WelcomeTombol Start. PIN Start atau pembayaran, jika event memakainya, muncul di layar booth.
POST session/endHalaman mana pun setelah WelcomeTombol Home: menutup sesi tamu dan kembali ke Welcome.
POST category/select
{"id": "…"} atau {"index": n}
Halaman Category PickerMemilih kategori seperti mengetuk kartunya, lalu membuka Template Picker.
POST template/select
{"id": "…"} atau {"index": n}
Halaman Welcome (template mana pun di event), atau halaman Template Picker dengan template tampil di sanaDi Template Picker: memilih template seperti mengetuk kartunya lalu mengonfirmasinya (tombol Next ditekan untuk Anda). Di Welcome: memulai sesi dengan template itu, seperti mengetuk kartu di galeri template halaman Welcome. PIN Start atau pembayaran tampil dulu di layar booth, lalu halaman picker dilewati. Di Welcome, index menghitung kartu galeri Welcome; kalau tidak ada galeri di sana, pilih dengan id.
POST camera/captureHalaman Kamera, live view siaga (atau menunggu di antara foto), kamera aktifTombol Capture: memulai hitung mundur dan pemotretan. Di antara foto multi-shot manual, mengambil foto berikutnya.
POST camera/retakeHalaman Kamera, sedang meninjau foto, masih ada jatah ulangTombol Retake untuk foto yang tampil, mengikuti pengaturan after-tap tombol itu.
POST camera/processHalaman Kamera, sedang meninjau fotoTombol Process: mengirim foto ke template.
POST result/printHalaman Hasil, printer sudah diatur, cetak diizinkanTombol Print untuk hasil yang tampil. PIN cetak, batas, dan jeda setelah cetak berlaku; jika cetak tambahan dijual, membuka pembelian.
POST result/qr
{"type": "web"} atau "local"
Halaman Hasil, jenis QR itu sudah diatur di PengaturanMenampilkan kode QR untuk hasil yang tampil, seperti tombol QR Web / QR Local. Bawaan web.

Error

HTTPKodeArti
400bad_requestParameter tidak ada atau tidak valid.
401unauthorizedTanpa kata sandi, atau kata sandi salah.
404not_foundPath atau perintah tidak dikenal.
404unknown_event, unknown_template, unknown_categoryTidak ada event, template, atau kategori dengan id atau index itu.
405method_not_allowedPOST dikirim ke perintah baca.
409no_eventPerintah ini butuh event yang berjalan.
409event_runningSudah ada event yang berjalan.
409editor_openEditor event terbuka di PC booth (event lain, atau ada perubahan belum disimpan).
409no_templatesEvent tidak punya template.
409wrong_pageTidak berlaku di halaman yang sedang tampil.
409wrong_phaseDi halaman Kamera, tetapi belum di tahap yang memungkinkan.
409dialog_openAda dialog terbuka di layar booth.
409processingFoto sedang diproses.
409busyBooth masih menyelesaikan aksi sebelumnya. Coba lagi sebentar.
409not_allowedDiblokir aturan: jatah ulang habis, batas cetak tercapai, jeda setelah cetak.
409not_configuredTidak ada printer, atau jenis QR itu belum diatur di Pengaturan.
429too_many_attemptsTerlalu banyak kata sandi salah. Tunggu satu menit.
503busyQ-Booth tidak menjawab tepat waktu. Coba lagi.

Log

Setiap panggilan dicatat di folder log aplikasi, log\local_api\, satu file per hari: alamat pemanggil, perintah dan parameternya, jawaban, serta alasan penolakan. Kata sandi tidak pernah dicatat. Pemanggilan status yang berhasil tidak dicatat.

Riwayat versi

Versi APIVersi Q-BoothPerubahan
1Segera hadirRilis pertama: status, commands, events, event start / stop, templates, categories, session start / end, pemilihan kategori dan template, camera capture / retake / process, result print dan QR.

Masih butuh bantuan?

Tim kami siap membantu lewat WhatsApp. Sebutkan versi Q-Booth dan apa yang muncul di layar.

Chat via WhatsApp