Send VoIP push notifications on iOS using OneSignal with PushKit token registration and a VoIP certificate, plus Android alternatives for call-style behavior.
VoIP push notifications let your app receive incoming call alerts even when the app is in the background or terminated. Apple handles VoIP pushes differently from standard push notifications — they use a separate certificate type, a separate token (via PushKit), and different delivery rules.OneSignal supports sending VoIP pushes, but the OneSignal SDK does not handle VoIP token registration. You are responsible for:
Registering VoIP tokens in your app using Apple PushKit
Creating a dedicated OneSignal app with a VoIP Services Certificate
Registering tokens and sending pushes through the OneSignal REST API
On iOS, VoIP notifications use Apple PushKit and follow special delivery rules that differ from standard push notifications. Because Apple treats VoIP pushes differently, OneSignal requires a separate app configuration for VoIP.
Before you start — these are the most common VoIP setup mistakes:
Not creating a separate OneSignal app for VoIP. Apple requires a different certificate type for VoIP, so OneSignal needs a dedicated app to send VoIP pushes. Your existing push app cannot be used for both.
Uploading the wrong certificate. You need a VoIP Services Certificate (.p12), not your standard APNs push certificate. Using the wrong one causes silent delivery failures.
Forgetting test_type in sandbox. When testing with a development build, you must include "test_type": 1 when registering the token. Without it, the API call succeeds but pushes never arrive.
1
Register a VoIP token using PushKit
Use Apple’s PushKit framework to register for VoIP notifications and receive a VoIP token.
Implement PushKit in your app
Store and refresh the VoIP token as Apple rotates it
Follow Apple’s VoIP policies closely
Example: PushKit delegate implementation
import PushKitclass AppDelegate: NSObject, PKPushRegistryDelegate { func registerForVoIPPushes() { let registry = PKPushRegistry(queue: .main) registry.delegate = self registry.desiredPushTypes = [.voIP] } func pushRegistry(_ registry: PKPushRegistry, didUpdatePushCredentials credentials: PKPushCredentials, for type: PKPushType) { let token = credentials.token.map { String(format: "%02x", $0) }.joined() // Pass this token to OneSignal — see Step 4 }}
This is standard Apple PushKit code. OneSignal does not provide a PushKit SDK — you register the token yourself and pass it to OneSignal in Step 4.
Apple VoIP pushes require a different certificate type than standard push notifications. A single OneSignal app can only use one certificate type, so you must create two separate OneSignal apps:
Main Push App: Uses your APNs certificate for standard push notifications
VoIP Push App: Uses a VoIP Services Certificate for VoIP-only notifications
Both apps must use the same iOS bundle ID and be associated with the same native iOS app. You do not need to initialize the OneSignal SDK twice — the VoIP app is only used server-side to send VoIP pushes via the API.
The bundle ID (e.g., com.yourcompany.appname) is found in Xcode under your target’s General tab.
3
Upload a VoIP Services Certificate
In your VoIP OneSignal app, upload a VoIP Services Certificate (.p12). This is a different certificate type than the standard APNs push certificate you use for regular notifications.To create one:
Follow the prompts to generate and download the certificate
Open it in Keychain Access and export it as a .p12 file
Upload the .p12 file to your VoIP OneSignal app’s iOS settings
Do not upload your standard APNs push certificate to the VoIP app. If you use the wrong certificate type, the API will accept your push request but Apple will reject it and the notification will never arrive.
VoIP certificate in Keychain Access
VoIP certificate uploaded in OneSignal dashboard
4
Register the VoIP token with OneSignal
Use the Create User API to register the VoIP token with your VoIP OneSignal app.
Sandbox/development builds require "test_type": 1. If you omit this field, the API call succeeds and returns no error, but Apple treats the token as production and silently rejects every push sent to it.
A valid VoIP token is a 64-character lowercase hex string (e.g., a1b2c3d4e5f6...). PushKit does not work on the iOS Simulator — you must use a real device to obtain a valid token.
VoIP pushes allow a larger payload than standard push. APNs permits up to 5,120 bytes for a VoIP notification, compared to 4,096 bytes for standard push. The data field (Additional Data) still supports up to 2,048 bytes, and payloads over the limit are rejected by APNs. See Maximum push payload size.
6
Verify your VoIP setup
Your iOS VoIP integration is working correctly if:
The VoIP token appears as an iOS push subscription in your VoIP app
No. Confirmed Deliveries are not tracked for VoIP pushes. Confirmed Deliveries rely on the Notification Service Extension, which does not trigger for VoIP notifications.Instead, track receipt via the native iOS PushKit event:
Can I send VoIP notifications from the OneSignal dashboard?
No. VoIP notifications must be sent via the Create Notification API with "apns_push_type_override": "voip". The dashboard does not support this parameter.
VoIP pushes can fail without any error from the OneSignal API. Work through this checklist:
Are you using a sandbox/development build? You must include "test_type": 1 when registering the token via the Create User API. Without it, the token registers as production, Apple rejects the push, and it silently fails.
Did you upload the correct certificate? The VoIP OneSignal app must use a VoIP Services Certificate (.p12), not a standard APNs push certificate. Both look similar in Keychain Access — verify the certificate name starts with “VoIP Services”.
Are you sending to the right OneSignal app? The app_id in your send request must be your VoIP app, not your main push app. The REST API Key must also come from the VoIP app.
Is the VoIP token valid? Tokens expire when the app is reinstalled or the device is restored. Check that the token is a 64-character lowercase hex string and was recently registered.
Does your app call reportNewIncomingVoIPPushPayload? Starting in iOS 13, Apple terminates apps that receive a VoIP push but do not report a call to CallKit. This is an Apple requirement, not a OneSignal limitation.
Send push notifications programmatically using the REST API.
Confirmed deliveries
Track push notification delivery confirmation on supported platforms.
Service extensions
Customize notification handling with Notification Service Extensions.
Create User API
Register users and subscriptions with the OneSignal API.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"OneSignal Documentation","description":"OneSignal is a platform for sending push notifications, emails, in-app messages, and SMS campaigns via a single API, Journey Builder, and a dashboard.","colors":{"primary":"#3A3DB3","light":"#E54B4D","dark":"#3A3DB3"},"logo":{"light":"https://mintcdn.com/onesignal/yJcueeDCO7UpHnnY/logo/OneSignal-Logo.svg?fit=max\u0026auto=format\u0026n=yJcueeDCO7UpHnnY\u0026q=85\u0026s=1fcfb6fef6d820fd9d99c74850711107","dark":"https://mintcdn.com/onesignal/s4WC_KzLxf8ornqq/logo/OneSignal-Logo-White.svg?fit=max\u0026auto=format\u0026n=s4WC_KzLxf8ornqq\u0026q=85\u0026s=2573a53b5aea961e18c82b3af8f31925"},"favicon":"https://mintcdn.com/onesignal/SGduBFHpiRdg5l6h/favicon.ico?fit=max\u0026auto=format\u0026n=SGduBFHpiRdg5l6h\u0026q=85\u0026s=c0a99fadc0553c658a83741c5611cef4","api":{"examples":{"languages":["curl","typescript","python","php","go","ruby","java","csharp","rust"],"autogenerate":true}},"navbar":{"links":[{"href":"mailto:support@onesignal.com","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://dashboard.onesignal.com"}},"footer":{"socials":{"github":"https://github.com/OneSignal","linkedin":"https://linkedin.com/company/onesignal","youtube":"https://www.youtube.com/@onesignalofficial/playlists"}},"seo":{"metatags":{"apple-mobile-web-app-title":"OneSignal Docs"}},"fonts":{"family":"Nunito Sans"},"styling":{"eyebrows":"breadcrumbs","latex":true},"integrations":{"ga4":{"measurementId":"G-2DGWL0VYP5"},"posthog":{"apiKey":"phc_vZpvE0f5eyzcOt30FHer34yddVmNdo9kmlMVRBzLMtn","apiHost":"https://eu.i.posthog.com","sessionRecording":true}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"navigation":{"languages":[{"language":"en","href":"docs/en/home"},{"language":"cn","href":"docs/cn/home"},{"language":"ko","href":"docs/ko/home"},{"language":"ja","href":"docs/ja/home"},{"language":"tr","href":"docs/tr/home"},{"language":"pt-BR","href":"docs/pt-BR/home"},{"language":"es","href":"docs/es/home"},{"language":"fr","href":"docs/fr/home"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"onesignal","hasAudioNarration":false,"actualSubdomain":"onesignal","customDomains":["documentation.onesignal.com"],"gitSource":{"type":"github","owner":"onesignal","repo":"mintlify-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af263cb6575a850b3cad407","clientVersion":"0.0.4094","searchFilterCounts":[{"language":"en","tag":"User Guides","count":203},{"language":"es","tag":"Guías del Usuario","count":178},{"language":"fr","tag":"Guides utilisateur","count":178},{"language":"ja","tag":"ユーザーガイド","count":178},{"language":"ko","tag":"사용자 가이드","count":178},{"language":"pt-BR","tag":"Guia do Usuário","count":178},{"language":"tr","tag":"Kullanıcı Kılavuzları","count":178},{"language":"cn","tag":"用户指南","count":176},{"language":"en","tag":"Message channels","count":90},{"language":"es","tag":"Canales de mensajería","count":84},{"language":"fr","tag":"Canaux de messagerie","count":84},{"language":"ja","tag":"メッセージングチャネル","count":84},{"language":"ko","tag":"메시지 채널","count":84},{"language":"pt-BR","tag":"Canais de mensagem","count":84},{"language":"tr","tag":"Mesaj kanalları","count":84},{"language":"cn","tag":"消息渠道","count":83},{"language":"default","tag":"API Reference","count":68},{"language":"default","tag":"API reference","count":64},{"language":"en","tag":"Analytics \u0026 Integrations","count":53},{"language":"es","tag":"Analítica \u0026 Integraciones","count":52},{"language":"fr","tag":"Analyses et intégrations","count":52},{"language":"ja","tag":"分析 \u0026 統合","count":52},{"language":"ko","tag":"분석 \u0026 통합","count":52},{"language":"pt-BR","tag":"Análises \u0026 Integrações","count":52},{"language":"tr","tag":"Analitik ve Entegrasyonlar","count":52},{"language":"cn","tag":"分析和集成","count":51},{"language":"cn","tag":"开发者指南","count":48},{"language":"es","tag":"Guías del desarrollador","count":48},{"language":"fr","tag":"Guides développeur","count":48},{"language":"ja","tag":"開発者ガイド","count":48},{"language":"ko","tag":"개발자 가이드","count":48},{"language":"tr","tag":"Geliştirici Kılavuzları","count":48},{"language":"en","tag":"Developer Guides","count":47},{"language":"pt-BR","tag":"Guia de desenvolvedor","count":47},{"language":"en","tag":"Integrations","count":37},{"language":"es","tag":"Integraciones","count":37},{"language":"fr","tag":"Intégrations","count":37},{"language":"ja","tag":"統合","count":37},{"language":"ko","tag":"통합","count":37},{"language":"pt-BR","tag":"Integrações","count":37},{"language":"tr","tag":"Entegrasyonlar","count":37},{"language":"cn","tag":"集成","count":36},{"language":"en","tag":"Tutorials","count":35},{"language":"cn","tag":"推送通知","count":31},{"language":"cn","tag":"OneSignal 作为目的地","count":31},{"language":"en","tag":"Push","count":31},{"language":"en","tag":"OneSignal as destination","count":31},{"language":"es","tag":"Push notificaciones","count":31},{"language":"es","tag":"OneSignal como destino","count":31},{"language":"fr","tag":"Push","count":31},{"language":"fr","tag":"OneSignal comme destination","count":31},{"language":"ja","tag":"プッシュ通知","count":31},{"language":"ja","tag":"OneSignal as 宛先","count":31},{"language":"ko","tag":"푸시","count":31},{"language":"ko","tag":"OneSignal을 데이터 목적지로 사용","count":31},{"language":"pt-BR","tag":"Push notificações","count":31},{"language":"pt-BR","tag":"OneSignal como destino","count":31},{"language":"tr","tag":"Anlık bildirimler","count":31},{"language":"tr","tag":"OneSignal hedef","count":31},{"language":"en","tag":"Mobile SDKs","count":26},{"language":"cn","tag":"移动SDK","count":25},{"language":"es","tag":"SDKs móviles","count":25},{"language":"fr","tag":"SDK mobiles","count":25},{"language":"ja","tag":"モバイルSDK","count":25},{"language":"ko","tag":"모바일 SDKs","count":25},{"language":"pt-BR","tag":"SDKs móveis","count":25},{"language":"tr","tag":"Mobil SDK'lar","count":25},{"language":"cn","tag":"教程","count":24},{"language":"es","tag":"Tutoriales","count":24},{"language":"fr","tag":"Tutoriels","count":24},{"language":"ja","tag":"チュートリアル","count":24},{"language":"ko","tag":"튜토리얼","count":24},{"language":"pt-BR","tag":"Tutoriais","count":24},{"language":"tr","tag":"Eğitimler","count":24},{"language":"en","tag":"Mobile SDK setup","count":19},{"language":"cn","tag":"移动SDK设置","count":18},{"language":"es","tag":"Configuración del SDK móvil","count":18},{"language":"fr","tag":"Configuration SDK mobile","count":18},{"language":"ja","tag":"モバイルSDKセットアップ","count":18},{"language":"ko","tag":"모바일 SDK 설정","count":18},{"language":"pt-BR","tag":"Configuração do SDK móvel","count":18},{"language":"tr","tag":"Mobil SDK kurulumu","count":18},{"language":"default","tag":"Messages","count":9},{"language":"default","tag":"Users","count":9},{"language":"default","tag":"Organization","count":9},{"language":"default","tag":"Journeys","count":8},{"language":"default","tag":"Deprecated","count":6},{"language":"default","tag":"Templates","count":6},{"language":"default","tag":"Subscriptions","count":6},{"language":"default","tag":"Segments","count":5}]},"assistantConfig":{"enableStarterQuestions":false,"deflection":{"enabled":true,"email":"support@onesignal.com","showHelpButton":true}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[],"page":{"pagePath":"docs/en/voip-notifications","slug":"/docs/en/voip-notifications","pageMetadata":{"title":"VoIP push notifications","description":"Send VoIP push notifications on iOS using OneSignal with PushKit token registration and a VoIP certificate, plus Android alternatives for call-style behavior.","keywords":["VoIP push notifications","iOS VoIP","PushKit","VoIP token","VoIP Services Certificate","android call notification"],"href":"/docs/en/voip-notifications"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Send VoIP push notifications on iOS using OneSignal with PushKit token registration and a VoIP certificate, plus Android alternatives for call-style behavior.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,hr:`hr`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,Card,CodeBlock,Columns,Frame,Heading,Info,Note,OptimizedImage,Step,Steps,Table,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!Card)_missingMdxReference(`Card`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Columns)_missingMdxReference(`Columns`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`VoIP push notifications let your app receive incoming call alerts even when the app is in the background or terminated. Apple handles VoIP pushes differently from standard push notifications — they use a separate certificate type, a separate token (via PushKit), and different delivery rules.`}),`\n`,_jsxs(_components.p,{children:[`OneSignal supports `,_jsx(_components.strong,{children:`sending`}),` VoIP pushes, but the OneSignal SDK does `,_jsx(_components.strong,{children:`not`}),` handle VoIP token registration. You are responsible for:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Registering VoIP tokens in your app using Apple PushKit`}),`\n`,_jsx(_components.li,{children:`Creating a dedicated OneSignal app with a VoIP Services Certificate`}),`\n`,_jsx(_components.li,{children:`Registering tokens and sending pushes through the OneSignal REST API`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`platform-differences`,children:`Platform differences`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Platform`}),_jsx(_components.th,{children:`VoIP push supported?`}),_jsx(_components.th,{children:`How it works`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`iOS`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:`Uses Apple PushKit and a VoIP APNs certificate`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Android`})}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Uses data-only pushes to simulate call-style behavior`})]})]})]}),`\n`,_jsx(_components.p,{children:`If you are building a cross-platform calling app, you will use different approaches per platform.`}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`ios-send-voip-push-notifications`,children:`iOS: send VoIP push notifications`}),`\n`,_jsx(_components.p,{children:`On iOS, VoIP notifications use Apple PushKit and follow special delivery rules that differ from standard push notifications. Because Apple treats VoIP pushes differently, OneSignal requires a separate app configuration for VoIP.`}),`\n`,_jsxs(Warning,{children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Before you start`}),` — these are the most common VoIP setup mistakes:`]}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Not creating a separate OneSignal app for VoIP.`}),` Apple requires a different certificate type for VoIP, so OneSignal needs a dedicated app to send VoIP pushes. Your existing push app cannot be used for both.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Uploading the wrong certificate.`}),` You need a `,_jsx(_components.strong,{children:`VoIP Services Certificate (.p12)`}),`, not your standard APNs push certificate. Using the wrong one causes silent delivery failures.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Forgetting `,_jsx(_components.code,{children:`test_type`}),` in sandbox.`]}),` When testing with a development build, you must include `,_jsx(_components.code,{children:`\"test_type\": 1`}),` when registering the token. Without it, the API call succeeds but pushes never arrive.`]}),`\n`]})]}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Register a VoIP token using PushKit`,children:[_jsx(_components.p,{children:`Use Apple’s PushKit framework to register for VoIP notifications and receive a VoIP token.`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Implement PushKit in your app`}),`\n`,_jsx(_components.li,{children:`Store and refresh the VoIP token as Apple rotates it`}),`\n`,_jsx(_components.li,{children:`Follow Apple’s VoIP policies closely`}),`\n`]}),_jsxs(Accordion,{title:`Example: PushKit delegate implementation`,id:`example-pushkit-delegate-implementation`,children:[_jsx(CodeBlock,{filename:``,numberOfLines:`14`,language:`swift`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`swift`,children:_jsxs(_components.code,{language:`swift`,numberOfLines:`14`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` PushKit`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`class`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` AppDelegate`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`NSObject`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`PKPushRegistryDelegate `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` func`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` registerForVoIPPushes`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`() {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` let`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` registry `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` PKPushRegistry`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`queue`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: .`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`main`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` registry.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`delegate`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` self`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` registry.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`desiredPushTypes`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`voIP`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` func`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` pushRegistry`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`_`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` registry`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: PKPushRegistry, `}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`didUpdatePushCredentials`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` credentials`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: PKPushCredentials, `}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`for`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` type`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: PKPushType) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` let`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` token `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` credentials.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`token`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`map`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`String`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`format`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"%02x\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`$0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) }.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`joined`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Pass this token to OneSignal — see Step 4`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(Note,{children:`This is standard Apple PushKit code. OneSignal does not provide a PushKit SDK — you register the token yourself and pass it to OneSignal in Step 4.`})]}),_jsx(_components.p,{children:`Apple resources:`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://developer.apple.com/documentation/pushkit`,children:`PushKit documentation`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://developer.apple.com/documentation/pushkit/responding_to_voip_notifications_from_pushkit`,children:`Responding to VoIP pushes`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://developer.apple.com/library/content/documentation/Performance/Conceptual/EnergyGuide-iOS/OptimizeVoIP.html`,children:`Apple’s VoIP best practices`})}),`\n`]})]}),_jsxs(Step,{title:`Create a separate OneSignal app for VoIP`,children:[_jsxs(_components.p,{children:[`Apple VoIP pushes require a different certificate type than standard push notifications. A single OneSignal app can only use one certificate type, so you must create `,_jsx(_components.strong,{children:`two separate OneSignal apps`}),`:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Main Push App`}),`: Uses your APNs certificate for standard push notifications`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`VoIP Push App`}),`: Uses a VoIP Services Certificate for VoIP-only notifications`]}),`\n`]}),_jsxs(_components.p,{children:[`Both apps must use the same iOS bundle ID and be associated with the same native iOS app. You do `,_jsx(_components.strong,{children:`not`}),` need to initialize the OneSignal SDK twice — the VoIP app is only used server-side to send VoIP pushes via the API.`]}),_jsxs(Note,{children:[`The bundle ID (e.g., `,_jsx(_components.code,{children:`com.yourcompany.appname`}),`) is found in Xcode under your target’s `,_jsx(_components.strong,{children:`General`}),` tab.`]})]}),_jsxs(Step,{title:`Upload a VoIP Services Certificate`,children:[_jsxs(_components.p,{children:[`In your VoIP OneSignal app, upload a `,_jsx(_components.strong,{children:`VoIP Services Certificate (.p12)`}),`. This is a different certificate type than the standard APNs push certificate you use for regular notifications.`]}),_jsx(_components.p,{children:`To create one:`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Go to the `,_jsx(_components.a,{href:`https://developer.apple.com/account/resources/certificates/add`,children:`Apple Developer Portal`})]}),`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`VoIP Services Certificate`})]}),`\n`,_jsx(_components.li,{children:`Follow the prompts to generate and download the certificate`}),`\n`,_jsxs(_components.li,{children:[`Open it in Keychain Access and export it as a `,_jsx(_components.code,{children:`.p12`}),` file`]}),`\n`,_jsxs(_components.li,{children:[`Upload the `,_jsx(_components.code,{children:`.p12`}),` file to your VoIP OneSignal app’s iOS settings`]}),`\n`]}),_jsx(Warning,{children:_jsxs(_components.p,{children:[`Do `,_jsx(_components.strong,{children:`not`}),` upload your standard APNs push certificate to the VoIP app. If you use the wrong certificate type, the API will accept your push request but Apple will reject it and the notification will never arrive.`]})}),_jsx(Frame,{caption:`VoIP certificate in Keychain Access`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/6101554-Screen_Shot_2020-04-26_at_1.07.52_PM.png?fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=5d19f1262fdf67d5185ed8d8b4743493`,alt:`VoIP Services Certificate shown in macOS Keychain Access`,\"data-og-width\":`1868`,width:`1868`,\"data-og-height\":`1624`,height:`1624`,\"data-path\":`images/docs/6101554-Screen_Shot_2020-04-26_at_1.07.52_PM.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/6101554-Screen_Shot_2020-04-26_at_1.07.52_PM.png?w=280\u0026fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=d57f41b5d7d08a261686c42154275181 280w, https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/6101554-Screen_Shot_2020-04-26_at_1.07.52_PM.png?w=560\u0026fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=8dba61a8e30c0c831fdb26dda2c3dcdb 560w, https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/6101554-Screen_Shot_2020-04-26_at_1.07.52_PM.png?w=840\u0026fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=d4d822861982c4795b5346fc84100991 840w, https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/6101554-Screen_Shot_2020-04-26_at_1.07.52_PM.png?w=1100\u0026fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=be2dfa06d3400d8c94275769fcdc15b9 1100w, https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/6101554-Screen_Shot_2020-04-26_at_1.07.52_PM.png?w=1650\u0026fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=fe3e85e100a8040fe7c8c1c4171358cc 1650w, https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/6101554-Screen_Shot_2020-04-26_at_1.07.52_PM.png?w=2500\u0026fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=7070b593a6f3809aca32feee7054c22d 2500w`})}),_jsx(Frame,{caption:`VoIP certificate uploaded in OneSignal dashboard`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/onesignal/0qspEXXeJ8zJbkJ-/images/docs/81a2fea-a2a2e71-Screenshot_2024-02-23_at_1.32.08_PM.png?fit=max\u0026auto=format\u0026n=0qspEXXeJ8zJbkJ-\u0026q=85\u0026s=6ee92a10fc3473c644880fa7517eb46b`,alt:`VoIP Services Certificate uploaded in the OneSignal dashboard`,\"data-og-width\":`466`,width:`466`,\"data-og-height\":`130`,height:`130`,\"data-path\":`images/docs/81a2fea-a2a2e71-Screenshot_2024-02-23_at_1.32.08_PM.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/onesignal/0qspEXXeJ8zJbkJ-/images/docs/81a2fea-a2a2e71-Screenshot_2024-02-23_at_1.32.08_PM.png?w=280\u0026fit=max\u0026auto=format\u0026n=0qspEXXeJ8zJbkJ-\u0026q=85\u0026s=95a3a2c83752c51d43c1716a35ea5fe0 280w, https://mintcdn.com/onesignal/0qspEXXeJ8zJbkJ-/images/docs/81a2fea-a2a2e71-Screenshot_2024-02-23_at_1.32.08_PM.png?w=560\u0026fit=max\u0026auto=format\u0026n=0qspEXXeJ8zJbkJ-\u0026q=85\u0026s=bd44dde96a3d94780e6506beb6c7f4c0 560w, https://mintcdn.com/onesignal/0qspEXXeJ8zJbkJ-/images/docs/81a2fea-a2a2e71-Screenshot_2024-02-23_at_1.32.08_PM.png?w=840\u0026fit=max\u0026auto=format\u0026n=0qspEXXeJ8zJbkJ-\u0026q=85\u0026s=6de341e128c37fee7dc4d1829068b574 840w, https://mintcdn.com/onesignal/0qspEXXeJ8zJbkJ-/images/docs/81a2fea-a2a2e71-Screenshot_2024-02-23_at_1.32.08_PM.png?w=1100\u0026fit=max\u0026auto=format\u0026n=0qspEXXeJ8zJbkJ-\u0026q=85\u0026s=522fd6e38125b3223a941e37bc46811a 1100w, https://mintcdn.com/onesignal/0qspEXXeJ8zJbkJ-/images/docs/81a2fea-a2a2e71-Screenshot_2024-02-23_at_1.32.08_PM.png?w=1650\u0026fit=max\u0026auto=format\u0026n=0qspEXXeJ8zJbkJ-\u0026q=85\u0026s=50555ec34cfc42ed15fb1babc9b78267 1650w, https://mintcdn.com/onesignal/0qspEXXeJ8zJbkJ-/images/docs/81a2fea-a2a2e71-Screenshot_2024-02-23_at_1.32.08_PM.png?w=2500\u0026fit=max\u0026auto=format\u0026n=0qspEXXeJ8zJbkJ-\u0026q=85\u0026s=f492c4b3f1b74155ccb741eb94d9d6dc 2500w`})})]}),_jsxs(Step,{title:`Register the VoIP token with OneSignal`,children:[_jsxs(_components.p,{children:[`Use the `,_jsx(_components.a,{href:`/reference/create-user`,children:`Create User`}),` API to register the VoIP token with your VoIP OneSignal app.`]}),_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[`Sandbox/development builds require `,_jsx(_components.code,{children:`\"test_type\": 1`}),`.`]}),` If you omit this field, the API call succeeds and returns no error, but Apple treats the token as production and silently rejects every push sent to it.`]})}),_jsx(CodeBlock,{filename:``,numberOfLines:`16`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`16`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`curl --request POST \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` --url https://api.onesignal.com/apps/YOUR_VOIP_APP_ID/users \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` --header 'accept: application/json' \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` --header 'content-type: application/json' \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` --data '`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`{`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"subscriptions\": [`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"type\": \"iOSPush\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"token\": \"YOUR_VOIP_TOKEN\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"test_type\": 1`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`'`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),_jsxs(Note,{children:[`A valid VoIP token is a 64-character lowercase hex string (e.g., `,_jsx(_components.code,{children:`a1b2c3d4e5f6...`}),`). PushKit does not work on the iOS Simulator — you must use a real device to obtain a valid token.`]}),_jsxs(_components.p,{children:[`To update the token later, use the `,_jsx(_components.a,{href:`/reference/update-subscription`,children:`Update Subscription`}),` API.`]})]}),_jsxs(Step,{title:`Send VoIP notifications`,children:[_jsxs(_components.p,{children:[`Use the `,_jsx(_components.a,{href:`/reference/create-message`,children:`Create Notification`}),` API with the following parameters:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`\"apns_push_type_override\": \"voip\"`}),` — tells Apple this is a VoIP push`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`app_id`}),` — your VoIP app ID`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`include_subscription_ids`}),` — the VoIP subscription ID you registered`]}),`\n`,_jsxs(_components.li,{children:[`Either `,_jsx(_components.code,{children:`contents`}),` or `,_jsx(_components.code,{children:`content_available`}),` is required`]}),`\n`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`15`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`15`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`curl --include \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` --request POST \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` --header \"Content-Type: application/json; charset=utf-8\" \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` --header \"Authorization: key YOUR_REST_API_KEY\" \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` --data-binary '{`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"app_id\": \"YOUR_VOIP_APP_ID\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"content_available\": true,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"data\": {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"your_custom_data\": \"your_custom_value\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"apns_push_type_override\": \"voip\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"include_subscription_ids\": [\"YOUR_VOIP_SUBSCRIPTION_ID\"]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`}' \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`https://api.onesignal.com/notifications`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),_jsx(Note,{children:_jsxs(_components.p,{children:[`VoIP pushes allow a larger payload than standard push. APNs permits up to 5,120 bytes for a VoIP notification, compared to 4,096 bytes for standard push. The `,_jsx(_components.code,{children:`data`}),` field (Additional Data) still supports up to 2,048 bytes, and payloads over the limit are rejected by APNs. See `,_jsx(_components.a,{href:`/docs/en/push#what-is-the-maximum-push-notification-payload-size`,children:`Maximum push payload size`}),`.`]})})]}),_jsxs(Step,{title:`Verify your VoIP setup`,children:[_jsx(_components.p,{children:`Your iOS VoIP integration is working correctly if:`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`The VoIP token appears as an iOS push subscription in your `,_jsx(_components.strong,{children:`VoIP app`})]}),`\n`,_jsxs(_components.li,{children:[`A VoIP push triggers `,_jsx(_components.a,{href:`https://developer.apple.com/documentation/pushkit/responding_to_voip_notifications_from_pushkit`,children:_jsx(_components.code,{children:`pushRegistry(_:didReceiveIncomingPushWith:for:completion:)`})}),` in your app`]}),`\n`,_jsx(_components.li,{children:`The app wakes even when it is terminated or backgrounded`}),`\n`]})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`android-simulate-voip-style-behavior`,children:`Android: simulate VoIP-style behavior`}),`\n`,_jsx(_components.p,{children:`Android does not support VoIP push notifications. There is no equivalent to Apple PushKit.`}),`\n`,_jsx(_components.p,{children:`Instead, Android calling apps simulate VoIP behavior using:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Data-only push notifications`}),`\n`,_jsx(_components.li,{children:`Foreground services`}),`\n`,_jsx(_components.li,{children:`Custom call-style UI`}),`\n`]}),`\n`,_jsx(_components.p,{children:`You can use OneSignal’s normal Android push support combined with native Android APIs to achieve this.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Recommended approach:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Send data-only notifications`}),`\n`,_jsxs(_components.li,{children:[`Handle them in your app to:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Start a foreground service`}),`\n`,_jsx(_components.li,{children:`Launch a call UI activity`}),`\n`,_jsx(_components.li,{children:`Display a custom incoming call notification`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`If you want to intercept and fully control notification rendering, use Android’s `,_jsx(_components.a,{href:`/docs/en/service-extensions#notification-service-extension`,children:`Notification Service Extension`}),`.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Helpful resources:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://developer.android.com/guide/topics/connectivity/telecom/selfManaged`,children:`Android calling app guide`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://medium.com/@dcostalloyd90/show-incoming-voip-call-notification-and-open-activity-for-android-os-10-5aada2d4c1e4`,children:`Incoming call UI example`})}),`\n`]}),`\n`,_jsxs(Info,{children:[`Android setup is `,_jsx(_components.strong,{children:`not specific to OneSignal`}),`. OneSignal only delivers the push payload; your app handles call behavior.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`faq`,children:`FAQ`}),`\n`,_jsx(Heading,{level:`3`,id:`do-confirmed-deliveries-work-with-voip`,children:`Do confirmed deliveries work with VoIP?`}),`\n`,_jsxs(_components.p,{children:[`No. `,_jsx(_components.a,{href:`/docs/en/confirmed-delivery`,children:`Confirmed Deliveries`}),` are `,_jsx(_components.strong,{children:`not tracked`}),` for VoIP pushes. Confirmed Deliveries rely on the Notification Service Extension, which does not trigger for VoIP notifications.`]}),`\n`,_jsx(_components.p,{children:`Instead, track receipt via the native iOS PushKit event:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`swift`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`swift`,children:_jsxs(_components.code,{language:`swift`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`pushRegistry`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(_:`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`didReceiveIncomingPushWith:for:completion:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`This event is part of your main app target and does not require a separate extension. See `,_jsx(_components.a,{href:`https://developer.apple.com/documentation/pushkit/responding_to_voip_notifications_from_pushkit#3377587`,children:`Apple’s VoIP documentation`}),` for details.`]}),`\n`,_jsx(Heading,{level:`3`,id:`can-i-send-voip-notifications-from-the-onesignal-dashboard`,children:`Can I send VoIP notifications from the OneSignal dashboard?`}),`\n`,_jsxs(_components.p,{children:[`No. VoIP notifications must be sent via the `,_jsx(_components.a,{href:`/reference/create-message`,children:`Create Notification`}),` API with `,_jsx(_components.code,{children:`\"apns_push_type_override\": \"voip\"`}),`. The dashboard does not support this parameter.`]}),`\n`,_jsx(Heading,{level:`3`,id:`why-is-my-voip-push-silently-failing`,children:`Why is my VoIP push silently failing?`}),`\n`,_jsx(_components.p,{children:`VoIP pushes can fail without any error from the OneSignal API. Work through this checklist:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Are you using a sandbox/development build?`}),` You must include `,_jsx(_components.code,{children:`\"test_type\": 1`}),` when registering the token via the Create User API. Without it, the token registers as production, Apple rejects the push, and it silently fails.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Did you upload the correct certificate?`}),` The VoIP OneSignal app must use a `,_jsx(_components.strong,{children:`VoIP Services Certificate (.p12)`}),`, not a standard APNs push certificate. Both look similar in Keychain Access — verify the certificate name starts with “VoIP Services”.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Are you sending to the right OneSignal app?`}),` The `,_jsx(_components.code,{children:`app_id`}),` in your send request must be your `,_jsx(_components.strong,{children:`VoIP app`}),`, not your main push app. The `,_jsx(_components.code,{children:`REST API Key`}),` must also come from the VoIP app.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Is the VoIP token valid?`}),` Tokens expire when the app is reinstalled or the device is restored. Check that the token is a 64-character lowercase hex string and was recently registered.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Does your app call `,_jsx(_components.code,{children:`reportNewIncomingVoIPPushPayload`}),`?`]}),` Starting in iOS 13, Apple `,_jsx(_components.strong,{children:`terminates`}),` apps that receive a VoIP push but do not report a call to CallKit. This is an Apple requirement, not a OneSignal limitation.`]}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`related-pages`,children:`Related pages`}),`\n`,_jsxs(Columns,{cols:2,children:[_jsx(Card,{title:`Create message API`,icon:`code`,href:`/reference/create-message`,children:_jsx(_components.p,{children:`Send push notifications programmatically using the REST API.`})}),_jsx(Card,{title:`Confirmed deliveries`,icon:`circle-check`,href:`/docs/en/confirmed-delivery`,children:_jsx(_components.p,{children:`Track push notification delivery confirmation on supported platforms.`})}),_jsx(Card,{title:`Service extensions`,icon:`puzzle-piece`,href:`/docs/en/service-extensions`,children:_jsx(_components.p,{children:`Customize notification handling with Notification Service Extensions.`})}),_jsx(Card,{title:`Create User API`,icon:`user-plus`,href:`/reference/create-user`,children:_jsx(_components.p,{children:`Register users and subscriptions with the OneSignal API.`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"VoIP push notifications","description":"Send VoIP push notifications on iOS using OneSignal with PushKit token registration and a VoIP certificate, plus Android alternatives for call-style behavior.","keywords":["VoIP push notifications","iOS VoIP","PushKit","VoIP token","VoIP Services Certificate","android call notification"],"href":"/docs/en/voip-notifications"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Platform differences","slug":"platform-differences","depth":3,"children":[]},{"title":"iOS: send VoIP push notifications","slug":"ios-send-voip-push-notifications","depth":2,"children":[]},{"title":"Android: simulate VoIP-style behavior","slug":"android-simulate-voip-style-behavior","depth":2,"children":[]},{"title":"FAQ","slug":"faq","depth":2,"children":[{"title":"Do confirmed deliveries work with VoIP?","slug":"do-confirmed-deliveries-work-with-voip","depth":3,"children":[]},{"title":"Can I send VoIP notifications from the OneSignal dashboard?","slug":"can-i-send-voip-notifications-from-the-onesignal-dashboard","depth":3,"children":[]},{"title":"Why is my VoIP push silently failing?","slug":"why-is-my-voip-push-silently-failing","depth":3,"children":[]}]},{"title":"Related pages","slug":"related-pages","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/onesignal/e069c1b9f3157e14/hotjar-koala.js","/_mintlify/custom/onesignal/3e5d03885ab32f49/intercom.js","/_mintlify/custom/onesignal/dbb7af4794d1b586/munchkin-marketo.js"],"subdomain":"onesignal","siteName":"OneSignal Documentation","title":"VoIP push notifications - OneSignal Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/docs/en/voip-notifications","matchLevel":0},"cn":{"href":"/docs/cn/voip-notifications","matchLevel":1},"ko":{"href":"/docs/ko/voip-notifications","matchLevel":1},"ja":{"href":"/docs/ja/voip-notifications","matchLevel":1},"tr":{"href":"/docs/tr/voip-notifications","matchLevel":1},"pt-BR":{"href":"/docs/pt-BR/voip-notifications","matchLevel":1},"es":{"href":"/docs/es/voip-notifications","matchLevel":1},"fr":{"href":"/docs/fr/voip-notifications","matchLevel":1}}},"lastModified":"2026-10-20T00:10:50.719Z","originalFileLocation":"docs/en/voip-notifications.mdx","locale":"en"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Send VoIP push notifications on iOS using OneSignal with PushKit token registration and a VoIP certificate, plus Android alternatives for call-style behavior.\">\u003cmeta data-mint-head name=\"application-name\" content=\"OneSignal Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"VoIP push notifications - OneSignal Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Send VoIP push notifications on iOS using OneSignal with PushKit token registration and a VoIP certificate, plus Android alternatives for call-style behavior.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"OneSignal Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://documentation.onesignal.com/docs/en/voip-notifications\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://onesignal.mintlify.site/_mintlify/api/og/v2?division=Mobile+push\u0026amp;title=VoIP+push+notifications\u0026amp;description=Send+VoIP+push+notifications+on+iOS+using+OneSignal+with+PushKit+token+registration+and+a+VoIP+certificate%2C+plus+Android+alternatives+for+call-style+behavior.\u0026amp;theme=12e705baa88dc8cc6d7a9877\u0026amp;signature=38934b7164e3f7f50340e49ed131e2b9126a77242db4b6cfe7dc019207be6fa0\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"VoIP push notifications - OneSignal Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Send VoIP push notifications on iOS using OneSignal with PushKit token registration and a VoIP certificate, plus Android alternatives for call-style behavior.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://onesignal.mintlify.site/_mintlify/api/og/v2?division=Mobile+push\u0026amp;title=VoIP+push+notifications\u0026amp;description=Send+VoIP+push+notifications+on+iOS+using+OneSignal+with+PushKit+token+registration+and+a+VoIP+certificate%2C+plus+Android+alternatives+for+call-style+behavior.\u0026amp;theme=12e705baa88dc8cc6d7a9877\u0026amp;signature=38934b7164e3f7f50340e49ed131e2b9126a77242db4b6cfe7dc019207be6fa0\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"OneSignal Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#3A3DB3\">\u003clink data-mint-head rel=\"canonical\" href=\"https://documentation.onesignal.com/docs/en/voip-notifications\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/en/voip-notifications.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://documentation.onesignal.com/docs/en/voip-notifications\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"zh\" href=\"https://documentation.onesignal.com/docs/cn/voip-notifications\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ko\" href=\"https://documentation.onesignal.com/docs/ko/voip-notifications\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ja\" href=\"https://documentation.onesignal.com/docs/ja/voip-notifications\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"tr\" href=\"https://documentation.onesignal.com/docs/tr/voip-notifications\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"pt-BR\" href=\"https://documentation.onesignal.com/docs/pt-BR/voip-notifications\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"es\" href=\"https://documentation.onesignal.com/docs/es/voip-notifications\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"fr\" href=\"https://documentation.onesignal.com/docs/fr/voip-notifications\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://documentation.onesignal.com/docs/en/voip-notifications\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://documentation.onesignal.com/#organization\",\"name\":\"OneSignal Documentation\",\"url\":\"https://documentation.onesignal.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/onesignal/yJcueeDCO7UpHnnY/logo/OneSignal-Logo.svg?fit=max\u0026auto=format\u0026n=yJcueeDCO7UpHnnY\u0026q=85\u0026s=1fcfb6fef6d820fd9d99c74850711107\"}},{\"@type\":\"WebSite\",\"@id\":\"https://documentation.onesignal.com#website\",\"name\":\"OneSignal Documentation\",\"url\":\"https://documentation.onesignal.com\",\"publisher\":{\"@id\":\"https://documentation.onesignal.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://documentation.onesignal.com/docs/en/voip-notifications#webpage\",\"url\":\"https://documentation.onesignal.com/docs/en/voip-notifications\",\"name\":\"VoIP push notifications\",\"description\":\"Send VoIP push notifications on iOS using OneSignal with PushKit token registration and a VoIP certificate, plus Android alternatives for call-style behavior.\",\"dateModified\":\"2026-10-20T00:10:50.719Z\",\"isPartOf\":{\"@id\":\"https://documentation.onesignal.com#website\"},\"breadcrumb\":{\"@id\":\"https://documentation.onesignal.com/docs/en/voip-notifications#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://documentation.onesignal.com/docs/en/voip-notifications#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Message channels\",\"item\":\"https://documentation.onesignal.com/docs/en/channel-setup\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Push\",\"item\":\"https://documentation.onesignal.com/docs/en/push\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Mobile push\",\"item\":\"https://documentation.onesignal.com/docs/en/mobile-push-setup\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"VoIP push notifications\",\"item\":\"https://documentation.onesignal.com/docs/en/voip-notifications\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://documentation.onesignal.com/docs/en/voip-notifications#article\",\"headline\":\"VoIP push notifications\",\"name\":\"VoIP push notifications\",\"description\":\"Send VoIP push notifications on iOS using OneSignal with PushKit token registration and a VoIP certificate, plus Android alternatives for call-style behavior.\",\"url\":\"https://documentation.onesignal.com/docs/en/voip-notifications\",\"mainEntityOfPage\":{\"@id\":\"https://documentation.onesignal.com/docs/en/voip-notifications#webpage\"},\"dateModified\":\"2026-10-20T00:10:50.719Z\",\"keywords\":\"VoIP push notifications, iOS VoIP, PushKit, VoIP token, VoIP Services Certificate, android call notification\",\"publisher\":{\"@id\":\"https://documentation.onesignal.com/#organization\"},\"isPartOf\":{\"@id\":\"https://documentation.onesignal.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"OneSignal Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"OneSignal Documentation","nav":{"global":null,"languages":[{"language":"en","tabs":[{"tab":"Home","pages":[{"title":"Home","href":"/docs/en/home"}]},{"tab":"User Guides","groups":[{"group":"First steps \u0026 settings","pages":[{"title":"Getting started with OneSignal","href":"/docs/en/quickstart-guide"},{"group":"OneSignal dashboard","pages":[{"title":"Apps, Organizations, \u0026 Accounts","href":"/docs/en/apps-organizations"},{"title":"Team members","href":"/docs/en/manage-team-members"},{"title":"Keys \u0026 IDs","href":"/docs/en/keys-and-ids"},{"title":"Audit logs","href":"/docs/en/audit-logs"},{"title":"Usage \u0026 billing","href":"/docs/en/billing-faq"},{"title":"Disabled apps \u0026 organizations","href":"/docs/en/disabled-apps"}]},{"title":"Migrating to OneSignal","href":"/docs/en/migrating-to-onesignal"}]},{"group":"Message channels","pages":[{"title":"Channel setup","href":"/docs/en/channel-setup"},{"group":"Push","pages":[{"title":"Push overview","href":"/docs/en/push"},{"group":"Mobile push","pages":[{"title":"Mobile push setup","href":"/docs/en/mobile-push-setup"},{"title":"Prompt for push permissions","href":"/docs/en/prompt-for-push-permissions"},{"title":"iOS provisional push notifications","href":"/docs/en/ios-provisional-push-notifications"},{"title":"Android notification categories","href":"/docs/en/android-notification-categories"},{"title":"Data \u0026 background notifications","description":"Send silent push notifications to sync data or trigger background tasks on iOS and Android without displaying a visible message.","href":"/docs/en/data-notifications"},{"title":"VoIP push notifications","href":"/docs/en/voip-notifications"}]},{"group":"Web push","pages":[{"title":"Web push setup","description":"Set up web push notifications with OneSignal to re-engage users on Chrome, Firefox, Safari, and Edge. Configure your site, prompts, and service worker.","href":"/docs/en/web-push-setup"},{"title":"Web permission prompts","href":"/docs/en/permission-requests"},{"title":"Web push FAQ","href":"/docs/en/web-push-setup-faq"},{"title":"Web push browser behavior","href":"/docs/en/browser-behavior-and-unsubscribes"},{"title":"Shopify integration (via Vendo)","href":"/docs/en/shopify"},{"title":"OneSignal WordPress plugin setup for web push","href":"/docs/en/wordpress"},{"title":"WordPress troubleshooting","href":"/docs/en/troubleshooting-wordpress-web-push"}]},{"group":"Push features","pages":[{"title":"Notification icons","href":"/docs/en/notification-icons"},{"title":"Notification images \u0026 rich media","href":"/docs/en/rich-media"},{"title":"Notification sounds","href":"/docs/en/notification-sounds"},{"title":"Notification badges","href":"/docs/en/badges"},{"title":"Action buttons for push notifications","href":"/docs/en/action-buttons"},{"title":"Push frequency capping","href":"/docs/en/frequency-capping"},{"title":"Push throttling","href":"/docs/en/throttling"},{"title":"iOS: Focus modes and interruption levels","href":"/docs/en/ios-focus-modes-and-interruption-levels"},{"title":"iOS: Relevance score","href":"/docs/en/ios-relevance-score"}]},{"group":"Push analytics \u0026 troubleshooting","pages":[{"title":"Push message reports","href":"/docs/en/push-notification-message-reports"},{"title":"Confirmed receipt","href":"/docs/en/confirmed-delivery"},{"title":"Notification click-through rate (CTR)","href":"/docs/en/notification-ctr"},{"title":"Mobile push: Notifications not shown or delayed","href":"/docs/en/notifications-show-successful-but-are-not-being-shown"},{"title":"Web push: Notifications not shown","href":"/docs/en/notifications-not-shown-web-push"},{"title":"Notification Images Not Showing","href":"/docs/en/notification-images-not-showing"},{"title":"Duplicated notifications","href":"/docs/en/duplicated-notifications"},{"title":"FCM expired token FAQ","href":"/docs/en/fcm-expired-token-faq"}]}]},{"group":"In-app messages","pages":[{"title":"In-app overview","href":"/docs/en/in-app-messages-setup"},{"title":"In-app triggers","href":"/docs/en/iam-triggers"},{"title":"In-app click actions","href":"/docs/en/iam-click-actions"},{"group":"In-app design","pages":[{"title":"Design in-app messages with drag-and-drop","href":"/docs/en/design-your-in-app-message"},{"title":"Design in-app messages with HTML","href":"/docs/en/design-your-in-app-message-with-html"},{"title":"In-app message templates \u0026 quickstarts","href":"/docs/en/in-app-html-templates"},{"title":"In-app message JavaScript API reference","href":"/docs/en/in-app-message-api"}]},{"title":"In-app message reports","href":"/docs/en/in-app-message-reports"},{"title":"In-app troubleshooting","href":"/docs/en/in-app-message-troubleshooting"}]},{"group":"Email","pages":[{"title":"Email overview","href":"/docs/en/email-messaging"},{"group":"Email setup","pages":[{"title":"Email setup","href":"/docs/en/email-setup"},{"title":"Email DNS configuration","href":"/docs/en/email-dns-configuration"},{"title":"Senders","href":"/docs/en/senders"},{"title":"BCC emails","href":"/docs/en/email-bcc"},{"title":"Transactional emails","href":"/docs/en/setup-transactional-emails"},{"title":"Create a custom email unsubscribe page","href":"/docs/en/create-custom-unsubscribe-page"}]},{"group":"Email deliverability \u0026 analytics","pages":[{"title":"Email message reports","href":"/docs/en/email-message-reports"},{"title":"Email deliverability","href":"/docs/en/email-deliverability"},{"title":"Deliverability insights by inbox provider","href":"/docs/en/email-deliverability-insights"},{"title":"Email reputation best practices","href":"/docs/en/email-reputation-best-practices"},{"title":"Email address validation","href":"/docs/en/email-address-validation"},{"title":"Email warm-up","href":"/docs/en/email-warm-up"},{"title":"Google Postmaster Tools","href":"/docs/en/google-postmaster-tools"},{"title":"Suppressions","href":"/docs/en/suppressions"},{"title":"Email troubleshooting","href":"/docs/en/email-troubleshooting"}]},{"group":"Design your emails","pages":[{"title":"Design emails with drag-and-drop","href":"/docs/en/design-emails-with-drag-and-drop"},{"title":"Design emails with HTML","href":"/docs/en/design-emails-with-html"},{"title":"Email unsubscribe links \u0026 headers","href":"/docs/en/unsubscribe-links-email-subscriptions"},{"title":"Email template forwarding","href":"/docs/en/email-template-forwarding"}]}]},{"group":"SMS \u0026 RCS","pages":[{"title":"SMS, MMS, and RCS overview","href":"/docs/en/sms-messaging"},{"title":"Rich Communication Services (RCS)","href":"/docs/en/rcs-messaging"},{"group":"SMS setup","pages":[{"title":"SMS setup","href":"/docs/en/sms-setup"},{"title":"Sender resource applications and country requirements","sidebarTitle":"Sender resource applications","href":"/docs/en/sms-registration-requirements"},{"title":"SMS opt-in and collection","href":"/docs/en/sms-opt-in-and-collection"},{"title":"SMS consent keyword management","href":"/docs/en/sms-consent-keyword-management"},{"title":"SMS keywords","href":"/docs/en/keywords"}]},{"group":"SMS messaging","pages":[{"title":"Promotional messaging","href":"/docs/en/sms-promotional-messaging"},{"title":"Transactional messaging","href":"/docs/en/sms-transactional-messaging"},{"title":"One-time passwords (OTP)","sidebarTitle":"One-time passwords","href":"/docs/en/sms-verify"},{"title":"Composing messages","href":"/docs/en/sms-composing-messages"},{"title":"SMS message reports","href":"/docs/en/sms-message-reports"}]}]},{"group":"Live Activities","pages":[{"title":"Live Activities","href":"/docs/en/live-activities"},{"title":"Live Activities analytics","href":"/docs/en/live-activities-analytics"}]},{"group":"Features","pages":[{"title":"A/B testing","href":"/docs/en/ab-testing"},{"title":"Multi-language messaging","href":"/docs/en/multi-language-messaging"},{"title":"Brand Kit","href":"/docs/en/brand-kit"},{"group":"Personalization","pages":[{"title":"Personalization","href":"/docs/en/message-personalization"},{"title":"Using Liquid syntax","href":"/docs/en/using-liquid-syntax"},{"title":"Data feeds","href":"/docs/en/data-feeds"},{"title":"Personalize with Custom Events","href":"/docs/en/personalization-custom-event"},{"title":"Personalize with properties","href":"/docs/en/personalization-properties-and-tags"},{"title":"Personalize messages with API custom_data","href":"/docs/en/personalization-api-custom-data"},{"title":"Dynamic Content with CSV","href":"/docs/en/dynamic-content"}]},{"group":"URLs, Links, \u0026 Deep Links","pages":[{"title":"URLs, links, \u0026 deep links","href":"/docs/en/links"},{"title":"Deep linking","href":"/docs/en/deep-linking"},{"title":"Email unsubscribe links \u0026 headers","href":"/docs/en/unsubscribe-links-email-subscriptions"}]},{"title":"Retargeting messages","href":"/docs/en/retargeting"},{"title":"Templates","href":"/docs/en/templates"},{"title":"Labels","href":"/docs/en/labels"}]}]},{"group":"Journeys","pages":[{"title":"Journeys overview","href":"/docs/en/journeys-overview"},{"group":"Journey features","pages":[{"title":"Journey settings","href":"/docs/en/journeys-settings"},{"title":"Journey messages","href":"/docs/en/journeys-messages"},{"title":"Journey message A/B testing","sidebarTitle":"A/B testing","tag":"BETA","href":"/docs/en/journeys-ab-testing"},{"title":"Journey actions","href":"/docs/en/journeys-actions"},{"title":"Journey webhooks","href":"/docs/en/journeys-webhook"},{"title":"Send WhatsApp Messages via Journey Webhooks","href":"/docs/en/sending-whatsapp-messages-via-journey-webhooks"},{"title":"Managing journeys","href":"/docs/en/managing-journeys"},{"title":"Journey version history","tag":"NEW","href":"/docs/en/journeys-version-history"},{"title":"Journey analytics","href":"/docs/en/journeys-analytics"}]},{"title":"Journey examples","href":"/docs/en/journeys-examples"},{"title":"Control Journey membership with tags","href":"/docs/en/journeys-membership-tags"}]},{"group":"OneSignal AI","pages":[{"title":"OneSignal AI","tag":"BETA","href":"/docs/en/onesignal-ai"},{"title":"OneSignal AI skills","sidebarTitle":"Skills","tag":"BETA","href":"/docs/en/onesignal-ai-skills"},{"title":"Check message","tag":"BETA","href":"/docs/en/check-message"},{"title":"OneSignal Home","href":"/docs/en/onesignal-home"},{"title":"OneSignal MCP Server","href":"/docs/en/model-context-protocol"},{"title":"Manage Journeys with MCP","href":"/docs/en/mcp-journeys"},{"title":"OneSignal AI data practices","mode":"frame","href":"/docs/en/ai-data-practices"},{"title":"AI message composer","href":"/docs/en/ai-message-composer"},{"title":"OneSignal Slack Agent","hidden":true,"tag":"BETA","href":"/docs/en/slack-agent"}]},{"group":"Audience \u0026 events","pages":[{"title":"Segments","href":"/docs/en/segmentation"},{"title":"User-based segmentation","tag":"BETA","href":"/docs/en/user-based-segmentation"},{"group":"Users \u0026 Subscriptions","pages":[{"title":"Users","href":"/docs/en/users"},{"title":"Subscriptions","href":"/docs/en/subscriptions"},{"title":"Sessions","href":"/docs/en/sessions"},{"title":"User and Subscription Profiles","href":"/docs/en/user-subscription-profiles"},{"title":"Aliases","href":"/docs/en/aliases"},{"title":"Test users","href":"/docs/en/test-users"},{"title":"Delete users","href":"/docs/en/delete-users"}]},{"group":"Events","pages":[{"title":"Message events","href":"/docs/en/message-events"},{"title":"Session events","href":"/docs/en/session-events"},{"group":"Custom events","pages":[{"title":"Custom events","href":"/docs/en/custom-events"},{"title":"Custom event best practices","href":"/docs/en/custom-event-best-practices"},{"title":"Custom event storage and retention","href":"/docs/en/custom-event-storage"}]}]},{"group":"Tags","pages":[{"title":"Tags","href":"/docs/en/add-user-data-tags"},{"title":"Tags: Time Operators","href":"/docs/en/time-operators"}]},{"title":"Import","href":"/docs/en/import"}]},{"group":"Analytics \u0026 Integrations","pages":[{"group":"Analytics","pages":[{"title":"Analytics overview","href":"/docs/en/analytics-overview"},{"title":"Metrics glossary","href":"/docs/en/analytics-metrics-glossary"},{"title":"Goals","sidebarTitle":"Goals","tag":"BETA","href":"/docs/en/goals"},{"title":"Exporting data","href":"/docs/en/exporting-data"},{"title":"Template analytics","href":"/docs/en/template-analytics"},{"title":"Conversion metrics","href":"/docs/en/conversion-metrics"},{"title":"Engagement trends","href":"/docs/en/engagement-analytics"},{"title":"Subscription trends","href":"/docs/en/subscription-trends"},{"title":"Sessions volume","href":"/docs/en/sessions-volume"},{"group":"Retention metrics","pages":[{"title":"Retention metrics","href":"/docs/en/retention-metrics"},{"title":"Interpreting retention curves","href":"/docs/en/interpreting-retention-curves"}]},{"title":"Custom Outcomes","href":"/docs/en/custom-outcomes"}]},{"group":"Event Streams","pages":[{"title":"Event Streams","href":"/docs/en/event-streams"},{"title":"Event Stream data reference","sidebarTitle":"Event Stream data","href":"/docs/en/event-streams-data"},{"title":"In-app message event streams","href":"/docs/en/iam-event-streams"},{"title":"Google Sheets integration with Event Streams","href":"/docs/en/google-sheets-integration-with-event-streams"}]},{"group":"Integrations","pages":[{"title":"Integrations overview","href":"/docs/en/integrations"},{"title":"Data warehouse, DMP, \u0026 CRM integration","href":"/docs/en/database-dmp-crm-integration"},{"group":"OneSignal as data source","pages":[{"title":"Amplitude","href":"/docs/en/amplitude"},{"title":"Databricks","href":"/docs/en/databricks"},{"title":"Google BigQuery","href":"/docs/en/bigquery"},{"title":"Mixpanel","href":"/docs/en/mixpanel"},{"title":"Snowflake","href":"/docs/en/snowflake"},{"title":"Segment (Twilio)","href":"/docs/en/segment-onesignal-integration"}]},{"group":"OneSignal as destination","pages":[{"title":"Adobe Audience Manager","href":"/docs/en/adobe-audience-manager"},{"title":"AlloyDB","href":"/docs/en/alloydb"},{"title":"Amazon Athena","href":"/docs/en/amazon-athena"},{"title":"Amazon S3","href":"/docs/en/s3"},{"title":"Amplitude","href":"/docs/en/amplitude"},{"title":"Apache Kafka","href":"/docs/en/kafka"},{"title":"Amazon Redshift","href":"/docs/en/amazon-redshift"},{"title":"Azure Synapse","href":"/docs/en/azure-synapse"},{"title":"ClickHouse","href":"/docs/en/clickhouse"},{"title":"Confluent Cloud","href":"/docs/en/confluent-cloud"},{"title":"Databricks","href":"/docs/en/databricks"},{"title":"Elasticsearch","href":"/docs/en/elasticsearch"},{"title":"Google BigQuery","href":"/docs/en/bigquery"},{"title":"Google Cloud SQL","href":"/docs/en/google-cloud-sql"},{"title":"Google Sheets","href":"/docs/en/google-sheets"},{"title":"Greenplum","href":"/docs/en/greenplum"},{"title":"HubSpot","href":"/docs/en/hubspot"},{"title":"Materialize","href":"/docs/en/materialize"},{"title":"Microsoft Fabric","href":"/docs/en/microsoft-fabric"},{"title":"Mixpanel","href":"/docs/en/mixpanel"},{"title":"MotherDuck","href":"/docs/en/motherduck"},{"title":"MySQL","href":"/docs/en/mysql"},{"title":"PostgreSQL","href":"/docs/en/postgresql"},{"title":"Pub/Sub","href":"/docs/en/google-pubsub"},{"title":"SingleStore","href":"/docs/en/singlestore"},{"title":"Snowflake","href":"/docs/en/snowflake"},{"title":"SQL Server","href":"/docs/en/sql-server"},{"title":"Starburst Enterprise","href":"/docs/en/starburst-enterprise"},{"title":"Starburst Galaxy","href":"/docs/en/starburst-galaxy"},{"title":"Trino","href":"/docs/en/trino"},{"title":"Segment (Twilio)","href":"/docs/en/segment-onesignal-integration"}]},{"group":"Attribution","pages":[{"title":"RevenueCat","href":"/docs/en/revenuecat"},{"title":"Adjust","href":"/docs/en/adjust"},{"title":"BlueConic","href":"/docs/en/blueconic"}]},{"title":"Building an integration with OneSignal: partner guide","href":"/docs/en/building-an-integration-with-onesignal-partner-guide"}]}]},{"group":"Privacy \u0026 Security","pages":[{"group":"Security credentials","pages":[{"title":"SOC 2 Type II","href":"/docs/en/soc-2-type-ii"},{"title":"ISO 27001","href":"/docs/en/iso27001"},{"title":"HIPAA","href":"/docs/en/hipaa"}]},{"group":"Data privacy \u0026 regulatory compliance","pages":[{"title":"GDPR \u0026 Individual Rights","href":"/docs/en/gdpr-compliance"},{"title":"EU-US Data Privacy Framework","href":"/docs/en/eu-us-data-privacy-framework"},{"title":"Email regulatory compliance","href":"/docs/en/email-compliance"},{"title":"SMS regulatory compliance","href":"/docs/en/sms-regulatory-compliance"},{"title":"Apple App Privacy Requirements","href":"/docs/en/apple-app-privacy-requirements"},{"title":"Google Play Data Safety Requirements","href":"/docs/en/google-play-data-safety-requirements"},{"title":"Data collection \u0026 security FAQs","href":"/docs/en/data-questions"},{"title":"Data collected by the OneSignal SDK","href":"/docs/en/data-collected-by-the-onesignal-sdk"},{"title":"Handling personal data","href":"/docs/en/handling-personal-data"},{"title":"Data taxonomy","href":"/docs/en/data-taxonomy"},{"title":"OneSignal AI data practices","mode":"frame","href":"/docs/en/ai-data-practices"}]},{"group":"Authentication","pages":[{"title":"2-step authentication","href":"/docs/en/2-step-authentication"},{"title":"Single Sign-On (SSO)","href":"/docs/en/sso"}]}]}]},{"tab":"Developer Guides","pages":[{"title":"Developer Guides","href":"/docs/en/developers"}]},{"tab":"Tutorials","pages":[{"title":"Tutorials","href":"/docs/en/tutorials"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/reference/rest-api-overview"}]},{"tab":"Release Notes","pages":[{"title":"Release Notes","href":"/release-notes/changelog"}]},{"tab":"Customer Success Hub","pages":[{"title":"Customer Success Hub","href":"/docs/en/customer-success-hub"}]}],"global":{"anchors":[{"anchor":"Blog","icon":"newspaper","href":"https://onesignal.com/blog"},{"anchor":"GitHub","icon":"github","href":"https://github.com/OneSignal"},{"anchor":"YouTube","icon":"youtube","href":"https://www.youtube.com/@onesignalofficial/playlists"}]}},{"language":"cn","pages":[{"title":"cn","href":"/docs/cn/voip-notifications"}]},{"language":"ko","pages":[{"title":"ko","href":"/docs/ko/voip-notifications"}]},{"language":"ja","pages":[{"title":"ja","href":"/docs/ja/voip-notifications"}]},{"language":"tr","pages":[{"title":"tr","href":"/docs/tr/voip-notifications"}]},{"language":"pt-BR","pages":[{"title":"pt-BR","href":"/docs/pt-BR/voip-notifications"}]},{"language":"es","pages":[{"title":"es","href":"/docs/es/voip-notifications"}]},{"language":"fr","pages":[{"title":"fr","href":"/docs/fr/voip-notifications"}]}]},"basePath":"","title":"VoIP push notifications - OneSignal Documentation","buildId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","deploymentId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-5Xwp92K7.js","DynamicMarkdown-BoyYAA8K.js","zoom-image-lightbox-DkE6VzSN.js","lightbox-handle-r17bVUz3.js"]}