PealCast API
Version 1.0.0
The PealCast church-facing developer API — the follow-up engine for online church.
PealCast turns your live stream's anonymous crowd into named people with a verified phone
number, then hands your team a weekly Shepherd's Report of who to welcome (New Faces)
and who to quietly check on (Missed You). This API lets you read that same data
programmatically and manage your channels, audience, and go-live notifications.
## Authentication
Every request is authenticated with an opaque bearer token and every token is pinned to
exactly ONE church (organization). You create tokens in the app dashboard under
Developer / API tokens:
- pc_live_… — a production token (talks to https://api.pealcast.io).
- pc_test_… — a non-production token (talks to https://api.dev.pealcast.io).
Access is set per token: a read token can only call GET endpoints, while a
read/write token may also create and update. A read-only token that calls a write
endpoint receives 403 READ_ONLY_TOKEN.
## Player endpoints are public
The Player (public) endpoints power the watch page and take no authentication — they
return only what a viewer's browser is allowed to see.
## AI assistants (MCP)
An MCP server is available at mcp.pealcast.io so AI assistants (Claude and others)
can read your Shepherd's Report and audience with the same church-scoped token.
Base URLs
https://api.pealcast.io— Productionhttps://api.dev.pealcast.io— Development
Authentication
A PealCast API token (pc_live_… / pc_test_…). Create one in the app dashboard under Developer / API tokens. Every token is pinned to one church.
Authorization: Bearer pc_test_your_token_here
Audience
Your owned, verified audience — the real people (watchers/viewers) who have watched a stream, deduped by verified mobile number. A "watcher" (or "viewer") is a person who watched at least one broadcast.
/app/channel-viewersList a channel's viewers
Lists every known watcher for the channel — your owned, verified audience — with their first/last watch and total watch minutes.
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
| org | string | optional | The church (organization) id or slug. Optional — the token is already pinned to one church; supply this only to disambiguate. |
| slug | string | required | The channel slug. |
Example request
curl -X GET "https://api.dev.pealcast.io/app/channel-viewers?slug=sunday&org=your-church" \ -H "Authorization: Bearer pc_test_your_token_here"
Example response
{
"viewers": [
{
"subscriber_id": 123,
"name": "Jordan Rivera",
"mobile": "+15551234567",
"first_watch_at": "2026-07-11T14:30:00Z",
"last_watch_at": "2026-07-11T14:30:00Z",
"watch_minutes": 128
}
]
}Responses
UNAUTHENTICATED).403 · The token has no church, or is not permitted for this church (NO_ORG / FORBIDDEN_ORG / FORBIDDEN).404 · No such channel for this church (NO_CHANNEL)./app/viewerGet one viewer's full profile
Returns a single watcher's complete profile: their identity, lifetime totals, every watch session, any prayer/connect submissions, and the go-live notifications they've received.
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
| org | string | optional | The church (organization) id or slug. Optional — the token is already pinned to one church; supply this only to disambiguate. |
| slug | string | required | The channel slug. |
| id | integer | required | The subscriber (viewer) id. |
Example request
curl -X GET "https://api.dev.pealcast.io/app/viewer?slug=sunday&id=123&org=your-church" \ -H "Authorization: Bearer pc_test_your_token_here"
Example response
{
"subscriber": {
"id": 123,
"name": "Jordan Rivera",
"mobile": "+15551234567",
"email": "jordan@example.com",
"first_seen_at": "2026-07-11T14:30:00Z",
"last_seen_at": "2026-07-11T14:30:00Z"
},
"totals": {
"sessions": 42,
"watch_minutes": 128,
"avg_qoe": 91
},
"sessions": [
{
"broadcast_id": 123,
"date": "2026-07-11T14:30:00Z",
"watch_minutes": 128,
"completion": 0.82,
"qoe": 91,
"platform": "web"
}
],
"submissions": [
{
"type": "prayer",
"fields": {
"brand_color": "#0c1a2e"
},
"at": "2026-07-11T14:30:00Z"
}
],
"notifications": [
{
"integration_key": "native.sms",
"status": "sent",
"provider": "signalwire",
"sent_at": "2026-07-11T14:30:00Z"
}
]
}Responses
UNAUTHENTICATED).403 · The token has no church, or is not permitted for this church (NO_ORG / FORBIDDEN_ORG / FORBIDDEN).404 · No such channel or viewer (NO_CHANNEL / NO_VIEWER)./app/channel-archiveList a channel's recorded broadcasts
Lists the channel's recorded past broadcasts (VOD) within the plan's archive-retention window, with each recording's duration, playback URL, and watch stats.
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
| org | string | optional | The church (organization) id or slug. Optional — the token is already pinned to one church; supply this only to disambiguate. |
| slug | string | required | The channel slug. |
Example request
curl -X GET "https://api.dev.pealcast.io/app/channel-archive?slug=sunday&org=your-church" \ -H "Authorization: Bearer pc_test_your_token_here"
Example response
{
"retention_days": 90,
"recordings": [
{
"id": 123,
"date": "2026-07-11T14:30:00Z",
"ended_at": "2026-07-11T14:30:00Z",
"duration_minutes": 62.5,
"recording_status": "ready",
"cf_video_uid": "string",
"playback_hls_url": "https://…",
"watchers": 42,
"watch_minutes": 128,
"peak_concurrent": 42
}
]
}Responses
UNAUTHENTICATED).403 · The token has no church, or is not permitted for this church (NO_ORG / FORBIDDEN_ORG / FORBIDDEN).404 · No such channel for this church (NO_CHANNEL)./app/subscriberUpdate an audience member
Updates an audience member's (subscriber's) editable details. The person's verified
mobile number cannot be changed here — it is the dedupe key for your owned audience. Pass
an empty string to clear a field. Requires a read/write token (a read-only token
receives 403 READ_ONLY_TOKEN).
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
| org | string | optional | The church (organization) id or slug. Optional — the token is already pinned to one church; supply this only to disambiguate. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
| id | integer | required | The subscriber (audience member) id. |
| first_name | string | optional | The member's first name. Empty string clears it. |
| last_name | string | optional | The member's last name. Empty string clears it. |
| string | optional | The member's email. Empty string clears it. |
Example request
curl -X POST "https://api.dev.pealcast.io/app/subscriber?org=your-church" \
-H "Authorization: Bearer pc_test_your_token_here" \
-H "Content-Type: application/json" \
-d '{
"id": 123
}'Example response
{
"ok": true,
"subscriber": {
"id": 123,
"first_name": "Jordan",
"last_name": "Rivera",
"full_name": "Jordan Rivera",
"mobile": "+15551234567",
"mobile_verified": true,
"email": "jordan@example.com",
"email_verified": true,
"source": "watch_gate",
"created_at": "2026-07-11T14:30:00Z"
}
}Responses
UNAUTHENTICATED).403 · A read-only token attempted a write (READ_ONLY_TOKEN); may also be FORBIDDEN_ORG/FORBIDDEN.404 · No such audience member for this church (NO_SUBSCRIBER).422 · Invalid field value (INVALID).Shepherd's Report
The weekly follow-up engine: New Faces (new watchers to welcome) and Missed You (drifting watchers to check on), each with a name and a verified phone number, plus the controls to send it on demand.
/app/channel-analyticsGet a channel's Shepherd's Report and analytics
Returns the channel's rollup for the requested window: a summary (unique viewers, watch
minutes, average QoE, broadcasts) plus the two Shepherd's Report queues —
new_watchers (New Faces, people to welcome) and drifting_watchers
(Missed You, regulars who have gone quiet).
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
| org | string | optional | The church (organization) id or slug. Optional — the token is already pinned to one church; supply this only to disambiguate. |
| slug | string | required | The channel slug. |
| range | 7 | 30 | 90 | 365 | optional | The report window, in days. |
Example request
curl -X GET "https://api.dev.pealcast.io/app/channel-analytics?slug=sunday&org=your-church&range=30" \ -H "Authorization: Bearer pc_test_your_token_here"
Example response
{
"range_days": 30,
"summary": {
"unique_viewers": 42,
"anon_sessions": 42,
"watch_minutes": 128,
"avg_qoe": 91,
"broadcasts": 42,
"subscriber_count": 42
},
"new_watchers": [
{
"subscriber_id": 123,
"name": "Jordan Rivera",
"mobile": "+15551234567",
"first_watch_at": "2026-07-11T14:30:00Z",
"last_watch_at": "2026-07-11T14:30:00Z",
"watch_minutes": 128
}
],
"drifting_watchers": [
{
"subscriber_id": 123,
"name": "Jordan Rivera",
"mobile": "+15551234567",
"first_watch_at": "2026-07-11T14:30:00Z",
"last_watch_at": "2026-07-11T14:30:00Z",
"watch_minutes": 128
}
]
}Responses
UNAUTHENTICATED).403 · The token has no church, or is not permitted for this church (NO_ORG / FORBIDDEN_ORG / FORBIDDEN).404 · No such channel for this church (NO_CHANNEL)./app/send-reportSend the Shepherd's Report now
Sends the church's Shepherd's Report immediately (out of cadence) to the online-ministry
team. Requires a read/write token (a read-only token receives 403 READ_ONLY_TOKEN).
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
| org | string | optional | The church (organization) id or slug. Optional — the token is already pinned to one church; supply this only to disambiguate. |
Example request
curl -X POST "https://api.dev.pealcast.io/app/send-report?org=your-church" \ -H "Authorization: Bearer pc_test_your_token_here"
Example response
{
"ok": true,
"message": "Your Shepherd's Report is on its way."
}Responses
UNAUTHENTICATED).403 · A read-only token attempted a write (READ_ONLY_TOKEN); may also be FORBIDDEN_ORG/FORBIDDEN.Channels
A church's streaming channels — broadcast (one-to-many service) or conference (two-way prayer line) — and their encoder/ingest configuration.
/app/channelsList the church's channels
Returns the church's channels as a lightweight navigation list (slug, name, type, live status).
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
| org | string | optional | The church (organization) id or slug. Optional — the token is already pinned to one church; supply this only to disambiguate. |
Example request
curl -X GET "https://api.dev.pealcast.io/app/channels?org=your-church" \ -H "Authorization: Bearer pc_test_your_token_here"
Example response
{
"channels": [
{
"slug": "main-service",
"id": 123,
"name": "Main Service",
"type": "broadcast",
"is_live": true
}
]
}Responses
UNAUTHENTICATED).403 · The token has no church, or is not permitted for this church (NO_ORG / FORBIDDEN_ORG / FORBIDDEN)./app/channelsCreate a channel
Creates a new channel for the church and provisions its Cloudflare Stream live input.
Requires a read/write token (a read-only token receives 403 READ_ONLY_TOKEN). Fails
with 402 CHANNEL_LIMIT when the church's plan channel allotment is already used.
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
| org | string | optional | The church (organization) id or slug. Optional — the token is already pinned to one church; supply this only to disambiguate. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | required | Display name for the channel. |
| type | broadcast | conference | optional | broadcast = one-to-many service stream; conference = two-way prayer line.
|
Example request
curl -X POST "https://api.dev.pealcast.io/app/channels?org=your-church" \
-H "Authorization: Bearer pc_test_your_token_here" \
-H "Content-Type: application/json" \
-d '{
"name": "Main Service"
}'Example response
{
"slug": "main-service",
"id": 123,
"name": "Jordan Rivera",
"type": "broadcast",
"description": "string",
"timezone": "America/New_York",
"is_live": true,
"gate_enabled": true,
"gate_free_watch_seconds": 30,
"recording_retention_days": 60,
"retention_min_days": 30,
"retention_max_days": 90,
"subscriber_count": 42,
"created_at": "2026-07-11T14:30:00Z",
"stream_info": {
"cf_status": "ready",
"provisioned": true,
"rtmps_url": "rtmps://live.cloudflare.com:443/live/",
"rtmps_stream_key": "string",
"srt_url": "srt://live.cloudflare.com:778",
"srt_stream_key": "string",
"hls_playback_url": "https://…",
"sms_from_number": "+15551234567"
}
}Responses
BAD_NAME).401 · Missing or invalid token (UNAUTHENTICATED).402 · The plan's channel allotment is used up (CHANNEL_LIMIT).403 · A read-only token attempted a write (READ_ONLY_TOKEN); may also be FORBIDDEN_ORG/FORBIDDEN./app/channelGet one channel
Returns a single channel's full configuration, including its stream_info — the encoder/ingest settings (RTMPS/SRT URLs and keys, HLS playback URL) your church uses to go live.
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
| org | string | optional | The church (organization) id or slug. Optional — the token is already pinned to one church; supply this only to disambiguate. |
| slug | string | required | The channel slug. |
Example request
curl -X GET "https://api.dev.pealcast.io/app/channel?slug=sunday&org=your-church" \ -H "Authorization: Bearer pc_test_your_token_here"
Example response
{
"slug": "main-service",
"id": 123,
"name": "Jordan Rivera",
"type": "broadcast",
"description": "string",
"timezone": "America/New_York",
"is_live": true,
"gate_enabled": true,
"gate_free_watch_seconds": 30,
"recording_retention_days": 60,
"retention_min_days": 30,
"retention_max_days": 90,
"subscriber_count": 42,
"created_at": "2026-07-11T14:30:00Z",
"stream_info": {
"cf_status": "ready",
"provisioned": true,
"rtmps_url": "rtmps://live.cloudflare.com:443/live/",
"rtmps_stream_key": "string",
"srt_url": "srt://live.cloudflare.com:778",
"srt_stream_key": "string",
"hls_playback_url": "https://…",
"sms_from_number": "+15551234567"
}
}Responses
UNAUTHENTICATED).403 · The token has no church, or is not permitted for this church (NO_ORG / FORBIDDEN_ORG / FORBIDDEN).404 · No such channel for this church (NO_CHANNEL)./app/channel-settingsUpdate a channel's settings
Updates a channel's editable settings. The channel's slug and type are structural and
are not editable here. Any omitted field is left unchanged. Requires a read/write
token (a read-only token receives 403 READ_ONLY_TOKEN).
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
| org | string | optional | The church (organization) id or slug. Optional — the token is already pinned to one church; supply this only to disambiguate. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
| slug | string | required | The channel slug (identifies which channel to update). |
| name | string | optional | Display name for the channel. |
| description | string | optional | A short public description of the channel. |
| timezone | string | optional | IANA timezone name. |
| gate_enabled | boolean | optional | Whether the capture gate is active for this channel. |
| gate_free_watch_seconds | integer | optional | Seconds a viewer may watch before the gate prompts. |
| recording_retention_days | integer | optional | Recording auto-delete window (days). Clamped to [30, the plan's archive cap]; the change is pushed to Cloudflare as deleteRecordingAfterDays. |
Example request
curl -X POST "https://api.dev.pealcast.io/app/channel-settings?org=your-church" \
-H "Authorization: Bearer pc_test_your_token_here" \
-H "Content-Type: application/json" \
-d '{
"slug": "main-service"
}'Example response
{
"ok": true,
"channel": {
"slug": "main-service",
"id": 123,
"name": "Jordan Rivera",
"type": "broadcast",
"description": "string",
"timezone": "America/New_York",
"is_live": true,
"gate_enabled": true,
"gate_free_watch_seconds": 30,
"recording_retention_days": 60,
"retention_min_days": 30,
"retention_max_days": 90,
"subscriber_count": 42,
"created_at": "2026-07-11T14:30:00Z",
"stream_info": {
"cf_status": "ready",
"provisioned": true,
"rtmps_url": "rtmps://live.cloudflare.com:443/live/",
"rtmps_stream_key": "string",
"srt_url": "srt://live.cloudflare.com:778",
"srt_stream_key": "string",
"hls_playback_url": "https://…",
"sms_from_number": "+15551234567"
}
}
}Responses
UNAUTHENTICATED).403 · A read-only token attempted a write (READ_ONLY_TOKEN); may also be FORBIDDEN_ORG/FORBIDDEN.404 · No such channel for this church (NO_CHANNEL).422 · Invalid field value (INVALID).Notifications
Go-live notifications and the delivery integrations behind them (our SMS/email, Planning Center, custom domain) — who is subscribed and what has been sent.
/app/channel-notificationsGet a channel's notifications overview
Returns who is subscribed to go-live notifications for the channel, broken down by delivery integration, plus recently sent notifications and recent unsubscribes.
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
| org | string | optional | The church (organization) id or slug. Optional — the token is already pinned to one church; supply this only to disambiguate. |
| slug | string | required | The channel slug. |
Example request
curl -X GET "https://api.dev.pealcast.io/app/channel-notifications?slug=sunday&org=your-church" \ -H "Authorization: Bearer pc_test_your_token_here"
Example response
{
"totals": {
"subscribers": 42,
"subscriptions": 42,
"unsubscribes": 42
},
"by_integration": [
{
"key": "native.sms",
"label": "Text message",
"count": 42
}
],
"people": [
{
"subscriber_id": 123,
"name": "Jordan Rivera",
"mobile": "+15551234567",
"integrations": [
"native.sms",
"native.email"
]
}
],
"recent": [
{
"integration_key": "native.sms",
"status": "ready",
"provider": "signalwire",
"subscriber_id": 123,
"sent_at": "2026-07-11T14:30:00Z",
"created_at": "2026-07-11T14:30:00Z"
}
],
"unsubscribes": [
{
"subscriber_id": 123,
"name": "Jordan Rivera",
"mobile": "+15551234567",
"integration_key": "native.sms",
"unsubscribed_at": "2026-07-11T14:30:00Z"
}
]
}Responses
UNAUTHENTICATED).403 · The token has no church, or is not permitted for this church (NO_ORG / FORBIDDEN_ORG / FORBIDDEN).404 · No such channel for this church (NO_CHANNEL)./app/channel-integrationsGet a channel's connected integrations
Returns the channel's connected systems — Planning Center status, custom-domain entitlement/hostname, and the list of notification-delivery integrations available to this church.
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
| org | string | optional | The church (organization) id or slug. Optional — the token is already pinned to one church; supply this only to disambiguate. |
| slug | string | required | The channel slug. |
Example request
curl -X GET "https://api.dev.pealcast.io/app/channel-integrations?slug=sunday&org=your-church" \ -H "Authorization: Bearer pc_test_your_token_here"
Example response
{
"planning_center": {
"connected": true,
"status": "connected",
"display_name": "First Baptist (Planning Center)",
"last_synced_at": "2026-07-11T14:30:00Z"
},
"custom_domain": {
"entitled": true,
"hostname": "watch.firstbaptist.org",
"cname_target": "player.pealcast.io"
},
"available_notification_integrations": [
{
"key": "native.sms",
"label": "Text message",
"medium": "sms",
"available": true
}
]
}Responses
UNAUTHENTICATED).403 · The token has no church, or is not permitted for this church (NO_ORG / FORBIDDEN_ORG / FORBIDDEN).404 · No such channel for this church (NO_CHANNEL).Account
Your church's plan, trial/billing state, and Shepherd's Report scheduling preferences.
/app/accountGet the church's account and plans
Returns the church's billing/trial state, the catalog of plans, and the Stripe publishable key used by the dashboard to collect a card.
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
| org | string | optional | The church (organization) id or slug. Optional — the token is already pinned to one church; supply this only to disambiguate. |
Example request
curl -X GET "https://api.dev.pealcast.io/app/account?org=your-church" \ -H "Authorization: Bearer pc_test_your_token_here"
Example response
{
"account": {
"state": "active",
"status": "Trial — 9 days left",
"trial_ends_at": "2026-07-11T14:30:00Z",
"trial_days_left": 9,
"has_payment_method": true,
"is_founding_member": true,
"founding_intro_active": true,
"founding_discount_until": "string",
"locked_price_cents": 42,
"plan": {
"code": "medium",
"name": "Medium"
},
"next_bill_at": "2026-07-11T14:30:00Z"
},
"plans": [
{
"code": "medium",
"name": "Medium",
"tagline": "For a growing online congregation",
"founding": true,
"is_custom": true,
"price_cents": 9900,
"price_cents_annual": 99000,
"setup_fee_cents": 4900,
"trial_days": 14,
"watchers": 30,
"watchers_label": "~30 watchers",
"included_minutes": 8000,
"channels_included": 2,
"overage_block_minutes": 500,
"overage_block_cents": 2000,
"minutes_note": "One watcher ≈ 60 minutes a week × 4 weeks = about 240 minutes a month, pooled across your whole church.",
"overage_note": "$20 per 500 extra minutes or archive",
"archive_retention_days": 60,
"archive_label": "About 2 months",
"support_tier": "email+phone",
"dedicated_sms": true,
"dedicated_email": true,
"dedicated_domain": true
}
],
"publishable_key": "pk_live_51ABC…"
}Responses
UNAUTHENTICATED).403 · The token has no church, or is not permitted for this church (NO_ORG / FORBIDDEN_ORG / FORBIDDEN)./app/report-settingsGet Shepherd's Report schedule settings
Returns when the church's weekly Shepherd's Report is delivered (day, hour, timezone) plus the list of selectable timezones.
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
| org | string | optional | The church (organization) id or slug. Optional — the token is already pinned to one church; supply this only to disambiguate. |
Example request
curl -X GET "https://api.dev.pealcast.io/app/report-settings?org=your-church" \ -H "Authorization: Bearer pc_test_your_token_here"
Example response
{
"enabled": true,
"wday": 0,
"hour": 9,
"timezone": "America/New_York",
"last_sent_at": "2026-07-11T14:30:00Z",
"timezones": [
"America/New_York",
"America/Chicago"
]
}Responses
UNAUTHENTICATED).403 · The token has no church, or is not permitted for this church (NO_ORG / FORBIDDEN_ORG / FORBIDDEN)./app/report-settingsUpdate Shepherd's Report schedule settings
Updates when the weekly Shepherd's Report is delivered. Any omitted field is left unchanged.
Requires a read/write token (a read-only token receives 403 READ_ONLY_TOKEN).
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
| org | string | optional | The church (organization) id or slug. Optional — the token is already pinned to one church; supply this only to disambiguate. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
| enabled | boolean | optional | Whether the weekly report is sent at all. |
| wday | integer | optional | Day of week (0 = Sunday … 6 = Saturday). |
| hour | integer | optional | Hour of day (local to timezone). |
| timezone | string | optional | IANA timezone name. |
Example request
curl -X POST "https://api.dev.pealcast.io/app/report-settings?org=your-church" \
-H "Authorization: Bearer pc_test_your_token_here" \
-H "Content-Type: application/json" \
-d '{
"enabled": true,
"wday": 0,
"hour": 9,
"timezone": "America/New_York"
}'Example response
{
"enabled": true,
"wday": 0,
"hour": 9,
"timezone": "America/New_York",
"last_sent_at": "2026-07-11T14:30:00Z"
}Responses
UNAUTHENTICATED).403 · A read-only token attempted a write (READ_ONLY_TOKEN); may also be FORBIDDEN_ORG/FORBIDDEN./app/organizationUpdate the church's details
Updates the church's (organization's) editable details. Billing, status, plan, and slug
are not editable here. Any omitted field is left unchanged. Requires a read/write
token (a read-only token receives 403 READ_ONLY_TOKEN).
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
| org | string | optional | The church (organization) id or slug. Optional — the token is already pinned to one church; supply this only to disambiguate. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | optional | The church's display name. |
| timezone | string | optional | IANA timezone name. |
Example request
curl -X POST "https://api.dev.pealcast.io/app/organization?org=your-church" \
-H "Authorization: Bearer pc_test_your_token_here" \
-H "Content-Type: application/json" \
-d '{
"name": "First Baptist",
"timezone": "America/New_York"
}'Example response
{
"ok": true,
"organization": {
"id": 123,
"name": "Jordan Rivera",
"slug": "main-service",
"role": "string",
"status": "ready",
"timezone": "America/New_York"
}
}Responses
UNAUTHENTICATED).403 · A read-only token attempted a write (READ_ONLY_TOKEN); may also be FORBIDDEN_ORG/FORBIDDEN.422 · Invalid field value (INVALID).Player (public)
Public, unauthenticated endpoints that power the watch page — live status, playback URL, and the church's public channel list.
/player/channel-playbackpublicGet a channel's live playback state
Public (no auth). Returns the current live state and playback URL for a channel, plus the gate configuration and the notification methods a viewer can opt into. This is what the watch page calls to render the player.
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
| c | string | required | The channel slug or id. |
| t | string | optional | A signed watch token that pre-identifies the viewer (from a notification link). |
| host | string | optional | The watch host (used to resolve a custom domain). |
| org | string | optional | The church (organization) id or slug. Optional — the token is already pinned to one church; supply this only to disambiguate. |
Example request
curl -X GET "https://api.dev.pealcast.io/player/channel-playback?c=sunday&t=signed-watch-token&host=watch.firstbaptist.org"
Example response
{
"is_live": true,
"broadcast_id": 123,
"hls_url": "https://…",
"gate_enabled": true,
"gate_free_watch_seconds": 30,
"notification_methods": [
{
"key": "native.sms",
"label": "Text message",
"medium": "sms"
}
],
"theme": {
"brand_color": "#0c1a2e"
}
}Responses
NO_CHANNEL)./player/orgpublicGet a church's public player profile
Public (no auth). Resolves a church by custom-domain host or slug and returns its public profile plus the list of channels a viewer can watch.
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
| host | string | optional | The watch host (used to resolve a custom domain). |
| slug | string | optional | The church (organization) slug. |
Example request
curl -X GET "https://api.dev.pealcast.io/player/org?host=watch.firstbaptist.org&slug=sunday"
Example response
{
"org": {
"name": "Jordan Rivera",
"slug": "main-service",
"custom_domain": "string",
"theme": {
"brand_color": "#0c1a2e"
}
},
"channels": [
{
"slug": "main-service",
"name": "Jordan Rivera",
"type": "broadcast",
"is_live": true,
"theme": {
"brand_color": "#0c1a2e"
}
}
]
}Responses
NO_ORG).Get your API token
Create a free account, open Developer / API tokens, and start building in minutes.
Free 14-day trial · no credit card · cancel anytime.