Authorization: Bearer ntbl_<prefix>_<secret>), sending_access maupun full_access sama-sama diterima.topic adalah jalur broadcast yang disarankan:all | topic | |
|---|---|---|
| Panggilan ke Firebase untuk 18.432 perangkat | 18.432 | 1 |
| Waktu sampai seluruh perangkat tertembak | +-90 detik | +-0,2 detik |
| Laporan per perangkat | ada | tidak ada |
| Membersihkan token mati | ya | tidak |
| Penentu penerima | NotiBlast, dari daftar perangkat | Firebase, dari langganan topik |
topic untuk promo dan pengumuman massal; pakai target berbasis perangkat ketika Anda butuh bukti sebuah notifikasi sampai ke perangkat tertentu.failed dan alasannya. Ini bukan error validasi: pengguna itu mungkin baru memasang aplikasi besok.topic seluruh angka stats tinggal 0 -- bukan karena gagal, melainkan karena pengiriman topik tidak menyentuh daftar perangkat.permission_denied/unsubscribed di dalam target dilewati tanpa dianggap gagal; jumlahnya terlihat di stats.devices_skipped.Idempotency-Key yang sama dijawab 200, bukan 201 -- paling penting untuk topic, karena satu permintaan ganda berarti seluruh pelanggan topik menerima notifikasi dua kali.failed dengan alasan yang menyebut nama field-nya, dan pengiriman dihentikan seketika — payload sama untuk semua penerima, jadi meneruskannya hanya mengulang penolakan yang sama ribuan kali. Tidak ada satu pun perangkat yang ditandai mati karenanya.201 berarti diterima dan tercatat, bukan sudah sampai. Pantau hasil akhirnya lewat GET /v1/push/messages/{push_message_id} atau webhook push.completed.body, payload, dan bentuk FCM (firebase) tidak ikut — hanya title.curl --location 'https://primaryapi.notiblast.com/v1/push/send' \
--header 'Idempotency-Key: order-10293-shipped' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"push_app_id": "507f1f77bcf86cd799439011",
"title": "Pesanan #10293 sudah dikirim",
"body": "Kurir sedang menuju alamatmu. Estimasi tiba 30 menit.",
"platforms": [
"android",
"ios"
],
"target": {
"type": "external_id",
"external_ids": [
"usr_88213"
]
}
}'{
"request_id": "0f9c2a41-8d3e-4c77-9a2b-5f1e6d0c8a73",
"message": "Push message queued",
"data": {
"_id": "507f1f77bcf86cd799439077",
"push_app": "507f1f77bcf86cd799439011",
"push_app_name": "Toko Maju — Pelanggan",
"title": "Pesanan #10293 sudah dikirim",
"platforms": [
"android",
"ios"
],
"delivery_mode": "notification",
"target_type": "external_id",
"target_label": "Semua perangkat",
"status": "queued",
"stats": {
"devices_targeted": 4102,
"devices_sent": 4037,
"devices_failed": 65,
"devices_skipped": 214,
"devices_over_limit": 0,
"external_ids_unmatched": 116
},
"max_subscribers": 10000,
"error": null,
"sent_at": "2026-09-16T04:00:02.100Z",
"finished_at": "2026-09-16T04:01:31.900Z",
"created_at": "2026-09-16T04:00:01.000Z",
"payload": {
"image": "https://cdn.tokomaju.com/promo.jpg",
"data": {
"click_action": "order_detail:1234"
},
"android": {
"priority": "high"
},
"ios": {
"payload": {
"aps": {
"badge": 3
}
}
},
"web": null
},
"firebase": {
"notification": {
"title": "Promo akhir pekan",
"body": "Diskon 30%"
},
"data": {
"property1": "string",
"property2": "string"
},
"android": {},
"apns": {},
"webpush": {}
},
"delivery": {
"status": "pending",
"attempts": 1,
"last_attempt_at": "2026-09-16T04:01:32.400Z",
"last_status_code": 200,
"last_error": null,
"delivered_at": "2026-09-16T04:01:32.400Z"
}
}
}