Behavior hints
Every behaviorHints flag wako reads, where it can appear, and how it changes the user-facing behavior.
behaviorHints is an open-ended object used in three places: at the manifest root, inside meta detail objects, and inside stream entries. wako reads the specific keys documented below; unknown keys are preserved but ignored, so it is safe to add your own flags for future use.
Manifest-level hints
Placed at manifest.behaviorHints.
| Field | Type | Description |
|---|---|---|
adult | boolean | Marks the add-on as serving adult content. wako can apply parental restrictions and adjust how the add-on appears in profile-aware contexts. |
p2p | boolean | Set to true when the add-on returns peer-to-peer streams (info-hashes). Used to display the right hint to the user and to apply policies that depend on the source type. |
configurable | boolean | When true, wako shows a configuration button on the add-on detail page. Tapping it opens your add-on's configuration URL in the device browser. The user then ends up with a configured manifest URL they can re-install. |
configurationRequired | boolean | When true, wako prevents the add-on from being used until the user has visited the configuration page. Use this for add-ons that need an API key or account binding before they return useful data. |
Meta-level hints
Placed at meta.behaviorHints inside a meta detail response.
| Field | Type | Description |
|---|---|---|
defaultVideoId | string | For items with multiple videos (e.g. a movie shipped as multiple parts), the ID wako should play when the user taps a generic Play button without picking a specific video first. |
hasScheduledVideos | boolean | Indicates that the videos list contains entries with future release dates. wako displays an upcoming indicator next to those entries rather than treating them as missing. |
Stream-level hints
Placed at stream.behaviorHints on each entry in the streams array.
bingeGroup
The single most impactful hint for series add-ons. It identifies a variant — a combination of quality, language, codec, source — across episodes. When the user finishes an episode and the next one auto-plays, wako picks the stream from the new episode's list that shares the same bingeGroup. Without it, every episode sends the user back to manual selection.
{
"url": "https://cdn.example.com/breaking-bad-s01e01-1080p.mp4",
"title": "1080p English",
"behaviorHints": {
"bingeGroup": "my-addon|1080p|en"
}
}bingeGroup for every episode of every series: it identifies the kind of stream, not the specific episode. Including the episode in the value defeats the purpose — there is nothing for wako to match across episodes.File information
| Field | Type | Description |
|---|---|---|
videoSize | number | File size in bytes. Displayed in the stream entry and used for season-pack detection, auto-quality selection, and bandwidth warnings on mobile data. |
filename | string | Original filename. Used for subtitle hash matching and to identify individual files inside a season pack. |
videoHash | string | OpenSubtitles-style hash (16 hex chars). When wako passes this hash to subtitle add-ons via /subtitles/.../videoHash=…, they can return frame-accurate matches. |
Playback flags
| Field | Type | Description |
|---|---|---|
notWebReady | boolean | Hints that the stream is not immediately ready for direct playback in a web context (custom headers required, DRM, transcoding). Use sparingly — most HTTPS MP4/MKV/HLS streams do not need this. |
countryWhitelist | string[] | Restricts playback to viewers in the given ISO-3166 alpha-2 country codes. wako filters streams whose whitelist does not match the user's region. |
proxyHeaders
Custom HTTP headers wako applies when fetching the stream URL. Useful for sources behind a CDN that checks Referer, Origin, or a custom auth header.
{
"url": "https://protected.example.com/movie.m3u8",
"title": "1080p",
"behaviorHints": {
"proxyHeaders": {
"request": {
"Referer": "https://watch.example.com/",
"User-Agent": "Mozilla/5.0 …"
},
"response": {
"Content-Type": "application/vnd.apple.mpegurl"
}
}
}
}| Field | Type | Description |
|---|---|---|
proxyHeaders.request | object<string, string> | Headers added to wako's outgoing request for the stream URL. |
proxyHeaders.response | object<string, string> | Headers wako forces on the response before handing it to the underlying player. Useful to override a wrong Content-Type. |
proxyHeaders is shipped to the device and accessible to a curious user. Do not embed user-specific API keys you do not want the user to extract — derive a per-user token from your add-on's configuration instead.Summary
| Field | Type | Description |
|---|---|---|
adult | boolean | Manifest. Adult-only add-on. |
p2p | boolean | Manifest. Returns peer-to-peer streams. |
configurable | boolean | Manifest. Add-on exposes a configuration URL. |
configurationRequired | boolean | Manifest. Must be configured before use. |
defaultVideoId | string | Meta. Default video to play. |
hasScheduledVideos | boolean | Meta. Some videos are upcoming. |
bingeGroup | string | Stream. Variant identity across episodes. |
videoSize | number | Stream. File size in bytes. |
filename | string | Stream. Original filename. |
videoHash | string | Stream. OpenSubtitles-style hash. |
notWebReady | boolean | Stream. Needs special handling. |
countryWhitelist | string[] | Stream. Region restriction. |
proxyHeaders | object | Stream. Custom request/response headers. |