Call Blocker - Blacklist icon

Call Blocker blacklist and blocked-call data

cxzh.ltd · Utilities 3.5 ★

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

  • Call Blocker - Blacklist screenshot 1
  • Call Blocker - Blacklist screenshot 2
  • Call Blocker - Blacklist screenshot 3

API surface

Request/response examples are illustrative, reconstructed from the app's interface — not a live capture.

  • List blacklist or whitelist entries

    GET /v1/lists osint

    Pages 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/lists osint

    Creates 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} osint

    Edits 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/lists osint

    Removes 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/lookup osint

    Returns 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-calls opendata

    Pages 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-calls opendata

    Inserts 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/read opendata

    Clears 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-rules opendata

    Returns 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-rules opendata

    Persists 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-tags osint

    Returns 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-config opendata

    Loads 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/subscription opendata

    Returns 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

Get a quote