1. Call screening
CallerAPI Documentation
  • Quickstart
  • Use cases
    • For carriers (MNOs/MVNOs)
    • CPaaS platforms
    • Cloud communications providers
    • SIP trunking providers
    • PBX/Cloud PBX
    • UCaaS vendors
  • Account
    • Balance and email
      GET
  • Spam protection
    • Daily spam reports
      • Webhook
        • Subscribe to daily reports
        • Unsubscribe from daily reports
        • List webhook subscriptions
        • Manual dispatch of reports
        • Test webhook
      • REST
        • Fetch daily spam reports
    • Spam score + HLR
      GET
    • 15 days spam CSV snapshot
      GET
  • Mobile SDK
    • Get started
    • Quickstart
      • What you get
      • Get your keys
      • Android
      • iOS
      • Flutter
      • React Native
      • Check it works
    • Call screening
      • What each platform can do
      • Android
      • iOS prerequisites
      • iOS add the extension
      • iOS test on device
  • Data partners
    • Partner tems & docs
    • Upload spam reports
      POST
    • Upload contacts
      POST
  • Fraud prevention
    • Ported date
      GET
    • Porting history
      GET
    • Online presence
      GET
    • KYC user identity
      POST
  • Schemas
    • Spam protection
      • Spam score request
      • Business info
      • Carrier info
      • Complaint (without number)
      • Daily spam reports request
      • Complaint (with phone)
  1. Call screening

What each platform can do

Read this page before you start. It saves you from planning a feature the operating system does not allow.
Naming a caller on the incoming call screen is not something an app can do on its own. Apple and Google each own that screen, and each hands over control in a different way, with different limits.

Side by side#

AndroidiOS 18 and lateriOS 13 to 17
Name on the call screenA card over the call screenYes, in the system call screenNo
Block spam automaticallyYesYesYes, from a downloaded list
Who must approveThe user, in one promptThe user, plus Apple in advanceThe user
Setup timeAbout 30 minutesAbout half a dayAbout 2 hours
Works in a simulatorPartlyNoNo

Android#

The user grants your app the call screening role. Once granted, Android asks your app about every incoming call, and your app can reject the call.
The SDK ships the screening service and the manifest entry, so you write no service code. You write the prompt that asks the user for the role.
Android does not let an app write into the system call screen. To show a name, the SDK draws a card on top of it, which needs a second permission.
Go to Android call screening.

iOS 18 and later: Live Caller ID#

Apple added a way for an app to answer "who is this" for an incoming call, without the app or the server learning the number. Your app ships a small extension. iOS asks that extension, and shows the answer in its own call screen.
This is the best result available on iOS, and it is the longest setup:
1.
Apple must approve your use of the feature before it works outside your own device.
2.
You add a second target to your Xcode project, with its own bundle identifier, entitlements, and build settings.
3.
The user must switch your app on in Settings > Apps > Phone > Call Blocking & Identification.
Several of these steps fail silently. The usual symptom is that your app never appears in that Settings screen, with no error anywhere.
Go to iOS prerequisites.

iOS 13 to 17: Call Directory#

Older iOS versions cannot ask your app a question during a call. They can only read a list your app prepared in advance.
Your app downloads an encrypted block list and hands it to iOS. iOS blocks those numbers with no further help. Numbers outside the list ring normally, and get no name.
This still needs an extension target, and the same signing work as Live Caller ID. Ship it alongside Live Caller ID if you support iOS 17.
Go to iOS prerequisites, which covers both.

What to do if half a day is too much#

Ship the quickstart on its own. It names callers in your own recent calls list, contact cards, and search results. That needs none of the setup on this page, and it works the same on every platform.
You can add call screening later. Nothing in the quickstart changes when you do.

Order of work#

Do these in order. Each step is testable, so you find the problem near where you made it.
1.
Finish the quickstart and confirm a lookup returns a name.
2.
Do Android first if you ship both. It is shorter, and it proves your credentials are right before you start the Xcode work.
3.
On iOS, request Apple's approval first. It is the only step you cannot rush, and nothing you build works outside your own device until it lands.
Modified at 2026-07-29 20:22:34
Previous
Check it works
Next
Android
Built with