---
Cara menghapus data Anda dari Oneblink
Berlaku sejak: 13 Oktober 2026
Halaman ini menjelaskan cara menghapus data Anda dari Oneblink: yang bisa Anda lakukan sendiri, dan cara meminta lewat email.
1. Yang bisa Anda lakukan sendiri
1.1 Melepas koneksi Instagram
Buka Oneblink, masuk ke layar "Akun terhubung", pilih akun Instagram yang terhubung, lalu tekan "Cabut". Anda juga bisa melakukannya dari sisi Instagram: buka aplikasi Instagram, masuk ke pengaturan akun, cari daftar aplikasi dan situs yang terhubung, lalu hapus Oneblink dari daftar itu.
Setelah koneksi dilepas, yang terjadi dijelaskan di bagian 4 halaman ini.
1.2 Menghapus lead
Penghapusan lead dari dalam aplikasi belum tersedia di rilis ini, baik satu per satu maupun sekaligus. Yang bisa Anda lakukan sendiri hanyalah mengunduh daftarnya sebagai CSV dari layar Lead, supaya Anda punya salinan sebelum apa pun dihapus. Sampai tersedia, kirim permintaan lewat email dengan cara di bagian 2, dan penghapusan dilakukan di sisi kami.
1.3 Menghapus ruang kerja dan akun
Penghapusan ruang kerja dan akun dari dalam aplikasi belum tersedia di pilot ini. Kirim permintaan lewat email dengan cara di bagian 2.
Supaya tidak ada yang disalahpahami: dua tombol di bagian 1.2 dan 1.3 belum ada. Begitu tersedia, halaman ini diperbarui dan kalimat "belum tersedia" dihapus.
2. Meminta penghapusan lewat email
Kirim email ke yopie.suryadi@gmail.com dengan subjek "Permintaan penghapusan data".
Sertakan:
1. Alamat email yang Anda pakai untuk masuk ke Oneblink. Kirim permintaan dari alamat itu bila memungkinkan, supaya kami bisa memastikan pemintanya adalah Anda.
2. Nama akun Instagram yang Anda sambungkan, bila ada.
3. Apa yang Anda minta dihapus: seluruh akun dan ruang kerja, atau hanya data tertentu, misalnya hanya koneksi Instagram, hanya lead dari satu halaman, atau satu lead tertentu.
4. Untuk permintaan satu lead tertentu: alamat email lead itu dan alamat halaman tempat ia mengisi form.
Bila kami tidak bisa memastikan permintaan datang dari pemilik data, kami akan meminta keterangan tambahan sebelum menghapus apa pun. Kami tidak menghapus data atas permintaan pihak yang tidak bisa dipastikan.
Untuk pengunjung yang mengisi form di halaman sebuah akun: data Anda dikumpulkan oleh pemilik akun itu, dan pemilik akun itulah yang menentukan tujuan pemakaiannya. Hubungi pemilik akun lewat kontak di halaman tersebut. Anda juga bisa mengirim permintaan ke alamat di atas; kami akan menghapus data Anda dari sistem kami dan memberi tahu pemilik akun yang bersangkutan.
3. Berapa lama diproses
Usulan komitmen: kami mengonfirmasi penerimaan permintaan dalam 7 hari kerja, dan menyelesaikan penghapusan dalam 30 hari kalender sejak permintaan diterima dan identitas pemintanya dipastikan.
Angka 7 hari dan 30 hari di atas adalah usulan yang menunggu persetujuan Yopie. Jangan terbitkan halaman ini sebelum angka itu disetujui, karena angka yang terbit menjadi janji.
4. Apa yang terjadi pada data setelah koneksi dilepas
Saat koneksi Instagram dilepas, baik dari Oneblink maupun dari pengaturan Instagram:
- Token akses untuk akun itu dihapus dari basis data, sehingga Oneblink tidak bisa lagi memanggil API Instagram atas nama Anda. Kolomnya adalah
connections.token_ciphertext. - Status koneksi berubah menjadi dilepas, di
connections.status. - Otomasi yang terikat pada akun itu berhenti berjalan; komentar dan pesan baru tidak lagi dibalas.
- Penerbitan posting yang masih terjadwal untuk akun itu tidak dijalankan.
Yang tetap ada setelah koneksi dilepas, sampai Anda meminta penghapusan akun:
- Catatan koneksi itu sendiri, berisi id akun Instagram dan nama tampil, supaya riwayat dan catatan kegiatan tetap bisa dibaca. Kolomnya
connections.external_account_iddanconnections.display_name. - Isi yang Anda buat: otomasi, halaman, campanye, dan versinya.
- Lead dan catatan persetujuan yang sudah masuk, karena itu data pengunjung yang Anda kumpulkan dan Anda masih bertanggung jawab atasnya.
- Catatan percakapan dan pesan yang sudah terkirim, di
conversations,incoming_events, danoutbound_messages. - Catatan kegiatan di
audit.
5. Apa yang dihapus saat Anda meminta penghapusan akun
Seluruh isi yang disebut di bagian 4 dihapus: akun pemilik dan sesinya, token akses program, koneksi Instagram, otomasi, halaman dan semua versinya, campanye, media yang Anda unggah, lead dan catatan persetujuan, catatan percakapan dan pesan, dan catatan kegiatan ruang kerja Anda. Halaman publik Anda berhenti dilayani dan alamatnya menjadi tidak ditemukan.
Apa yang mungkin tetap kami simpan setelah itu, dan alasannya, belum ditetapkan dalam bentuk kebijakan tertulis. Kemungkinan yang perlu diputuskan: catatan minimum tentang adanya permintaan penghapusan dan waktu pelaksanaannya, sebagai bukti bahwa permintaan dipenuhi.
Data di salinan cadangan sistem, bila ada, mengikuti kebijakan cadangan yang belum ditetapkan.
6. Kontak
yopie.suryadi@gmail.com
English summary
To delete your data from Oneblink: disconnect your Instagram account from the "Connected accounts" screen inside Oneblink, or remove Oneblink from the connected apps list in your Instagram settings. Disconnecting deletes the stored access token and stops all automations for that account. To delete your account, workspace, leads, or a specific lead, email [privacy contact email] with the subject "Data deletion request", from the email address you use to sign in, stating what you want deleted. We confirm receipt within 7 working days and complete deletion within 30 calendar days of receiving the request and verifying the requester's identity. These timeframes are proposed and pending approval. If we cannot verify that the request comes from the data subject, we will ask for more information before deleting anything.
---
5. Catatan untuk Codex
5.1 Halaman statis
Tiga halaman di bagian 2, 3, dan 4 harus dilayani sebagai HTML biasa, tanpa auth, tanpa memuat aplikasi, dan bisa dibuka dari jendela penyamaran. Penguji Meta membukanya tanpa sesi. Path yang diusulkan:
| Path | Isi |
|---|---|
GET /privasi | Bagian 2 berkas ini, versi Indonesia |
GET /privacy | Bagian 2 berkas ini, versi Inggris |
GET /syarat | Bagian 3, versi Indonesia |
GET /terms | Bagian 3, versi Inggris |
GET /hapus-data | Bagian 4, versi Indonesia |
GET /data-deletion | Bagian 4, versi Inggris |
Catatan path: PRD-03 bagian 3.2 menempatkan halaman publik pemilik akun di /p/:slug sampai keputusan Y-6, dan merencanakan app.oneblink.app/<slug> setelahnya. Bila halaman pemilik akun nanti pindah ke root, enam path di atas harus masuk daftar slug terlarang, supaya tidak ada pemilik akun yang mengambil slug privasi, privacy, syarat, terms, hapus-data, atau data-deletion. Tambahkan juga p, api, dan app ke daftar yang sama. Ini syarat yang perlu dipenuhi sebelum Y-6 dijalankan.
Catatan teknis halaman: mobile first, kontras cukup, judul bagian bisa ditautkan, tidak butuh JavaScript. Versi Indonesia dan Inggris saling menautkan di kepala halaman. Tanggal "Berlaku sejak" dan "Terakhir diubah" diisi tanggal terbit sebenarnya, bukan tanggal berkas ini.
5.2 Endpoint deauthorize callback
Nilai yang diisi di dashboard: https://api.app.oneblink.app/meta/deauthorize, di Instagram > Business login settings.
Yang terverifikasi hari ini: tidak ada. Halaman dokumentasi yang dibaca 12 Oktober, yaitu Data Deletion Callback dan Signed Request, tidak memuat penjelasan tentang kolom Deauthorize Callback URL. docs/META-APP-REVIEW.md bagian (c) sudah mencatat hal yang sama. Jadi bentuk request yang dikirim Meta ke kolom ini perlu diverifikasi sebelum endpoint dianggap benar.
Yang bisa dipakai sebagai rancangan awal, dengan status perlu diverifikasi:
- Terima
POSTdengan isiapplication/x-www-form-urlencodedberisi fieldsigned_request. Ini pola yang dipakai Meta untuk data deletion callback; kesamaannya dengan deauthorize perlu diverifikasi. - Verifikasi tanda tangan
signed_requestdengan app secret sebelum memproses apa pun. Payload yang terverifikasi dari halaman Signed Request memuatuser_id(id pengguna dalam cakupan aplikasi),algorithm(nilai yang disebut dokumentasi:HMAC-SHA256), danissued_at(cap waktu Unix). Struktur bungkusnya, yaitu dua bagian base64url yang dipisah titik dengan bagian pertama berisi tanda tangan, perlu diverifikasi langsung dari halaman "Using a Signed Request"; halaman yang dibaca hari ini hanya merujuk ke halaman itu tanpa memuat rinciannya. - Jangan pernah memproses request yang tanda tangannya tidak cocok, dan jangan membocorkan alasan penolakan.
- Tindakan yang harus dilakukan setelah verifikasi, sesuai PRD-05 bagian 3.1: cari koneksi berdasarkan id akun eksternal, ubah
connections.statusmenjadidisconnected, hapus nilaiconnections.token_ciphertext, hentikan otomasi yang terikat ke koneksi itu, dan tulis barisaudit. Jangan menghapus lead atau catatan persetujuan di langkah ini; penghapusan itu jalurnya lewat permintaan penghapusan data, dan halamanhapus-datasudah menjanjikan perilaku ini di bagian 4. - Endpoint harus menjawab cepat dan idempoten: panggilan kedua untuk koneksi yang sudah dilepas dijawab sukses tanpa mengubah apa pun.
- Pastikan perilaku ini sama dengan yang dijanjikan bagian 4 halaman
hapus-data. Kalau kode berbeda dari halaman, halamannya yang bohong, dan itu masalah di App Review.
5.3 Endpoint data deletion callback
Hanya dibutuhkan bila Yopie memilih jalur callback alih-alih halaman instruksi. Untuk pengajuan pertama, halaman instruksi lebih cepat dan sudah cukup menurut dokumentasi: Meta meminta salah satu dari keduanya.
Yang terverifikasi dari halaman Data Deletion Callback yang dibaca hari ini, kutipan:
- "Your callback must use the secure HTTPS protocol and must be listed in the Data Deletion Request URL field in the Settings in the App Dashboard."
- Meta mengirim
POSTberisi signed request saat pengguna meminta penghapusan, dan "The signed request contains an app-scoped ID identifying the user making the request." - "Return a JSON response that contains a URL where the user can check the status of their deletion request and an alphanumeric confirmation code", dengan bentuk
{ url: '<url>', confirmation_code: '<code>' }.
Jadi, bila jalur ini dibangun:
POST https://api.app.oneblink.app/meta/data-deletion, HTTPS wajib.- Verifikasi
signed_requestdengan app secret. Id yang diterima adalah id pengguna dalam cakupan aplikasi, yang untuk Oneblink berarti pengunjung Instagram, bukan pemilik akun. Pemetaan id itu ke baris mana di basis data kita perlu diverifikasi dengan uji di akun pilot: kandidat yang paling mungkin adalahconversations.visitor_id. - Jawab dengan JSON berisi
urldanconfirmation_code. Berarti dibutuhkan satu halaman status penghapusan yang bisa dibuka tanpa auth, misalnyahttps://app.oneblink.app/hapus-data/status?kode=<confirmation_code>, dan satu tabel yang menyimpan kode beserta statusnya. Tabel itu belum ada dipackages/domain/database.ts; perlu ditambahkan bila jalur ini dipilih. - Teks halaman status itu belum ditulis. Minta ke lane Claude bila jalur callback dipilih.
Juga terverifikasi dari docs/META-APP-REVIEW.md: "all apps must inform users in their privacy policy how to request deletion of their data". Bagian 11 kebijakan privasi di atas sudah memuat tautan ke halaman penghapusan, jadi syarat itu terpenuhi lewat halaman statis, terlepas dari jalur callback.
5.4 Yang tidak boleh dilakukan Codex pada teks ini
- Jangan mengubah daftar data di bagian 3 kebijakan privasi tanpa mengubah
packages/domain/database.tslebih dulu. Daftar itu dibuat dari nama kolom yang ada. Setiap kolom baru yang menyimpan data pribadi harus muncul di halaman privasi pada rilis yang sama. - Jangan menambah klaim keamanan. Bagian 9 hanya menyebut apa yang ada di kode.
- Jangan mengisi sendiri tanda dan tempat kosong
[...]. - Jangan menerbitkan halaman dengan angka waktu penghapusan yang belum disetujui.
6. Yang menunggu keputusan Yopie
| No | Hal | Pilihan dan catatan | Akibat bila belum turun |
|---|---|---|---|
| 1 | Nama entitas hukum pengelola data | Perorangan Yopie Suryadi, atau badan usaha. Pilihan badan usaha yang terlihat dari dokumen proyek: entitas Mailtarget, atau PT Wasa Adinata Sangkara (akta ada, SK AHU belum). Keputusan ini sama dengan keputusan nomor 1 di docs/META-APP-REVIEW.md bagian (f), karena nama di kebijakan privasi harus sama dengan nama di Business Verification | Kebijakan privasi dan syarat layanan tidak bisa terbit; keduanya wajib sebelum app bisa diubah ke Live |
| 2 | Alamat kontak yang dicantumkan | Alamat badan usaha, atau alamat lain yang bisa dicocokkan dengan dokumen entitas. Alamat ini tampil publik di tiga halaman | Sama dengan nomor 1 |
| 3 | Email penanganan privasi | Alamat khusus seperti privasi@oneblink.app, atau alamat yang sudah dipantau. Alamat ini tampil publik dan menerima permintaan penghapusan, jadi harus benar-benar dibaca. Catatan: docs/DOMAINS.md mencatat MX untuk oneblink.app belum dibuat, jadi alamat di domain itu belum bisa menerima email | Halaman penghapusan data tidak bisa terbit dengan alamat yang tidak menerima email; ini titik gagal yang langsung terlihat penguji Meta |
| 4 | Apakah oneblink.co dipakai juga | Rencana di docs/DOMAINS.md adalah redirect apex oneblink.co ke oneblink.app. Bila redirect dipakai, cukup satu set URL di oneblink.app dan tidak ada yang perlu diubah di teks. Bila oneblink.co melayani isi sendiri, ketiga halaman harus ada di kedua domain dan teksnya harus menyebut kedua domain | Teks hari ini hanya menyebut oneblink.app. Perlu revisi bila jawabannya "dipakai sendiri" |
| 5 | Komitmen waktu penghapusan data | Usulan: konfirmasi 7 hari kerja, selesai 30 hari kalender. Angka ini menjadi janji publik begitu halaman terbit | Halaman penghapusan data tidak boleh terbit sebelum angka disetujui |
| 6 | Bahasa halaman | Satu halaman per bahasa dengan path Indonesia dan Inggris, atau satu halaman dwibahasa, atau Inggris saja. Usulan: satu halaman per bahasa, URL Inggris yang diisi ke App Dashboard | Codex belum bisa menentukan jumlah path yang dibangun |
| 7 | Kategori app di Basic Settings | Dipilih dari daftar Meta. Belum diperiksa daftar kategori yang tersedia hari ini | Kolom Category wajib sebelum app bisa diubah ke Live |
| 8 | Jalur penghapusan data | Halaman instruksi saja (cukup menurut dokumentasi, dan paling cepat), atau halaman instruksi plus callback. Usulan: halaman instruksi dulu | Bila callback dipilih, Codex perlu endpoint, tabel kode penghapusan, dan satu halaman status yang teksnya belum ditulis |
| 9 | Retensi data | Jangka waktu penyimpanan untuk lead, catatan percakapan, dan catatan kegiatan. Hari ini tidak ada penghapusan otomatis di kode, dan kebijakan privasi mengatakan demikian secara terbuka | Kebijakan privasi terbit dengan kalimat "belum ditetapkan" di bagian retensi. Ini jujur, tetapi lebih baik diganti kebijakan nyata sebelum pelanggan pertama di luar pilot |
| 10 | Batas tanggung jawab dan ketentuan biaya | Syarat layanan hari ini hanya menyatakan pilot belum memungut biaya dan tidak menyebut batas nominal tanggung jawab | Syarat bisa terbit apa adanya untuk pilot; perlu ditinjau sebelum ada pelanggan berbayar |
| 11 | Pelapisan penghapusan dari dalam aplikasi | Halaman hapus-data hari ini mengakui dua tombol belum ada: hapus lead atas permintaan dan hapus akun atau ruang kerja. Pekerjaan itu ada sebagai B3-C2 di backlog | Halaman terbit dengan pengakuan "belum tersedia". Tidak mengganggu App Review selama jalur email benar-benar berfungsi, tetapi jalur email itu harus benar-benar dijawab manusia |
7. Pemeriksaan yang sudah dijalankan pada berkas ini
```
python3 - <<'PY'
p = '/Users/yopiesuryadi/Documents/oneblink/docs/HALAMAN-WAJIB.md'
t = open(p, encoding='utf-8').read()
print('tanda hubung panjang:', t.count(chr(0x2014)))
print('tanda hubung en:', t.count(chr(0x2013)))
for word in ['ISO 27001', 'SOC 2', 'end-to-end', 'end to end', 'ISO/IEC']:
print(word, '->', t.count(word))
PY
```
Hasil yang diharapkan: semua nol.
Pemeriksaan kedua, setiap tabel dan kolom yang disebut di berkas ini benar-benar ada di packages/domain/database.ts:
```
python3 - <<'PY'
import re
doc = open('/Users/yopiesuryadi/Documents/oneblink/docs/HALAMAN-WAJIB.md', encoding='utf-8').read()
schema = open('/Users/yopiesuryadi/Documents/oneblink/packages/domain/database.ts', encoding='utf-8').read()
refs = sorted(set(re.findall(r'([a-z_]+)\.([a-z_]+)', doc)))
missing = []
for table, column in refs:
if table not in schema or column not in schema:
missing.append(f'{table}.{column}')
print('dirujuk', len(refs), 'tidak ditemukan:', missing)
PY
```
Pengecualian yang diketahui dan disengaja: rate_limit_windows dibuat di packages/domain/rate-limit.ts, bukan di database.ts; berkas ini menyebutkannya secara eksplisit di bagian 3.8.