Your watch page, step by step
For webinars, town halls, launches and any stream you want to send people to without building a page: a share link opens plycdn's watch page, where anyone with the link watches the stream, with no account, no sign-in and nothing from your backend. This page takes you from a first link to a page in your own colours, on your own address, or inside a page of your site. Every rule and field is in the reference: Share a live stream, Brand your watch page, Use your own domain for watch pages, and in the API reference Share links, Watch page brand and Watch domains.
You need: live streaming in your plan, and a live stream (Live streaming, step by step). Everything here can be done in the dashboard; from code it needs an admin key, on your server.
1How it works
- A share link belongs to one live stream. Viewers who open it see Starting soon until you are on air, then the stream a few seconds behind, then This stream has ended and the recording if you want it shown.
- The brand is how every watch page of your organization looks: your logo, colours, layout, words and a button back to your site. A link can change its own title, description, sentences and layout.
- A watch domain is an address of yours, such as
live.example.com, on which every link also opens. - The watch page draws your player logo and a watermark of your fixed text and the date and time (when the watermark shows them) over the stream, as set in Account → Branding. It is never required there: a share link is a public link you chose to give out.
2Make a share link
In the dashboard: Live streaming → Live streams → open the stream → Share → New link. All settings are optional:
- Name: your own name for the link, to tell links apart (only your team sees it).
- Password: Ask for a password (4 to 128 characters), and viewers enter it before they can watch. Share it separately from the link.
- Stops working at: from then on the link answers "This link is not available".
- Show the recording after the stream: the link plays the replay once it is ready (on by default).
- Appearance: a Title, Description and Layout for this link only; left empty, each follows the watch page.
Choose Make link, then copy the address under Your link is ready. An input can have up to 50 links, for example one per audience. A link you turn off, let expire or delete stops at once, even for people already watching.
From your code:
POST /api/content/v1/live-inputs/{liveInputId}/share-links
{"label": "Town hall, all staff", "password": "meeting-2026", "expiresAt": "2026-12-01T10:00:00Z", "showRecording": true}
ASP.NET Core
ShareLink link = await videos.CreateShareLinkAsync(orgId, liveInputId, new CreateShareLinkRequest(
Label: "Town hall, all staff", Password: "meeting-2026", ExpiresAt: DateTimeOffset.UtcNow.AddDays(7), ShowRecording: true));
// link.Url is the address to give viewers; link.Urls also lists it on each of your watch domains.
Node.js
const link = await video.createShareLink(orgId, liveInputId, {
link: { label: 'Town hall, all staff', password: 'meeting-2026', expiresAt: new Date(Date.now() + 7 * 86_400_000), showRecording: true },
});
Python
link = video.create_share_link(org_id, live_input_id, link={
"label": "Town hall, all staff", "password": "meeting-2026", "expiresAt": "2026-12-01T10:00:00Z", "showRecording": True,
})
The password is never shown again: hasPassword says whether there is one. To turn a link off, update it with
disabled: true (UpdateShareLinkAsync, updateShareLink, update_share_link).
3Make it look like yours
In the dashboard: Account → Branding → Watch page. Set the Logo and its Logo size, Colours and layout (Theme, Accent, Background, Layout: standard, side panel or cinema), Words (Title, Description and the sentences shown before the stream, after it and above the password box) and Links (Site button address, Button text and up to three Footer links). The preview beside the settings is the page viewers see. Save.
The logo uploaded here is the same image as your player logo (Player logo tab), and the watermark on the page follows the Watermark tab: see Viewer watermark and your logo. A sub-organization shows its parent organization's brand until it saves its own.
From your code:
PUT /api/content/v1/watch-brand
{"accentColor": "#c2410c", "theme": "dark", "layout": "side_panel", "title": "Acme Summit",
"messages": {"starting": "Doors open soon"}, "siteUrl": "https://acme.example/", "siteLabel": "Visit Acme"}
ASP.NET Core
await videos.UpdateWatchBrandAsync(orgId, new UpdateWatchBrandRequest
{
AccentColor = "#c2410c", Layout = WatchLayouts.SidePanel, Title = "Acme Summit",
Messages = new WatchMessages(Starting: "Doors open soon"), SiteUrl = "https://acme.example/", SiteLabel = "Visit Acme",
});
await videos.UploadWatchBrandLogoAsync(orgId, File.OpenRead("logo.png"), "image/png");
Node.js
await video.updateWatchBrand(orgId, {
accentColor: '#c2410c', layout: 'side_panel', title: 'Acme Summit',
messages: { starting: 'Doors open soon' }, siteUrl: 'https://acme.example/', siteLabel: 'Visit Acme',
});
Python
video.update_watch_brand(org_id, {
"accentColor": "#c2410c", "layout": "side_panel", "title": "Acme Summit",
"messages": {"starting": "Doors open soon"}, "siteUrl": "https://acme.example/", "siteLabel": "Visit Acme",
})
Everything is plain text. A field you leave out keeps its value; null returns it to the built-in one.
4Open links on your own address
In the dashboard: Live streaming → Watch page → Watch domains → Add domain. Type a subdomain such as
live.example.com (a bare example.com is refused: redirect it to a subdomain at your DNS provider), then create the two
CNAME records the domain's page lists, unproxied. plycdn looks for them by itself; Check now looks at once. When the
domain shows active, every share link also opens on it, with the same password, expiry and brand.
From your code: POST /api/content/v1/watch-domains with {"hostname": "live.example.com"}, then
POST /watch-domains/{id}/check (AddWatchDomainAsync and CheckWatchDomainAsync, addWatchDomain and
checkWatchDomain, add_watch_domain and check_watch_domain). Keep both records for as long as you use the domain: the
certificate is renewed through them.
5Show it inside your own page
The watch component shows a share link on a page of your site, with the same brand, and needs no route on your backend.
React
import { PlycdnWatch } from '@plycdn/react/video';
<PlycdnWatch code="https://watch.plycdn.com/AbCdEfGhIjKlMnOpQrStUv" />
Angular
<plycdn-watch code="https://watch.plycdn.com/AbCdEfGhIjKlMnOpQrStUv"></plycdn-watch>
If your site sends a Content-Security-Policy, add connect-src https://api.plycdn.com https://*.plycdn.net and
img-src https://*.plycdn.net https://watch.plycdn.com (the page's images and your logo).
6Check it works
- Make a link with a password for a stream, and open it in a private window: the password box shows, then Starting soon.
- Go live: the page plays the stream, with your logo, colours and words, and your logo and watermark over the picture.
- Turn the link off in the Share tab: the open page says the link is not available within a few seconds.
- With a watch domain active, open the same link on your address: it behaves the same.
7Questions and problems
"This link is not available". The link was turned off, has expired or was deleted, or the stream can no longer be
watched (watch_link_not_found).
watch_password_attempts. Too many wrong passwords from one viewer: they wait the minutes the page shows.
share_link_limit_reached. A stream has 50 links already: delete some you no longer use.
My domain stays pending_dns or becomes failed. A record is missing, points elsewhere or is proxied
(dns_not_configured, certificate_failed). Copy both records exactly as listed, set them to DNS only, and Check now.
watch_domain_apex_unsupported: use a subdomain.
feature_not_available or feature_not_in_plan. Share links and watch pages come with live streaming: see what your
plan includes under Account → Usage → Plan, and contact us to add it.
admin_key_required. Share links, the brand and watch domains are changed with an admin key, on your server only.
Is the watch page's watermark enforced? No. A share link is meant to be opened by anyone who has it, so the page shows the watermark (your fixed text and the date and time) and logo without requiring them. For video that must not leak, play it from your own site with a library that requires the watermark.