Call Blocker blacklist and blocked-call data
Call Blocker - Blacklist is the Android call-screening app from Hong Kong developer cxzh.ltd (MOUTRENB SCIENCE & TECHNOLOGY LIMITED, publishing as cxzh.ltd), a sibling of the same studio's Private Space vault, antivirus and Wi-Fi doctor titles. It sits in the default Call Screening role so incoming numbers are checked against a user-built blacklist, a whitelist of family and doctor contacts, and optional hidden/private-number and one-ring (prank) rules, then either disconnected or silenced with a notification. Users add numbers from the phone book or the system call log, pick a block mode on the rules screen, and review a blocked-call history with unread badges; Call Blocker One is the Google Play subscription (monthly, three-month and yearly SKUs) that removes ads. Rated about 3.5 from 158 thousand reviews with 10 million-plus installs, it is a lightweight, on-device alternative to cloud caller-ID products such as Truecaller, Hiya, Whoscall, Should I Answer? and Calls Blacklist, aimed at people who want local spam blocking rather than a shared community database.
Each screened incoming number is a list row first: address, optional name, type (1 blacklist, 0 whitelist) and a reverse key used for lookup, counted separately as blacklistCount and whitelistCount. When Call Screening rejects or silences the call, a history row lands with block_mode, date, duration, location, incoming/outgoing/prank type and unread read. Phone-tag cards add phonenum, tagName, tagCount and updateTime; the rules object stores antiharass_block_model, antiharass_reject_way and the prank-call flags; Call Blocker One entitlement is a Play sku plus purchaseToken.
Household dashboards replay blacklist rows onto a second handset, incident desks page blocked-call history and clear unread badges, and MDM-style checks audit screening mode against an empty family whitelist. Billing teams match monthly, three-month and yearly SKUs to the ad-free flag. openData Studio turns those list, log, tag, rule and entitlement fields into callable open data for those integrations.
Screenshots
API surface
Request/response examples are illustrative, reconstructed from the app's interface — not a live capture.
List blacklist or whitelist entries
GET
/v1/listsosintPages the BlackListActivity / WhiteListActivity rows from nq_black_white, filtered by type (1 blacklist, 0 whitelist) with address, reverse lookup key and optional name.
Auth: On-device session for the Call Screening role. Scoped to this install's nq_black_white table; no cloud account.
- type
- count
- _id
- name
- address
- reverse
- items
GET /v1/lists?type=1 HTTP/1.1 Accept: application/json X-App-Version: 5.8.12.00{ "type": 1, "count": 2, "items": [ { "_id": 18, "type": 1, "name": "Unknown telemarketer", "address": "+12025550123", "reverse": "32105552021+" }, { "_id": 19, "type": 1, "name": "", "address": "+442079460958", "reverse": "859064970224+" } ] }Add a number to blacklist or whitelist
POST
/v1/listsosintCreates a BlackWhiteListModel row (address, name, type) and stores the reversed address used for lookup, as AddFromContactsActivity and AddFromCallLogActivity do.
Auth: On-device session. Inserts into nq_black_white; PrivacyDataProvider also accepts bulkInsert on the blackwhitelist path.
- address
- name
- type
- _id
- reverse
POST /v1/lists HTTP/1.1 Content-Type: application/json X-App-Version: 5.8.12.00 { "address": "+12025550123", "name": "Unknown telemarketer", "type": 1 }{ "_id": 18, "address": "+12025550123", "name": "Unknown telemarketer", "type": 1, "reverse": "32105552021+" }Update a list entry
PUT
/v1/lists/{id}osintEdits an existing blacklist or whitelist row from EditDeleteNumActivity, rewriting address, name, type and reverse.
Auth: On-device session. Updates nq_black_white by _id.
- _id
- address
- name
- type
- reverse
- updated
PUT /v1/lists/18 HTTP/1.1 Content-Type: application/json X-App-Version: 5.8.12.00 { "_id": 18, "address": "+12025550123", "name": "Acme telemarketing", "type": 1 }{ "updated": 1, "_id": 18, "address": "+12025550123", "name": "Acme telemarketing", "type": 1, "reverse": "32105552021+" }Delete a list entry by address
DELETE
/v1/listsosintRemoves a number from the blacklist or whitelist when the user deletes it in EditDeleteNumActivity.
Auth: On-device session. Deletes from nq_black_white where reverse matches the normalised address.
- address
- deleted
DELETE /v1/lists?address=%2B12025550123 HTTP/1.1 X-App-Version: 5.8.12.00{ "deleted": 1, "address": "+12025550123" }Lookup whether a number is listed
GET
/v1/lists/lookuposintReturns the list type (1 blacklist / 0 whitelist) and display name for a dialled address, plus whether PhoneLookup finds it in contacts — the check ScreeningService uses to allow, reject or silence.
Auth: On-device session used by ScreeningService.onScreenCall before building CallResponse.
- address
- listed
- type
- name
- inContacts
GET /v1/lists/lookup?address=%2B12025550123 HTTP/1.1 X-App-Version: 5.8.12.00{ "address": "+12025550123", "listed": true, "type": 1, "name": "Unknown telemarketer", "inContacts": false }List blocked-call history
GET
/v1/blocked-callsopendataPages BlockCallLogHistoryActivity: each nq_calllog row is a BlockedCallsModel with address, name, location, date, duration, type (incoming/outgoing/prank), read and block_mode.
Auth: On-device session. Reads nq_calllog ordered by date DESC.
- count
- unread
- _id
- address
- name
- location
- date
- duration
- type
- read
- block_mode
- items
GET /v1/blocked-calls?unreadOnly=false HTTP/1.1 Accept: application/json X-App-Version: 5.8.12.00{ "count": 1, "unread": 1, "items": [ { "_id": 41, "address": "+12025550123", "name": "Unknown telemarketer", "location": "Washington, DC", "date": 1759411200000, "duration": 0, "type": 1, "read": 0, "block_mode": 1 } ] }Record a blocked call
POST
/v1/blocked-callsopendataInserts the BlockedCallsModel ScreeningService writes after rejecting a call, including the active block_mode and unread read=0 flag.
Auth: On-device session written by ScreeningService after a reject/silence CallResponse.
- address
- name
- location
- date
- duration
- type
- read
- block_mode
- _id
POST /v1/blocked-calls HTTP/1.1 Content-Type: application/json X-App-Version: 5.8.12.00 { "address": "+12025550123", "name": "Unknown telemarketer", "location": "Washington, DC", "date": 1759411200000, "duration": 0, "type": 1, "read": 0, "block_mode": 1 }{ "_id": 41, "address": "+12025550123", "name": "Unknown telemarketer", "location": "Washington, DC", "date": 1759411200000, "duration": 0, "type": 1, "read": 0, "block_mode": 1 }Mark blocked-call history read
POST
/v1/blocked-calls/readopendataClears the unread badge on BlockCallLogHistoryActivity, either for one row (_id) or for every log (read=1 on all rows).
Auth: On-device session. Updates nq_calllog.read.
- _id
- read
- updated
- unread
POST /v1/blocked-calls/read HTTP/1.1 Content-Type: application/json X-App-Version: 5.8.12.00 { "_id": 41, "read": 1 }{ "updated": 1, "_id": 41, "read": 1, "unread": 0 }Get or set block rules
GET
/v1/block-rulesopendataReturns the BlockRuleActivity mode (0–3), reject-way, prank-call and SMS flags plus live blacklist/whitelist counts.
Auth: On-device session. Values live in SharedPreferences nq_antiharass.
- antiharass_block_model
- antiharass_reject_way
- antiharass_block_prank_call
- antiharass_block_prank_call_notification
- antiharass_block_sms
- blacklistCount
- whitelistCount
GET /v1/block-rules HTTP/1.1 Accept: application/json X-App-Version: 5.8.12.00{ "antiharass_block_model": 1, "antiharass_reject_way": 0, "antiharass_block_prank_call": true, "antiharass_block_prank_call_notification": true, "antiharass_block_sms": false, "blacklistCount": 12, "whitelistCount": 4 }Update block rules
PUT
/v1/block-rulesopendataPersists the screening policy BlockRuleActivity edits so ScreeningService picks up the new block_model and reject_way on the next incoming call.
Auth: On-device session. Writes nq_antiharass prefs and broadcasts com.netqin.antiharass.refresh.
- antiharass_block_model
- antiharass_reject_way
- antiharass_block_prank_call
- antiharass_block_prank_call_notification
- refreshed
PUT /v1/block-rules HTTP/1.1 Content-Type: application/json X-App-Version: 5.8.12.00 { "antiharass_block_model": 2, "antiharass_reject_way": 1, "antiharass_block_prank_call": true, "antiharass_block_prank_call_notification": false }{ "antiharass_block_model": 2, "antiharass_reject_way": 1, "antiharass_block_prank_call": true, "antiharass_block_prank_call_notification": false, "refreshed": true }List phone tags
GET
/v1/phone-tagsosintReturns PhoneTagInfoModel rows shown on AntiharassTagNumberActivity: the number, community-style tagName, tagCount and whether the tag card has been opened.
Auth: On-device session. Phone-tag state is stored under the nq_phonetag preference namespace.
- id
- phonenum
- tagName
- tagCount
- updateTime
- isRead
- items
GET /v1/phone-tags HTTP/1.1 Accept: application/json X-App-Version: 5.8.12.00{ "items": [ { "id": 7, "phonenum": "+12025550123", "tagName": "Telemarketer", "tagCount": "128", "updateTime": 1759411200000, "isRead": false } ] }Fetch remote config
POST
/v1/remote-configopendataLoads the RemoteConfigResp map the family-apps and feature flags read (including main_romote cross-promo ids), keyed by install country and deviceId.
Auth: None. Body identifies the install with deviceId, appId, appVersion and country; userType flags a returning user.
- appChannel
- appId
- appVerCode
- appVersion
- country
- deviceId
- sdkVerCode
- sdkVersion
- userType
- errorCode
- errorMsg
- result
- config
- update
- main_romote
POST /v1/remote-config HTTP/1.1 Content-Type: application/json X-App-Version: 5.8.12.00 { "appChannel": "gp", "appId": 1001, "appVerCode": 212, "appVersion": "5.8.12.00", "country": "US", "deviceId": "a1b2c3d4e5f6", "sdkVerCode": 1, "sdkVersion": "1.0.0", "userType": 1 }{ "errorCode": 0, "errorMsg": "", "result": { "config": { "main_romote": "1-2-3-4-7-8-9" }, "update": 1759411200000 } }Read Call Blocker One entitlement
GET
/v1/subscriptionopendataReturns whether Call Blocker One is active and which of the monthly / 3-month / yearly SKUs SubscribeActivity offered.
Auth: Google Play Billing purchase token for this package. SubscribeActivity verifies the local RSA signature before treating the SKU as active.
- sku
- productId
- purchaseToken
- autoRenewing
- entitled
- plans
GET /v1/subscription HTTP/1.1 Authorization: Bearer <play-purchase-token> X-App-Version: 5.8.12.00{ "sku": "subs_callblocker_one_yearly", "productId": "subs_callblocker_one_yearly", "purchaseToken": "opaque-play-token", "autoRenewing": true, "entitled": true, "plans": [ "subs_callblocker_one_monthly", "subs_callblocker_one_3months", "subs_callblocker_one_yearly" ] }
Data categories
- blacklist
- whitelist
- blocked calls
- block rules
- phone tags
- remote config
- subscriptions
Where teams use this data
Local spam-list sync for a second handset
A privacy tool exports GET /v1/lists?type=1 (address, name, reverse) and replays POST /v1/lists on another device so the same telemarketer numbers stay blocked after a phone swap.
Blocked-call incident desk
A household or small-office dashboard pages GET /v1/blocked-calls for address, date, block_mode and unread count, then POST /v1/blocked-calls/read when the user has reviewed the ScreeningService rejects.
Policy audit of screening modes
An MDM-style check reads GET /v1/block-rules (antiharass_block_model, antiharass_reject_way, antiharass_block_prank_call) and flags installs still on blacklist-only while the whitelist of family numbers is empty.
Call Blocker One reconciliation
Finance matches Play purchaseToken rows to GET /v1/subscription sku / autoRenewing / entitled so monthly, 3-month and yearly Call Blocker One renewals line up with the ad-free flag.
Frequently asked questions
Does Call Blocker expose a cloud caller-ID database?
No shared spam graph is documented. Screening is local: ScreeningService checks nq_black_white (address, type, reverse) and nq_antiharass flags, then writes nq_calllog. Phone tags (phonenum, tagName, tagCount) are on-device cards, not a Truecaller-style community lookup.
Which fields identify a blocked call?
Each nq_calllog row has address, name, location, date, duration, type (1 incoming, 2 outgoing, 0 prank), read (0 unread / 1 read) and block_mode — the same BlockedCallsModel BlockCallLogHistoryActivity lists.
How are blacklist and whitelist rows distinguished?
BlackWhiteListModel.type is 1 for blacklist and 0 for whitelist. List endpoints filter nq_black_white on that column and store a reverse of address for the lookup ScreeningService runs on every incoming call.
What is Call Blocker One?
The Google Play subscription sold on SubscribeActivity. SKUs are subs_callblocker_one_monthly, subs_callblocker_one_3months and subs_callblocker_one_yearly; the entitlement payload carries sku, purchaseToken, autoRenewing and entitled.
Apps similar to Call Blocker - Blacklist
- Truecaller: Spam Call Blocker — Truecaller identifies incoming numbers from a community caller-ID graph and blocks spam; Call Blocker instead screens against a user-built on-device blacklist.
- Hiya - Call Blocker & Caller ID — Hiya scores incoming calls with a cloud reputation service and optional caller ID; this app keeps the decision on the device via Call Screening and local lists.
- Whoscall - Caller ID & Block — Whoscall (Gogolook) is a caller-ID and spam-blocking app popular in East Asia, with a shared number database rather than a private SQLite blacklist.
- Should I Answer? — Should I Answer? is a community-rated call blocker that crowdsources spam reports; Call Blocker uses explicit blacklist/whitelist rows the user types or imports.
- Calls Blacklist - Call Blocker — Calls Blacklist is another on-device block-list utility for Android, closest in shape to this app's nq_black_white plus blocked-call log.
Topics
- Call Blocker API
- blacklist
- whitelist
- blocked calls
- block_mode
- phone tags
- Call Blocker One
- cxzh.ltd
- call screening
- spam call log
Need this app's data API integrated?
We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.
- NDA + SOW on every engagement
- Delivery in 3–7 days
- Payment only after acceptance
- Work scoped to authorized use