PolyMessaging) and live two-way voice calls (PolyVoice).
The iOS SDK wraps the Messaging API. All WebSocket events, streaming, and handoff behavior documented in the API reference apply.
Source on GitHub
polyai/ios-sdk — Swift package, CocoaPods, and example apps.
How it works
The SDK handles authentication, session management, WebSocket connections, and reconnection logic. Your app sends and receives messages through the SDK and renders them however you choose. Voice calling ships as a separate product,PolyVoice, so chat-only apps never link the WebRTC binary. It reuses the messaging Configuration and the same CallState / PolyError vocabulary, so there are no new concepts to learn if you already run chat. See Voice calling (iOS) for the full guide.
1
Install the SDK
Add the SDK to your project via Swift Package Manager or CocoaPods.
2
Configure authentication
Add your API key (from Agent Studio) and register your app’s bundle identifier in Agent Studio. The backend rejects connections from unregistered bundle identifiers.
3
Start a session
Initialize the SDK and start a messaging session. The SDK handles access token exchange and WebSocket connection automatically.
4
Build your UI
Listen for incoming messages and events from the SDK, and send user messages through it. Render the conversation in your own UI components.
Requirements
PolyMessaging (chat) also supports macOS; PolyVoice is iOS-only.
Installation
The SDK is pre-1.0, so a minor version bump is allowed to include breaking changes. Always pin to the next minor version — don’t use Xcode’s default “Up to Next Major” rule.- Swift Package Manager
- CocoaPods
In Xcode, go to File > Add Package Dependencies and enter the repository URL:Set the Dependency Rule to Up to Next Minor Version from
0.9.0, then tick the PolyMessaging library for your app target. If you’re using voice calling, also tick PolyVoice — it’s a separate product and isn’t added automatically.Or in Package.swift:Authentication setup
The iOS SDK authenticates using a connector token and your app’s bundle identifier.1
Generate a connector token
In Agent Studio, go to Connector Settings and generate a connector token for your agent.
2
Register your bundle identifier
When generating the token, set the host identifier to your app’s bundle identifier (e.g.
com.yourcompany.app). This must match the CFBundleIdentifier in your app’s Info.plist. The backend rejects connections from apps with a mismatched bundle identifier.Key features
Session persistence
Sessions persist across app launches. If the user leaves and returns, the SDK reconnects to the existing session and replays the conversation history automatically. Network changes (Wi-Fi to cellular, brief drops) are handled with automatic reconnection and retry.Streaming responses
Enable streaming when creating a session to show agent responses as they’re generated, word by word. The SDK surfaces streaming chunks as they arrive — your UI can render them incrementally.Handoff to live agents
The full handoff flow is supported. When the PolyAI agent triggers a handoff, the SDK delivers the same handoff events (HANDOFF_ACCEPTED, HANDOFF_QUEUE_STATUS, LIVE_AGENT_JOINED, etc.) so your app can show queue status and live agent messages.
Response suggestions
Agent messages can includeresponse_suggestions — pre-written reply options. Render these as tappable buttons in your UI. When the user taps one, send its text as a message through the SDK.
Attachments
Agent messages may include rich content like links and images via theattachments field. Render these inline in your chat UI.
Voice calling
PolyVoice places live, two-way WebRTC voice calls to the same agent that powers your chat. Calls are user-initiated: the user taps to call your agent. Call PolyVoice.call from the main actor:
NSMicrophoneUsageDescription — a call without it crashes, it doesn’t fail gracefully) and the audio background mode so calls survive backgrounding. Beyond that the SDK handles the hard parts for you: accessory-aware audio routing (headsets and Bluetooth are used automatically, with a speaker/earpiece toggle for the user), automatic reconnection on transient network drops, and graceful handling of interruptions like incoming phone calls. Optional CallKit support runs the call as a system call, with lock-screen controls and phone-call audio priority — it requires specific delegate wiring, covered on the voice page.
Voice calling (iOS)
The full voice guide: installation, credentials, CallKit integration, audio routing, resilience, and troubleshooting.
Platform values
The platform identifier is sent automatically when the session is created, alongside adevice_type (mobile / tablet). It identifies the device, not the channel — for the channel a conversation arrives on, see Multichannel below.
Limitations
Multichannel
The iOS SDK connects to the same agent project as your voice and webchat channels. Agent behavior, knowledge, and flows are shared — only channel-specific settings (greetings, formatting) differ. See multichannel agents for how to tailor behavior per channel. Two values tell your agent where a conversation came from, and they answer different questions:conv.channel_typeidentifies the channel. Its possible values arewebchat.polyai,chat.polyai,sms.twilio,sms.polyai,rcs.polyai,whatsapp.polyai, andsip.polyai— it is never"ios"or"android".platformidentifies the device: the SDK sendsplatform: "ios"(alongsidedevice_type) when the session is created. Use this to tailor behavior for native app users.
Related pages
Voice calling (iOS)
WebRTC voice calls with PolyVoice: setup, CallKit, audio routing, and troubleshooting
Messaging API reference
Full WebSocket protocol, events, streaming, and handoff
Sessions and authentication
Access tokens, session creation, and platform values
Multichannel agents
Build agents that work across voice, webchat, and mobile

