<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-CA">
	<id>https://wiki.sponsor.ajay.app/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ajay</id>
	<title>SponsorBlock - User contributions [en-ca]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.sponsor.ajay.app/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ajay"/>
	<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/w/Special:Contributions/Ajay"/>
	<updated>2026-04-13T17:08:16Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=FAQ/New_categories&amp;diff=4471</id>
		<title>FAQ/New categories</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=FAQ/New_categories&amp;diff=4471"/>
		<updated>2025-11-21T20:07:51Z</updated>

		<summary type="html">&lt;p&gt;Ajay: Remove condescension&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Message box|mini=1|type=notice&lt;br /&gt;
|title=Can you add a segment category for X?&lt;br /&gt;
|text=Although new categories do get added occasionally, going forwards further new categories are unlikely to be added because the current categories cover all common cases.&lt;br /&gt;
}}&lt;br /&gt;
New category suggestions may be considered, but they must account for all of the following requirements.&lt;br /&gt;
&lt;br /&gt;
== Necessity ==&lt;br /&gt;
Does your suggested category address a widespread need? It&#039;s not enough for just a few users to want it - there should be substantial demand. For a category to be useful, enough people must be willing to create segments for it across a broad range of videos.&lt;br /&gt;
&lt;br /&gt;
== Commonly-occurring ==&lt;br /&gt;
The segment type should appear frequently in a significant number of videos. One-off or extremely rare occurrences are unlikely to justify a new category. &lt;br /&gt;
&lt;br /&gt;
== Well-defined ==&lt;br /&gt;
Categories must have a strict and objective definition. The boundaries of the category should be clear, specifying what the category does and does not include. Consider edge cases and whether disagreements could arise about whether a particular segment should be marked.&lt;br /&gt;
&lt;br /&gt;
== Not protecting a user&#039;s mental or physical health ==&lt;br /&gt;
SponsorBlock is not intended to protect users&#039; health. Categories aimed at skipping content which may cause distress or discomfort will be rejected as out of scope. The reason is that SponsorBlock relies on user-submitted segments, which may be incomplete or inaccurate, so should not be relied upon for health or wellbeing. &lt;br /&gt;
&lt;br /&gt;
A user who believes that SponsorBlock will protect their health may watch videos which are not (correctly) marked, so will inevitably be exposed to triggering content. It is ultimately the responsibility of content creators to consider their audience&#039;s health and wellbeing needs, and the responsibility of viewers to not expose themselves to potentially triggering content.&lt;br /&gt;
&lt;br /&gt;
== Use of chapters ==&lt;br /&gt;
Consider whether a {{Category|chapter}} could be used instead – labelling a rare or overly-specific segment with a concise chapter name is preferred as it allows users to decide whether to skip it without the need for a new category.&lt;br /&gt;
&lt;br /&gt;
== Use of Tangents/Jokes ==&lt;br /&gt;
Consider whether a {{Category|tangent}} segment could be used instead – this category is for tangential scenes or jokes which are not required to understand the main content of the video. This is a broad and slightly subjective category, but should not be used simply for scenes that you aren&#039;t personally interested in. This category could be used in situations where people who have enabled the category may want to skip an irrelevant section of video.&lt;br /&gt;
&lt;br /&gt;
== Rejected suggestions ==&lt;br /&gt;
Below are examples of frequently-suggested categories and the reasons they are not implemented:&lt;br /&gt;
&lt;br /&gt;
=== Epilepsy ===&lt;br /&gt;
* &#039;&#039;&#039;Suggestion&#039;&#039;&#039;: Mark segments with flashing lights that may trigger epileptic seizures.&lt;br /&gt;
* &#039;&#039;&#039;Reason&#039;&#039;&#039;: Due to the crowd-sourced nature of this extension, it would be worse than nothing, since it may create a false sense of security for an epileptic who believes they can safely watch videos and would then be exposed to unmarked flashing lights.&lt;br /&gt;
&lt;br /&gt;
=== Fear or phobia ===&lt;br /&gt;
* &#039;&#039;&#039;Suggestion&#039;&#039;&#039;: Skip segments which some viewers may find uncomfortable, such as spiders for viewers with arachnophobia.&lt;br /&gt;
* &#039;&#039;&#039;Reason&#039;&#039;&#039;: This category is too subjective and broad to be practical, as each person will have different fears and phobias. Attempting to categorise specific fears, such as arachnophobia, would result in far too many categories to be useful.&lt;br /&gt;
&lt;br /&gt;
=== NSFW / profanity ===&lt;br /&gt;
* &#039;&#039;&#039;Suggestion&#039;&#039;&#039;: Skip segments that may not be suitable for work, such as sexually suggestive material or profanity.&lt;br /&gt;
* &#039;&#039;&#039;Reason&#039;&#039;&#039;: This category is subjective and depends heavily on individual preferences&lt;br /&gt;
&lt;br /&gt;
=== Jumpscares ===&lt;br /&gt;
* &#039;&#039;&#039;Suggestion&#039;&#039;&#039;: Skip/mute jumpscares or sudden loud sounds.&lt;br /&gt;
* &#039;&#039;&#039;Reason&#039;&#039;&#039;: Due to the crowd-sourced nature of this extension, it would be worse than nothing, since it may create a false sense of security&lt;br /&gt;
&lt;br /&gt;
=== AI-generated video ===&lt;br /&gt;
* &#039;&#039;&#039;Suggestion&#039;&#039;&#039;: Apply a full-video label to AI-generated videos, or allow skipping or labelling of AI-generated segments.&lt;br /&gt;
* &#039;&#039;&#039;Reason&#039;&#039;&#039;: This won&#039;t be added in SponsorBlock, but I an upcoming extension is in the works&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=Chapter&amp;diff=4434</id>
		<title>Chapter</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=Chapter&amp;diff=4434"/>
		<updated>2025-11-03T06:46:03Z</updated>

		<summary type="html">&lt;p&gt;Ajay: nice&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;{{Category|Chapters}}&#039;&#039;&#039; are labels describing specific sections of videos. They&#039;re navigable either through the SponsorBlock extension menu, or with dedicated keybinds.&lt;br /&gt;
