> Fetch clean Markdown by appending `.md` to any page URL under https://signalwire.com/docs or requesting it with the HTTP header `Accept: text/markdown`. The root index at https://signalwire.com/docs/llms.txt lists the available documentation indexes. # Subscribers > Comprehensive overview of SignalWire Subscribers - the building blocks of Programmable Unified Communications for user management and onboarding. [resources]: /docs/platform/resources [create-subscribers]: /docs/platform/resources#create [resource-addresses]: /docs/platform/addresses [browser-sdk]: /docs/browser-sdk/v4/guides/overview [rest-api]: /docs/apis ## What are subscribers? Subscribers are the core [Resources][resources] on SignalWire that represent users in your communication system. More than just a simple user account, Subscribers provide a complete user management solution with built-in authentication, communication endpoints, and billing integration. Subscribers represent users in your communication system with enterprise-grade capabilities built-in. They embody SignalWire's approach to **Programmable Unified Communications (PUC)**, enabling you to onboard and manage users at scale without building complex infrastructure from scratch. ## What's included Every Subscriber comes with four core components that work together to provide a complete user management solution: #### Identity & authentication Secure user management with industry-standard credential storage for usernames and passwords. Extensible profile system for names, emails, company details, timezones, and locations. #### Communication endpoints Multi-channel connectivity with private resource address for internal communication plus public phone numbers for external calls. Full SIP, WebRTC, and PSTN support. #### Flexible configuration Customizable codec settings, encryption options, and SIP/WebRTC protocols. Configurable communication preferences and routing rules. ## How it works Subscribers are built on three core technical systems: ### Resource addressing Subscribers use SignalWire's unified addressing system for consistent identification across all platform [Resources][resources]. Each Subscriber is uniquely identified by an address in the format `//`. **Addresses make Subscribers directly callable.** When a call is placed to a Subscriber's address, SignalWire automatically routes the call directly to that Subscriber. This enables seamless peer-to-peer communication without complex routing configuration. **Common address examples:** | Address | Description | | :---------------------------- | :------------------------------- | | `/private/john-doe` | Direct dial to John's devices | | `/public/support-agent` | Publicly accessible support line | | `/private/jane?channel=video` | Video call to Jane | **How direct calling works:** * When someone calls `/private/john-doe`, the call rings John's registered device * The Subscriber can answer on any device (mobile app, web browser, desk phone) * SignalWire handles device registration, presence, and simultaneous ring automatically Subscribers default to `private` context for security, with optional public aliases for external access. Learn more about [Resource Addresses][resource-addresses], including contexts, naming conventions, and advanced routing options. ### Authentication system Multiple token types provide flexible security and integration options: #### [Subscriber Tokens](/docs/apis/rest/subscribers/tokens/create-subscriber-token) **Standard user authentication** For End Users: Issued during login, provide access to user-specific resources. Perfect for web and mobile app authentication flows. #### [Guest Tokens](/docs/apis/rest/subscribers/tokens/create-subscriber-guest-token) **Temporary guest access** For Guest Users: Allows Subscribers to create guest tokens that provide temporary access to specific Resource addresses. The guest token creates a temporary subscriber with limited permissions to access only the specified `allowed_address`. #### [Invite Tokens](/docs/apis/rest/subscribers/tokens/create-subscriber-invite-token) **Client-side API access** For Client Applications: Creates a Subscriber Invite Token that enables client-side bearer token authentication for API calls. #### [Refresh Tokens](/docs/apis/rest/subscribers/tokens/refresh-subscriber-token) **Session management** For Seamless Experience: Handle automatic token renewal and session management without frequent re-authentication. ### API management Complete REST API with full CRUD operations for programmatic control: #### [Create Subscriber](/docs/apis/rest/subscribers/create-subscriber) **Create new subscribers** Individual or bulk creation with profile data, credentials, and configuration settings. #### [Retrieve Subscriber](/docs/apis/rest/subscribers/get-subscriber) **Get subscriber details** Fetch individual Subscriber information, settings, and current status. #### [Update Subscriber](/docs/apis/rest/subscribers/update-subscriber) **Modify subscriber data** Update profile information, settings, credentials, and configuration options. #### [Remove Subscriber](/docs/apis/rest/subscribers/delete-subscriber) **Delete subscribers** Remove Subscribers and associated data with proper cleanup and notifications. Bulk operations handle large user populations efficiently, while webhooks provide real-time notifications for lifecycle events, authentication, and communication activities. ## Integration example Here's how Subscribers work in practice with the [Browser SDK][browser-sdk]: #### Authentication ```javascript import { SignalWire, StaticCredentialProvider } from "@signalwire/js"; // Hand the Subscriber Access Token to the SDK via a credential provider. const client = new SignalWire( new StaticCredentialProvider({ token: "" }) ); // Watch the readiness observables to know when the client is connected. client.ready$.subscribe((ready) => { console.log("SignalWire client ready:", ready); }); ``` #### Making calls ```javascript import { SignalWire, StaticCredentialProvider } from "@signalwire/js"; const client = new SignalWire( new StaticCredentialProvider({ token: "" }) ); // Dial another subscriber by address. const call = await client.dial("/private/jane-doe", { audio: true, video: true, }); // React to call status changes (ringing, connecting, connected, disconnected). call.status$.subscribe((status) => { console.log("Call status:", status); }); // Attach the remote media to a