DGuardAPI Docs

Spam Call Protection

SDK for spam call identification and blocking. Integrates with native call systems on iOS and Android.

Features

  • Updatable spam number database
  • Real-time call identification
  • Configurable automatic blocking
  • Spam number reporting
  • Integration with Call Directory (iOS) and Call Screening (Android)

Installation

SDK Integration Required

For both Android and iOS, this feature requires a direct SDK integration to interact with native system call handlers.

SDK Required

iOS (Swift Package Manager)

swift
dependencies: [
    .package(url: "https://github.com/dguard/dguard-call-ios.git", from: "1.0.0")
]

Android (Gradle)

gradle
implementation 'ai.dguard:call-filter-sdk:1.0.0'

Basic Usage

iOS

swift
import DGuardCallFilter

// Initialize
let callFilter = DGuardCallFilter(apiKey: "your_api_key")

// Check Number
let result = callFilter.checkNumber("+34900123456")

if result.isSpam {
    print("Spam detected: \(result.spamType)")
    print("Reports: \(result.reportCount)")
}

// Update Database & Call Directory
callFilter.updateDatabase { success in
    if success {
        callFilter.reloadCallDirectoryExtension()
    }
}

// Report Number
callFilter.reportNumber(
    phoneNumber: "+34900123456",
    spamType: .telemarketing,
    comment: "Repeated advertising calls"
)

Android

kotlin
import ai.dguard.call.DGuardCallFilter

// Initialize
val callFilter = DGuardCallFilter.Builder(context)
    .apiKey("your_api_key")
    .autoBlock(true) // Automatic blocking
    .build()

// Register as Call Screening Service
callFilter.registerAsCallScreeningService()

// Check Number
val result = callFilter.checkNumber("+34900123456")

if (result.isSpam) {
    Log.w("Call", "Spam: ${result.spamType}")
}

// Blocking Levels
callFilter.setBlockingLevel(BlockingLevel.AGGRESSIVE) // NONE, MODERATE, AGGRESSIVE

iOS - Call Directory Extension

Configure Call Directory Extension in your iOS project:

swift
// CallDirectoryHandler.swift
import CallKit
import DGuardCallFilter

class CallDirectoryHandler: CXCallDirectoryProvider {
    
    let callFilter = DGuardCallFilter(apiKey: "your_api_key")
    
    override func beginRequest(with context: CXCallDirectoryExtensionContext) {
        // Add blocked numbers
        let blockedNumbers = callFilter.getBlockedNumbers()
        for number in blockedNumbers {
            context.addBlockingEntry(withNextSequentialPhoneNumber: number)
        }
        
        // Add call identification
        let identifiedNumbers = callFilter.getIdentifiedNumbers()
        for (number, label) in identifiedNumbers {
            context.addIdentificationEntry(
                withNextSequentialPhoneNumber: number,
                label: label
            )
        }
        
        context.completeRequest()
    }
}

API Endpoint

The SDK syncs with the DGuard API:

GET/calls/database

Get spam call database

Required Permissions

Android

xml
<!-- Call Filter -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.ANSWER_PHONE_CALLS" />

iOS Capabilities

  • Call Directory Extension
  • App Groups (for data sharing)

Rate Limiting

Rate limits for the Spam Call Protection module are enforced per application. All endpoints share the same quota based on your plan. For detailed specifications, see the Security & Compliance page.

Sandbox: 60 req/min
Production: 1,000 req/min