How Pellio works
Updated September 27, 2026
An overview of how Pellio is put together, for testers and anyone evaluating it. You don’t need any of this to use Pellio, but it helps when something doesn’t behave as you expect.
The pieces
| Piece | Where | What it does |
|---|---|---|
| Dashboard | pellio.io/app | Where you and your team upload, organise and configure videos, and read analytics and the learner log. |
| API | api.pellio.io | Everything the dashboard does, for your own code too (API keys). It also sends webhooks and forwards learner events to your LRS. |
| Player | play.pellio.io | The embeddable player and share pages. It decides on every request whether a video may play there, and reports what was watched. |
| Storage and processing | behind the API | Keeps your original files and converts each upload into adaptive streams (up to 1080p), thumbnails, a scrub-preview strip and a short preview clip. |
| WordPress plugin | your site | Connects a WordPress site to your workspace. It adds the block and shortcode, signs each embed for the page it’s on, and links Pellio to your LMS and membership plugins. |
From upload to viewer
- Upload. Your browser sends the file straight to storage in parallel chunks, so large uploads are fast and can resume. The file never passes through the dashboard or the API.
- Processing. Pellio converts the video into several qualities for adaptive streaming, and makes thumbnails and previews. When you replace a video, the new version gets the same treatment and the link stays the same.
- Playback. The player asks for a short-lived playback token, then streams from storage using links that expire. Copying a stream link out of the page doesn’t give lasting access.
Who can watch
Every time the player loads, Pellio checks these in order. The first one that applies decides:
- Your own previews in the dashboard always play.
- Countries: if the video is blocked where the viewer is, it doesn’t play.
- A share link plays its video until the link expires or is turned off, even if the video is private or has a password.
- An embed signed by your connected WordPress site plays. The site signs each embed for the page and signed-in user, so the embed code doesn’t work if it’s copied elsewhere.
- Private videos stop here.
- With Only play on my allowed domains on, the page embedding the video must be on your list.
- A viewer password, if set, is asked for last.
See Privacy and access for the settings.
How viewing is measured
The player records which seconds of the video were actually played, not just how far the playhead got. Skipping ahead doesn’t count as watching, and rewatching a part doesn’t count twice. That’s the basis for:
- Analytics: plays, unique viewers, watch time, audience retention and heatmaps. Anonymous viewing uses no cookies. Analytics
- Identified viewers: signed-in users on a connected WordPress site, and viewers who give their email (in a form, or when the site shares it), appear by name in a video’s Viewers tab.
- Verified watching for courses: when a lesson requires its video, the WordPress plugin asks Pellio how many unique seconds that student has watched, and only then lets the lesson be completed. The browser can’t just claim it watched.
The learner log
For identified learners, Pellio keeps a record of each milestone. It covers how much of a video they’ve watched, plus lesson verifications, completions, reopened lessons and attestations sent by your WordPress site. Each entry includes a fingerprint (a SHA-256 hash) of the entry before it. Changing, removing or reordering any entry breaks every fingerprint after it, and Verify again shows where. The database also refuses changes to entries once they’re written. Entries can be exported, and sent to your LRS as xAPI statements. Compliance training
What a lesson looks like end to end
- A student opens a LifterLMS lesson. The plugin renders the Pellio player with an embed signed for that student.
- As they watch, the player reports the seconds they played. Pellio adds them to what that student has watched before, on any device.
- Once they’ve watched enough (90% by default), the plugin confirms it with Pellio. It records watch verified, shows the attestation if the lesson has one, and completes the lesson.
- Each step is added to the learner log. The course’s evidence CSV, the weekly progress report and your LRS all read from the same record.