&lt;br /&gt;
Chapter permissions are given automatically to users with a history of accurate segments on a regular basis.&lt;br /&gt;
&lt;br /&gt;
Demo video: https://www.youtube.com/watch?v=H_mP7bpbA_c&lt;br /&gt;
&lt;br /&gt;
== Specifics ==&lt;br /&gt;
[[File:Connected chapters.png|alt=List of chapters.|thumb|This is an example of connected chapters, marked to the same millisecond (there&#039;s no break in between)&amp;lt;ref&amp;gt;https://www.youtube.com/watch?v=8vAht-OvZKM (Evaluating the definite integral using a derived general formula (Mis-1457))&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
* Should be timed precisely, just like any other segment. For more information on this, refer to [[advice for submitting]].&lt;br /&gt;
* Use the main language of the video.&lt;br /&gt;
* Unlike other categories, start a chapter on the first frame of the respective section without including a buffer. End it on the first frame after the section.&lt;br /&gt;
* When a chapter leads into another with no break, the ending chapter should stop on the same frame at the newly beginning chapter, without any gap or overlap.&lt;br /&gt;
&lt;br /&gt;
== Exceptions / edge cases ==&lt;br /&gt;
* Do not use chapters in place of other categories.&lt;br /&gt;
* Do not add sponsoring brand names in chapters if the video doesn&#039;t have a {{Category|sponsor|nolink=1|text=[[Full Video Labels|full video sponsor label]]}}.&lt;br /&gt;
* Chapters should not mock or fact-check the video creator.&lt;br /&gt;
* Chapters are not a replacement for other categories. If a segment fits into another category, it should be submitted as that instead of as a chapter.&lt;br /&gt;
&lt;br /&gt;
== Imported chapters ==&lt;br /&gt;
[[File:Import menu.png|alt=SponsorBlock chapters import menu|thumb|This is the import menu that you use to put in arbitrary text, such as from a document or a comment, to make chapters in a video.]]&lt;br /&gt;
SponsorBlock chapters &#039;&#039;&#039;must&#039;&#039;&#039; be timed to the millisecond (ex: 0:14.195) and not the nearest second (ex: 0:14).&lt;br /&gt;
&lt;br /&gt;
If other viewers in the comment section of a video have already created chapters with timecodes, you can import those through the SB extension menu. To import chapters:&lt;br /&gt;
&lt;br /&gt;
# Copy the text from the comment.&lt;br /&gt;
# Paste it into the import menu (see the screenshot on the right).&lt;br /&gt;
&lt;br /&gt;
When importing chapters from a YouTube comment or elsewhere, edit the segments before submitting to ensure they&#039;re:&lt;br /&gt;
&lt;br /&gt;
# Timed precisely to avoid frame-flashing or sudden audio cuts when jumping to the beginning of a chapter.&lt;br /&gt;
# Following all the category&#039;s rules.&lt;br /&gt;
# Not AI-generated or inaccurate summarizations of video content.&lt;br /&gt;
# Not mistimed, or mixed up during the import process.&lt;br /&gt;
&lt;br /&gt;
== Adding chapters to outline an entire video ==&lt;br /&gt;
There&#039;s no problem with outlining an entire video by yourself, but it &#039;&#039;can&#039;&#039; be quite difficult to do with longer or more in-depth videos, because those tend to require &#039;&#039;&#039;a lot&#039;&#039;&#039; of chapters. You should only outline a long video from start to end if you are sure that you&#039;ve not created inaccurate or mistimed chapters.&lt;br /&gt;
* Longer videos, kind of self-explanatory, require a longer outline.&lt;br /&gt;
* More in-depth videos may require more chapters for specific sections.&lt;br /&gt;
&lt;br /&gt;
Be careful when outlining an entire video that you don&#039;t break the other rules.&lt;br /&gt;
&lt;br /&gt;
== Advice for submitting chapters ==&lt;br /&gt;
While watching a video, after pressing the start segment icon, you can quickly double tap the create segment keybind to stop the currently creating segment. You can also begin a new segment starting point to mark abstract points for chapters without pausing the video. Do not submit them in this state! Use them as a starting guide to further edit the chapters in the submission menu when the video has finished.&lt;br /&gt;
&lt;br /&gt;
You don&#039;t have to fully outline a video with chapters, other community members can help with adding chapters as far into the video they feel like watching.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
{{Draft|section=1|wip}}&lt;br /&gt;
{{Video examples|positive=&lt;br /&gt;
{{Video examples/row&lt;br /&gt;
|videoid=&lt;br /&gt;
|videotitle=&lt;br /&gt;
|text=&lt;br /&gt;
}}&lt;br /&gt;
{{Video examples/row&lt;br /&gt;
|videoid=&lt;br /&gt;
|videotitle=&lt;br /&gt;
|text=&lt;br /&gt;
}}&lt;br /&gt;
{{Video examples/row&lt;br /&gt;
|videoid=&lt;br /&gt;
|videotitle=&lt;br /&gt;
|text=&lt;br /&gt;
}}&lt;br /&gt;
{{Video examples/row&lt;br /&gt;
|videoid=&lt;br /&gt;
|videotitle=&lt;br /&gt;
|text=&lt;br /&gt;
}}&lt;br /&gt;
{{Video examples/row&lt;br /&gt;
|videoid=&lt;br /&gt;
|videotitle=&lt;br /&gt;
|text=&lt;br /&gt;
}}|negative=&lt;br /&gt;
{{Video examples/row&lt;br /&gt;
|videoid=&lt;br /&gt;
|videotitle=&lt;br /&gt;
|text=&lt;br /&gt;
}}&lt;br /&gt;
{{Video examples/row&lt;br /&gt;
|videoid=&lt;br /&gt;
|videotitle=&lt;br /&gt;
|text=&lt;br /&gt;
}}&lt;br /&gt;
{{Video examples/row&lt;br /&gt;
|videoid=&lt;br /&gt;
|videotitle=&lt;br /&gt;
|text=&lt;br /&gt;
}}&lt;br /&gt;
{{Video examples/row&lt;br /&gt;
|videoid=&lt;br /&gt;
|videotitle=&lt;br /&gt;
|text=&lt;br /&gt;
}}&lt;br /&gt;
{{Video examples/row&lt;br /&gt;
|videoid=&lt;br /&gt;
|videotitle=&lt;br /&gt;
|text=&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Segment categories]]&lt;br /&gt;
[[Category:Segment types]]&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=FAQ/New_categories&amp;diff=4276</id>
		<title>FAQ/New categories</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=FAQ/New_categories&amp;diff=4276"/>
		<updated>2025-09-08T19:23:11Z</updated>

		<summary type="html">&lt;p&gt;Ajay: update AI thing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Message box|mini=1|type=notice&lt;br /&gt;
|title=Can you add a segment category for X?&lt;br /&gt;
|text=Although new categories do get added occasionally, going forwards further new categories are unlikely to be added because the current categories cover all common cases.&lt;br /&gt;
}}&lt;br /&gt;
New category suggestions may be considered, but they must account for all of the following requirements.&lt;br /&gt;
&lt;br /&gt;
== Necessity ==&lt;br /&gt;
Does your suggested category address a widespread need? It’s not enough for just a few users to want it - there should be substantial demand. For a category to be useful, enough people must be willing to create segments for it across a broad range of videos.&lt;br /&gt;
&lt;br /&gt;
== Commonly-occurring ==&lt;br /&gt;
The segment type should appear frequently in a significant number of videos. One-off or extremely rare occurrences are unlikely to justify a new category. &lt;br /&gt;
&lt;br /&gt;
== Well-defined ==&lt;br /&gt;
Categories must have a strict and objective definition. The boundaries of the category should be clear, specifying what the category does and does not include. Consider edge cases and whether disagreements could arise about whether a particular segment should be marked.&lt;br /&gt;
&lt;br /&gt;
== Not protecting a user&#039;s mental or physical health ==&lt;br /&gt;
SponsorBlock is not intended to protect users&#039; health. Categories aimed at skipping content which may cause distress or discomfort will be rejected as out of scope. The reason is that SponsorBlock relies on user-submitted segments, which may be incomplete or inaccurate, so should not be relied upon for health or wellbeing. &lt;br /&gt;
&lt;br /&gt;
A user who believes that SponsorBlock will protect their health may watch videos which are not (correctly) marked, so will inevitably be exposed to triggering content. It is ultimately the responsibility of content creators to consider their audience’s health and wellbeing needs, and the responsibility of viewers to not expose themselves to potentially triggering content.&lt;br /&gt;
&lt;br /&gt;
== Use of chapters ==&lt;br /&gt;
Consider whether a {{Category|chapter}} could be used instead – labelling a rare or overly-specific segment with a concise chapter name is preferred as it allows users to decide whether to skip it without the need for a new category.&lt;br /&gt;
&lt;br /&gt;
== Use of Tangents/Jokes ==&lt;br /&gt;
Consider whether a {{Category|tangent}} segment could be used instead – this category is for tangential scenes or jokes which are not required to understand the main content of the video. This is a broad and slightly subjective category, but should not be used simply for scenes that you aren&#039;t personally interested in. This category could be used in situations where people who have enabled the category may want to skip an irrelevant section of video.&lt;br /&gt;
&lt;br /&gt;
== Rejected suggestions ==&lt;br /&gt;
Below are examples of frequently-suggested categories and the reasons they are not implemented:&lt;br /&gt;
&lt;br /&gt;
=== Epilepsy ===&lt;br /&gt;
* &#039;&#039;&#039;Suggestion&#039;&#039;&#039;: Mark segments with flashing lights that may trigger epileptic seizures.&lt;br /&gt;
* &#039;&#039;&#039;Reason&#039;&#039;&#039;: Although this is an appealing idea, as above this comes under protecting a user&#039;s health so is rejected as out of scope. As this could never be relied upon, it would be worse than nothing, since it may create a false sense of security for an epileptic who believes they can safely watch videos and would then be exposed to unmarked flashing lights. It&#039;s up to channels to be mindful of epileptics in their audience.&lt;br /&gt;
&lt;br /&gt;
=== Fear or phobia ===&lt;br /&gt;
* &#039;&#039;&#039;Suggestion&#039;&#039;&#039;: Skip segments which some viewers may find uncomfortable, such as spiders for viewers with arachnophobia.&lt;br /&gt;
* &#039;&#039;&#039;Reason&#039;&#039;&#039;: This category is too subjective and broad to be practical, as each user will have different fears and phobias. Attempting to categorise specific fears, such as arachnophobia, would result in far too many categories to be useful. If a user has arachnophobia, then they should avoid videos which may contain spiders. It&#039;s up to the channel to be mindful of their audience&#039;s viewing preferences.&lt;br /&gt;
* This also comes under protecting a user&#039;s mental well-being, which as above is out of scope due to the inherently incomplete/inaccurate database.&lt;br /&gt;
&lt;br /&gt;
=== NSFW / profanity ===&lt;br /&gt;
* &#039;&#039;&#039;Suggestion&#039;&#039;&#039;: Skip segments that may not be suitable for work, such as sexually suggestive material or profanity.&lt;br /&gt;
* &#039;&#039;&#039;Reason&#039;&#039;&#039;: This category is subjective and depends heavily on individual preferences. It is ultimately up to users to avoid potentially inappropriate videos in a professional environment. And, as above, we wouldn&#039;t want anyone to rely on this category and then encounter unmarked NSFW content.&lt;br /&gt;
&lt;br /&gt;
=== Jumpscares ===&lt;br /&gt;
* &#039;&#039;&#039;Suggestion&#039;&#039;&#039;: Skip/mute jumpscares or sudden loud sounds.&lt;br /&gt;
* &#039;&#039;&#039;Reason&#039;&#039;&#039;: This is out of scope as it could fall under protecting users&#039; health – again, SponsorBlock should not be relied upon to save a user from jumpscares as many would remain unmarked. It&#039;s also not really that common because creators who include jumpscares generally get a lot of negative feedback. Consider avoiding channels who use unpleasant jumpscares. Again, it&#039;s up to the user to not watch videos of horror games or movies etc., if they don&#039;t want to see jumpscares.&lt;br /&gt;
&lt;br /&gt;
=== AI-generated video ===&lt;br /&gt;
* &#039;&#039;&#039;Suggestion&#039;&#039;&#039;: Apply a full-video label to AI-generated videos, or allow skipping or labelling of AI-generated segments.&lt;br /&gt;
* &#039;&#039;&#039;Reason&#039;&#039;&#039;: This won&#039;t be added in SponsorBlock, but maybe in a future extension if there&#039;s interest.&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=Types&amp;diff=4172</id>
		<title>Types</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=Types&amp;diff=4172"/>
		<updated>2025-08-13T17:03:26Z</updated>

		<summary type="html">&lt;p&gt;Ajay: Add hook&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Category ===&lt;br /&gt;
&amp;lt;code&amp;gt;sponsor&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;selfpromo&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;interaction&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;intro&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;outro&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;preview&amp;lt;/code&amp;gt; hook &amp;lt;code&amp;gt;filler&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Warning: the &amp;lt;code&amp;gt;filler&amp;lt;/code&amp;gt; category is very aggressive. It is strongly recommended to not use this in a client by default, as it can be confusing if you don&#039;t know what is happening.&lt;br /&gt;
&lt;br /&gt;
==== POI Categories ====&lt;br /&gt;
These signify a specific point in the video (Point of Interest). Start time and end time are equal.&lt;br /&gt;
&lt;br /&gt;
This category can only be submitted as a &amp;lt;code&amp;gt;poi&amp;lt;/code&amp;gt; action type&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;poi_highlight&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Full Video only Categories ====&lt;br /&gt;
This category only allows submitting as &amp;lt;code&amp;gt;full&amp;lt;/code&amp;gt; action type&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exclusive_access&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Chapter only Categories ====&lt;br /&gt;
This category only allows submitting as &amp;lt;code&amp;gt;chapter&amp;lt;/code&amp;gt; action type&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chapter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Action Type ===&lt;br /&gt;
&amp;lt;code&amp;gt;skip&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;mute&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;full&amp;lt;/code&amp;gt; &amp;lt;ref&amp;gt;This action type will always have start time and end time equal to 0, and means that the [[Full Video Labels|entire video is labelled as this category]]&amp;lt;/ref&amp;gt; &amp;lt;code&amp;gt;poi&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;chapter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Service===&lt;br /&gt;
&amp;lt;code&amp;gt;YouTube&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Rating Types===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Type Number&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Downvote/ Dislike&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Upvote/ Like&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== User Features===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Type Number&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|[[Chapter|Chapters]]&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|previously [[Tangents/Jokes]], currently unused&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Manualy verified DeArrow title submitter&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Category:Developer Reference]]&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=Hook/Greetings&amp;diff=4082</id>
		<title>Hook/Greetings</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=Hook/Greetings&amp;diff=4082"/>
		<updated>2025-07-25T06:27:14Z</updated>

		<summary type="html">&lt;p&gt;Ajay: publishing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;{{Category|Hook/Greetings}}&#039;&#039;&#039; is for greetings and goodbye sections welcoming viewers.&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
=== Hook ===&lt;br /&gt;
See the page on [https://en.wikipedia.org/wiki/Narrative_hook narrative hooks] on Wikipedia.&lt;br /&gt;
&lt;br /&gt;
=== Greetings ===&lt;br /&gt;
For greetings at the start of the video before any information has been discussed, or which repeat information discussed right after the greeting.&lt;br /&gt;
&lt;br /&gt;
=== Goodbyes ===&lt;br /&gt;
For goodbyes and concluding sentences at the end of the video. Do not include conclusions to the video&#039;s topic, only non-informational goodbyes should be included.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
{{Video examples|positive=&lt;br /&gt;
{{!}}-&lt;br /&gt;
|negative=&lt;br /&gt;
{{!}}-&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=Hook/Greetings&amp;diff=4060</id>
		<title>Hook/Greetings</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=Hook/Greetings&amp;diff=4060"/>
		<updated>2025-07-24T06:58:16Z</updated>

		<summary type="html">&lt;p&gt;Ajay: Add some info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hook ==&lt;br /&gt;
See the page on [https://en.wikipedia.org/wiki/Narrative_hook narrative hooks] on Wikipedia.&lt;br /&gt;
&lt;br /&gt;
== Greetings ==&lt;br /&gt;
&lt;br /&gt;
For greetings at the start of the video before any information has been discussed, or which repeat information discussed right after the greeting.&lt;br /&gt;
&lt;br /&gt;
== Goodbyes ==&lt;br /&gt;
&lt;br /&gt;
For goodbyes and concluding sentences at the end of the video. Do not include conclusions to the video&#039;s topic, only non-informational goodbyes should be included.&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=Hook/Greetings&amp;diff=4059</id>
		<title>Hook/Greetings</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=Hook/Greetings&amp;diff=4059"/>
		<updated>2025-07-24T05:54:23Z</updated>

		<summary type="html">&lt;p&gt;Ajay: Created page with &amp;quot;Hello&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=4058</id>
		<title>Advanced skip options</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=4058"/>
		<updated>2025-07-23T00:07:35Z</updated>

		<summary type="html">&lt;p&gt;Ajay: Add video title&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Advanced skip options can be used to change the skip options depending on certain criteria of the submission itself.&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
// Skip sponsors at the start of the video&lt;br /&gt;
if time.start &amp;lt; 1 and time.end &amp;lt; 10 and category == &amp;quot;sponsor&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each block consists of the word &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt; along with a number of conditions with &amp;lt;code&amp;gt;and&amp;lt;/code&amp;gt; in the middle.&lt;br /&gt;
&lt;br /&gt;
The following attributes are supported:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;time.start&amp;lt;/code&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;time.end&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;time.duration&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;time.startPercent&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;time.endPercent&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;time.durationPercent&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;category&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;actionType&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;chapter.name&amp;lt;/code&amp;gt; (the title for chapters)&lt;br /&gt;
# &amp;lt;code&amp;gt;chapter.source&amp;lt;/code&amp;gt; (to separate SponsorBlock chapters from YouTube chapters)&lt;br /&gt;
# &amp;lt;code&amp;gt;channel.id&amp;lt;/code&amp;gt; (ID starting with &amp;lt;code&amp;gt;UC&amp;lt;/code&amp;gt;)&lt;br /&gt;
# &amp;lt;code&amp;gt;channel.name&amp;lt;/code&amp;gt; (plain text name with spaces)&lt;br /&gt;
# &amp;lt;code&amp;gt;video.duration&amp;lt;/code&amp;gt; (in seconds)&lt;br /&gt;
# &amp;lt;code&amp;gt;video.title&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following operators are supported:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;&amp;lt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;&amp;lt;=&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;&amp;gt;=&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;==&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;!=&amp;lt;/code&amp;gt; (not equal)&lt;br /&gt;
# &amp;lt;code&amp;gt;*=&amp;lt;/code&amp;gt; (contains text ignore case)&lt;br /&gt;
# &amp;lt;code&amp;gt;!*=&amp;lt;/code&amp;gt; (not contains ignore case)&lt;br /&gt;
# &amp;lt;code&amp;gt;~=&amp;lt;/code&amp;gt; (matches regex)&lt;br /&gt;
# &amp;lt;code&amp;gt;~i=&amp;lt;/code&amp;gt; (matches regex ignore case)&lt;br /&gt;
# &amp;lt;code&amp;gt;!~=&amp;lt;/code&amp;gt; (doesn&#039;t match regex)&lt;br /&gt;
# &amp;lt;code&amp;gt;!~i=&amp;lt;/code&amp;gt; (doesn&#039;t match regex ignore case)&lt;br /&gt;
&lt;br /&gt;
The following actions are supported:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Disabled&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Show Overlay&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Manual Skip&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Auto Skip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following categories are supported:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;sponsor&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;selfpromo&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;exclusive_access&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;interaction&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;poi_highlight&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;intro&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;outro&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;preview&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;filler&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;chapter&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;music_offtopic&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following source values are supported:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;server&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;youtube&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;autogenerated&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;local&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== More examples ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
// Auto skip chapters that contain the word bloopers (case insensitive)&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and chapter.name *= &amp;quot;bloopers&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and chapter.name ~= &amp;quot;^[Ii]ntro&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro but only if they are made by the YouTuber&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and chapter.name ~= &amp;quot;^[Ii]ntro&amp;quot; and chapter.source == &amp;quot;youtube&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro but only if they are submitted by a SponsorBlock user&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and chapter.name ~= &amp;quot;^[Ii]ntro&amp;quot; and chapter.source == &amp;quot;server&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip preview/recap on this specific channel&lt;br /&gt;
if category == &amp;quot;preview&amp;quot; and channel.id == &amp;quot;UCX8wm5-NEzN-eL-DNcsRRJA&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip intros on channels with names containing trains&lt;br /&gt;
if category == &amp;quot;intro&amp;quot; and channel.name *= &amp;quot;trains&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=4056</id>
		<title>Advanced skip options</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=4056"/>
		<updated>2025-07-22T06:10:07Z</updated>

		<summary type="html">&lt;p&gt;Ajay: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Advanced skip options can be used to change the skip options depending on certain criteria of the submission itself.&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;// Skip sponsors at the start of the video&lt;br /&gt;
if time.start &amp;lt; 1 and time.end &amp;lt; 10 and category == &amp;quot;sponsor&amp;quot;&lt;br /&gt;
Auto Skip&amp;lt;/syntaxhighlight&amp;gt;Each block consists of the word &amp;quot;if&amp;quot; along with a number of conditions with &amp;quot;and&amp;quot; in the middle.&lt;br /&gt;
&lt;br /&gt;
The following attributes are supported:&lt;br /&gt;
&lt;br /&gt;
# time.start&lt;br /&gt;
# time.end&lt;br /&gt;
# time.duration&lt;br /&gt;
# time.startPercent&lt;br /&gt;
# time.endPercent&lt;br /&gt;
# time.durationPercent&lt;br /&gt;
# category&lt;br /&gt;
# actionType&lt;br /&gt;
# chapter.name (the title for chapters)&lt;br /&gt;
# chapter.source (to separate sponsorblock chapters from youtube chapters)&lt;br /&gt;
# channel.id (ID starting with UC)&lt;br /&gt;
# channel.name (plain text name with spaces)&lt;br /&gt;
# video.duration (in seconds)&lt;br /&gt;
&lt;br /&gt;
The following operators are supported:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;&lt;br /&gt;
# &amp;lt;=&lt;br /&gt;
# &amp;gt;&lt;br /&gt;
# &amp;gt;=&lt;br /&gt;
# ==&lt;br /&gt;
# != (not equal)&lt;br /&gt;
# *= (contains text ignore case)&lt;br /&gt;
# !*= (not contains ignore case)&lt;br /&gt;
# ~= (matches regex)&lt;br /&gt;
# ~i= (matches regex ignore case)&lt;br /&gt;
# !~= (doesn&#039;t match regex)&lt;br /&gt;
# !~i= (doesn&#039;t match regex ignore case)&lt;br /&gt;
&lt;br /&gt;
The following actions are supported:&lt;br /&gt;
&lt;br /&gt;
# Disabled&lt;br /&gt;
# Show Overlay&lt;br /&gt;
# Manual Skip&lt;br /&gt;
# Auto Skip&lt;br /&gt;
The following categories are supported:&lt;br /&gt;
# sponsor&lt;br /&gt;
# selfpromo&lt;br /&gt;
# exclusive_access&lt;br /&gt;
# interaction&lt;br /&gt;
# poi_highlight&lt;br /&gt;
# intro&lt;br /&gt;
# outro&lt;br /&gt;
# preview&lt;br /&gt;
# filler&lt;br /&gt;
# chapter&lt;br /&gt;
# music_offtopic&lt;br /&gt;
The following source values are supported:&lt;br /&gt;
# server&lt;br /&gt;
# youtube&lt;br /&gt;
# autogenerated&lt;br /&gt;
# local&lt;br /&gt;
&lt;br /&gt;
==== More examples ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;// Auto skip chapters that contain the word bloopers (case insensitive)&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and chapter.name *= &amp;quot;bloopers&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and chapter.name ~= &amp;quot;^[Ii]ntro&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro but only if they are made by the YouTuber&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and chapter.name ~= &amp;quot;^[Ii]ntro&amp;quot; and chapter.source == &amp;quot;youtube&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro but only if they are submitted by a SponsorBlock user&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and chapter.name ~= &amp;quot;^[Ii]ntro&amp;quot; and chapter.source == &amp;quot;server&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip preview/recap on this specific channel&lt;br /&gt;
if category == &amp;quot;preview&amp;quot; and channel.id == &amp;quot;UCX8wm5-NEzN-eL-DNcsRRJA&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip intros on channels with names containing trains&lt;br /&gt;
if category == &amp;quot;intro&amp;quot; and channel.name *= &amp;quot;trains&amp;quot;&lt;br /&gt;
Auto Skip&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=4055</id>
		<title>Advanced skip options</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=4055"/>
		<updated>2025-07-22T06:09:15Z</updated>

		<summary type="html">&lt;p&gt;Ajay: Add video duration&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Advanced skip options can be used to change the skip options depending on certain criteria of the submission itself.&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;// Skip sponsors at the start of the video&lt;br /&gt;
if time.start &amp;lt; 1 and time.end &amp;lt; 10 and category == &amp;quot;sponsor&amp;quot;&lt;br /&gt;
Auto Skip&amp;lt;/syntaxhighlight&amp;gt;Each block consists of the word &amp;quot;if&amp;quot; along with a number of conditions with &amp;quot;and&amp;quot; in the middle.&lt;br /&gt;
&lt;br /&gt;
The following attributes are supported:&lt;br /&gt;
&lt;br /&gt;
# time.start&lt;br /&gt;
# time.end&lt;br /&gt;
# time.duration&lt;br /&gt;
# time.startPercent&lt;br /&gt;
# time.endPercent&lt;br /&gt;
# time.durationPercent&lt;br /&gt;
# category&lt;br /&gt;
# actionType&lt;br /&gt;
# chapter.name (the title for chapters)&lt;br /&gt;
# chapter.source (to separate sponsorblock chapters from youtube chapters)&lt;br /&gt;
# channel.id (ID starting with UC)&lt;br /&gt;
# channel.name (plain text name with spaces)&lt;br /&gt;
# video.duration&lt;br /&gt;
&lt;br /&gt;
The following operators are supported:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;&lt;br /&gt;
# &amp;lt;=&lt;br /&gt;
# &amp;gt;&lt;br /&gt;
# &amp;gt;=&lt;br /&gt;
# ==&lt;br /&gt;
# != (not equal)&lt;br /&gt;
# *= (contains text ignore case)&lt;br /&gt;
# !*= (not contains ignore case)&lt;br /&gt;
# ~= (matches regex)&lt;br /&gt;
# ~i= (matches regex ignore case)&lt;br /&gt;
# !~= (doesn&#039;t match regex)&lt;br /&gt;
# !~i= (doesn&#039;t match regex ignore case)&lt;br /&gt;
&lt;br /&gt;
The following actions are supported:&lt;br /&gt;
&lt;br /&gt;
# Disabled&lt;br /&gt;
# Show Overlay&lt;br /&gt;
# Manual Skip&lt;br /&gt;
# Auto Skip&lt;br /&gt;
The following categories are supported:&lt;br /&gt;
# sponsor&lt;br /&gt;
# selfpromo&lt;br /&gt;
# exclusive_access&lt;br /&gt;
# interaction&lt;br /&gt;
# poi_highlight&lt;br /&gt;
# intro&lt;br /&gt;
# outro&lt;br /&gt;
# preview&lt;br /&gt;
# filler&lt;br /&gt;
# chapter&lt;br /&gt;
# music_offtopic&lt;br /&gt;
The following source values are supported:&lt;br /&gt;
# server&lt;br /&gt;
# youtube&lt;br /&gt;
# autogenerated&lt;br /&gt;
# local&lt;br /&gt;
&lt;br /&gt;
==== More examples ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;// Auto skip chapters that contain the word bloopers (case insensitive)&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and chapter.name *= &amp;quot;bloopers&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and chapter.name ~= &amp;quot;^[Ii]ntro&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro but only if they are made by the YouTuber&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and chapter.name ~= &amp;quot;^[Ii]ntro&amp;quot; and chapter.source == &amp;quot;youtube&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro but only if they are submitted by a SponsorBlock user&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and chapter.name ~= &amp;quot;^[Ii]ntro&amp;quot; and chapter.source == &amp;quot;server&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip preview/recap on this specific channel&lt;br /&gt;
if category == &amp;quot;preview&amp;quot; and channel.id == &amp;quot;UCX8wm5-NEzN-eL-DNcsRRJA&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip intros on channels with names containing trains&lt;br /&gt;
if category == &amp;quot;intro&amp;quot; and channel.name *= &amp;quot;trains&amp;quot;&lt;br /&gt;
Auto Skip&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=3995</id>
		<title>Advanced skip options</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=3995"/>
		<updated>2025-06-07T05:10:54Z</updated>

		<summary type="html">&lt;p&gt;Ajay: Update attribute names&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Advanced skip options can be used to change the skip options depending on certain criteria of the submission itself.&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;// Skip sponsors at the start of the video&lt;br /&gt;
if time.start &amp;lt; 1 and time.end &amp;lt; 10 and category == &amp;quot;sponsor&amp;quot;&lt;br /&gt;
Auto Skip&amp;lt;/syntaxhighlight&amp;gt;Each block consists of the word &amp;quot;if&amp;quot; along with a number of conditions with &amp;quot;and&amp;quot; in the middle.&lt;br /&gt;
&lt;br /&gt;
The following attributes are supported:&lt;br /&gt;
&lt;br /&gt;
# time.start&lt;br /&gt;
# time.end&lt;br /&gt;
# timeduration&lt;br /&gt;
# time.startPercent&lt;br /&gt;
# time.endPercent&lt;br /&gt;
# time.durationPercent&lt;br /&gt;
# category&lt;br /&gt;
# actionType&lt;br /&gt;
# chapter.name (the title for chapters)&lt;br /&gt;
# chapter.source (to separate sponsorblock chapters from youtube chapters)&lt;br /&gt;
# channel.id (ID starting with UC)&lt;br /&gt;
# channel.name (plain text name with spaces)&lt;br /&gt;
&lt;br /&gt;
The following operators are supported:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;&lt;br /&gt;
# &amp;lt;=&lt;br /&gt;
# &amp;gt;&lt;br /&gt;
# &amp;gt;=&lt;br /&gt;
# ==&lt;br /&gt;
# != (not equal)&lt;br /&gt;
# *= (contains text ignore case)&lt;br /&gt;
# !*= (not contains ignore case)&lt;br /&gt;
# ~= (matches regex)&lt;br /&gt;
# ~i= (matches regex ignore case)&lt;br /&gt;
# !~= (doesn&#039;t match regex)&lt;br /&gt;
# !~i= (doesn&#039;t match regex ignore case)&lt;br /&gt;
&lt;br /&gt;
The following actions are supported:&lt;br /&gt;
&lt;br /&gt;
# Disabled&lt;br /&gt;
# Show Overlay&lt;br /&gt;
# Manual Skip&lt;br /&gt;
# Auto Skip&lt;br /&gt;
The following categories are supported:&lt;br /&gt;
# sponsor&lt;br /&gt;
# selfpromo&lt;br /&gt;
# exclusive_access&lt;br /&gt;
# interaction&lt;br /&gt;
# poi_highlight&lt;br /&gt;
# intro&lt;br /&gt;
# outro&lt;br /&gt;
# preview&lt;br /&gt;
# filler&lt;br /&gt;
# chapter&lt;br /&gt;
# music_offtopic&lt;br /&gt;
The following source values are supported:&lt;br /&gt;
# server&lt;br /&gt;
# youtube&lt;br /&gt;
# autogenerated&lt;br /&gt;
# local&lt;br /&gt;
&lt;br /&gt;
==== More examples ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;// Auto skip chapters that contain the word bloopers (case insensitive)&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and chapter.name *= &amp;quot;bloopers&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and chapter.name ~= &amp;quot;^[Ii]ntro&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro but only if they are made by the YouTuber&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and chapter.name ~= &amp;quot;^[Ii]ntro&amp;quot; and chapter.source == &amp;quot;youtube&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro but only if they are submitted by a SponsorBlock user&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and chapter.name ~= &amp;quot;^[Ii]ntro&amp;quot; and chapter.source == &amp;quot;server&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip preview/recap on this specific channel&lt;br /&gt;
if category == &amp;quot;preview&amp;quot; and channel.id == &amp;quot;UCX8wm5-NEzN-eL-DNcsRRJA&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip intros on channels with names containing trains&lt;br /&gt;
if category == &amp;quot;intro&amp;quot; and channel.name *= &amp;quot;trains&amp;quot;&lt;br /&gt;
Auto Skip&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=3994</id>
		<title>Advanced skip options</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=3994"/>
		<updated>2025-06-07T05:10:17Z</updated>

		<summary type="html">&lt;p&gt;Ajay: Fix typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Advanced skip options can be used to change the skip options depending on certain criteria of the submission itself.&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;// Skip sponsors at the start of the video&lt;br /&gt;
if time.start &amp;lt; 1 and time.end &amp;lt; 10 and category == &amp;quot;sponsor&amp;quot;&lt;br /&gt;
Auto Skip&amp;lt;/syntaxhighlight&amp;gt;Each block consists of the word &amp;quot;if&amp;quot; along with a number of conditions with &amp;quot;and&amp;quot; in the middle.&lt;br /&gt;
&lt;br /&gt;
The following attributes are supported:&lt;br /&gt;
&lt;br /&gt;
# time.start&lt;br /&gt;
# time.end&lt;br /&gt;
# timeduration&lt;br /&gt;
# time.startPercent&lt;br /&gt;
# time.endPercent&lt;br /&gt;
# time.durationPercent&lt;br /&gt;
# category&lt;br /&gt;
# actionType&lt;br /&gt;
# chapter.name (the title for chapters)&lt;br /&gt;
# chapter.source (to separate sponsorblock chapters from youtube chapters)&lt;br /&gt;
# channel.id (ID starting with UC)&lt;br /&gt;
# channel.name (plain text name with spaces)&lt;br /&gt;
&lt;br /&gt;
The following operators are supported:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;&lt;br /&gt;
# &amp;lt;=&lt;br /&gt;
# &amp;gt;&lt;br /&gt;
# &amp;gt;=&lt;br /&gt;
# ==&lt;br /&gt;
# != (not equal)&lt;br /&gt;
# *= (contains text ignore case)&lt;br /&gt;
# !*= (not contains ignore case)&lt;br /&gt;
# ~= (matches regex)&lt;br /&gt;
# ~i= (matches regex ignore case)&lt;br /&gt;
# !~= (doesn&#039;t match regex)&lt;br /&gt;
# !~i= (doesn&#039;t match regex ignore case)&lt;br /&gt;
&lt;br /&gt;
The following actions are supported:&lt;br /&gt;
&lt;br /&gt;
# Disabled&lt;br /&gt;
# Show Overlay&lt;br /&gt;
# Manual Skip&lt;br /&gt;
# Auto Skip&lt;br /&gt;
The following categories are supported:&lt;br /&gt;
# sponsor&lt;br /&gt;
# selfpromo&lt;br /&gt;
# exclusive_access&lt;br /&gt;
# interaction&lt;br /&gt;
# poi_highlight&lt;br /&gt;
# intro&lt;br /&gt;
# outro&lt;br /&gt;
# preview&lt;br /&gt;
# filler&lt;br /&gt;
# chapter&lt;br /&gt;
# music_offtopic&lt;br /&gt;
The following source values are supported:&lt;br /&gt;
# server&lt;br /&gt;
# youtube&lt;br /&gt;
# autogenerated&lt;br /&gt;
# local&lt;br /&gt;
&lt;br /&gt;
==== More examples ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;// Auto skip chapters that contain the word bloopers (case insensitive)&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description *= &amp;quot;bloopers&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description ~= &amp;quot;^[Ii]ntro&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro but only if they are made by the YouTuber&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and chapter.name ~= &amp;quot;^[Ii]ntro&amp;quot; and chapter.source == &amp;quot;youtube&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro but only if they are submitted by a SponsorBlock user&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and chapter.name ~= &amp;quot;^[Ii]ntro&amp;quot; and chapter.source == &amp;quot;server&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip preview/recap on this specific channel&lt;br /&gt;
if category == &amp;quot;preview&amp;quot; and channel.id == &amp;quot;UCX8wm5-NEzN-eL-DNcsRRJA&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip intros on channels with names containing trains&lt;br /&gt;
if category == &amp;quot;intro&amp;quot; and channel.name *= &amp;quot;trains&amp;quot;&lt;br /&gt;
Auto Skip&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=3993</id>
		<title>Advanced skip options</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=3993"/>
		<updated>2025-06-07T05:09:45Z</updated>

		<summary type="html">&lt;p&gt;Ajay: Add channel examples&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Advanced skip options can be used to change the skip options depending on certain criteria of the submission itself.&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;// Skip sponsors at the start of the video&lt;br /&gt;
if time.start &amp;lt; 1 and time.end &amp;lt; 10 and category == &amp;quot;sponsor&amp;quot;&lt;br /&gt;
Auto Skip&amp;lt;/syntaxhighlight&amp;gt;Each block consists of the word &amp;quot;if&amp;quot; along with a number of conditions with &amp;quot;and&amp;quot; in the middle.&lt;br /&gt;
&lt;br /&gt;
The following attributes are supported:&lt;br /&gt;
&lt;br /&gt;
# time.start&lt;br /&gt;
# time.end&lt;br /&gt;
# timeduration&lt;br /&gt;
# time.startPercent&lt;br /&gt;
# time.endPercent&lt;br /&gt;
# time.durationPercent&lt;br /&gt;
# category&lt;br /&gt;
# actionType&lt;br /&gt;
# chapter.name (the title for chapters)&lt;br /&gt;
# chapter.source (to separate sponsorblock chapters from youtube chapters)&lt;br /&gt;
# channel.id (ID starting with UC)&lt;br /&gt;
# channel.name (plain text name with spaces)&lt;br /&gt;
&lt;br /&gt;
The following operators are supported:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;&lt;br /&gt;
# &amp;lt;=&lt;br /&gt;
# &amp;gt;&lt;br /&gt;
# &amp;gt;=&lt;br /&gt;
# ==&lt;br /&gt;
# != (not equal)&lt;br /&gt;
# *= (contains text ignore case)&lt;br /&gt;
# !*= (not contains ignore case)&lt;br /&gt;
# ~= (matches regex)&lt;br /&gt;
# ~i= (matches regex ignore case)&lt;br /&gt;
# !~= (doesn&#039;t match regex)&lt;br /&gt;
# !~i= (doesn&#039;t match regex ignore case)&lt;br /&gt;
&lt;br /&gt;
The following actions are supported:&lt;br /&gt;
&lt;br /&gt;
# Disabled&lt;br /&gt;
# Show Overlay&lt;br /&gt;
# Manual Skip&lt;br /&gt;
# Auto Skip&lt;br /&gt;
The following categories are supported:&lt;br /&gt;
# sponsor&lt;br /&gt;
# selfpromo&lt;br /&gt;
# exclusive_access&lt;br /&gt;
# interaction&lt;br /&gt;
# poi_highlight&lt;br /&gt;
# intro&lt;br /&gt;
# outro&lt;br /&gt;
# preview&lt;br /&gt;
# filler&lt;br /&gt;
# chapter&lt;br /&gt;
# music_offtopic&lt;br /&gt;
The following source values are supported:&lt;br /&gt;
# server&lt;br /&gt;
# youtube&lt;br /&gt;
# autogenerated&lt;br /&gt;
# local&lt;br /&gt;
&lt;br /&gt;
==== More examples ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;// Auto skip chapters that contain the word bloopers (case insensitive)&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description *= &amp;quot;bloopers&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description ~= &amp;quot;^[Ii]ntro&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro but only if they are made by the YouTuber&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and chapter.name ~= &amp;quot;^[Ii]ntro&amp;quot; and chapter.source == &amp;quot;youtube&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro but only if they are submitted by a SponsorBlock user&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and chapter.name ~= &amp;quot;^[Ii]ntro&amp;quot; and chapter.source == &amp;quot;server&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip preview/recap on this specific channel&lt;br /&gt;
if category == &amp;quot;preview&amp;quot; and channel.id == &amp;quot;UCX8wm5-NEzN-eL-DNcsRRJA&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip intros on channels with names containing trains&lt;br /&gt;
if category == &amp;quot;intro&amp;quot; and channel.name ~= &amp;quot;trains&amp;quot;&lt;br /&gt;
Auto Skip&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=3992</id>
		<title>Advanced skip options</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=3992"/>
		<updated>2025-06-07T05:03:25Z</updated>

		<summary type="html">&lt;p&gt;Ajay: Change attribute names&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Advanced skip options can be used to change the skip options depending on certain criteria of the submission itself.&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;// Skip sponsors at the start of the video&lt;br /&gt;
if startTime &amp;lt; 1 and endTime &amp;lt; 10 and category == &amp;quot;sponsor&amp;quot;&lt;br /&gt;
Auto Skip&amp;lt;/syntaxhighlight&amp;gt;Each block consists of the word &amp;quot;if&amp;quot; along with a number of conditions with &amp;quot;and&amp;quot; in the middle.&lt;br /&gt;
&lt;br /&gt;
The following attributes are supported:&lt;br /&gt;
&lt;br /&gt;
# time.start&lt;br /&gt;
# time.end&lt;br /&gt;
# timeduration&lt;br /&gt;
# time.startPercent&lt;br /&gt;
# time.endPercent&lt;br /&gt;
# time.durationPercent&lt;br /&gt;
# category&lt;br /&gt;
# actionType&lt;br /&gt;
# chapter.name (the title for chapters)&lt;br /&gt;
# chapter.source (to separate sponsorblock chapters from youtube chapters)&lt;br /&gt;
# channel.id (ID starting with UC)&lt;br /&gt;
# channel.name (plain text name with spaces)&lt;br /&gt;
&lt;br /&gt;
The following operators are supported:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;&lt;br /&gt;
# &amp;lt;=&lt;br /&gt;
# &amp;gt;&lt;br /&gt;
# &amp;gt;=&lt;br /&gt;
# ==&lt;br /&gt;
# != (not equal)&lt;br /&gt;
# *= (contains text ignore case)&lt;br /&gt;
# !*= (not contains ignore case)&lt;br /&gt;
# ~= (matches regex)&lt;br /&gt;
# ~i= (matches regex ignore case)&lt;br /&gt;
# !~= (doesn&#039;t match regex)&lt;br /&gt;
# !~i= (doesn&#039;t match regex ignore case)&lt;br /&gt;
&lt;br /&gt;
The following actions are supported:&lt;br /&gt;
&lt;br /&gt;
# Disabled&lt;br /&gt;
# Show Overlay&lt;br /&gt;
# Manual Skip&lt;br /&gt;
# Auto Skip&lt;br /&gt;
The following categories are supported:&lt;br /&gt;
# sponsor&lt;br /&gt;
# selfpromo&lt;br /&gt;
# exclusive_access&lt;br /&gt;
# interaction&lt;br /&gt;
# poi_highlight&lt;br /&gt;
# intro&lt;br /&gt;
# outro&lt;br /&gt;
# preview&lt;br /&gt;
# filler&lt;br /&gt;
# chapter&lt;br /&gt;
# music_offtopic&lt;br /&gt;
The following source values are supported:&lt;br /&gt;
# server&lt;br /&gt;
# youtube&lt;br /&gt;
# autogenerated&lt;br /&gt;
# local&lt;br /&gt;
&lt;br /&gt;
==== More examples ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;// Auto skip chapters that contain the word bloopers (case insensitive)&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description *= &amp;quot;bloopers&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description ~= &amp;quot;^[Ii]ntro&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro but only if they are made by the YouTuber&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description ~= &amp;quot;^[Ii]ntro&amp;quot; and source == &amp;quot;youtube&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro but only if they are submitted by a SponsorBlock user&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description ~= &amp;quot;^[Ii]ntro&amp;quot; and source == &amp;quot;server&amp;quot;&lt;br /&gt;
Auto Skip&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=3991</id>
		<title>Advanced skip options</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=3991"/>
		<updated>2025-06-07T03:52:44Z</updated>

		<summary type="html">&lt;p&gt;Ajay: Add new operators&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Advanced skip options can be used to change the skip options depending on certain criteria of the submission itself.&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;// Skip sponsors at the start of the video&lt;br /&gt;
if startTime &amp;lt; 1 and endTime &amp;lt; 10 and category == &amp;quot;sponsor&amp;quot;&lt;br /&gt;
Auto Skip&amp;lt;/syntaxhighlight&amp;gt;Each block consists of the word &amp;quot;if&amp;quot; along with a number of conditions with &amp;quot;and&amp;quot; in the middle.&lt;br /&gt;
&lt;br /&gt;
The following attributes are supported:&lt;br /&gt;
&lt;br /&gt;
# startTime&lt;br /&gt;
# endTime&lt;br /&gt;
# duration&lt;br /&gt;
# startTimePercent&lt;br /&gt;
# endTimePercent&lt;br /&gt;
# durationPercent&lt;br /&gt;
# category&lt;br /&gt;
# description (the title for chapters)&lt;br /&gt;
# source (to separate sponsorblock chapters from youtube chapters)&lt;br /&gt;
&lt;br /&gt;
The following operators are supported:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;&lt;br /&gt;
# &amp;lt;=&lt;br /&gt;
# &amp;gt;&lt;br /&gt;
# &amp;gt;=&lt;br /&gt;
# ==&lt;br /&gt;
# != (not equal)&lt;br /&gt;
# *= (contains text ignore case)&lt;br /&gt;
# !*= (not contains ignore case)&lt;br /&gt;
# ~= (matches regex)&lt;br /&gt;
# ~i= (matches regex ignore case)&lt;br /&gt;
# !~= (doesn&#039;t match regex)&lt;br /&gt;
# !~i= (doesn&#039;t match regex ignore case)&lt;br /&gt;
&lt;br /&gt;
The following actions are supported:&lt;br /&gt;
&lt;br /&gt;
# Disabled&lt;br /&gt;
# Show Overlay&lt;br /&gt;
# Manual Skip&lt;br /&gt;
# Auto Skip&lt;br /&gt;
The following categories are supported:&lt;br /&gt;
# sponsor&lt;br /&gt;
# selfpromo&lt;br /&gt;
# exclusive_access&lt;br /&gt;
# interaction&lt;br /&gt;
# poi_highlight&lt;br /&gt;
# intro&lt;br /&gt;
# outro&lt;br /&gt;
# preview&lt;br /&gt;
# filler&lt;br /&gt;
# chapter&lt;br /&gt;
# music_offtopic&lt;br /&gt;
The following source values are supported:&lt;br /&gt;
# server&lt;br /&gt;
# youtube&lt;br /&gt;
# autogenerated&lt;br /&gt;
# local&lt;br /&gt;
&lt;br /&gt;
==== More examples ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;// Auto skip chapters that contain the word bloopers (case insensitive)&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description *= &amp;quot;bloopers&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description ~= &amp;quot;^[Ii]ntro&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro but only if they are made by the YouTuber&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description ~= &amp;quot;^[Ii]ntro&amp;quot; and source == &amp;quot;youtube&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro but only if they are submitted by a SponsorBlock user&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description ~= &amp;quot;^[Ii]ntro&amp;quot; and source == &amp;quot;server&amp;quot;&lt;br /&gt;
Auto Skip&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=3989</id>
		<title>Advanced skip options</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=3989"/>
		<updated>2025-06-07T03:22:03Z</updated>

		<summary type="html">&lt;p&gt;Ajay: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Advanced skip options can be used to change the skip options depending on certain criteria of the submission itself.&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;// Skip sponsors at the start of the video&lt;br /&gt;
if startTime &amp;lt; 1 and endTime &amp;lt; 10 and category == &amp;quot;sponsor&amp;quot;&lt;br /&gt;
Auto Skip&amp;lt;/syntaxhighlight&amp;gt;Each block consists of the word &amp;quot;if&amp;quot; along with a number of conditions with &amp;quot;and&amp;quot; in the middle.&lt;br /&gt;
&lt;br /&gt;
The following attributes are supported:&lt;br /&gt;
&lt;br /&gt;
# startTime&lt;br /&gt;
# endTime&lt;br /&gt;
# duration&lt;br /&gt;
# startTimePercent&lt;br /&gt;
# endTimePercent&lt;br /&gt;
# durationPercent&lt;br /&gt;
# category&lt;br /&gt;
# description (the title for chapters)&lt;br /&gt;
# source (to separate sponsorblock chapters from youtube chapters)&lt;br /&gt;
&lt;br /&gt;
The following operators are supported:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;&lt;br /&gt;
# &amp;lt;=&lt;br /&gt;
# &amp;gt;&lt;br /&gt;
# &amp;gt;=&lt;br /&gt;
# ==&lt;br /&gt;
# != (not equal)&lt;br /&gt;
# *= (contains text case insensitive)&lt;br /&gt;
# ~= (matches regex)&lt;br /&gt;
&lt;br /&gt;
The following actions are supported:&lt;br /&gt;
&lt;br /&gt;
# Disabled&lt;br /&gt;
# Show Overlay&lt;br /&gt;
# Manual Skip&lt;br /&gt;
# Auto Skip&lt;br /&gt;
The following categories are supported:&lt;br /&gt;
# sponsor&lt;br /&gt;
# selfpromo&lt;br /&gt;
# exclusive_access&lt;br /&gt;
# interaction&lt;br /&gt;
# poi_highlight&lt;br /&gt;
# intro&lt;br /&gt;
# outro&lt;br /&gt;
# preview&lt;br /&gt;
# filler&lt;br /&gt;
# chapter&lt;br /&gt;
# music_offtopic&lt;br /&gt;
The following source values are supported:&lt;br /&gt;
# server&lt;br /&gt;
# youtube&lt;br /&gt;
# autogenerated&lt;br /&gt;
# local&lt;br /&gt;
&lt;br /&gt;
==== More examples ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;// Auto skip chapters that contain the word bloopers (case insensitive)&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description *= &amp;quot;bloopers&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description ~= &amp;quot;^[Ii]ntro&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro but only if they are made by the YouTuber&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description ~= &amp;quot;^[Ii]ntro&amp;quot; and source == &amp;quot;youtube&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro but only if they are submitted by a SponsorBlock user&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description ~= &amp;quot;^[Ii]ntro&amp;quot; and source == &amp;quot;server&amp;quot;&lt;br /&gt;
Auto Skip&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=3988</id>
		<title>Advanced skip options</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=3988"/>
		<updated>2025-06-07T03:10:01Z</updated>

		<summary type="html">&lt;p&gt;Ajay: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Advanced skip options can be used to change the skip options depending on certain criteria of the submission itself.&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;// Skip sponsors at the start of the video&lt;br /&gt;
if startTime &amp;lt; 1 and endTime &amp;lt; 10 and category == &amp;quot;sponsor&amp;quot;&lt;br /&gt;
Auto Skip&amp;lt;/syntaxhighlight&amp;gt;Each block consists of the word &amp;quot;if&amp;quot; along with a number of conditions with &amp;quot;and&amp;quot; in the middle.&lt;br /&gt;
&lt;br /&gt;
The following attributes are supported:&lt;br /&gt;
&lt;br /&gt;
# startTime&lt;br /&gt;
# endTime&lt;br /&gt;
# duration&lt;br /&gt;
# category&lt;br /&gt;
# description (the title for chapters)&lt;br /&gt;
# source (to separate sponsorblock chapters from youtube chapters)&lt;br /&gt;
&lt;br /&gt;
The following operators are supported:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;&lt;br /&gt;
# &amp;lt;=&lt;br /&gt;
# &amp;gt;&lt;br /&gt;
# &amp;gt;=&lt;br /&gt;
# ==&lt;br /&gt;
# != (not equal)&lt;br /&gt;
# *= (contains text case insensitive)&lt;br /&gt;
# ~= (matches regex)&lt;br /&gt;
&lt;br /&gt;
The following actions are supported:&lt;br /&gt;
&lt;br /&gt;
# Disabled&lt;br /&gt;
# Show Overlay&lt;br /&gt;
# Manual Skip&lt;br /&gt;
# Auto Skip&lt;br /&gt;
The following categories are supported:&lt;br /&gt;
# sponsor&lt;br /&gt;
# selfpromo&lt;br /&gt;
# exclusive_access&lt;br /&gt;
# interaction&lt;br /&gt;
# poi_highlight&lt;br /&gt;
# intro&lt;br /&gt;
# outro&lt;br /&gt;
# preview&lt;br /&gt;
# filler&lt;br /&gt;
# chapter&lt;br /&gt;
# music_offtopic&lt;br /&gt;
The following source values are supported:&lt;br /&gt;
# server&lt;br /&gt;
# youtube&lt;br /&gt;
# autogenerated&lt;br /&gt;
# local&lt;br /&gt;
&lt;br /&gt;
==== More examples ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;// Auto skip chapters that contain the word bloopers (case insensitive)&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description *= &amp;quot;bloopers&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description ~= &amp;quot;^[Ii]ntro&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro but only if they are made by the YouTuber&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description ~= &amp;quot;^[Ii]ntro&amp;quot; and source == &amp;quot;youtube&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro but only if they are submitted by a SponsorBlock user&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description ~= &amp;quot;^[Ii]ntro&amp;quot; and source == &amp;quot;server&amp;quot;&lt;br /&gt;
Auto Skip&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=3987</id>
		<title>Advanced skip options</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=3987"/>
		<updated>2025-06-07T02:57:44Z</updated>

		<summary type="html">&lt;p&gt;Ajay: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Advanced skip options can be used to change the skip options depending on certain criteria of the submission itself.&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;// Skip sponsors at the start of the video&lt;br /&gt;
if startTime &amp;lt; 1 and endTime &amp;lt; 10 and category == &amp;quot;sponsor&amp;quot;&lt;br /&gt;
Auto Skip&amp;lt;/syntaxhighlight&amp;gt;Each block consists of the word &amp;quot;if&amp;quot; along with a number of conditions with &amp;quot;and&amp;quot; in the middle.&lt;br /&gt;
&lt;br /&gt;
The following attributes are supported:&lt;br /&gt;
&lt;br /&gt;
# startTime&lt;br /&gt;
# endTime&lt;br /&gt;
# duration&lt;br /&gt;
# category&lt;br /&gt;
# description (the title for chapters)&lt;br /&gt;
# source (to separate sponsorblock chapters from youtube chapters)&lt;br /&gt;
&lt;br /&gt;
The following operators are supported:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;&lt;br /&gt;
# &amp;lt;=&lt;br /&gt;
# &amp;gt;&lt;br /&gt;
# &amp;gt;=&lt;br /&gt;
# ==&lt;br /&gt;
# != (not equal)&lt;br /&gt;
# *= (contains text case insensitive)&lt;br /&gt;
# ~= (matches regex)&lt;br /&gt;
&lt;br /&gt;
The following actions are supported:&lt;br /&gt;
&lt;br /&gt;
# Disabled&lt;br /&gt;
# Show Overlay&lt;br /&gt;
# Manual Skip&lt;br /&gt;
# Auto Skip&lt;br /&gt;
The following categories are supported:&lt;br /&gt;
# sponsor&lt;br /&gt;
# selfpromo&lt;br /&gt;
# exclusive_access&lt;br /&gt;
# interaction&lt;br /&gt;
# poi_highlight&lt;br /&gt;
# intro&lt;br /&gt;
# outro&lt;br /&gt;
# preview&lt;br /&gt;
# filler&lt;br /&gt;
# chapter&lt;br /&gt;
# music_offtopic&lt;br /&gt;
The following source values are supported:&lt;br /&gt;
# server&lt;br /&gt;
# youtube&lt;br /&gt;
# local&lt;br /&gt;
&lt;br /&gt;
==== More examples ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;// Auto skip chapters that contain the word bloopers (case insensitive)&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description *= &amp;quot;bloopers&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description ~= &amp;quot;^[Ii]ntro&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro but only if they are made by the YouTuber&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description ~= &amp;quot;^[Ii]ntro&amp;quot; and source == &amp;quot;youtube&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro but only if they are submitted by a SponsorBlock user&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description ~= &amp;quot;^[Ii]ntro&amp;quot; and source == &amp;quot;server&amp;quot;&lt;br /&gt;
Auto Skip&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=3986</id>
		<title>Advanced skip options</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=3986"/>
		<updated>2025-06-07T02:57:18Z</updated>

		<summary type="html">&lt;p&gt;Ajay: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Advanced skip options can be used to change the skip options depending on certain criteria of the submission itself.&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;// Skip sponsors at the start of the video&lt;br /&gt;
if startTime &amp;lt; 1 and endTime &amp;lt; 10 and category == &amp;quot;sponsor&amp;quot;&lt;br /&gt;
Auto Skip&amp;lt;/syntaxhighlight&amp;gt;Each block consists of the word &amp;quot;if&amp;quot; along with a number of conditions with &amp;quot;and&amp;quot; in the middle.&lt;br /&gt;
&lt;br /&gt;
The following attributes are supported:&lt;br /&gt;
&lt;br /&gt;
# startTime&lt;br /&gt;
# endTime&lt;br /&gt;
# duration&lt;br /&gt;
# category&lt;br /&gt;
# description (the title for chapters)&lt;br /&gt;
# source (to separate sponsorblock chapters from youtube chapters)&lt;br /&gt;
&lt;br /&gt;
The following operators are supported:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;&lt;br /&gt;
# &amp;lt;=&lt;br /&gt;
# &amp;gt;&lt;br /&gt;
# &amp;gt;=&lt;br /&gt;
# ==&lt;br /&gt;
# != (not equal)&lt;br /&gt;
# *= (contains text case insensitive)&lt;br /&gt;
# ~= (matches regex)&lt;br /&gt;
&lt;br /&gt;
The following actions are supported:&lt;br /&gt;
&lt;br /&gt;
# Disabled&lt;br /&gt;
# Show Overlay&lt;br /&gt;
# Manual Skip&lt;br /&gt;
# Auto Skip&lt;br /&gt;
The following categories are supported:&lt;br /&gt;
# sponsor&lt;br /&gt;
# selfpromo&lt;br /&gt;
# exclusive_access&lt;br /&gt;
# interaction&lt;br /&gt;
# poi_highlight&lt;br /&gt;
# intro&lt;br /&gt;
# outro&lt;br /&gt;
# preview&lt;br /&gt;
# filler&lt;br /&gt;
# chapter&lt;br /&gt;
# music_offtopic&lt;br /&gt;
The following source values are supported:&lt;br /&gt;
# server&lt;br /&gt;
# youtube&lt;br /&gt;
# local&lt;br /&gt;
&lt;br /&gt;
==== More examples ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;// Auto skip chapters that contain the word Bloopers&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description *= &amp;quot;Bloopers&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description ~= &amp;quot;^[Ii]ntro&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro but only if they are made by the YouTuber&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description ~= &amp;quot;^[Ii]ntro&amp;quot; and source == &amp;quot;youtube&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro but only if they are submitted by a SponsorBlock user&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description ~= &amp;quot;^[Ii]ntro&amp;quot; and source == &amp;quot;server&amp;quot;&lt;br /&gt;
Auto Skip&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=3984</id>
		<title>Advanced skip options</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=3984"/>
		<updated>2025-06-07T01:58:31Z</updated>

		<summary type="html">&lt;p&gt;Ajay: Add more examples&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Advanced skip options can be used to change the skip options depending on certain criteria of the submission itself.&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;// Skip sponsors at the start of the video&lt;br /&gt;
if startTime &amp;lt; 1 and endTime &amp;lt; 10 and category == &amp;quot;sponsor&amp;quot;&lt;br /&gt;
Auto Skip&amp;lt;/syntaxhighlight&amp;gt;Each block consists of the word &amp;quot;if&amp;quot; along with a number of conditions with &amp;quot;and&amp;quot; in the middle.&lt;br /&gt;
&lt;br /&gt;
The following attributes are supported:&lt;br /&gt;
&lt;br /&gt;
# startTime&lt;br /&gt;
# endTime&lt;br /&gt;
# duration&lt;br /&gt;
# category&lt;br /&gt;
# description (the title for chapters)&lt;br /&gt;
# source (to separate sponsorblock chapters from youtube chapters)&lt;br /&gt;
&lt;br /&gt;
The following operators are supported:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;&lt;br /&gt;
# &amp;lt;=&lt;br /&gt;
# &amp;gt;&lt;br /&gt;
# &amp;gt;=&lt;br /&gt;
# ==&lt;br /&gt;
# != (not equal)&lt;br /&gt;
# *= (contains text)&lt;br /&gt;
# ~= (matches regex)&lt;br /&gt;
&lt;br /&gt;
The following actions are supported:&lt;br /&gt;
&lt;br /&gt;
# Disabled&lt;br /&gt;
# Show Overlay&lt;br /&gt;
# Manual Skip&lt;br /&gt;
# Auto SkipThe following categories are supported:&lt;br /&gt;
# sponsor&lt;br /&gt;
# selfpromo&lt;br /&gt;
# exclusive_access&lt;br /&gt;
# interaction&lt;br /&gt;
# poi_highlight&lt;br /&gt;
# intro&lt;br /&gt;
# outro&lt;br /&gt;
# preview&lt;br /&gt;
# filler&lt;br /&gt;
# chapter&lt;br /&gt;
# music_offtopicThe following source values are supported:&lt;br /&gt;
# server&lt;br /&gt;
# youtube&lt;br /&gt;
# local&lt;br /&gt;
&lt;br /&gt;
==== More examples ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;// Auto skip chapters that contain the word Bloopers&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description *= &amp;quot;Bloopers&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description ~= &amp;quot;^[Ii]ntro&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro but only if they are made by the YouTuber&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description ~= &amp;quot;^[Ii]ntro&amp;quot; and source == &amp;quot;youtube&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro but only if they are submitted by a SponsorBlock user&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description ~= &amp;quot;^[Ii]ntro&amp;quot; and source == &amp;quot;server&amp;quot;&lt;br /&gt;
Auto Skip&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=3983</id>
		<title>Advanced skip options</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=3983"/>
		<updated>2025-06-07T01:55:12Z</updated>

		<summary type="html">&lt;p&gt;Ajay: Add source option and list of categories&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Advanced skip options can be used to change the skip options depending on certain criteria of the submission itself.&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;// Skip sponsors at the start of the video&lt;br /&gt;
if startTime &amp;lt; 1 and endTime &amp;lt; 10 and category == &amp;quot;sponsor&amp;quot;&lt;br /&gt;
Auto Skip&amp;lt;/syntaxhighlight&amp;gt;Each block consists of the word &amp;quot;if&amp;quot; along with a number of conditions with &amp;quot;and&amp;quot; in the middle.&lt;br /&gt;
&lt;br /&gt;
The following attributes are supported:&lt;br /&gt;
&lt;br /&gt;
# startTime&lt;br /&gt;
# endTime&lt;br /&gt;
# duration&lt;br /&gt;
# category&lt;br /&gt;
# description (the title for chapters)&lt;br /&gt;
# source (to separate sponsorblock chapters from youtube chapters)&lt;br /&gt;
&lt;br /&gt;
The following operators are supported:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;&lt;br /&gt;
# &amp;lt;=&lt;br /&gt;
# &amp;gt;&lt;br /&gt;
# &amp;gt;=&lt;br /&gt;
# ==&lt;br /&gt;
# != (not equal)&lt;br /&gt;
# *= (contains text)&lt;br /&gt;
# ~= (matches regex)&lt;br /&gt;
&lt;br /&gt;
The following actions are supported:&lt;br /&gt;
&lt;br /&gt;
# Disabled&lt;br /&gt;
# Show Overlay&lt;br /&gt;
# Manual Skip&lt;br /&gt;
# Auto SkipThe following categories are supported:&lt;br /&gt;
# sponsor&lt;br /&gt;
# selfpromo&lt;br /&gt;
# exclusive_access&lt;br /&gt;
# interaction&lt;br /&gt;
# poi_highlight&lt;br /&gt;
# intro&lt;br /&gt;
# outro&lt;br /&gt;
# preview&lt;br /&gt;
# filler&lt;br /&gt;
# chapter&lt;br /&gt;
# music_offtopicThe following source values are supported:&lt;br /&gt;
# server&lt;br /&gt;
# youtube&lt;br /&gt;
# local&lt;br /&gt;
&lt;br /&gt;
==== More examples ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
// Auto skip chapters that contain the word Bloopers&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description *= &amp;quot;Bloopers&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description ~= &amp;quot;^[Ii]ntro&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=3982</id>
		<title>Advanced skip options</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=3982"/>
		<updated>2025-06-06T23:27:34Z</updated>

		<summary type="html">&lt;p&gt;Ajay: clarify wording&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Advanced skip options can be used to change the skip options depending on certain criteria of the submission itself.&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;// Skip sponsors at the start of the video&lt;br /&gt;
if startTime &amp;lt; 1 and endTime &amp;lt; 10 and category == &amp;quot;sponsor&amp;quot;&lt;br /&gt;
Auto Skip&amp;lt;/syntaxhighlight&amp;gt;Each block consists of the word &amp;quot;if&amp;quot; along with a number of conditions with &amp;quot;and&amp;quot; in the middle.&lt;br /&gt;
&lt;br /&gt;
The following attributes are supported:&lt;br /&gt;
&lt;br /&gt;
# startTime&lt;br /&gt;
# endTime&lt;br /&gt;
# duration&lt;br /&gt;
# category&lt;br /&gt;
# description (the title for chapters)&lt;br /&gt;
&lt;br /&gt;
The following operators are supported:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;&lt;br /&gt;
# &amp;lt;=&lt;br /&gt;
# &amp;gt;&lt;br /&gt;
# &amp;gt;=&lt;br /&gt;
# ==&lt;br /&gt;
# != (not equal)&lt;br /&gt;
# *= (contains text)&lt;br /&gt;
# ~= (matches regex)&lt;br /&gt;
&lt;br /&gt;
The following actions are supported:&lt;br /&gt;
&lt;br /&gt;
# Disabled&lt;br /&gt;
# Show Overlay&lt;br /&gt;
# Manual Skip&lt;br /&gt;
# Auto Skip&lt;br /&gt;
&lt;br /&gt;
==== More examples ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
// Auto skip chapters that contain the word Bloopers&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description *= &amp;quot;Bloopers&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description ~= &amp;quot;^[Ii]ntro&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=3981</id>
		<title>Advanced skip options</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=3981"/>
		<updated>2025-06-06T23:27:13Z</updated>

		<summary type="html">&lt;p&gt;Ajay: Add initial page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Advanced skip options can be used to change the skip options depending on certain criteria of the submission itself.&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;// Skip sponsors at the start of the video&lt;br /&gt;
if startTime &amp;lt; 1 and endTime &amp;lt; 10 and category == &amp;quot;sponsor&amp;quot;&lt;br /&gt;
Auto Skip&amp;lt;/syntaxhighlight&amp;gt;Each block consists of the word &amp;quot;if&amp;quot; along with a number of conditions with &amp;quot;and&amp;quot; in the middle.&lt;br /&gt;
&lt;br /&gt;
The following attributes are supported:&lt;br /&gt;
&lt;br /&gt;
# startTime&lt;br /&gt;
# endTime&lt;br /&gt;
# duration&lt;br /&gt;
# category&lt;br /&gt;
# description (the title for chapters)&lt;br /&gt;
&lt;br /&gt;
The following operators are supported:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;&lt;br /&gt;
# &amp;lt;=&lt;br /&gt;
# &amp;gt;&lt;br /&gt;
# &amp;gt;=&lt;br /&gt;
# ==&lt;br /&gt;
# != (not equal)&lt;br /&gt;
# *= (contains text)&lt;br /&gt;
# ~= (passed regex)&lt;br /&gt;
&lt;br /&gt;
The following actions are supported:&lt;br /&gt;
&lt;br /&gt;
# Disabled&lt;br /&gt;
# Show Overlay&lt;br /&gt;
# Manual Skip&lt;br /&gt;
# Auto Skip&lt;br /&gt;
&lt;br /&gt;
==== More examples ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
// Auto skip chapters that contain the word Bloopers&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description *= &amp;quot;Bloopers&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&lt;br /&gt;
// Auto skip chapters that start with the word Intro or intro&lt;br /&gt;
if category == &amp;quot;chapter&amp;quot; and description ~= &amp;quot;^[Ii]ntro&amp;quot;&lt;br /&gt;
Auto Skip&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=3980</id>
		<title>Advanced skip options</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=Advanced_skip_options&amp;diff=3980"/>
		<updated>2025-06-06T09:14:30Z</updated>

		<summary type="html">&lt;p&gt;Ajay: Created page with &amp;quot;Todo&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Todo&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=API_Docs&amp;diff=3893</id>
		<title>API Docs</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=API_Docs&amp;diff=3893"/>
		<updated>2025-02-21T03:06:44Z</updated>

		<summary type="html">&lt;p&gt;Ajay: Add info about trimmed UUIDs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Formatting Notes:&lt;br /&gt;
&lt;br /&gt;
userID instead of user ID&lt;br /&gt;
leave a space after the start of the comment, &lt;br /&gt;
public userID &amp;amp; local userID --&amp;gt;{{API Docs}}&lt;br /&gt;
&lt;br /&gt;
If you are looking for DeArrow API Docs, see [[API Docs/DeArrow|its page]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Libraries&#039;&#039;&#039;: [https://www.npmjs.com/package/sponsorblock-api Node.js], [https://github.com/wasi-master/sponsorblock.py Python], [https://crates.io/crates/sponsor-block Rust], [https://github.com/porjo/sponsorblockgo Go], [https://github.com/zt64/sponsorblock-kt Kotlin]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sub&amp;gt;[https://github.com/ajayyy/SponsorBlock/wiki/Webhooks Webhook Docs] | [https://github.com/mchangrh/sb-openapi OpenAPI Docs]&amp;lt;/sub&amp;gt; &lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/skipSegments&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Get segments for a video.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  videoID: string,&lt;br /&gt;
  &lt;br /&gt;
  category: string, // Optional, defaults to &amp;quot;sponsor&amp;quot;, can be repeated for multiple categories. [1]&lt;br /&gt;
  // OR&lt;br /&gt;
  categories: string[], // Optional [1]&lt;br /&gt;
&lt;br /&gt;
  requiredSegment: string, // Segment UUID to require to be retrieved, even if they don&#039;t meet the minimum vote threshold. Can be repeated for multiple segments.&lt;br /&gt;
  // OR&lt;br /&gt;
  requiredSegments: string[], // Optional, array of required segment UUIDs&lt;br /&gt;
&lt;br /&gt;
  actionType: string // Optional, default skip. Can be repeated for multiple types. [3]&lt;br /&gt;
  // OR  &lt;br /&gt;
  actionTypes: string[] // Optional, array of action types&lt;br /&gt;
&lt;br /&gt;
  service: string, // Optional, default is &#039;YouTube&#039; [2]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &amp;lt;ref name=&amp;quot;:0&amp;quot;&amp;gt;See [[Types#Category|Types]] for full list of possible categories. To get multiple, create an array with the format &amp;lt;code&amp;gt;[&amp;quot;sponsor&amp;quot;, intro&amp;quot;]&amp;lt;/code&amp;gt;. &amp;lt;/ref&amp;gt; &amp;lt;ref name=&amp;quot;:1&amp;quot;&amp;gt;Service to get segments for. See [[Types#Service|Types]] for supported services&amp;lt;/ref&amp;gt; &amp;lt;ref name=&amp;quot;:2&amp;quot;&amp;gt;Action Types: See [[Types#Action Type|Types]] for possible values. Select multiple with the format &amp;lt;code&amp;gt;[&amp;quot;skip&amp;quot;,&amp;quot;mute]&amp;lt;/code&amp;gt;&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
[{ // Array of this object&lt;br /&gt;
   segment: float[], //[0, 15.23] start and end time in seconds&lt;br /&gt;
   UUID: string,&lt;br /&gt;
   category: string, // [1]&lt;br /&gt;
   videoDuration: float // Duration of video when submission occurred (to be used to determine when a submission is out of date). 0 when unknown. +- 1 second&lt;br /&gt;
   actionType: string, // [3]&lt;br /&gt;
   locked: int, // if submission is locked&lt;br /&gt;
   votes: int, // Votes on segment&lt;br /&gt;
   description: string, // title for chapters, empty string for other segments&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
404: Not Found&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/skipSegments/:sha256HashPrefix&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Get segments for a video with extra privacy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sha256HashPrefix&amp;lt;/code&amp;gt; is a hash of the YouTube &amp;lt;code&amp;gt;videoID&amp;lt;/code&amp;gt;. It should be the first 4 - 32 characters (4 is recommended). This provides extra privacy by potentially finding more than just the video you are looking for since the server will not know exactly what video you are looking for.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  prefix: string, // Can be used instead of path&lt;br /&gt;
&lt;br /&gt;
  category: string, // Optional, defaults to &amp;quot;sponsor&amp;quot;, can be repeated for multiple categories. [1]&lt;br /&gt;
  // OR&lt;br /&gt;
  categories: string[], // Optional, array of categories [1]&lt;br /&gt;
&lt;br /&gt;
  requiredSegment: string, // Segment UUID to require to be retrieved, even if they don&#039;t meet the minimum vote threshold. Can be repeated for multiple segments.&lt;br /&gt;
  // OR&lt;br /&gt;
  requiredSegments: string[], // Optional, array of required segment UUIDs&lt;br /&gt;
&lt;br /&gt;
  actionType: string // Optional, default skip. Can be repeated for multiple types. [3]&lt;br /&gt;
  // OR  &lt;br /&gt;
  actionTypes: string[] // Optional, array of action types [3]&lt;br /&gt;
&lt;br /&gt;
  service: string // Optional, default is &#039;YouTube&#039;. [2]&lt;br /&gt;
&lt;br /&gt;
  trimUUIDs: boolean // Optional, if true then UUIDs in the response will be shorter to reduce bandwidth&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;:1&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
[{ // Array of this object&lt;br /&gt;
   videoID: string,&lt;br /&gt;
   segments: [{ // Array of this object&lt;br /&gt;
       segment: float[], // [0, 15.23] start and end time in seconds&lt;br /&gt;
       UUID: string,&lt;br /&gt;
       category: string, [1]&lt;br /&gt;
       actionType: string, // [1]&lt;br /&gt;
       locked: int, // if segment is locked&lt;br /&gt;
       votes: int, // votes on segment&lt;br /&gt;
       videoDuration: int, // Duration of video when submissions occurred&lt;br /&gt;
       description: string // title for chapters, empty string for other segments&lt;br /&gt;
   }]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
404: Not Found&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;POST&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/skipSegments&amp;lt;/code&amp;gt;=====&lt;br /&gt;
{{Message box|mini=1|type=warning&lt;br /&gt;
|title=Automating submissions is not allowed.&lt;br /&gt;
|text=Please see the [[Automating submissions]] page for more information.&lt;br /&gt;
}}&lt;br /&gt;
Create a segment on a video&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  videoID: string,&lt;br /&gt;
  startTime: float,&lt;br /&gt;
  endTime: float,&lt;br /&gt;
  category: string, // [1]&lt;br /&gt;
  userID: string, // This should be a randomly generated 30 char string stored locally (not the public one)&lt;br /&gt;
  userAgent: string, // &amp;quot;Name of Client/Version&amp;quot; or &amp;quot;[BOT] Name of Bot/Version&amp;quot; ex. &amp;quot;Chromium/1.0.0&amp;quot;&lt;br /&gt;
  service: string, // Optional, default is &#039;YouTube&#039;. [2]&lt;br /&gt;
  videoDuration: float, // Optional, duration of video, will attempt to retrieve from the YouTube API if missing (to be used to determine when a submission is out of date)&lt;br /&gt;
  actionType: string // Optional, default is &amp;quot;skip&amp;quot;. [3]&lt;br /&gt;
  description: string // Chapter title for chapters, must be an empty string or not present for other segment types&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;:1&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;OR&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (JSON Body):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  videoID: string,&lt;br /&gt;
  userID: string, // This should be a randomly generated 30 character string stored locally (not the public one)&lt;br /&gt;
  userAgent: string, // &amp;quot;Name of Client/Version&amp;quot; or &amp;quot;[BOT] Name of Bot/Version&amp;quot; ex. &amp;quot;Chromium/1.0.0&amp;quot;&lt;br /&gt;
  service: string, // Optional, default is &#039;YouTube&#039;.[2]&lt;br /&gt;
  videoDuration: float, // Optional, duration of video, will attempt to retrieve from the YouTube API if missing (to be used to determine when a submission is out of date)&lt;br /&gt;
&lt;br /&gt;
  segments: [{ // Array of this object&lt;br /&gt;
     segment: float[], // [0, 15.23] start and end time in seconds&lt;br /&gt;
     category: string, // [1]&lt;br /&gt;
     actionType: string // Optional, defaults to &amp;quot;skip&amp;quot;. [3]&lt;br /&gt;
     description: string // Chapter title for chapters, must be an empty string or not present for other segment types&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;:1&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{ // array of this object&lt;br /&gt;
  UUID: string, // UUID of submitted segment&lt;br /&gt;
  category: string, // submitted category [1]&lt;br /&gt;
  segment: float[] // start and end time of submitted segment&lt;br /&gt;
}[]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
403: Rejected by auto moderator (Reason will be sent in the response)&lt;br /&gt;
&lt;br /&gt;
429: Rate Limit (Too many for the same user or IP)&lt;br /&gt;
&lt;br /&gt;
409: Duplicate&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;POST&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/voteOnSponsorTime&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Vote on a segment or vote to change the category of the segment.&lt;br /&gt;
&lt;br /&gt;
Creators of the segment and VIPs can remove the segment or change the category with only one vote.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:400px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight:bold;&amp;quot;&amp;gt;VIP voting notes&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
VIP upvotes will:&lt;br /&gt;
* lock the segment&lt;br /&gt;
* remove &amp;quot;hidden&amp;quot; property&lt;br /&gt;
* remove &amp;quot;shadowHidden&amp;quot; property&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input: Normal Vote&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  UUID: string, // UUID of the segment being voted on&lt;br /&gt;
  videoID: string // Optional, only required if the provided UUID is a trimmed UUID (to reduce bandwidth, skipSegments API can return trimmed UUIDs)&lt;br /&gt;
  userID: string, // Local userID&lt;br /&gt;
  type: int // 0 for downvote, 1 for upvote, 20 to undo vote&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;OR&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input: Category Vote&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  UUID: string, // UUID of the segment being voted on&lt;br /&gt;
  userID: string, // Local userID&lt;br /&gt;
  category: string // Category to change this submission to [1]&lt;br /&gt;
} &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  Nothing (status code 200)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
403: Reason given in request (moderation)&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;POST&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/viewedVideoSponsorTime&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Add view to segment&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  UUID: string // UUID of segment viewed&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  Nothing (status code 200)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/userInfo&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Get information about a user&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userID: string // local UserID&lt;br /&gt;
  // OR&lt;br /&gt;
  publicUserID: string // Public userID&lt;br /&gt;
&lt;br /&gt;
  values: string[] // Optional, Values to get from userInfo&lt;br /&gt;
    // default values are&lt;br /&gt;
    // [&amp;quot;userID&amp;quot;, &amp;quot;userName&amp;quot;, &amp;quot;minutesSaved&amp;quot;, &amp;quot;segmentCount&amp;quot;, &amp;quot;ignoredSegmentCount&amp;quot;,&lt;br /&gt;
    // &amp;quot;viewCount&amp;quot;, &amp;quot;ignoredViewCount&amp;quot;, &amp;quot;warnings&amp;quot;, &amp;quot;warningReason&amp;quot;, &amp;quot;reputation&amp;quot;,&lt;br /&gt;
    // &amp;quot;vip&amp;quot;, &amp;quot;lastSegmentID&amp;quot;]&lt;br /&gt;
  // OR&lt;br /&gt;
  value: string // Optional, Value to get from userInfo, can be repeated for multiple values&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userID: string, // Public userID&lt;br /&gt;
  userName: string, // Public userID if not set&lt;br /&gt;
  minutesSaved: float, // Minutes saved&lt;br /&gt;
  segmentCount: int, // Total number of segments excluding ignored/ hidden segments&lt;br /&gt;
  ignoredSegmentCount: int, // Total number of ignored/ hidden segments&lt;br /&gt;
  viewCount: int, // Total number of views excluding view on ignored/ hidden segments&lt;br /&gt;
  ignoredViewCount: int, // Total number of view on ignored/ hidden segments&lt;br /&gt;
  warnings: int, // Currently enabled warnings&lt;br /&gt;
  reputation: float, &lt;br /&gt;
  vip: int, // VIP status&lt;br /&gt;
  lastSegmentID: string, // UUID of last submitted segment&lt;br /&gt;
  permissions: { // Can the user submit segments of this category?&lt;br /&gt;
    category: boolean // [1]&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/userStats&amp;lt;/code&amp;gt;=====&lt;br /&gt;
&lt;br /&gt;
Get stats for a user&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userID: string // local UserID&lt;br /&gt;
  // OR&lt;br /&gt;
  publicUserID: string // Public userID&lt;br /&gt;
&lt;br /&gt;
  fetchCategoryStats: boolean // default false, display category stats&lt;br /&gt;
  fetchActionTypeStats: boolean // default false, display type stats&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userID: string // hashed userID&lt;br /&gt;
  userName: string // userName&lt;br /&gt;
  overallStats: {&lt;br /&gt;
    minutesSaved: integer // same as userInfo&lt;br /&gt;
    segmentCount: integer // same as userInfo&lt;br /&gt;
  }&lt;br /&gt;
  // IF CHOSEN&lt;br /&gt;
  categoryCount: { // # of segments per category&lt;br /&gt;
    sponsor: integer&lt;br /&gt;
    intro: integer&lt;br /&gt;
    outro: integer&lt;br /&gt;
    interaction: integer&lt;br /&gt;
    selfpromo: integer&lt;br /&gt;
    music_offtopic: integer&lt;br /&gt;
    preview: integer&lt;br /&gt;
    poi_highlight: integer&lt;br /&gt;
    filler: integer,&lt;br /&gt;
    exclusive_access: integer,&lt;br /&gt;
    chapter: integer&lt;br /&gt;
  }&lt;br /&gt;
  // IF CHOSEN&lt;br /&gt;
  actionTypeCount: { // # of segments per type&lt;br /&gt;
    skip: integer,&lt;br /&gt;
    mute: integer,&lt;br /&gt;
    full: integer,&lt;br /&gt;
    poi: integer,&lt;br /&gt;
    chapter: integer&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/getViewsForUser&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Get the number of views a user has on all their segments&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userID: string // local UserID&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  viewCount: int&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
404: Not Found&lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/getSavedTimeForUser&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Get the total time saved from all the user&#039;s segments&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userID: string // Local userID&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  timeSaved: float // In minutes&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
404: Not Found&lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;POST&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/setUsername&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Set a username for a userID&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters): Setting username for self&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userID: string, // Local userID&lt;br /&gt;
  username: string, // Optional&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;OR&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters): Setting username as &#039;&#039;&#039;admin&#039;&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userID: string, // Public userID&lt;br /&gt;
  username: string, // Optional&lt;br /&gt;
  adminUserID: string // Admin&#039;s local userID&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  Nothing (status code 200)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
403: Unauthorized (You are not an admin)&lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/getUsername&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Get current username&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userID: string // Local userID&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userName: string // Public userID if no username has been set&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/segmentInfo&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Get information about segments&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  // Only the first 10 entries will be processed&lt;br /&gt;
  UUID: string, // Can be repeated for multiple segments&lt;br /&gt;
  // OR&lt;br /&gt;
  UUIDs: string[] // Looks like [&amp;quot;a...0&amp;quot;, &amp;quot;b...1&amp;quot;]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
[{ // Array of this object&lt;br /&gt;
  videoID: string,&lt;br /&gt;
  startTime: float,&lt;br /&gt;
  endTime: float,&lt;br /&gt;
  votes: int,&lt;br /&gt;
  locked: int, // Status of lock - If upvoted by a VIP, the segment is locked&lt;br /&gt;
  UUID: string,&lt;br /&gt;
  userID: string, // PublicID of submitter&lt;br /&gt;
  timeSubmitted: int,&lt;br /&gt;
  views: int, // Number of reported views on the segment&lt;br /&gt;
  category: string, // [1]&lt;br /&gt;
  service: string, // [2]&lt;br /&gt;
  actionType: string, // [3]&lt;br /&gt;
  videoDuration: int,&lt;br /&gt;
  hidden: int, // If the segment has 2 downvotes or was downvoted by a VIP&lt;br /&gt;
  reputation: int, // Reputation of submitter at time of submission&lt;br /&gt;
  shadowHidden: int, // If the submitter is shadowbanned&lt;br /&gt;
  hashedVideoID: string, // sha256 hash of the videoID&lt;br /&gt;
  userAgent: string, // userAgent of the submitter,&lt;br /&gt;
  description: string // title for chapters, empty string for other segments&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;:1&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
404: Not Found&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/userID&amp;lt;/code&amp;gt;=====&lt;br /&gt;
List all users matching the username search&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  username: string, // search string for username&lt;br /&gt;
    // case sensitive&lt;br /&gt;
    // minimum for non-exact search is 3 characters, maximum is 64 characters&lt;br /&gt;
  exact: boolean // searches for exact username with no wildcard at end&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
[{ // Array of this object - maximum 10 results&lt;br /&gt;
  userName: string,&lt;br /&gt;
  userID: string&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible) or exceed the character limits&lt;br /&gt;
&lt;br /&gt;
404: Not Found&lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/lockCategories&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Get locked categories for a video&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  videoID: string,&lt;br /&gt;
  actionTypes: string[] // [3]&lt;br /&gt;
    // default [skip, mute]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  categories: string[], // [1]&lt;br /&gt;
  reason: string, // Specified reason for the lock&lt;br /&gt;
    // Only the most recent reason will be returned&lt;br /&gt;
  actionTypes: string[] // [3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
404: Not Found&lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/lockCategories/:sha256HashPrefix&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Get locked categories for a video with extra privacy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sha256HashPrefix&amp;lt;/code&amp;gt; is a hash of the YouTube &amp;lt;code&amp;gt;videoID&amp;lt;/code&amp;gt;. It should be the first 4 - 32 characters (4 is recommended). This provides extra privacy by potentially finding more than just the video you are looking for. This makes the server not know exactly what video you are looking for.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  prefix: sha256HashPrefix // Optional if not sent through path&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
[{ // Array of this object&lt;br /&gt;
   videoID: string,&lt;br /&gt;
   hash: string, // The full hash of the videoID&lt;br /&gt;
   categories&amp;quot;: string[], // [1]&lt;br /&gt;
   reason: string // Specified reason for the lock&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
404: Not Found&lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/lockReason&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Get reason for lock(s)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  videoID: string&lt;br /&gt;
  &lt;br /&gt;
  // Categories to get reasons for, defaults to all [1]&lt;br /&gt;
  category: string&lt;br /&gt;
  // OR&lt;br /&gt;
  categories: string[],&lt;br /&gt;
  actionTypes: string[] // [3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
[{ // Array of this object&lt;br /&gt;
  category: string, // category [1]&lt;br /&gt;
  locked: integer, // status of lock&lt;br /&gt;
  reason: string, // reason for lock&lt;br /&gt;
  userID: string, // publicID of locking VIP&lt;br /&gt;
  userName: string // username of locking VIP&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/searchSegments&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Get all segments of a video based on specified filters. Note: It is suggested that you don&#039;t use this for knowing which segments to skip on your client, as thresholds and values that determine which segments are the best change over time. Using [https://wiki.sponsor.ajay.app/index.php/API_Docs#GET_.2Fapi.2FskipSegments /api/skipSegments] ensures that you will always get the best segments.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters) &#039;&#039;&#039;OR&#039;&#039;&#039; (JSON Body):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  // See skipSegments&lt;br /&gt;
  videoID: string&lt;br /&gt;
&lt;br /&gt;
  category: string // [1]&lt;br /&gt;
  // OR&lt;br /&gt;
  categories: string[]&lt;br /&gt;
&lt;br /&gt;
  actionType: string // [3]&lt;br /&gt;
  // OR&lt;br /&gt;
  actionTypes: string[]&lt;br /&gt;
  &lt;br /&gt;
  service: string // [2]&lt;br /&gt;
  // End SkipSegments&lt;br /&gt;
&lt;br /&gt;
  page: int // Page to start from (default 0)&lt;br /&gt;
  &lt;br /&gt;
  // Vote/ view thresholds, inclusive, default includes all segments&lt;br /&gt;
  minVotes: int&lt;br /&gt;
  maxVotes: int&lt;br /&gt;
&lt;br /&gt;
  minViews: int&lt;br /&gt;
  maxViews: int&lt;br /&gt;
&lt;br /&gt;
  // Default true - if false, don&#039;t show segments that match type&lt;br /&gt;
  locked: boolean&lt;br /&gt;
  hidden: boolean&lt;br /&gt;
  ignored: boolean // hidden or below vote threshold&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;:1&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  segmentCount: int, // Total number of segments matching query&lt;br /&gt;
  page: int, // Page number&lt;br /&gt;
  segments: [{ // Array of this object, max 10&lt;br /&gt;
    // see segmentInfo&lt;br /&gt;
    UUID: string,&lt;br /&gt;
    timeSubmitted: int,&lt;br /&gt;
    startTime: int,&lt;br /&gt;
    endTime: int,&lt;br /&gt;
    category: string, // [1]&lt;br /&gt;
    actionType: string, // [3]&lt;br /&gt;
    votes: int,&lt;br /&gt;
    views: int,&lt;br /&gt;
    locked: int,&lt;br /&gt;
    hidden: int,&lt;br /&gt;
    shadowHidden: int,&lt;br /&gt;
    userID: string, // UUID of submitter&lt;br /&gt;
    description: string // title for chapters, empty string for other segments&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
404: Not Found&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/status/:value&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Get status of server&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input:&#039;&#039;&#039; (URL path)&lt;br /&gt;
&lt;br /&gt;
Can be any key value in response, requests without path will return all values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  uptime: int, // Uptime of server in seconds&lt;br /&gt;
  commit: string, // Full SHA hash of latest git commit, development or test&lt;br /&gt;
  db: int, // Current database version&lt;br /&gt;
  startTime: int, // Unix time (miliseconds) that request was received&lt;br /&gt;
  processTime: int, // Delay between DB request made and response received (miliseconds)&lt;br /&gt;
  redisProcessTime: int, // Delay between redis request made and response received (miliseconds)&lt;br /&gt;
  loadavg: int[], // 5 and 15 minute loadavg&lt;br /&gt;
  statusRequests: int, // number of /status requests in the last minute&lt;br /&gt;
  hostname: string // hostname of current server&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
404: Not Found&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===Stats Calls===&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/getTopUsers&amp;lt;/code&amp;gt;=====&lt;br /&gt;
&#039;&#039;&#039;This endpoint is currently disabled and will always return 404.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Get top submitters&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  sortType: int&lt;br /&gt;
    // 0 for by minutes saved&lt;br /&gt;
    // 1 for by view count&lt;br /&gt;
    // 2 for by total submissions&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userNames: string[],&lt;br /&gt;
  viewCounts: int[],&lt;br /&gt;
  totalSubmissions: int[],&lt;br /&gt;
  minutesSaved: float[]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
-----&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/getTopCategoryUsers&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;This endpoint is currently disabled and will always return 404.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Get top submitters by category&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  sortType: int,&lt;br /&gt;
    // 0 for by minutes saved&lt;br /&gt;
    // 1 for by view count&lt;br /&gt;
    // 2 for by total submissions&lt;br /&gt;
  category: string // category to fetch stats for&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userNames: string[],&lt;br /&gt;
  viewCounts: int[],&lt;br /&gt;
  totalSubmissions: int[],&lt;br /&gt;
  minutesSaved: float[]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/getTotalStats&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Get total stats&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  countContributingUsers: boolean // Optional, default false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userCount: int, // Only if countContributingUsers was true&lt;br /&gt;
  activeUsers: int, // Sum of public install stats from Chrome webstore and Firefox addons store&lt;br /&gt;
  apiUsers: int, // 48-hour active API users (https://github.com/ajayyy/PrivacyUserCount)&lt;br /&gt;
  viewCount: int,&lt;br /&gt;
  totalSubmissions: int,&lt;br /&gt;
  minutesSaved: float&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
None&lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/getDaysSavedFormatted&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Get days saved by all skips&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  Nothing&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  daysSaved: float (2 decimal places)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
None&lt;br /&gt;
-----&lt;br /&gt;
===VIP Calls===&lt;br /&gt;
These can only be called by the users added to the VIP table.&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/isUserVIP&amp;lt;/code&amp;gt;=====&lt;br /&gt;
If the user is a VIP&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userID: string, // Local userID&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  hashedUserID: string, // Public userID&lt;br /&gt;
  vip: boolean&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;POST&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/lockCategories&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Create a category lock on the video, disallowing further submissions for that category&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (Request Body):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  videoID: string,&lt;br /&gt;
  userID: string, // Local userID&lt;br /&gt;
  categories: string[], // [1]&lt;br /&gt;
  actionTypes: string[], // [3]&lt;br /&gt;
  reason: string, // Reason for lock&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  submitted: string[], // categories [1]&lt;br /&gt;
  submittedValues: {&lt;br /&gt;
    actionType: string, // [3]&lt;br /&gt;
    category: string // [1]&lt;br /&gt;
  } // array of this object&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
403: Unauthorized (You are not a VIP)&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;DELETE&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/lockCategories&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Delete existing category locks on that video&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (Request Body):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  videoID: string,&lt;br /&gt;
  userID: string, // Local userID&lt;br /&gt;
  categories: string[] // [1]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  message: &amp;quot;Removed lock categories entries for video videoID&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
403: Unauthorized (You are not a VIP)&lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;POST&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/shadowBanUser&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Shadow banned submissions are hidden for everyone but the IP that originally submitted it. Shadow banning a user shadow bans all future submissions.&lt;br /&gt;
&lt;br /&gt;
User can be re-shadowbanned if segments were not previously hidden&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userID: string, // Public userID of the user you want to shadowBan&lt;br /&gt;
  adminUserID: string, // Local userID of VIP or Admin&lt;br /&gt;
  enabled: boolean, // Optional, default true, true to ban and false to unban&lt;br /&gt;
  unHideOldSubmissions: boolean, // Optional, depends on the enabled parameter, should all previous submissions be (un)hidden as well?&lt;br /&gt;
  categories: string // Optional, defaults to all categories, in the format &amp;quot;[&amp;quot;sponsor&amp;quot;, &amp;quot;selfpromo&amp;quot;]&amp;quot; etc...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  Nothing (status code 200)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
403: Unauthorized (You are not a VIP)&lt;br /&gt;
&lt;br /&gt;
409: Duplicate (User already shadowbanned &amp;amp; unHideOldSubmissions not changed)&lt;br /&gt;
-----&lt;br /&gt;
===== &#039;&#039;&#039;POST&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/warnUser&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Temporary ban that shows a warning asking them to contact us.&lt;br /&gt;
&lt;br /&gt;
If a user is re-warned but there is still a non-expired warning, it is reenabled&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (Request Body):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt; {&lt;br /&gt;
  issuerUserID: string, // Issuer userID (Local userID)&lt;br /&gt;
  userID: string, // Public userID you are warning&lt;br /&gt;
  reason: string, // Optional&lt;br /&gt;
  enabled: boolean // Optional, default true&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  Nothing (status code 200)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
403: Unauthorized (You are not a VIP)&lt;br /&gt;
&lt;br /&gt;
409: User already warned&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;POST&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/clearCache&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Clear redis cache for video.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (Request Body):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userID: string, // Local userID&lt;br /&gt;
  videoID: string&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  Cache cleared on video videoID (status code 200)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
403: Unauthorized (You are not a VIP)&lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;POST&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/purgeAllSegments&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Hide all segments on a video without affecting submitters&#039; reputation&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (Request Body):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userID: string, // Local userID&lt;br /&gt;
  videoID: string,&lt;br /&gt;
  service: string // Service of video, defaults to YouTube&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  Nothing (status code 200)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
403: Unauthorized (You are not a VIP)&lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;POST&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/segmentShift&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Shift all segments on a video&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (Request Body):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  videoID: string,&lt;br /&gt;
  userID: string, // Local userID&lt;br /&gt;
  startTime: float,&lt;br /&gt;
  endTime: float&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  Nothing (status code 200)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
403: Unauthorized (You are not a VIP) &lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;POST&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/addUserAsTempVIP&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Add temporary 24 Hour Channel VIP&lt;br /&gt;
&lt;br /&gt;
A user cannot be a VIP of multiple channels, the most recent channel will take precedence and override &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userID: string, // User to grant temp VIP to&lt;br /&gt;
  adminUserID: string, // Local userID of existing VIP&lt;br /&gt;
  channelVideoID: string, // videoID of channel to grant VIP on&lt;br /&gt;
  enabled: string // default &amp;quot;true&amp;quot; Enable or disable VIP status&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  Temp VIP added on channel channelName (status code 200)&lt;br /&gt;
  Temp VIP removed (status code 200)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
403: Unauthorized (You are not a VIP) &lt;br /&gt;
&lt;br /&gt;
404: Not Found (No channel found for videoID) &lt;br /&gt;
&lt;br /&gt;
409: Duplicate (User is already a permanent VIP) &lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;POST&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/feature&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Add or remove user features&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (Request Body):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userID: string, // User to add or remove features from&lt;br /&gt;
  adminUserID: string, // Local userID of existing VIP&lt;br /&gt;
  feature: int, // [4]&lt;br /&gt;
  enabled: boolean // default &amp;quot;true&amp;quot; Enable or disable feature&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &amp;lt;ref name=&amp;quot;:4&amp;quot;&amp;gt;See [[Types#User_Features|Types]] for a full list of possible user features.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  Nothing (status code 200)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible or the feature does not exist)&lt;br /&gt;
&lt;br /&gt;
403: Unauthorized (You are not a VIP) &lt;br /&gt;
-----&lt;br /&gt;
===Admin Calls===&lt;br /&gt;
These can only be called by the server administrator, set in the config.&lt;br /&gt;
=====&#039;&#039;&#039;POST&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/addUserAsVIP&amp;lt;/code&amp;gt;=====&lt;br /&gt;
VIPs have extra privileges and their votes count more.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userID: string, // Public userID of the user you want to add to the VIP list&lt;br /&gt;
  adminUserID: string, // Admin&#039;s local userID&lt;br /&gt;
  enabled: boolean // Optional, to be able to add and remove users (default: false)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  Nothing (status code 200)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
403: Unauthorized (You are not an admin)&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===Legacy API===&lt;br /&gt;
https://github.com/ajayyy/SponsorBlock/wiki/Legacy-API&lt;br /&gt;
===Local userID vs Public userID===&lt;br /&gt;
The local userID should be a randomly generated and saved client side and must be 32 characters (or more). If it is not 32 characters or more, you will not be able to vote or submit. The public userID is what is used as an identifier in the database. This is the local userID with a SHA 256 hash 5000 times.&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
__INDEX__&lt;br /&gt;
__NEWSECTIONLINK__&lt;br /&gt;
[[Category:Developer Reference]]&lt;br /&gt;
[[Category:SponsorBlock]]&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=API_Docs&amp;diff=3892</id>
		<title>API Docs</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=API_Docs&amp;diff=3892"/>
		<updated>2025-02-21T03:01:17Z</updated>

		<summary type="html">&lt;p&gt;Ajay: Add kotlin lib&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Formatting Notes:&lt;br /&gt;
&lt;br /&gt;
userID instead of user ID&lt;br /&gt;
leave a space after the start of the comment, &lt;br /&gt;
public userID &amp;amp; local userID --&amp;gt;{{API Docs}}&lt;br /&gt;
&lt;br /&gt;
If you are looking for DeArrow API Docs, see [[API Docs/DeArrow|its page]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Libraries&#039;&#039;&#039;: [https://www.npmjs.com/package/sponsorblock-api Node.js], [https://github.com/wasi-master/sponsorblock.py Python], [https://crates.io/crates/sponsor-block Rust], [https://github.com/porjo/sponsorblockgo Go], [https://github.com/zt64/sponsorblock-kt Kotlin]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sub&amp;gt;[https://github.com/ajayyy/SponsorBlock/wiki/Webhooks Webhook Docs] | [https://github.com/mchangrh/sb-openapi OpenAPI Docs]&amp;lt;/sub&amp;gt; &lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/skipSegments&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Get segments for a video.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  videoID: string,&lt;br /&gt;
  &lt;br /&gt;
  category: string, // Optional, defaults to &amp;quot;sponsor&amp;quot;, can be repeated for multiple categories. [1]&lt;br /&gt;
  // OR&lt;br /&gt;
  categories: string[], // Optional [1]&lt;br /&gt;
&lt;br /&gt;
  requiredSegment: string, // Segment UUID to require to be retrieved, even if they don&#039;t meet the minimum vote threshold. Can be repeated for multiple segments.&lt;br /&gt;
  // OR&lt;br /&gt;
  requiredSegments: string[], // Optional, array of required segment UUIDs&lt;br /&gt;
&lt;br /&gt;
  actionType: string // Optional, default skip. Can be repeated for multiple types. [3]&lt;br /&gt;
  // OR  &lt;br /&gt;
  actionTypes: string[] // Optional, array of action types&lt;br /&gt;
&lt;br /&gt;
  service: string, // Optional, default is &#039;YouTube&#039; [2]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &amp;lt;ref name=&amp;quot;:0&amp;quot;&amp;gt;See [[Types#Category|Types]] for full list of possible categories. To get multiple, create an array with the format &amp;lt;code&amp;gt;[&amp;quot;sponsor&amp;quot;, intro&amp;quot;]&amp;lt;/code&amp;gt;. &amp;lt;/ref&amp;gt; &amp;lt;ref name=&amp;quot;:1&amp;quot;&amp;gt;Service to get segments for. See [[Types#Service|Types]] for supported services&amp;lt;/ref&amp;gt; &amp;lt;ref name=&amp;quot;:2&amp;quot;&amp;gt;Action Types: See [[Types#Action Type|Types]] for possible values. Select multiple with the format &amp;lt;code&amp;gt;[&amp;quot;skip&amp;quot;,&amp;quot;mute]&amp;lt;/code&amp;gt;&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
[{ // Array of this object&lt;br /&gt;
   segment: float[], //[0, 15.23] start and end time in seconds&lt;br /&gt;
   UUID: string,&lt;br /&gt;
   category: string, // [1]&lt;br /&gt;
   videoDuration: float // Duration of video when submission occurred (to be used to determine when a submission is out of date). 0 when unknown. +- 1 second&lt;br /&gt;
   actionType: string, // [3]&lt;br /&gt;
   locked: int, // if submission is locked&lt;br /&gt;
   votes: int, // Votes on segment&lt;br /&gt;
   description: string, // title for chapters, empty string for other segments&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
404: Not Found&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/skipSegments/:sha256HashPrefix&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Get segments for a video with extra privacy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sha256HashPrefix&amp;lt;/code&amp;gt; is a hash of the YouTube &amp;lt;code&amp;gt;videoID&amp;lt;/code&amp;gt;. It should be the first 4 - 32 characters (4 is recommended). This provides extra privacy by potentially finding more than just the video you are looking for since the server will not know exactly what video you are looking for.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  prefix: string, // Can be used instead of path&lt;br /&gt;
&lt;br /&gt;
  category: string, // Optional, defaults to &amp;quot;sponsor&amp;quot;, can be repeated for multiple categories. [1]&lt;br /&gt;
  // OR&lt;br /&gt;
  categories: string[], // Optional, array of categories [1]&lt;br /&gt;
&lt;br /&gt;
  requiredSegment: string, // Segment UUID to require to be retrieved, even if they don&#039;t meet the minimum vote threshold. Can be repeated for multiple segments.&lt;br /&gt;
  // OR&lt;br /&gt;
  requiredSegments: string[], // Optional, array of required segment UUIDs&lt;br /&gt;
&lt;br /&gt;
  actionType: string // Optional, default skip. Can be repeated for multiple types. [3]&lt;br /&gt;
  // OR  &lt;br /&gt;
  actionTypes: string[] // Optional, array of action types [3]&lt;br /&gt;
&lt;br /&gt;
  service: string // Optional, default is &#039;YouTube&#039;. [2]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;:1&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
[{ // Array of this object&lt;br /&gt;
   videoID: string,&lt;br /&gt;
   segments: [{ // Array of this object&lt;br /&gt;
       segment: float[], // [0, 15.23] start and end time in seconds&lt;br /&gt;
       UUID: string,&lt;br /&gt;
       category: string, [1]&lt;br /&gt;
       actionType: string, // [1]&lt;br /&gt;
       locked: int, // if segment is locked&lt;br /&gt;
       votes: int, // votes on segment&lt;br /&gt;
       videoDuration: int, // Duration of video when submissions occurred&lt;br /&gt;
       description: string // title for chapters, empty string for other segments&lt;br /&gt;
   }]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
404: Not Found&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;POST&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/skipSegments&amp;lt;/code&amp;gt;=====&lt;br /&gt;
{{Message box|mini=1|type=warning&lt;br /&gt;
|title=Automating submissions is not allowed.&lt;br /&gt;
|text=Please see the [[Automating submissions]] page for more information.&lt;br /&gt;
}}&lt;br /&gt;
Create a segment on a video&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  videoID: string,&lt;br /&gt;
  startTime: float,&lt;br /&gt;
  endTime: float,&lt;br /&gt;
  category: string, // [1]&lt;br /&gt;
  userID: string, // This should be a randomly generated 30 char string stored locally (not the public one)&lt;br /&gt;
  userAgent: string, // &amp;quot;Name of Client/Version&amp;quot; or &amp;quot;[BOT] Name of Bot/Version&amp;quot; ex. &amp;quot;Chromium/1.0.0&amp;quot;&lt;br /&gt;
  service: string, // Optional, default is &#039;YouTube&#039;. [2]&lt;br /&gt;
  videoDuration: float, // Optional, duration of video, will attempt to retrieve from the YouTube API if missing (to be used to determine when a submission is out of date)&lt;br /&gt;
  actionType: string // Optional, default is &amp;quot;skip&amp;quot;. [3]&lt;br /&gt;
  description: string // Chapter title for chapters, must be an empty string or not present for other segment types&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;:1&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;OR&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (JSON Body):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  videoID: string,&lt;br /&gt;
  userID: string, // This should be a randomly generated 30 character string stored locally (not the public one)&lt;br /&gt;
  userAgent: string, // &amp;quot;Name of Client/Version&amp;quot; or &amp;quot;[BOT] Name of Bot/Version&amp;quot; ex. &amp;quot;Chromium/1.0.0&amp;quot;&lt;br /&gt;
  service: string, // Optional, default is &#039;YouTube&#039;.[2]&lt;br /&gt;
  videoDuration: float, // Optional, duration of video, will attempt to retrieve from the YouTube API if missing (to be used to determine when a submission is out of date)&lt;br /&gt;
&lt;br /&gt;
  segments: [{ // Array of this object&lt;br /&gt;
     segment: float[], // [0, 15.23] start and end time in seconds&lt;br /&gt;
     category: string, // [1]&lt;br /&gt;
     actionType: string // Optional, defaults to &amp;quot;skip&amp;quot;. [3]&lt;br /&gt;
     description: string // Chapter title for chapters, must be an empty string or not present for other segment types&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;:1&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{ // array of this object&lt;br /&gt;
  UUID: string, // UUID of submitted segment&lt;br /&gt;
  category: string, // submitted category [1]&lt;br /&gt;
  segment: float[] // start and end time of submitted segment&lt;br /&gt;
}[]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
403: Rejected by auto moderator (Reason will be sent in the response)&lt;br /&gt;
&lt;br /&gt;
429: Rate Limit (Too many for the same user or IP)&lt;br /&gt;
&lt;br /&gt;
409: Duplicate&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;POST&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/voteOnSponsorTime&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Vote on a segment or vote to change the category of the segment.&lt;br /&gt;
&lt;br /&gt;
Creators of the segment and VIPs can remove the segment or change the category with only one vote.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:400px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight:bold;&amp;quot;&amp;gt;VIP voting notes&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
VIP upvotes will:&lt;br /&gt;
* lock the segment&lt;br /&gt;
* remove &amp;quot;hidden&amp;quot; property&lt;br /&gt;
* remove &amp;quot;shadowHidden&amp;quot; property&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input: Normal Vote&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  UUID: string, // UUID of the segment being voted on&lt;br /&gt;
  userID: string, // Local userID&lt;br /&gt;
  type: int // 0 for downvote, 1 for upvote, 20 to undo vote&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;OR&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input: Category Vote&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  UUID: string, // UUID of the segment being voted on&lt;br /&gt;
  userID: string, // Local userID&lt;br /&gt;
  category: string // Category to change this submission to [1]&lt;br /&gt;
} &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  Nothing (status code 200)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
403: Reason given in request (moderation)&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;POST&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/viewedVideoSponsorTime&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Add view to segment&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  UUID: string // UUID of segment viewed&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  Nothing (status code 200)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/userInfo&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Get information about a user&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userID: string // local UserID&lt;br /&gt;
  // OR&lt;br /&gt;
  publicUserID: string // Public userID&lt;br /&gt;
&lt;br /&gt;
  values: string[] // Optional, Values to get from userInfo&lt;br /&gt;
    // default values are&lt;br /&gt;
    // [&amp;quot;userID&amp;quot;, &amp;quot;userName&amp;quot;, &amp;quot;minutesSaved&amp;quot;, &amp;quot;segmentCount&amp;quot;, &amp;quot;ignoredSegmentCount&amp;quot;,&lt;br /&gt;
    // &amp;quot;viewCount&amp;quot;, &amp;quot;ignoredViewCount&amp;quot;, &amp;quot;warnings&amp;quot;, &amp;quot;warningReason&amp;quot;, &amp;quot;reputation&amp;quot;,&lt;br /&gt;
    // &amp;quot;vip&amp;quot;, &amp;quot;lastSegmentID&amp;quot;]&lt;br /&gt;
  // OR&lt;br /&gt;
  value: string // Optional, Value to get from userInfo, can be repeated for multiple values&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userID: string, // Public userID&lt;br /&gt;
  userName: string, // Public userID if not set&lt;br /&gt;
  minutesSaved: float, // Minutes saved&lt;br /&gt;
  segmentCount: int, // Total number of segments excluding ignored/ hidden segments&lt;br /&gt;
  ignoredSegmentCount: int, // Total number of ignored/ hidden segments&lt;br /&gt;
  viewCount: int, // Total number of views excluding view on ignored/ hidden segments&lt;br /&gt;
  ignoredViewCount: int, // Total number of view on ignored/ hidden segments&lt;br /&gt;
  warnings: int, // Currently enabled warnings&lt;br /&gt;
  reputation: float, &lt;br /&gt;
  vip: int, // VIP status&lt;br /&gt;
  lastSegmentID: string, // UUID of last submitted segment&lt;br /&gt;
  permissions: { // Can the user submit segments of this category?&lt;br /&gt;
    category: boolean // [1]&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/userStats&amp;lt;/code&amp;gt;=====&lt;br /&gt;
&lt;br /&gt;
Get stats for a user&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userID: string // local UserID&lt;br /&gt;
  // OR&lt;br /&gt;
  publicUserID: string // Public userID&lt;br /&gt;
&lt;br /&gt;
  fetchCategoryStats: boolean // default false, display category stats&lt;br /&gt;
  fetchActionTypeStats: boolean // default false, display type stats&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userID: string // hashed userID&lt;br /&gt;
  userName: string // userName&lt;br /&gt;
  overallStats: {&lt;br /&gt;
    minutesSaved: integer // same as userInfo&lt;br /&gt;
    segmentCount: integer // same as userInfo&lt;br /&gt;
  }&lt;br /&gt;
  // IF CHOSEN&lt;br /&gt;
  categoryCount: { // # of segments per category&lt;br /&gt;
    sponsor: integer&lt;br /&gt;
    intro: integer&lt;br /&gt;
    outro: integer&lt;br /&gt;
    interaction: integer&lt;br /&gt;
    selfpromo: integer&lt;br /&gt;
    music_offtopic: integer&lt;br /&gt;
    preview: integer&lt;br /&gt;
    poi_highlight: integer&lt;br /&gt;
    filler: integer,&lt;br /&gt;
    exclusive_access: integer,&lt;br /&gt;
    chapter: integer&lt;br /&gt;
  }&lt;br /&gt;
  // IF CHOSEN&lt;br /&gt;
  actionTypeCount: { // # of segments per type&lt;br /&gt;
    skip: integer,&lt;br /&gt;
    mute: integer,&lt;br /&gt;
    full: integer,&lt;br /&gt;
    poi: integer,&lt;br /&gt;
    chapter: integer&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/getViewsForUser&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Get the number of views a user has on all their segments&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userID: string // local UserID&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  viewCount: int&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
404: Not Found&lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/getSavedTimeForUser&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Get the total time saved from all the user&#039;s segments&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userID: string // Local userID&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  timeSaved: float // In minutes&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
404: Not Found&lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;POST&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/setUsername&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Set a username for a userID&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters): Setting username for self&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userID: string, // Local userID&lt;br /&gt;
  username: string, // Optional&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;OR&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters): Setting username as &#039;&#039;&#039;admin&#039;&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userID: string, // Public userID&lt;br /&gt;
  username: string, // Optional&lt;br /&gt;
  adminUserID: string // Admin&#039;s local userID&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  Nothing (status code 200)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
403: Unauthorized (You are not an admin)&lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/getUsername&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Get current username&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userID: string // Local userID&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userName: string // Public userID if no username has been set&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/segmentInfo&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Get information about segments&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  // Only the first 10 entries will be processed&lt;br /&gt;
  UUID: string, // Can be repeated for multiple segments&lt;br /&gt;
  // OR&lt;br /&gt;
  UUIDs: string[] // Looks like [&amp;quot;a...0&amp;quot;, &amp;quot;b...1&amp;quot;]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
[{ // Array of this object&lt;br /&gt;
  videoID: string,&lt;br /&gt;
  startTime: float,&lt;br /&gt;
  endTime: float,&lt;br /&gt;
  votes: int,&lt;br /&gt;
  locked: int, // Status of lock - If upvoted by a VIP, the segment is locked&lt;br /&gt;
  UUID: string,&lt;br /&gt;
  userID: string, // PublicID of submitter&lt;br /&gt;
  timeSubmitted: int,&lt;br /&gt;
  views: int, // Number of reported views on the segment&lt;br /&gt;
  category: string, // [1]&lt;br /&gt;
  service: string, // [2]&lt;br /&gt;
  actionType: string, // [3]&lt;br /&gt;
  videoDuration: int,&lt;br /&gt;
  hidden: int, // If the segment has 2 downvotes or was downvoted by a VIP&lt;br /&gt;
  reputation: int, // Reputation of submitter at time of submission&lt;br /&gt;
  shadowHidden: int, // If the submitter is shadowbanned&lt;br /&gt;
  hashedVideoID: string, // sha256 hash of the videoID&lt;br /&gt;
  userAgent: string, // userAgent of the submitter,&lt;br /&gt;
  description: string // title for chapters, empty string for other segments&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;:1&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
404: Not Found&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/userID&amp;lt;/code&amp;gt;=====&lt;br /&gt;
List all users matching the username search&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  username: string, // search string for username&lt;br /&gt;
    // case sensitive&lt;br /&gt;
    // minimum for non-exact search is 3 characters, maximum is 64 characters&lt;br /&gt;
  exact: boolean // searches for exact username with no wildcard at end&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
[{ // Array of this object - maximum 10 results&lt;br /&gt;
  userName: string,&lt;br /&gt;
  userID: string&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible) or exceed the character limits&lt;br /&gt;
&lt;br /&gt;
404: Not Found&lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/lockCategories&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Get locked categories for a video&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  videoID: string,&lt;br /&gt;
  actionTypes: string[] // [3]&lt;br /&gt;
    // default [skip, mute]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  categories: string[], // [1]&lt;br /&gt;
  reason: string, // Specified reason for the lock&lt;br /&gt;
    // Only the most recent reason will be returned&lt;br /&gt;
  actionTypes: string[] // [3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
404: Not Found&lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/lockCategories/:sha256HashPrefix&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Get locked categories for a video with extra privacy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sha256HashPrefix&amp;lt;/code&amp;gt; is a hash of the YouTube &amp;lt;code&amp;gt;videoID&amp;lt;/code&amp;gt;. It should be the first 4 - 32 characters (4 is recommended). This provides extra privacy by potentially finding more than just the video you are looking for. This makes the server not know exactly what video you are looking for.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  prefix: sha256HashPrefix // Optional if not sent through path&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
[{ // Array of this object&lt;br /&gt;
   videoID: string,&lt;br /&gt;
   hash: string, // The full hash of the videoID&lt;br /&gt;
   categories&amp;quot;: string[], // [1]&lt;br /&gt;
   reason: string // Specified reason for the lock&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
404: Not Found&lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/lockReason&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Get reason for lock(s)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  videoID: string&lt;br /&gt;
  &lt;br /&gt;
  // Categories to get reasons for, defaults to all [1]&lt;br /&gt;
  category: string&lt;br /&gt;
  // OR&lt;br /&gt;
  categories: string[],&lt;br /&gt;
  actionTypes: string[] // [3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
[{ // Array of this object&lt;br /&gt;
  category: string, // category [1]&lt;br /&gt;
  locked: integer, // status of lock&lt;br /&gt;
  reason: string, // reason for lock&lt;br /&gt;
  userID: string, // publicID of locking VIP&lt;br /&gt;
  userName: string // username of locking VIP&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/searchSegments&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Get all segments of a video based on specified filters. Note: It is suggested that you don&#039;t use this for knowing which segments to skip on your client, as thresholds and values that determine which segments are the best change over time. Using [https://wiki.sponsor.ajay.app/index.php/API_Docs#GET_.2Fapi.2FskipSegments /api/skipSegments] ensures that you will always get the best segments.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters) &#039;&#039;&#039;OR&#039;&#039;&#039; (JSON Body):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  // See skipSegments&lt;br /&gt;
  videoID: string&lt;br /&gt;
&lt;br /&gt;
  category: string // [1]&lt;br /&gt;
  // OR&lt;br /&gt;
  categories: string[]&lt;br /&gt;
&lt;br /&gt;
  actionType: string // [3]&lt;br /&gt;
  // OR&lt;br /&gt;
  actionTypes: string[]&lt;br /&gt;
  &lt;br /&gt;
  service: string // [2]&lt;br /&gt;
  // End SkipSegments&lt;br /&gt;
&lt;br /&gt;
  page: int // Page to start from (default 0)&lt;br /&gt;
  &lt;br /&gt;
  // Vote/ view thresholds, inclusive, default includes all segments&lt;br /&gt;
  minVotes: int&lt;br /&gt;
  maxVotes: int&lt;br /&gt;
&lt;br /&gt;
  minViews: int&lt;br /&gt;
  maxViews: int&lt;br /&gt;
&lt;br /&gt;
  // Default true - if false, don&#039;t show segments that match type&lt;br /&gt;
  locked: boolean&lt;br /&gt;
  hidden: boolean&lt;br /&gt;
  ignored: boolean // hidden or below vote threshold&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;:1&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  segmentCount: int, // Total number of segments matching query&lt;br /&gt;
  page: int, // Page number&lt;br /&gt;
  segments: [{ // Array of this object, max 10&lt;br /&gt;
    // see segmentInfo&lt;br /&gt;
    UUID: string,&lt;br /&gt;
    timeSubmitted: int,&lt;br /&gt;
    startTime: int,&lt;br /&gt;
    endTime: int,&lt;br /&gt;
    category: string, // [1]&lt;br /&gt;
    actionType: string, // [3]&lt;br /&gt;
    votes: int,&lt;br /&gt;
    views: int,&lt;br /&gt;
    locked: int,&lt;br /&gt;
    hidden: int,&lt;br /&gt;
    shadowHidden: int,&lt;br /&gt;
    userID: string, // UUID of submitter&lt;br /&gt;
    description: string // title for chapters, empty string for other segments&lt;br /&gt;
  }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
404: Not Found&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/status/:value&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Get status of server&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input:&#039;&#039;&#039; (URL path)&lt;br /&gt;
&lt;br /&gt;
Can be any key value in response, requests without path will return all values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  uptime: int, // Uptime of server in seconds&lt;br /&gt;
  commit: string, // Full SHA hash of latest git commit, development or test&lt;br /&gt;
  db: int, // Current database version&lt;br /&gt;
  startTime: int, // Unix time (miliseconds) that request was received&lt;br /&gt;
  processTime: int, // Delay between DB request made and response received (miliseconds)&lt;br /&gt;
  redisProcessTime: int, // Delay between redis request made and response received (miliseconds)&lt;br /&gt;
  loadavg: int[], // 5 and 15 minute loadavg&lt;br /&gt;
  statusRequests: int, // number of /status requests in the last minute&lt;br /&gt;
  hostname: string // hostname of current server&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
404: Not Found&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===Stats Calls===&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/getTopUsers&amp;lt;/code&amp;gt;=====&lt;br /&gt;
&#039;&#039;&#039;This endpoint is currently disabled and will always return 404.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Get top submitters&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  sortType: int&lt;br /&gt;
    // 0 for by minutes saved&lt;br /&gt;
    // 1 for by view count&lt;br /&gt;
    // 2 for by total submissions&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userNames: string[],&lt;br /&gt;
  viewCounts: int[],&lt;br /&gt;
  totalSubmissions: int[],&lt;br /&gt;
  minutesSaved: float[]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
-----&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/getTopCategoryUsers&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;This endpoint is currently disabled and will always return 404.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Get top submitters by category&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  sortType: int,&lt;br /&gt;
    // 0 for by minutes saved&lt;br /&gt;
    // 1 for by view count&lt;br /&gt;
    // 2 for by total submissions&lt;br /&gt;
  category: string // category to fetch stats for&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userNames: string[],&lt;br /&gt;
  viewCounts: int[],&lt;br /&gt;
  totalSubmissions: int[],&lt;br /&gt;
  minutesSaved: float[]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/getTotalStats&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Get total stats&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  countContributingUsers: boolean // Optional, default false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userCount: int, // Only if countContributingUsers was true&lt;br /&gt;
  activeUsers: int, // Sum of public install stats from Chrome webstore and Firefox addons store&lt;br /&gt;
  apiUsers: int, // 48-hour active API users (https://github.com/ajayyy/PrivacyUserCount)&lt;br /&gt;
  viewCount: int,&lt;br /&gt;
  totalSubmissions: int,&lt;br /&gt;
  minutesSaved: float&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
None&lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/getDaysSavedFormatted&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Get days saved by all skips&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  Nothing&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  daysSaved: float (2 decimal places)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
None&lt;br /&gt;
-----&lt;br /&gt;
===VIP Calls===&lt;br /&gt;
These can only be called by the users added to the VIP table.&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/isUserVIP&amp;lt;/code&amp;gt;=====&lt;br /&gt;
If the user is a VIP&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userID: string, // Local userID&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  hashedUserID: string, // Public userID&lt;br /&gt;
  vip: boolean&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;POST&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/lockCategories&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Create a category lock on the video, disallowing further submissions for that category&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (Request Body):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  videoID: string,&lt;br /&gt;
  userID: string, // Local userID&lt;br /&gt;
  categories: string[], // [1]&lt;br /&gt;
  actionTypes: string[], // [3]&lt;br /&gt;
  reason: string, // Reason for lock&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  submitted: string[], // categories [1]&lt;br /&gt;
  submittedValues: {&lt;br /&gt;
    actionType: string, // [3]&lt;br /&gt;
    category: string // [1]&lt;br /&gt;
  } // array of this object&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
403: Unauthorized (You are not a VIP)&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;DELETE&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/lockCategories&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Delete existing category locks on that video&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (Request Body):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  videoID: string,&lt;br /&gt;
  userID: string, // Local userID&lt;br /&gt;
  categories: string[] // [1]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  message: &amp;quot;Removed lock categories entries for video videoID&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
403: Unauthorized (You are not a VIP)&lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;POST&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/shadowBanUser&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Shadow banned submissions are hidden for everyone but the IP that originally submitted it. Shadow banning a user shadow bans all future submissions.&lt;br /&gt;
&lt;br /&gt;
User can be re-shadowbanned if segments were not previously hidden&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userID: string, // Public userID of the user you want to shadowBan&lt;br /&gt;
  adminUserID: string, // Local userID of VIP or Admin&lt;br /&gt;
  enabled: boolean, // Optional, default true, true to ban and false to unban&lt;br /&gt;
  unHideOldSubmissions: boolean, // Optional, depends on the enabled parameter, should all previous submissions be (un)hidden as well?&lt;br /&gt;
  categories: string // Optional, defaults to all categories, in the format &amp;quot;[&amp;quot;sponsor&amp;quot;, &amp;quot;selfpromo&amp;quot;]&amp;quot; etc...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  Nothing (status code 200)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
403: Unauthorized (You are not a VIP)&lt;br /&gt;
&lt;br /&gt;
409: Duplicate (User already shadowbanned &amp;amp; unHideOldSubmissions not changed)&lt;br /&gt;
-----&lt;br /&gt;
===== &#039;&#039;&#039;POST&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/warnUser&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Temporary ban that shows a warning asking them to contact us.&lt;br /&gt;
&lt;br /&gt;
If a user is re-warned but there is still a non-expired warning, it is reenabled&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (Request Body):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt; {&lt;br /&gt;
  issuerUserID: string, // Issuer userID (Local userID)&lt;br /&gt;
  userID: string, // Public userID you are warning&lt;br /&gt;
  reason: string, // Optional&lt;br /&gt;
  enabled: boolean // Optional, default true&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  Nothing (status code 200)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
403: Unauthorized (You are not a VIP)&lt;br /&gt;
&lt;br /&gt;
409: User already warned&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;POST&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/clearCache&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Clear redis cache for video.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (Request Body):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userID: string, // Local userID&lt;br /&gt;
  videoID: string&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  Cache cleared on video videoID (status code 200)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
403: Unauthorized (You are not a VIP)&lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;POST&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/purgeAllSegments&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Hide all segments on a video without affecting submitters&#039; reputation&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (Request Body):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userID: string, // Local userID&lt;br /&gt;
  videoID: string,&lt;br /&gt;
  service: string // Service of video, defaults to YouTube&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  Nothing (status code 200)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
403: Unauthorized (You are not a VIP)&lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;POST&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/segmentShift&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Shift all segments on a video&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (Request Body):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  videoID: string,&lt;br /&gt;
  userID: string, // Local userID&lt;br /&gt;
  startTime: float,&lt;br /&gt;
  endTime: float&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  Nothing (status code 200)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
403: Unauthorized (You are not a VIP) &lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;POST&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/addUserAsTempVIP&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Add temporary 24 Hour Channel VIP&lt;br /&gt;
&lt;br /&gt;
A user cannot be a VIP of multiple channels, the most recent channel will take precedence and override &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userID: string, // User to grant temp VIP to&lt;br /&gt;
  adminUserID: string, // Local userID of existing VIP&lt;br /&gt;
  channelVideoID: string, // videoID of channel to grant VIP on&lt;br /&gt;
  enabled: string // default &amp;quot;true&amp;quot; Enable or disable VIP status&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  Temp VIP added on channel channelName (status code 200)&lt;br /&gt;
  Temp VIP removed (status code 200)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
403: Unauthorized (You are not a VIP) &lt;br /&gt;
&lt;br /&gt;
404: Not Found (No channel found for videoID) &lt;br /&gt;
&lt;br /&gt;
409: Duplicate (User is already a permanent VIP) &lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;POST&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/feature&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Add or remove user features&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (Request Body):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userID: string, // User to add or remove features from&lt;br /&gt;
  adminUserID: string, // Local userID of existing VIP&lt;br /&gt;
  feature: int, // [4]&lt;br /&gt;
  enabled: boolean // default &amp;quot;true&amp;quot; Enable or disable feature&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &amp;lt;ref name=&amp;quot;:4&amp;quot;&amp;gt;See [[Types#User_Features|Types]] for a full list of possible user features.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  Nothing (status code 200)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible or the feature does not exist)&lt;br /&gt;
&lt;br /&gt;
403: Unauthorized (You are not a VIP) &lt;br /&gt;
-----&lt;br /&gt;
===Admin Calls===&lt;br /&gt;
These can only be called by the server administrator, set in the config.&lt;br /&gt;
=====&#039;&#039;&#039;POST&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/addUserAsVIP&amp;lt;/code&amp;gt;=====&lt;br /&gt;
VIPs have extra privileges and their votes count more.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  userID: string, // Public userID of the user you want to add to the VIP list&lt;br /&gt;
  adminUserID: string, // Admin&#039;s local userID&lt;br /&gt;
  enabled: boolean // Optional, to be able to add and remove users (default: false)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  Nothing (status code 200)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
403: Unauthorized (You are not an admin)&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===Legacy API===&lt;br /&gt;
https://github.com/ajayyy/SponsorBlock/wiki/Legacy-API&lt;br /&gt;
===Local userID vs Public userID===&lt;br /&gt;
The local userID should be a randomly generated and saved client side and must be 32 characters (or more). If it is not 32 characters or more, you will not be able to vote or submit. The public userID is what is used as an identifier in the database. This is the local userID with a SHA 256 hash 5000 times.&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
__INDEX__&lt;br /&gt;
__NEWSECTIONLINK__&lt;br /&gt;
[[Category:Developer Reference]]&lt;br /&gt;
[[Category:SponsorBlock]]&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=DeArrow/Casual_mode&amp;diff=3888</id>
		<title>DeArrow/Casual mode</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=DeArrow/Casual_mode&amp;diff=3888"/>
		<updated>2025-02-16T08:36:53Z</updated>

		<summary type="html">&lt;p&gt;Ajay: Add info about the in-feed experience&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DeArrow is a browser extension for crowdsourcing better titles and thumbnails on YouTube.&lt;br /&gt;
&lt;br /&gt;
There have been complaints in the past with people feeling like DeArrow title changes are sometimes unnecessary, or can ruin the fun. At the same time, there are many people who do like the more boring feel created from replacing as many titles as possible.&lt;br /&gt;
&lt;br /&gt;
To try to improve the experience for everyone, DeArrow is now going to have two different modes. Classic mode will be just like it is today and will remain the default mode, but there will now also be a casual mode.&lt;br /&gt;
&lt;br /&gt;
The goal with casual mode is to allow people to vote on which original titles they enjoy so that people who prefer not to see the boring titles can avoid them. However, for videos that really do need changes, DeArrow will still be able to replace the titles.&lt;br /&gt;
&lt;br /&gt;
[[File:DeArrowCasualModeSetting.png|thumb|The two different DeArrow modes|none|600x600px]]&lt;br /&gt;
&lt;br /&gt;
=== Voting ===&lt;br /&gt;
&lt;br /&gt;
[[File:Casualbuttonlight.svg|none|30px]]&lt;br /&gt;
&lt;br /&gt;
Click the paint brush button to the right of the title to open the casual mode voting menu&lt;br /&gt;
&lt;br /&gt;
[[File:Dearrow-casual-vote.png|thumb|DeArrow casual voting menu|none]]&lt;br /&gt;
&lt;br /&gt;
Then check off each category that applies to this title.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t like the original title, you can vote &amp;quot;no&amp;quot;, which acts like a downvote.&lt;br /&gt;
&lt;br /&gt;
=== Category Selection ===&lt;br /&gt;
&lt;br /&gt;
[[File:Dearrow-casual-mode-categories.png|thumb|DeArrow casual mode category settings|none]]&lt;br /&gt;
&lt;br /&gt;
When you vote on if you liked an original title, you&#039;ll be able to select which categories it falls under. These categories allow you to choose which types of original titles you want to see.&lt;br /&gt;
&lt;br /&gt;
=== In the video feed ===&lt;br /&gt;
&lt;br /&gt;
[[File:HistoryOfTheEntireWorldCasual.png|thumb|Casual mode icon shown on right|none]]&lt;br /&gt;
&lt;br /&gt;
On videos that show the original title due to casual mode, the dearrow logo will be replaced by the green casual mode logo on the right of the video. By default, this only appears when you hover the title of the video.&lt;br /&gt;
&lt;br /&gt;
It will still format the title if you have a title formatter enabled. If you click the button once, it will show the original title. If you click it a second time, and there is a DeArrow custom title available, it will show that custom title. Clicking a third time will return back to the original casual mode state.&lt;br /&gt;
&lt;br /&gt;
=== Potential future ===&lt;br /&gt;
&lt;br /&gt;
When you enable casual mode, your titles will now be submitted as coming from someone with casual mode enabled. In the future, it might make sense for people with casual mode to have casual mode titles preferred over classic mode titles if both are available to truly make the DeArrow factions idea a reality.&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=File:HistoryOfTheEntireWorldCasual.png&amp;diff=3887</id>
		<title>File:HistoryOfTheEntireWorldCasual.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=File:HistoryOfTheEntireWorldCasual.png&amp;diff=3887"/>
		<updated>2025-02-16T08:32:37Z</updated>

		<summary type="html">&lt;p&gt;Ajay: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;History of the entire world video with the casual mode icon&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=DeArrow/Casual_mode&amp;diff=3886</id>
		<title>DeArrow/Casual mode</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=DeArrow/Casual_mode&amp;diff=3886"/>
		<updated>2025-02-16T08:28:39Z</updated>

		<summary type="html">&lt;p&gt;Ajay: Change order of sections&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DeArrow is a browser extension for crowdsourcing better titles and thumbnails on YouTube.&lt;br /&gt;
&lt;br /&gt;
There have been complaints in the past with people feeling like DeArrow title changes are sometimes unnecessary, or can ruin the fun. At the same time, there are many people who do like the more boring feel created from replacing as many titles as possible.&lt;br /&gt;
&lt;br /&gt;
To try to improve the experience for everyone, DeArrow is now going to have two different modes. Classic mode will be just like it is today and will remain the default mode, but there will now also be a casual mode.&lt;br /&gt;
&lt;br /&gt;
The goal with casual mode is to allow people to vote on which original titles they enjoy so that people who prefer not to see the boring titles can avoid them. However, for videos that really do need changes, DeArrow will still be able to replace the titles.&lt;br /&gt;
&lt;br /&gt;
[[File:DeArrowCasualModeSetting.png|thumb|The two different DeArrow modes|none|600x600px]]&lt;br /&gt;
&lt;br /&gt;
=== Voting ===&lt;br /&gt;
&lt;br /&gt;
[[File:Casualbuttonlight.svg|none|30px]]&lt;br /&gt;
&lt;br /&gt;
Click the paint brush button to the right of the title to open the casual mode voting menu&lt;br /&gt;
&lt;br /&gt;
[[File:Dearrow-casual-vote.png|thumb|DeArrow casual voting menu|none]]&lt;br /&gt;
&lt;br /&gt;
Then check off each category that applies to this title.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t like the original title, you can vote &amp;quot;no&amp;quot;, which acts like a downvote.&lt;br /&gt;
&lt;br /&gt;
=== Category Selection ===&lt;br /&gt;
&lt;br /&gt;
[[File:Dearrow-casual-mode-categories.png|thumb|DeArrow casual mode category settings|none]]&lt;br /&gt;
&lt;br /&gt;
When you vote on if you liked an original title, you&#039;ll be able to select which categories it falls under. These categories allow you to choose which types of original titles you want to see.&lt;br /&gt;
&lt;br /&gt;
=== Potential future ===&lt;br /&gt;
&lt;br /&gt;
When you enable casual mode, your titles will now be submitted as coming from someone with casual mode enabled. In the future, it might make sense for people with casual mode to have casual mode titles preferred over classic mode titles if both are available to truly make the DeArrow factions idea a reality.&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=File:Dearrow-casual-vote.png&amp;diff=3885</id>
		<title>File:Dearrow-casual-vote.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=File:Dearrow-casual-vote.png&amp;diff=3885"/>
		<updated>2025-02-16T08:26:11Z</updated>

		<summary type="html">&lt;p&gt;Ajay: Ajay uploaded a new version of File:Dearrow-casual-vote.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DeArrow casual voting menu&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=DeArrow/Casual_mode&amp;diff=3884</id>
		<title>DeArrow/Casual mode</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=DeArrow/Casual_mode&amp;diff=3884"/>
		<updated>2025-02-16T08:24:23Z</updated>

		<summary type="html">&lt;p&gt;Ajay: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DeArrow is a browser extension for crowdsourcing better titles and thumbnails on YouTube.&lt;br /&gt;
&lt;br /&gt;
There have been complaints in the past with people feeling like DeArrow title changes are sometimes unnecessary, or can ruin the fun. At the same time, there are many people who do like the more boring feel created from replacing as many titles as possible.&lt;br /&gt;
&lt;br /&gt;
To try to improve the experience for everyone, DeArrow is now going to have two different modes. Classic mode will be just like it is today and will remain the default mode, but there will now also be a casual mode.&lt;br /&gt;
&lt;br /&gt;
The goal with casual mode is to allow people to vote on which original titles they enjoy so that people who prefer not to see the boring titles can avoid them. However, for videos that really do need changes, DeArrow will still be able to replace the titles.&lt;br /&gt;
&lt;br /&gt;
[[File:DeArrowCasualModeSetting.png|thumb|The two different DeArrow modes|none|600x600px]]&lt;br /&gt;
&lt;br /&gt;
=== Category Selection ===&lt;br /&gt;
&lt;br /&gt;
[[File:Dearrow-casual-mode-categories.png|thumb|DeArrow casual mode category settings|none]]&lt;br /&gt;
&lt;br /&gt;
When you vote on if you liked an original title, you&#039;ll be able to select which categories it falls under. These categories allow you to choose which types of original titles you want to see.&lt;br /&gt;
&lt;br /&gt;
=== Voting ===&lt;br /&gt;
&lt;br /&gt;
[[File:Casualbuttonlight.svg|none|30px]]&lt;br /&gt;
&lt;br /&gt;
Click the paint brush button to the right of the title to open the casual mode voting menu&lt;br /&gt;
&lt;br /&gt;
[[File:Dearrow-casual-vote.png|thumb|DeArrow casual voting menu|none]]&lt;br /&gt;
&lt;br /&gt;
Then check off each category that applies to this title.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t like the original title, you can vote &amp;quot;no&amp;quot;, which acts like a downvote.&lt;br /&gt;
&lt;br /&gt;
=== Potential future ===&lt;br /&gt;
&lt;br /&gt;
When you enable casual mode, your titles will now be submitted as coming from someone with casual mode enabled. In the future, it might make sense for people with casual mode to have casual mode titles preferred over classic mode titles if both are available to truly make the DeArrow factions idea a reality.&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=DeArrow/Casual_mode&amp;diff=3883</id>
		<title>DeArrow/Casual mode</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=DeArrow/Casual_mode&amp;diff=3883"/>
		<updated>2025-02-16T08:22:58Z</updated>

		<summary type="html">&lt;p&gt;Ajay: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DeArrow is a browser extension for crowdsourcing better titles and thumbnails on YouTube. Sometimes, that will mean replacing a funny descriptive-enough title with a more boring explaining title.&lt;br /&gt;
&lt;br /&gt;
There have been complaints in the past with people feeling like DeArrow title changes are sometimes unnecessary, or can ruin the fun. At the same time, there are many people who do like the more boring feel created from replacing as many titles as possible.&lt;br /&gt;
&lt;br /&gt;
To try to improve the experience for everyone, DeArrow is now going to have two different modes. Classic mode will be just like it is today and will remain the default mode, but there will now also be a casual mode.&lt;br /&gt;
&lt;br /&gt;
The goal with casual mode is to allow people to vote on which original titles they enjoy so that people who prefer not to see the boring titles can avoid them. However, for videos that really do need changes, DeArrow will still be able to replace the titles.&lt;br /&gt;
&lt;br /&gt;
[[File:DeArrowCasualModeSetting.png|thumb|The two different DeArrow modes|none|600x600px]]&lt;br /&gt;
&lt;br /&gt;
=== Category Selection ===&lt;br /&gt;
&lt;br /&gt;
[[File:Dearrow-casual-mode-categories.png|thumb|DeArrow casual mode category settings|none]]&lt;br /&gt;
&lt;br /&gt;
When you vote on if you liked an original title, you&#039;ll be able to select which categories it falls under. These categories allow you to choose which types of original titles you want to see.&lt;br /&gt;
&lt;br /&gt;
=== Voting ===&lt;br /&gt;
&lt;br /&gt;
[[File:Casualbuttonlight.svg|none|30px]]&lt;br /&gt;
&lt;br /&gt;
Click the paint brush button to the right of the title to open the casual mode voting menu&lt;br /&gt;
&lt;br /&gt;
[[File:Dearrow-casual-vote.png|thumb|DeArrow casual voting menu|none]]&lt;br /&gt;
&lt;br /&gt;
Then check off each category that applies to this title.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t like the original title, you can vote &amp;quot;no&amp;quot;, which acts like a downvote.&lt;br /&gt;
&lt;br /&gt;
=== Potential future ===&lt;br /&gt;
&lt;br /&gt;
When you enable casual mode, your titles will now be submitted as coming from someone with casual mode enabled. In the future, it might make sense for people with casual mode to have casual mode titles preferred over classic mode titles if both are available to truly make the DeArrow factions idea a reality.&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=DeArrow/Casual_mode&amp;diff=3882</id>
		<title>DeArrow/Casual mode</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=DeArrow/Casual_mode&amp;diff=3882"/>
		<updated>2025-02-16T08:22:34Z</updated>

		<summary type="html">&lt;p&gt;Ajay: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DeArrow is a browser extension for crowdsourcing better titles and thumbnails on YouTube. Sometimes, that will mean replacing a funny descriptive-enough title with a more boring explaining title.&lt;br /&gt;
&lt;br /&gt;
There have been complaints in the past about people feeling like DeArrow title changes are sometimes unnecessary, or ruin the fun. At the same time, there are many people who do like the more boring feel created from replacing as many titles as possible.&lt;br /&gt;
&lt;br /&gt;
To try to improve the experience for everyone, DeArrow is now going to have two different modes. Classic mode will be just like it is today and will remain the default mode, but there will now also be a casual mode.&lt;br /&gt;
&lt;br /&gt;
The goal with casual mode is to allow people to vote on which original titles they enjoy so that people who prefer not to see the boring titles can avoid them. However, for videos that really do need changes, DeArrow will still be able to replace the titles.&lt;br /&gt;
&lt;br /&gt;
[[File:DeArrowCasualModeSetting.png|thumb|The two different DeArrow modes|none|600x600px]]&lt;br /&gt;
&lt;br /&gt;
=== Category Selection ===&lt;br /&gt;
&lt;br /&gt;
[[File:Dearrow-casual-mode-categories.png|thumb|DeArrow casual mode category settings|none]]&lt;br /&gt;
&lt;br /&gt;
When you vote on if you liked an original title, you&#039;ll be able to select which categories it falls under. These categories allow you to choose which types of original titles you want to see.&lt;br /&gt;
&lt;br /&gt;
=== Voting ===&lt;br /&gt;
&lt;br /&gt;
[[File:Casualbuttonlight.svg|none|30px]]&lt;br /&gt;
&lt;br /&gt;
Click the paint brush button to the right of the title to open the casual mode voting menu&lt;br /&gt;
&lt;br /&gt;
[[File:Dearrow-casual-vote.png|thumb|DeArrow casual voting menu|none]]&lt;br /&gt;
&lt;br /&gt;
Then check off each category that applies to this title.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t like the original title, you can vote &amp;quot;no&amp;quot;, which acts like a downvote.&lt;br /&gt;
&lt;br /&gt;
=== Potential future ===&lt;br /&gt;
&lt;br /&gt;
When you enable casual mode, your titles will now be submitted as coming from someone with casual mode enabled. In the future, it might make sense for people with casual mode to have casual mode titles preferred over classic mode titles if both are available to truly make the DeArrow factions idea a reality.&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=DeArrow/Casual_mode&amp;diff=3881</id>
		<title>DeArrow/Casual mode</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=DeArrow/Casual_mode&amp;diff=3881"/>
		<updated>2025-02-16T08:22:11Z</updated>

		<summary type="html">&lt;p&gt;Ajay: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DeArrow is a browser extension for crowdsourcing better titles and thumbnails on YouTube. Sometimes, that will mean replacing a funny descriptive-enough title with a more boring explaining title.&lt;br /&gt;
&lt;br /&gt;
There have been complaints in the past about people feeling like DeArrow title changes are sometimes unnecessary, or ruin the fun. At the same time, there are many people who do like the more boring feel created from replacing as many titles as possible.&lt;br /&gt;
&lt;br /&gt;
To try to improve the experience for everyone, DeArrow is now going to have two different modes. Classic mode will be just like it is today and will remain the default mode, but there will now also be a casual mode.&lt;br /&gt;
&lt;br /&gt;
The goal with casual mode is to allow people to vote on which original titles they enjoy so that people who prefer not to see the boring titles can avoid them. However, for videos that really do need changes due to being misleading or providing little information, DeArrow will still be able to replace the titles.&lt;br /&gt;
&lt;br /&gt;
[[File:DeArrowCasualModeSetting.png|thumb|The two different DeArrow modes|none|600x600px]]&lt;br /&gt;
&lt;br /&gt;
=== Category Selection ===&lt;br /&gt;
&lt;br /&gt;
[[File:Dearrow-casual-mode-categories.png|thumb|DeArrow casual mode category settings|none]]&lt;br /&gt;
&lt;br /&gt;
When you vote on if you liked an original title, you&#039;ll be able to select which categories it falls under. These categories allow you to choose which types of original titles you want to see.&lt;br /&gt;
&lt;br /&gt;
=== Voting ===&lt;br /&gt;
&lt;br /&gt;
[[File:Casualbuttonlight.svg|none|30px]]&lt;br /&gt;
&lt;br /&gt;
Click the paint brush button to the right of the title to open the casual mode voting menu&lt;br /&gt;
&lt;br /&gt;
[[File:Dearrow-casual-vote.png|thumb|DeArrow casual voting menu|none]]&lt;br /&gt;
&lt;br /&gt;
Then check off each category that applies to this title.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t like the original title, you can vote &amp;quot;no&amp;quot;, which acts like a downvote.&lt;br /&gt;
&lt;br /&gt;
=== Potential future ===&lt;br /&gt;
&lt;br /&gt;
When you enable casual mode, your titles will now be submitted as coming from someone with casual mode enabled. In the future, it might make sense for people with casual mode to have casual mode titles preferred over classic mode titles if both are available to truly make the DeArrow factions idea a reality.&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=DeArrow/Casual_mode&amp;diff=3880</id>
		<title>DeArrow/Casual mode</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=DeArrow/Casual_mode&amp;diff=3880"/>
		<updated>2025-02-16T08:21:48Z</updated>

		<summary type="html">&lt;p&gt;Ajay: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DeArrow is a browser extension for crowdsourcing better titles and thumbnails on YouTube. Sometimes, that will mean replacing a funny descriptive-enough title with a more boring explaining title.&lt;br /&gt;
&lt;br /&gt;
There have been complaints in the past about people feeling like DeArrow title changes are sometimes unnecessary, or ruin the fun. At the same time, there are many people who do like the more boring feel created from replacing as many titles as possible.&lt;br /&gt;
&lt;br /&gt;
To try to improve the experience for everyone, DeArrow is now going to have two different modes. Classic mode will be just like it is today and will remain the default mode, but there will now also be a casual mode.&lt;br /&gt;
&lt;br /&gt;
[[File:DeArrowCasualModeSetting.png|thumb|The two different DeArrow modes|none|600x600px]]&lt;br /&gt;
&lt;br /&gt;
The goal with casual mode is to allow people to vote on which original titles they enjoy so that people who prefer not to see the boring titles can avoid them. However, for videos that really do need changes due to being misleading or providing little information, DeArrow will still be able to replace the titles.&lt;br /&gt;
&lt;br /&gt;
=== Category Selection ===&lt;br /&gt;
&lt;br /&gt;
[[File:Dearrow-casual-mode-categories.png|thumb|DeArrow casual mode category settings|none]]&lt;br /&gt;
&lt;br /&gt;
When you vote on if you liked an original title, you&#039;ll be able to select which categories it falls under. These categories allow you to choose which types of original titles you want to see.&lt;br /&gt;
&lt;br /&gt;
=== Voting ===&lt;br /&gt;
&lt;br /&gt;
[[File:Casualbuttonlight.svg|none|30px]]&lt;br /&gt;
&lt;br /&gt;
Click the paint brush button to the right of the title to open the casual mode voting menu&lt;br /&gt;
&lt;br /&gt;
[[File:Dearrow-casual-vote.png|thumb|DeArrow casual voting menu|none]]&lt;br /&gt;
&lt;br /&gt;
Then check off each category that applies to this title.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t like the original title, you can vote &amp;quot;no&amp;quot;, which acts like a downvote.&lt;br /&gt;
&lt;br /&gt;
=== Potential future ===&lt;br /&gt;
&lt;br /&gt;
When you enable casual mode, your titles will now be submitted as coming from someone with casual mode enabled. In the future, it might make sense for people with casual mode to have casual mode titles preferred over classic mode titles if both are available to truly make the DeArrow factions idea a reality.&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=DeArrow/Casual_mode&amp;diff=3879</id>
		<title>DeArrow/Casual mode</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=DeArrow/Casual_mode&amp;diff=3879"/>
		<updated>2025-02-16T08:21:19Z</updated>

		<summary type="html">&lt;p&gt;Ajay: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DeArrow is a browser extension for crowdsourcing better titles and thumbnails on YouTube. Sometimes, that will mean replacing a funny descriptive-enough title with a more boring explaining title.&lt;br /&gt;
&lt;br /&gt;
There have been complaints in the past about people feeling like DeArrow title changes are sometimes unnecessary, or ruin the fun. At the same time, there are many people who do like the more boring feel created from replacing as many titles as possible.&lt;br /&gt;
&lt;br /&gt;
To try to improve the experience for everyone, DeArrow is now going to have two different modes. Classic mode will be just like it is today and will remain the default mode, but there will now also be a casual mode.&lt;br /&gt;
&lt;br /&gt;
[[File:DeArrowCasualModeSetting.png|thumb|The two different DeArrow modes|none]]&lt;br /&gt;
&lt;br /&gt;
The goal with casual mode is to allow people to vote on which original titles they enjoy so that people who prefer not to see the boring titles can avoid them. However, for videos that really do need changes due to being misleading or providing little information, DeArrow will still be able to replace the titles.&lt;br /&gt;
&lt;br /&gt;
=== Category Selection ===&lt;br /&gt;
&lt;br /&gt;
[[File:Dearrow-casual-mode-categories.png|thumb|DeArrow casual mode category settings|none]]&lt;br /&gt;
&lt;br /&gt;
When you vote on if you liked an original title, you&#039;ll be able to select which categories it falls under. These categories allow you to choose which types of original titles you want to see.&lt;br /&gt;
&lt;br /&gt;
=== Voting ===&lt;br /&gt;
&lt;br /&gt;
[[File:Casualbuttonlight.svg|none|30px]]&lt;br /&gt;
&lt;br /&gt;
Click the paint brush button to the right of the title to open the casual mode voting menu&lt;br /&gt;
&lt;br /&gt;
[[File:Dearrow-casual-vote.png|thumb|DeArrow casual voting menu|none]]&lt;br /&gt;
&lt;br /&gt;
Then check off each category that applies to this title.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t like the original title, you can vote &amp;quot;no&amp;quot;, which acts like a downvote.&lt;br /&gt;
&lt;br /&gt;
=== Potential future ===&lt;br /&gt;
&lt;br /&gt;
When you enable casual mode, your titles will now be submitted as coming from someone with casual mode enabled. In the future, it might make sense for people with casual mode to have casual mode titles preferred over classic mode titles if both are available to truly make the DeArrow factions idea a reality.&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=File:DeArrowCasualModeSetting.png&amp;diff=3878</id>
		<title>File:DeArrowCasualModeSetting.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=File:DeArrowCasualModeSetting.png&amp;diff=3878"/>
		<updated>2025-02-16T08:20:30Z</updated>

		<summary type="html">&lt;p&gt;Ajay: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DeArrow casual mode toggle in settings&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=File:Casualbuttonlight.svg&amp;diff=3877</id>
		<title>File:Casualbuttonlight.svg</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=File:Casualbuttonlight.svg&amp;diff=3877"/>
		<updated>2025-02-16T08:11:56Z</updated>

		<summary type="html">&lt;p&gt;Ajay: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Casual vote button light mode&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=File:Casualbutton.svg&amp;diff=3876</id>
		<title>File:Casualbutton.svg</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=File:Casualbutton.svg&amp;diff=3876"/>
		<updated>2025-02-16T08:07:23Z</updated>

		<summary type="html">&lt;p&gt;Ajay: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Casual vote button&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=DeArrow/Casual_mode&amp;diff=3875</id>
		<title>DeArrow/Casual mode</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=DeArrow/Casual_mode&amp;diff=3875"/>
		<updated>2025-02-16T08:01:57Z</updated>

		<summary type="html">&lt;p&gt;Ajay: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DeArrow is a browser extension for crowdsourcing better titles and thumbnails on YouTube. Sometimes, that will mean replacing a funny descriptive-enough title with a more boring explaining title.&lt;br /&gt;
&lt;br /&gt;
The goal with &amp;quot;casual mode&amp;quot; is to allow people to vote on which original titles they enjoy so that people who prefer not to see the boring titles can avoid them. However, for videos that really do need changes due to being misleading or providing little information, DeArrow will still be able to replace the titles.&lt;br /&gt;
[[File:Dearrow-casual-mode-categories.png|thumb|DeArrow casual mode category settings]]&lt;br /&gt;
&lt;br /&gt;
=== Category Selection ===&lt;br /&gt;
When you vote on if you liked an original title, you&#039;ll be able to select which categories it falls under. These categories allow you to choose which types of original titles you want to see.&lt;br /&gt;
&lt;br /&gt;
[[File:Dearrow-casual-vote.png|thumb|DeArrow casual voting menu]]&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=File:Dearrow-casual-vote.png&amp;diff=3874</id>
		<title>File:Dearrow-casual-vote.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=File:Dearrow-casual-vote.png&amp;diff=3874"/>
		<updated>2025-02-16T08:00:46Z</updated>

		<summary type="html">&lt;p&gt;Ajay: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DeArrow casual voting menu&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=File:Dearrow-casual-mode-categories.png&amp;diff=3873</id>
		<title>File:Dearrow-casual-mode-categories.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=File:Dearrow-casual-mode-categories.png&amp;diff=3873"/>
		<updated>2025-02-16T07:58:04Z</updated>

		<summary type="html">&lt;p&gt;Ajay: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DeArrow casual mode category selection settings&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=DeArrow/Casual_mode&amp;diff=3869</id>
		<title>DeArrow/Casual mode</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=DeArrow/Casual_mode&amp;diff=3869"/>
		<updated>2025-02-12T19:39:13Z</updated>

		<summary type="html">&lt;p&gt;Ajay: Created page with &amp;quot;Keep original titles when they describe the video well enough and are clever or funny.  Choose which categories of titles you want to see.  You&amp;#039;ll be able to vote if a title fits into a category or not.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Keep original titles when they describe the video well enough and are clever or funny.&lt;br /&gt;
&lt;br /&gt;
Choose which categories of titles you want to see.&lt;br /&gt;
&lt;br /&gt;
You&#039;ll be able to vote if a title fits into a category or not.&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=FAQ/Exclusions&amp;diff=3867</id>
		<title>FAQ/Exclusions</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=FAQ/Exclusions&amp;diff=3867"/>
		<updated>2025-02-11T22:52:21Z</updated>

		<summary type="html">&lt;p&gt;Ajay: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Could [x] be exempt from having segments ==&lt;br /&gt;
Perchance&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=Tangents/Jokes&amp;diff=3620</id>
		<title>Tangents/Jokes</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=Tangents/Jokes&amp;diff=3620"/>
		<updated>2025-01-11T20:33:30Z</updated>

		<summary type="html">&lt;p&gt;Ajay: goodbye filler&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
==== Description ====&lt;br /&gt;
This is for tangential scenes or jokes that are not required to understand the main content of the video.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This includes:&#039;&#039;&#039; &lt;br /&gt;
* Timelapses / B-roll&lt;br /&gt;
* Fake Sponsors&lt;br /&gt;
*Slow motion clips that do not provide any context or are used as replays or B-roll footage&lt;br /&gt;
*Bloopers&lt;br /&gt;
* Irrelevant/ tangential content&lt;br /&gt;
** Content creator being distracted by something unrelated to the video&lt;br /&gt;
** Unrelated highlight clips that don&#039;t provide any context, are not elaborated on and don&#039;t fit into [https://wiki.sponsor.ajay.app/w/Preview/Recap#Preview preview]&lt;br /&gt;
&lt;br /&gt;
=== Exceptions/ Edge Cases ===&lt;br /&gt;
&lt;br /&gt;
* If any other category can be applied (mute or skip), choose them instead. Filler Tangent is the lowest priority category.&lt;br /&gt;
* In most cases, fillers should not be mute. Mute fillers should mostly be used for chaining to a skip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Not included&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Similar to other categories, &#039;&#039;&#039;do not&#039;&#039;&#039; mark entire videos.&lt;br /&gt;
* Useful Information&lt;br /&gt;
*# Provides context&lt;br /&gt;
*# Useful Explanations or analogies&lt;br /&gt;
*# Excerpts from source content&lt;br /&gt;
*# Background details&lt;br /&gt;
* Segments that are referenced later&lt;br /&gt;
*Bloopers that include [[Endcards/Credits]]&lt;br /&gt;
{{Disclaimers}}&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
[https://www.youtube.com/watch?v=wbbH77rYaa8 The birth of photography: Drawing with light (and silver iodide)]&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=a5YAGYyuA0U Food theory: I quit Diet Coke!]&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=1MkrNVic7pw Auto-aiming bow vs. flying targets]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 80%&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 3%&amp;quot; | Description !! style=&amp;quot;width: 1%&amp;quot; | Video Link&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Positive Examples&lt;br /&gt;
|-&lt;br /&gt;
|Joke filler from 18:15 - 18:58&lt;br /&gt;
|[https://youtu.be/088Ti7MgkOg?t=1095 DIY curbed wheel fix - was it worth it?]&lt;br /&gt;
|-&lt;br /&gt;
|Unrelated tangent: 10:03 - 10:37 - Distracted by a caterpillar&lt;br /&gt;
|[https://youtu.be/pAOCiNhQW2Y?t=602 1,074 mph baseball vs. 1 gallon of mayonnaise] &lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Negative Examples&lt;br /&gt;
|-&lt;br /&gt;
| This is quoting a song, which is relevant to the point they are making. || [https://www.youtube.com/watch?v=1MRAo-hwVhQ&amp;amp;t=272s The man who loved an abortion ban]&lt;br /&gt;
|-&lt;br /&gt;
|None of the examples in this video should be marked since they provide context&lt;br /&gt;
|[https://www.youtube.com/watch?v=QR5MFQnZM3k Nvidia’s stretchy simulation: super quick]&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+[https://www.youtube.com/watch?v=IZEaYjo4ZJU VFX artist reveals how many solar panels are needed to power the entire world]&lt;br /&gt;
!Verdict&lt;br /&gt;
!Reason&lt;br /&gt;
!Timestamp&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|✅&lt;br /&gt;
|Joke analogy that provides no actual information &lt;br /&gt;
|5:33 - 5:36&lt;br /&gt;
|[https://www.youtube.com/watch?v=IZEaYjo4ZJU&amp;amp;t=317s Watch from 5:17]&lt;br /&gt;
|-&lt;br /&gt;
|✅&lt;br /&gt;
|Unrelated joke in the middle of content&lt;br /&gt;
|6:40 - 6:50&lt;br /&gt;
|[https://www.youtube.com/watch?v=IZEaYjo4ZJU&amp;amp;t=394s Watch from 6:34]&lt;br /&gt;
|-&lt;br /&gt;
|✅&lt;br /&gt;
|Unrelated tangent/ joke that is based in fantasy&lt;br /&gt;
|16:33 - 16:39&lt;br /&gt;
|[https://www.youtube.com/watch?v=IZEaYjo4ZJU&amp;amp;t=988s Watch from 16:28]&lt;br /&gt;
|-&lt;br /&gt;
|❌&lt;br /&gt;
|On-topic elaboration that provides context and information&lt;br /&gt;
|17:28 - 18:01&lt;br /&gt;
|[https://www.youtube.com/watch?v=IZEaYjo4ZJU&amp;amp;t=1047s Watch from 17:27]&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+[https://www.youtube.com/watch?v=6yur4w0Cfpw Pac-Man World Speedruns Deserve More Love | [https://www.youtube.com/watch?v=6yur4w0Cfpw Pac-Man World speedruns deserve more love]&lt;br /&gt;
!Verdict&lt;br /&gt;
!Reason&lt;br /&gt;
!Timestamp&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|❌&lt;br /&gt;
|The clip is too short to clip cleanly&lt;br /&gt;
|0:00 - 0:02&lt;br /&gt;
|[https://www.youtube.com/watch?v=6yur4w0Cfpw&amp;amp;t=0s Watch from 0:00]&lt;br /&gt;
|-&lt;br /&gt;
|✅&lt;br /&gt;
|Collection of gameplay clips that do not appear later in the video&lt;br /&gt;
|0:40 - 1:40&lt;br /&gt;
|[https://www.youtube.com/watch?v=6yur4w0Cfpw&amp;amp;t=40s Watch from 0:40]&lt;br /&gt;
|-&lt;br /&gt;
|❌&lt;br /&gt;
|The upcoming scene is narrated and a follow-up to earlier content&lt;br /&gt;
|9:52 - 10:07&lt;br /&gt;
|[https://www.youtube.com/watch?v=6yur4w0Cfpw&amp;amp;t=588s Watch from 9:48]&lt;br /&gt;
|-&lt;br /&gt;
|✅&lt;br /&gt;
|Unrelated tangent/ fun fact&lt;br /&gt;
|10:24 - 10:40&lt;br /&gt;
|[https://www.youtube.com/watch?v=6yur4w0Cfpw&amp;amp;t=617s Watch from 10:17]&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+[https://www.youtube.com/watch?v=YvR7LAsk6tk &amp;quot;Unsafe at any Speed&amp;quot; : The Truth about RECALLS | [https://www.youtube.com/watch?v=YvR7LAsk6tk &amp;quot;Unsafe at any speed&amp;quot;: The truth about recalls]&lt;br /&gt;
!Verdict&lt;br /&gt;
!Reason&lt;br /&gt;
!Timestamp&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|✅&lt;br /&gt;
|Clip used for humor&lt;br /&gt;
|1:14 - 1:18&lt;br /&gt;
|[https://www.youtube.com/watch?v=YvR7LAsk6tk&amp;amp;t=65s Watch from 1:05]&lt;br /&gt;
|-&lt;br /&gt;
|✅&lt;br /&gt;
|Clip used as reference, but ultimately just repetition&lt;br /&gt;
|2:05 - 2:11&lt;br /&gt;
|[https://www.youtube.com/watch?v=YvR7LAsk6tk&amp;amp;t=119s Watch from 1:59]&lt;br /&gt;
|-&lt;br /&gt;
|❌&lt;br /&gt;
|Direct quote &amp;amp; used for context&lt;br /&gt;
|3:10 - 3:19&lt;br /&gt;
|[https://www.youtube.com/watch?v=YvR7LAsk6tk&amp;amp;t=189s Watch from 3:09]&lt;br /&gt;
|-&lt;br /&gt;
|✅&lt;br /&gt;
|Clip used to accentuate point&lt;br /&gt;
|5:33 - 5:41&lt;br /&gt;
|[https://www.youtube.com/watch?v=YvR7LAsk6tk&amp;amp;t=328s Watch from 5:28]&lt;br /&gt;
|-&lt;br /&gt;
|✅&lt;br /&gt;
|Song reference to accentuate point&lt;br /&gt;
|5:45 - 5:49&lt;br /&gt;
|[https://www.youtube.com/watch?v=YvR7LAsk6tk&amp;amp;t=341s Watch from 5:41]&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+[https://www.youtube.com/watch?v=D9u7JDCT47Y The quest to beat Portal glitchless in under 15 minutes]&lt;br /&gt;
!Verdict&lt;br /&gt;
!Reason&lt;br /&gt;
!Timestamp&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|✅&lt;br /&gt;
|Gameplay clips that are not built upon, elaborated or used for context&lt;br /&gt;
|0:59 - 1:27&lt;br /&gt;
|[https://www.youtube.com/watch?v=D9u7JDCT47Y&amp;amp;t=57s Watch from 0:57]&lt;br /&gt;
|-&lt;br /&gt;
|✅&lt;br /&gt;
|Gameplay clips that are not built upon, elaborated or used for context&lt;br /&gt;
|4:49 - 6:02&lt;br /&gt;
|[https://www.youtube.com/watch?v=D9u7JDCT47Y&amp;amp;t=267 Watch from 4:27]&lt;br /&gt;
|-&lt;br /&gt;
|❌&lt;br /&gt;
|Short clip showing the end of the run&lt;br /&gt;
|14:14 - 14:25&lt;br /&gt;
|[https://www.youtube.com/watch?v=D9u7JDCT47Y&amp;amp;t=847s Watch from 14:08]&lt;br /&gt;
|-&lt;br /&gt;
|✅&lt;br /&gt;
|Unrelated highlights that don&#039;t provide any context or information&lt;br /&gt;
|16:53 - 17:59&lt;br /&gt;
|[https://www.youtube.com/watch?v=D9u7JDCT47Y&amp;amp;t=1004s Watch from 16:44]&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+[https://www.youtube.com/watch?v=S1CDiebvzRM Ratchet &amp;amp; Clank&#039;s Amazing Movement Tech | [https://www.youtube.com/watch?v=S1CDiebvzRM Ratchet &amp;amp; Clank&#039;s amazing movement tech]&lt;br /&gt;
!Verdict&lt;br /&gt;
!Reason&lt;br /&gt;
!Timestamp&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|✅&lt;br /&gt;
|Animation and tangent that isn&#039;t required for any context&lt;br /&gt;
|0:19 - 0:37&lt;br /&gt;
|[https://www.youtube.com/watch?v=S1CDiebvzRM&amp;amp;t=18s Watch from 0:18]&lt;br /&gt;
|-&lt;br /&gt;
|✅&lt;br /&gt;
|Tangent and clip about Xem as a person and unrelated clip metaphor&lt;br /&gt;
|0:50 - 1:24&lt;br /&gt;
|[https://www.youtube.com/watch?v=S1CDiebvzRM&amp;amp;t=39s Watch from 0:39]&lt;br /&gt;
|-&lt;br /&gt;
|❌&lt;br /&gt;
|Cannot be cut cleanly, part of explanation of tech&lt;br /&gt;
|1:34 - 1:41&lt;br /&gt;
|[https://www.youtube.com/watch?v=S1CDiebvzRM&amp;amp;t=88s Watch from 1:28]&lt;br /&gt;
|-&lt;br /&gt;
|❌&lt;br /&gt;
|Provides context for movement tech&lt;br /&gt;
|3:00 - 3:12&lt;br /&gt;
|[https://www.youtube.com/watch?v=S1CDiebvzRM&amp;amp;t=180s Watch from 3:00]&lt;br /&gt;
|-&lt;br /&gt;
|✅&lt;br /&gt;
|Clip used to accentuate a point&lt;br /&gt;
|3:40 - 3:45&lt;br /&gt;
|[https://www.youtube.com/watch?v=S1CDiebvzRM&amp;amp;t=216s Watch from 3:36]&lt;br /&gt;
|-&lt;br /&gt;
|❌&lt;br /&gt;
|Explanation of concept&lt;br /&gt;
|3:45 - 5:03&lt;br /&gt;
|[https://www.youtube.com/watch?v=S1CDiebvzRM&amp;amp;t=224s Watch from 3:44]&lt;br /&gt;
|-&lt;br /&gt;
|✅&lt;br /&gt;
|Tangential wordplay &lt;br /&gt;
|5:09 - 5:13&lt;br /&gt;
|[https://www.youtube.com/watch?v=S1CDiebvzRM&amp;amp;t=304s Watch from 5:04]&lt;br /&gt;
|}&lt;br /&gt;
[[Category:Segment Categories]]&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=Filler_Tangent/Jokes&amp;diff=3618</id>
		<title>Filler Tangent/Jokes</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=Filler_Tangent/Jokes&amp;diff=3618"/>
		<updated>2025-01-11T20:32:29Z</updated>

		<summary type="html">&lt;p&gt;Ajay: Ajay moved page Filler Tangent/Jokes to Tangents/Jokes: new name&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Tangents/Jokes]]&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=Tangents/Jokes&amp;diff=3617</id>
		<title>Tangents/Jokes</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=Tangents/Jokes&amp;diff=3617"/>
		<updated>2025-01-11T20:32:29Z</updated>

		<summary type="html">&lt;p&gt;Ajay: Ajay moved page Filler Tangent/Jokes to Tangents/Jokes: new name&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
==== Description ====&lt;br /&gt;
This is for tangential scenes added only for filler or humor that are not required to understand the main content of the video.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This includes:&#039;&#039;&#039; &lt;br /&gt;
* Timelapses / B-roll&lt;br /&gt;
* Fake Sponsors&lt;br /&gt;
*Slow motion clips that do not provide any context or are used as replays or B-roll footage&lt;br /&gt;
*Bloopers&lt;br /&gt;
* Irrelevant/ tangential content&lt;br /&gt;
** Content creator being distracted by something unrelated to the video&lt;br /&gt;
** Unrelated highlight clips that don&#039;t provide any context, are not elaborated on and don&#039;t fit into [https://wiki.sponsor.ajay.app/w/Preview/Recap#Preview preview]&lt;br /&gt;
&lt;br /&gt;
=== Exceptions/ Edge Cases ===&lt;br /&gt;
&lt;br /&gt;
* If any other category can be applied (mute or skip), choose them instead. Filler Tangent is the lowest priority category.&lt;br /&gt;
* In most cases, fillers should not be mute. Mute fillers should mostly be used for chaining to a skip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Not included&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Similar to other categories, &#039;&#039;&#039;do not&#039;&#039;&#039; mark entire videos.&lt;br /&gt;
* Useful Information&lt;br /&gt;
*# Provides context&lt;br /&gt;
*# Useful Explanations or analogies&lt;br /&gt;
*# Excerpts from source content&lt;br /&gt;
*# Background details&lt;br /&gt;
* Segments that are referenced later&lt;br /&gt;
*Bloopers that include [[Endcards/Credits]]&lt;br /&gt;
{{Disclaimers}}&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
[https://www.youtube.com/watch?v=wbbH77rYaa8 The birth of photography: Drawing with light (and silver iodide)]&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=a5YAGYyuA0U Food theory: I quit Diet Coke!]&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=1MkrNVic7pw Auto-aiming bow vs. flying targets]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 80%&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 3%&amp;quot; | Description !! style=&amp;quot;width: 1%&amp;quot; | Video Link&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Positive Examples&lt;br /&gt;
|-&lt;br /&gt;
|Joke filler from 18:15 - 18:58&lt;br /&gt;
|[https://youtu.be/088Ti7MgkOg?t=1095 DIY curbed wheel fix - was it worth it?]&lt;br /&gt;
|-&lt;br /&gt;
|Unrelated tangent: 10:03 - 10:37 - Distracted by a caterpillar&lt;br /&gt;
|[https://youtu.be/pAOCiNhQW2Y?t=602 1,074 mph baseball vs. 1 gallon of mayonnaise] &lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Negative Examples&lt;br /&gt;
|-&lt;br /&gt;
| This is quoting a song, which is relevant to the point they are making. || [https://www.youtube.com/watch?v=1MRAo-hwVhQ&amp;amp;t=272s The man who loved an abortion ban]&lt;br /&gt;
|-&lt;br /&gt;
|None of the examples in this video should be marked since they provide context&lt;br /&gt;
|[https://www.youtube.com/watch?v=QR5MFQnZM3k Nvidia’s stretchy simulation: super quick]&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+[https://www.youtube.com/watch?v=IZEaYjo4ZJU VFX artist reveals how many solar panels are needed to power the entire world]&lt;br /&gt;
!Verdict&lt;br /&gt;
!Reason&lt;br /&gt;
!Timestamp&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|✅&lt;br /&gt;
|Joke analogy that provides no actual information &lt;br /&gt;
|5:33 - 5:36&lt;br /&gt;
|[https://www.youtube.com/watch?v=IZEaYjo4ZJU&amp;amp;t=317s Watch from 5:17]&lt;br /&gt;
|-&lt;br /&gt;
|✅&lt;br /&gt;
|Unrelated joke in the middle of content&lt;br /&gt;
|6:40 - 6:50&lt;br /&gt;
|[https://www.youtube.com/watch?v=IZEaYjo4ZJU&amp;amp;t=394s Watch from 6:34]&lt;br /&gt;
|-&lt;br /&gt;
|✅&lt;br /&gt;
|Unrelated tangent/ joke that is based in fantasy&lt;br /&gt;
|16:33 - 16:39&lt;br /&gt;
|[https://www.youtube.com/watch?v=IZEaYjo4ZJU&amp;amp;t=988s Watch from 16:28]&lt;br /&gt;
|-&lt;br /&gt;
|❌&lt;br /&gt;
|On-topic elaboration that provides context and information&lt;br /&gt;
|17:28 - 18:01&lt;br /&gt;
|[https://www.youtube.com/watch?v=IZEaYjo4ZJU&amp;amp;t=1047s Watch from 17:27]&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+[https://www.youtube.com/watch?v=6yur4w0Cfpw Pac-Man World Speedruns Deserve More Love | [https://www.youtube.com/watch?v=6yur4w0Cfpw Pac-Man World speedruns deserve more love]&lt;br /&gt;
!Verdict&lt;br /&gt;
!Reason&lt;br /&gt;
!Timestamp&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|❌&lt;br /&gt;
|The clip is too short to clip cleanly&lt;br /&gt;
|0:00 - 0:02&lt;br /&gt;
|[https://www.youtube.com/watch?v=6yur4w0Cfpw&amp;amp;t=0s Watch from 0:00]&lt;br /&gt;
|-&lt;br /&gt;
|✅&lt;br /&gt;
|Collection of gameplay clips that do not appear later in the video&lt;br /&gt;
|0:40 - 1:40&lt;br /&gt;
|[https://www.youtube.com/watch?v=6yur4w0Cfpw&amp;amp;t=40s Watch from 0:40]&lt;br /&gt;
|-&lt;br /&gt;
|❌&lt;br /&gt;
|The upcoming scene is narrated and a follow-up to earlier content&lt;br /&gt;
|9:52 - 10:07&lt;br /&gt;
|[https://www.youtube.com/watch?v=6yur4w0Cfpw&amp;amp;t=588s Watch from 9:48]&lt;br /&gt;
|-&lt;br /&gt;
|✅&lt;br /&gt;
|Unrelated tangent/ fun fact&lt;br /&gt;
|10:24 - 10:40&lt;br /&gt;
|[https://www.youtube.com/watch?v=6yur4w0Cfpw&amp;amp;t=617s Watch from 10:17]&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+[https://www.youtube.com/watch?v=YvR7LAsk6tk &amp;quot;Unsafe at any Speed&amp;quot; : The Truth about RECALLS | [https://www.youtube.com/watch?v=YvR7LAsk6tk &amp;quot;Unsafe at any speed&amp;quot;: The truth about recalls]&lt;br /&gt;
!Verdict&lt;br /&gt;
!Reason&lt;br /&gt;
!Timestamp&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|✅&lt;br /&gt;
|Clip used for humor&lt;br /&gt;
|1:14 - 1:18&lt;br /&gt;
|[https://www.youtube.com/watch?v=YvR7LAsk6tk&amp;amp;t=65s Watch from 1:05]&lt;br /&gt;
|-&lt;br /&gt;
|✅&lt;br /&gt;
|Clip used as reference, but ultimately just repetition&lt;br /&gt;
|2:05 - 2:11&lt;br /&gt;
|[https://www.youtube.com/watch?v=YvR7LAsk6tk&amp;amp;t=119s Watch from 1:59]&lt;br /&gt;
|-&lt;br /&gt;
|❌&lt;br /&gt;
|Direct quote &amp;amp; used for context&lt;br /&gt;
|3:10 - 3:19&lt;br /&gt;
|[https://www.youtube.com/watch?v=YvR7LAsk6tk&amp;amp;t=189s Watch from 3:09]&lt;br /&gt;
|-&lt;br /&gt;
|✅&lt;br /&gt;
|Clip used to accentuate point&lt;br /&gt;
|5:33 - 5:41&lt;br /&gt;
|[https://www.youtube.com/watch?v=YvR7LAsk6tk&amp;amp;t=328s Watch from 5:28]&lt;br /&gt;
|-&lt;br /&gt;
|✅&lt;br /&gt;
|Song reference to accentuate point&lt;br /&gt;
|5:45 - 5:49&lt;br /&gt;
|[https://www.youtube.com/watch?v=YvR7LAsk6tk&amp;amp;t=341s Watch from 5:41]&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+[https://www.youtube.com/watch?v=D9u7JDCT47Y The quest to beat Portal glitchless in under 15 minutes]&lt;br /&gt;
!Verdict&lt;br /&gt;
!Reason&lt;br /&gt;
!Timestamp&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|✅&lt;br /&gt;
|Gameplay clips that are not built upon, elaborated or used for context&lt;br /&gt;
|0:59 - 1:27&lt;br /&gt;
|[https://www.youtube.com/watch?v=D9u7JDCT47Y&amp;amp;t=57s Watch from 0:57]&lt;br /&gt;
|-&lt;br /&gt;
|✅&lt;br /&gt;
|Gameplay clips that are not built upon, elaborated or used for context&lt;br /&gt;
|4:49 - 6:02&lt;br /&gt;
|[https://www.youtube.com/watch?v=D9u7JDCT47Y&amp;amp;t=267 Watch from 4:27]&lt;br /&gt;
|-&lt;br /&gt;
|❌&lt;br /&gt;
|Short clip showing the end of the run&lt;br /&gt;
|14:14 - 14:25&lt;br /&gt;
|[https://www.youtube.com/watch?v=D9u7JDCT47Y&amp;amp;t=847s Watch from 14:08]&lt;br /&gt;
|-&lt;br /&gt;
|✅&lt;br /&gt;
|Unrelated highlights that don&#039;t provide any context or information&lt;br /&gt;
|16:53 - 17:59&lt;br /&gt;
|[https://www.youtube.com/watch?v=D9u7JDCT47Y&amp;amp;t=1004s Watch from 16:44]&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+[https://www.youtube.com/watch?v=S1CDiebvzRM Ratchet &amp;amp; Clank&#039;s Amazing Movement Tech | [https://www.youtube.com/watch?v=S1CDiebvzRM Ratchet &amp;amp; Clank&#039;s amazing movement tech]&lt;br /&gt;
!Verdict&lt;br /&gt;
!Reason&lt;br /&gt;
!Timestamp&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|✅&lt;br /&gt;
|Animation and tangent that isn&#039;t required for any context&lt;br /&gt;
|0:19 - 0:37&lt;br /&gt;
|[https://www.youtube.com/watch?v=S1CDiebvzRM&amp;amp;t=18s Watch from 0:18]&lt;br /&gt;
|-&lt;br /&gt;
|✅&lt;br /&gt;
|Tangent and clip about Xem as a person and unrelated clip metaphor&lt;br /&gt;
|0:50 - 1:24&lt;br /&gt;
|[https://www.youtube.com/watch?v=S1CDiebvzRM&amp;amp;t=39s Watch from 0:39]&lt;br /&gt;
|-&lt;br /&gt;
|❌&lt;br /&gt;
|Cannot be cut cleanly, part of explanation of tech&lt;br /&gt;
|1:34 - 1:41&lt;br /&gt;
|[https://www.youtube.com/watch?v=S1CDiebvzRM&amp;amp;t=88s Watch from 1:28]&lt;br /&gt;
|-&lt;br /&gt;
|❌&lt;br /&gt;
|Provides context for movement tech&lt;br /&gt;
|3:00 - 3:12&lt;br /&gt;
|[https://www.youtube.com/watch?v=S1CDiebvzRM&amp;amp;t=180s Watch from 3:00]&lt;br /&gt;
|-&lt;br /&gt;
|✅&lt;br /&gt;
|Clip used to accentuate a point&lt;br /&gt;
|3:40 - 3:45&lt;br /&gt;
|[https://www.youtube.com/watch?v=S1CDiebvzRM&amp;amp;t=216s Watch from 3:36]&lt;br /&gt;
|-&lt;br /&gt;
|❌&lt;br /&gt;
|Explanation of concept&lt;br /&gt;
|3:45 - 5:03&lt;br /&gt;
|[https://www.youtube.com/watch?v=S1CDiebvzRM&amp;amp;t=224s Watch from 3:44]&lt;br /&gt;
|-&lt;br /&gt;
|✅&lt;br /&gt;
|Tangential wordplay &lt;br /&gt;
|5:09 - 5:13&lt;br /&gt;
|[https://www.youtube.com/watch?v=S1CDiebvzRM&amp;amp;t=304s Watch from 5:04]&lt;br /&gt;
|}&lt;br /&gt;
[[Category:Segment Categories]]&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=Template:API_Docs&amp;diff=3567</id>
		<title>Template:API Docs</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=Template:API_Docs&amp;diff=3567"/>
		<updated>2024-11-27T16:29:34Z</updated>

		<summary type="html">&lt;p&gt;Ajay: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you end up using the API, I&#039;d love to know about how you&#039;re using it. Tell me about it by making a GitHub issue or emailing me :)&lt;br /&gt;
&lt;br /&gt;
Automating submissions is *not* allowed.&lt;br /&gt;
&lt;br /&gt;
The API and database follow [https://github.com/ajayyy/SponsorBlock/wiki/Database-and-API-License this license] unless you have explicit permission. [https://gist.github.com/ajayyy/4b27dfc66e33941a45aeaadccb51de71 Attribution Template]&lt;br /&gt;
&lt;br /&gt;
Public API available at https://sponsor.ajay.app. &lt;br /&gt;
&lt;br /&gt;
Database download: https://sponsor.ajay.app/database&lt;br /&gt;
&lt;br /&gt;
Database Mirror (30 min update time, provided by Lartza): https://sb.ltn.fi/database/&lt;br /&gt;
&lt;br /&gt;
Database Mirror (10 min update time, provided by blab): https://mirror.sb.mchang.xyz/&lt;br /&gt;
&lt;br /&gt;
Database Mirror (90 min update time, provided by mini_bomba): https://sb.minibomba.pro/mirror/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sub&amp;gt;Note: Database mirrors listed above do &#039;&#039;&#039;&#039;&#039;NOT&#039;&#039;&#039;&#039;&#039; provide an API for the extensions. Setting the server address to any of these URLs will result in no segments or video details being shown.&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DeArrow-only read-only API Mirror (90 min update time, provided by mini_bomba): https://dearrow.minibomba.pro/sbserver/&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=DeArrow/Community&amp;diff=3529</id>
		<title>DeArrow/Community</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=DeArrow/Community&amp;diff=3529"/>
		<updated>2024-06-25T06:09:29Z</updated>

		<summary type="html">&lt;p&gt;Ajay: Add koutube&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Android ==&lt;br /&gt;
[https://libre-tube.github.io/ LibreTube]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/lamarios/clipious Clipious]&lt;br /&gt;
&lt;br /&gt;
=== Thumbnails only ===&lt;br /&gt;
[https://github.com/inotia00/revanced-patches/releases inotia00&#039;s ReVanced extended]&lt;br /&gt;
&lt;br /&gt;
== TV ==&lt;br /&gt;
&lt;br /&gt;
=== Android TV ===&lt;br /&gt;
[https://smarttubeapp.github.io/ SmartTube] supports title and thumbnail replacements&lt;br /&gt;
&lt;br /&gt;
=== Samsung TV ===&lt;br /&gt;
[https://www.tizentube.live/ TizenTube] supports title and thumbnail replacements&lt;br /&gt;
&lt;br /&gt;
== Desktop ==&lt;br /&gt;
[https://freetubeapp.io/ FreeTube] supports title replacement&lt;br /&gt;
&lt;br /&gt;
[https://github.com/BowDown097/QtTube QtTube]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/QuantumWarpCode/yt-dlp-dearrow yt-dlp plugin] Replaces titles when using yt-dlp&lt;br /&gt;
&lt;br /&gt;
[https://github.com/WardPearce/Materialious Materialious]&lt;br /&gt;
&lt;br /&gt;
=== Terminal ===&lt;br /&gt;
[https://github.com/jooooscha/terminal-yt terminal-yt] supports title replacement&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mschae23/dearrow-cli dearrow-cli] is a DeArrow browser frontend for titles and can be used to vote for submissions&lt;br /&gt;
&lt;br /&gt;
== Discord ==&lt;br /&gt;
[https://github.com/SB-tools/DeArrow-Bot DeArrow Discord bot] by cane. Automatically replaces YouTube embeds with thumbnails and titles from DeArrow&lt;br /&gt;
&lt;br /&gt;
[https://github.com/SuperManifolds/DeArrowDiscord BetterDiscord Plugin] by SuperManifolds (Alex Sørlie) &lt;br /&gt;
&lt;br /&gt;
[https://vencord.dev/plugins/Dearrow Vencord Plugin] by Vendicated&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mchangrh/sb-lookup sb-lookup] by mchangrh. Replaces title and thumbnail of Discord embeds with thumbnails and titles from DeArrow&lt;br /&gt;
&lt;br /&gt;
[https://github.com/iGerman00/koutube koutube] by iGerman00. Replaces titles and thumbnails in Discord embeds&lt;br /&gt;
&lt;br /&gt;
== User Scripts ==&lt;br /&gt;
https://github.com/mchangrh/dea.js by mchangrh&lt;br /&gt;
&lt;br /&gt;
== Websites ==&lt;br /&gt;
[https://dearrow.minibomba.pro DeArrow Browser] by mini_bomba. A database explorer for DeArrow inspired by SB Browser with an in-memory server-side database. Main instance updates every 90 minutes. ([https://github.com/mini-bomba/DeArrowBrowser Source code])&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
[https://github.com/ZeroQI/YouTube-Agent.bundle YouTube-Agent.bundle] by ZeroQI. A Plex Movie &amp;amp; TV Series library metadata agent&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Brawl345/gobot gobot] by Brawl345. Telegram bot&lt;br /&gt;
[[Category:DeArrow User Guides|Community]]&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>https://wiki.sponsor.ajay.app/index.php?title=API_Docs/DeArrow&amp;diff=3518</id>
		<title>API Docs/DeArrow</title>
		<link rel="alternate" type="text/html" href="https://wiki.sponsor.ajay.app/index.php?title=API_Docs/DeArrow&amp;diff=3518"/>
		<updated>2024-05-18T05:25:52Z</updated>

		<summary type="html">&lt;p&gt;Ajay: add kotlin lib&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The DeArrow API is free to use for all non browser-extensions&lt;br /&gt;
-----{{API Docs}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Libraries&#039;&#039;&#039;: [https://github.com/zt64/dearrow-kt Kotlin]&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/branding&amp;lt;/code&amp;gt; =====&lt;br /&gt;
Get submission for a video.&lt;br /&gt;
&lt;br /&gt;
Note: Data is returned in order of quality. You can use the first element. However, you should make sure the first element has either locked = true or votes &amp;gt;= 0. If not, it is considered untrusted and is only to be shown in the voting box until it has been confirmed by another user.&lt;br /&gt;
&lt;br /&gt;
Random time and video duration are used if you want to fallback thumbnails to a screenshot from a random time. To make thumbnail caching possible, this random time is consistent and produced by the server. The random time value is a number between 0 and 1 and must be multiplied by the video duration. For convenience, the API returns the video duration if it is known, but for most videos the server does not know the video duration. When the API returns a video duration of 0 or null, you must either not use this feature, or obtain the video duration using another method. The browser extension will fallback to fetching the video duration using other methods to always be able to use the feature.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  videoID: string,&lt;br /&gt;
  service: string, // Optional, default is &#039;YouTube&#039; [1]&lt;br /&gt;
  returnUserID: boolean, // optional, returns submitter userIDs if true, default false&lt;br /&gt;
  fetchAll: boolean // optional, hides details with negative score if false, default false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;References:  &amp;lt;ref name=&amp;quot;:1&amp;quot;&amp;gt;Service to get segments for. See [[Types#Service|Types]] for supported services&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    titles: Array&amp;lt;{&lt;br /&gt;
        title: string, // Note: Titles will sometimes contain &amp;gt; before a word. This tells the auto-formatter to not format a word. If you have no auto-formatter, you can ignore this and replace it with an empty string&lt;br /&gt;
        original: boolean,&lt;br /&gt;
        votes: number,&lt;br /&gt;
        locked: boolean,&lt;br /&gt;
        UUID: string,&lt;br /&gt;
        userID: string // only present if requested&lt;br /&gt;
    }&amp;gt;:&lt;br /&gt;
    thumbnails: Array&amp;lt;{&lt;br /&gt;
        timestamp: number, // null if original is true&lt;br /&gt;
        original: boolean,&lt;br /&gt;
        votes: number,&lt;br /&gt;
        locked: boolean,&lt;br /&gt;
        UUID: string,&lt;br /&gt;
        userID: string // only present if requested&lt;br /&gt;
    }&amp;gt;&lt;br /&gt;
    randomTime: number,&lt;br /&gt;
    videoDuration: number | null&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
404: Not Found&lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/branding/:sha256HashPrefix&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Get submissions for a video.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sha256HashPrefix&amp;lt;/code&amp;gt; is a hash of the YouTube &amp;lt;code&amp;gt;videoID&amp;lt;/code&amp;gt;. It should be the first 4 characters. This provides extra privacy by potentially finding more than just the video you are looking for since the server will not know exactly what video you are looking for.&lt;br /&gt;
&lt;br /&gt;
Note: Data is returned ordered. You can use the first element. However, you should make sure the first element has either locked = true or votes &amp;gt;= 0. If not, it is considered untrusted and is only to be shown in the voting box until it has been confirmed by another user.&lt;br /&gt;
&lt;br /&gt;
Random time and video duration are used if you want to fallback thumbnails to a screenshot from a random time. To make thumbnail caching possible, this random time is consistent and produced by the server. The random time value is a number between 0 and 1 and must be multiplied by the video duration. For convenience, the API returns the video duration if it is known, but for most videos the server does not know the video duration. When the API returns a video duration of 0 or null, you must either not use this feature, or obtain the video duration using another method. The browser extension will fallback to fetching the video duration using other methods to always be able to use the feature.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  service: string // Optional, default is &#039;YouTube&#039;. [1]&lt;br /&gt;
  returnUserID: boolean, // optional, returns submitter userIDs if true, default false&lt;br /&gt;
  fetchAll: boolean // optional, hides details with negative score if false, default false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;References: &amp;lt;ref name=&amp;quot;:1&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    [videoID: string]: {&lt;br /&gt;
        titles: Array&amp;lt;{&lt;br /&gt;
            title: string,&lt;br /&gt;
            original: boolean,&lt;br /&gt;
            votes: number,&lt;br /&gt;
            locked: boolean,&lt;br /&gt;
            UUID: string,&lt;br /&gt;
            userID: string // only present if requested&lt;br /&gt;
        }&amp;gt;:&lt;br /&gt;
        thumbnails: Array&amp;lt;{&lt;br /&gt;
            timestamp: number, // null if original is true&lt;br /&gt;
            original: boolean,&lt;br /&gt;
            votes: number,&lt;br /&gt;
            locked: boolean,&lt;br /&gt;
            UUID: string,&lt;br /&gt;
            userID: string // only present if requested&lt;br /&gt;
        }&amp;gt;,&lt;br /&gt;
        randomTime: number,&lt;br /&gt;
        videoDuration: number | null&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
404: Not Found&lt;br /&gt;
-----&lt;br /&gt;
=====&#039;&#039;&#039;POST&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/branding&amp;lt;/code&amp;gt;=====&lt;br /&gt;
Create a submission on a video.  If a duplicate submission exists, it votes on that submission.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (JSON Body):&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    videoID: string,&lt;br /&gt;
    userID: string, // This should be a randomly generated UUID stored locally (not the public one)&lt;br /&gt;
    userAgent: string, // &amp;quot;Name of Client/Version&amp;quot; or &amp;quot;[BOT] Name of Bot/Version&amp;quot; ex. &amp;quot;Chromium/1.0.0&amp;quot;&lt;br /&gt;
    service: string, // Optional, default is &#039;YouTube&#039;. [1]&lt;br /&gt;
    title: { // Optional, you can submit either just a title, or just a thumbnail, or both&lt;br /&gt;
        title: string,&lt;br /&gt;
    },&lt;br /&gt;
    thumbnail: {&lt;br /&gt;
        timestamp: number, // Optional if original is true&lt;br /&gt;
        original: boolean&lt;br /&gt;
    },&lt;br /&gt;
    downvote: boolean, // Optional, setting to true downvotes instead of upvoting, will error if the submissions don&#039;t exist&lt;br /&gt;
    autoLock: boolean, // Optional, applies to VIPs only, default true, set to false to vote as a regular user&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;References: &amp;lt;ref name=&amp;quot;:1&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error codes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
400: Bad Request (Your inputs are wrong/impossible)&lt;br /&gt;
&lt;br /&gt;
500: Internal Server Error (you tried to downvote a submission that doesn&#039;t exist)&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
=== Generating a thumbnail from a timestamp ===&lt;br /&gt;
Generating thumbnails is handled by a different service. This service will generate thumbnails, and cache them for future users. It is not guaranteed to return, and uses a queuing system. The browser extension uses a fallback local rendering system to handle this, and will render it locally when the server is not able to. It does this by taking a screenshot a video element.&lt;br /&gt;
&lt;br /&gt;
This service is state-less, so can easily be [https://github.com/ajayyy/DeArrowThumbnailCache self-hosted] without having to sync submissions from the main server.&lt;br /&gt;
&lt;br /&gt;
The main instance is hosted at &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://dearrow-thumb.ajay.app&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The basic endpoint is as follows&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;GET&#039;&#039;&#039; &amp;lt;code&amp;gt;/api/v1/getThumbnail&amp;lt;/code&amp;gt; =====&lt;br /&gt;
Get submissions for a video.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039; (URL Parameters):&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  videoID: string,&lt;br /&gt;
  time: number&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;References:  &amp;lt;ref name=&amp;quot;:1&amp;quot; /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
A binary image response.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response codes&#039;&#039;&#039; (PLEASE READ):&lt;br /&gt;
&lt;br /&gt;
200: Ok&lt;br /&gt;
&lt;br /&gt;
204: No content, failed to generate, or chose not to generate (reason in &amp;lt;code&amp;gt;X-Failure-Reason&amp;lt;/code&amp;gt; header)&lt;br /&gt;
&lt;br /&gt;
==== Speeding up requests ====&lt;br /&gt;
You can speed up requests by making a request to &amp;lt;code&amp;gt;getThumbnail&amp;lt;/code&amp;gt; at the same time as a request to branding, but without providing a value in the &amp;lt;code&amp;gt;time&amp;lt;/code&amp;gt; field. The server will respond with an image if it has one. Once both requests are done, you then have to make sure the thumbnail is for the correct timestamps.&lt;br /&gt;
&lt;br /&gt;
You need to check the &amp;lt;code&amp;gt;X-Timestamp&amp;lt;/code&amp;gt; header and verify it is the same as the branding response. If it is not, then you must make a second request with the new time.&lt;br /&gt;
&lt;br /&gt;
There also is a &amp;lt;code&amp;gt;X-Title&amp;lt;/code&amp;gt; header that is used by the extension as a fallback in the result that the main server goes down.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Category:Developer Reference]]&lt;br /&gt;
[[Category:DeArrow]]&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
</feed>