Roblox Video Captures API: the 30 Second Limit, Voice Muting, the 20 Video Upload Quota, and Recommendations
- The Video Captures API is the part of the Moments toolkit a creator actually codes against. It lives on and lets your experience start, stop, save, share and upload clips of up to 30 seconds.
Code: Select all
CaptureService - Roblox reports over 80 million screenshots taken daily and about 500,000 shared daily since the screenshot Captures API launched. Video was built to extend that, not replace it.
- Three limits bite first: 30 seconds maximum per recording, all player voices muted during the recording, and 20 video uploads per user per day.
- The Recommendations API ranks the clips you upload. It supports seven ConfigName strategies you can use, from to
Code: Select all
MaximizeEngagement, plus an eighth that only Roblox Moments itself can use.Code: Select all
PlayerOwnedItems - The full Moments experience is open. Roblox publishes its source as a 2.4 MB place you can open in Studio, which is the fastest way to see a working capture, edit and publish loop.
Roblox announced Moments at RDC in September 2025 as a beta experience for users 13 and older. It shipped with a Moderate content maturity label and three steps: capture, create and share. Capture means recording a clip of up to 30 seconds. Create means trimming it, adding music through a partnership with DistroKid, and writing a description. Share means publishing it to the Moments gallery.
The player-facing side is only half the story. Alongside it Roblox released the Video Captures API, which puts the same capture trigger inside your own experience so a game can fire it at a defined moment instead of waiting for a player to press a key. It sits on
Code: Select all
CaptureServiceThe numbers Roblox attached to the screenshot version give a sense of the scale this is built on. Users were taking over 80 million screenshots a day and sharing an average of 500,000 daily. In the month before the Moments announcement, Roblox counted over 930 million screenshots and over 240 million videos captured in experiences, measured from July 24 to August 24, 2025.
The Capture Calls, and What Each One Returns
- starts the recording. It returns an
Code: Select all
CaptureService:StartVideoCaptureAsync(onCaptureReady, captureParams)so you can tell whether the recording began at all. TheCode: Select all
Enum.VideoCaptureStartedResultcallback fires when it finishes with anCode: Select all
onCaptureReadyand, if it worked, aCode: Select all
Enum.VideoCaptureResultobject.Code: Select all
VideoCapture - ends the recording early. If you never call it, the recording stops itself at the 30 second mark.
Code: Select all
CaptureService:StopVideoCapture() - asks the user to save. The callback gets a dictionary mapping each capture to a boolean for whether they accepted. This step is the user's choice, not automatic.
Code: Select all
CaptureService:PromptSaveCapturesToGallery({videoCapture}, callback) - opens the native share sheet. The docs are blunt that not every device can carry both a video and an invite link, and that users who cannot use share sheets get a download prompt instead.
Code: Select all
CaptureService:PromptShareCapture(captureContent, launchData, onAccepted, onDenied) - and
Code: Select all
CaptureService.CaptureBegan(captureType)fire around the capture and pass anCode: Select all
CaptureEnded(captureType)so you know whether it was a screenshot or a video. Use them to hide and restore your own HUD.Code: Select all
Enum.CaptureType
Code: Select all
VideoCaptureCode: Select all
captureParamsThe Limits That Will Surprise You
- Duration: 30 seconds, hard. The recording stops automatically at that point and the result comes back as rather than an error.
Code: Select all
TimeLimitReached - Voice: during the recording, all user voices are muted. Roblox also strips player IDs, names and in-experience UI from the video to protect privacy.
- Upload quota: allows 20 videos per day per user. Go past it and the result is
Code: Select all
UploadCaptureAsync, which is how you tell quota exhaustion from a genuine failure.Code: Select all
Enum.UploadCaptureResult.UploadQuotaReached - Upload time: the call can take several minutes, and the player has to stay in the experience while it runs.
- Studio only: on the Recommendations API returns HTTP 403 from Studio. Roblox tells you to publish the experience and run it in the client.
Code: Select all
RegisterItemAsync - Beta scope: the Upload API only accepts captures recorded in your own experience during beta. Cross-experience uploads are planned but not open yet.
Code: Select all
ScreenshotHud.HideCoreGuiForCapturesCode: Select all
ScreenshotHud.HidePlayerGuiForCapturesThe Recommendations API, and How Clips Get Ranked
Capturing a clip is step one. Getting it in front of people is step two, and that is the Recommendations API on
Code: Select all
RecommendationServiceStep by step: a working highlight reel
- Call from a server script. The request carries a
Code: Select all
RecommendationService:RegisterItemAsync(player, request)that is your own identifier, aCode: Select all
ContentType[/code>, a [code]ReferenceIdin seconds, aCode: Select all
Durationand optionalCode: Select all
Visibility.Code: Select all
CustomTags - Call . The request needs a
Code: Select all
RecommendationService:GenerateItemListAsync(request), aCode: Select all
ConfigNameand aCode: Select all
LocationId.Code: Select all
PageSizedoes not change which items come back, it only separates your performance metrics in Creator Hub.Code: Select all
LocationId - Read the returned pages with and advance with
Code: Select all
GetCurrentPage(). Each item gives you anCode: Select all
AdvanceToNextPageAsync(), your originalCode: Select all
ItemIdand aCode: Select all
ReferenceId.Code: Select all
TracingId - Log what players do. takes a view event with a duration, a position and a
Code: Select all
LogImpressionEventof Positive, Neutral or Negative.Code: Select all
DepartureIntenttakes an action type such asCode: Select all
LogActionEventand aCode: Select all
AddReactionstring you define.Code: Select all
ReactionType - Look at the numbers in Creator Hub under Recommendation Service. Roblox built the same service behind its own Home Discovery surfaces, and the Creator Hub view is where you tune the reel.
- : favours content that holds attention the longest.
Code: Select all
MaximizeTimespent - : favours content that draws the most likes and favourites.
Code: Select all
MaximizeReactions - : favours content that generates Play actions. Roblox recommends logging only quality plays, for example anything over 60 seconds, to cut noise.
Code: Select all
MaximizePlays - : a balanced mix of quality views and reactions, and the one to start with.
Code: Select all
MaximizeEngagement - : public items created by the player named in the request, newest first.
Code: Select all
PlayerSpecific - : public content sorted newest first.
Code: Select all
RecentlyAdded - : the player's own creations sorted by creation time. It shows private items, so it needs user authentication and only works on the client.
Code: Select all
PlayerOwnedItems
Code: Select all
MaximizeJoinsAge Gating, Moderation and the Source Code
The age story changed between the two Moments announcements, and the difference matters if you are planning a feature around it. At the September 2025 beta launch, Moments was playable by users 13 or older. By July 2026, the dedicated Moments tab on the app was available to age-checked players 16 or older, in Canada, New Zealand and Singapore first, with a global rollout over the following months.
Moderation is not optional and it is not yours to opt out of. Everything captured and published, whether it appears in the main Moments experience or in a reel you built yourself, is moderated before publication against Community Standards. Roblox is explicit that you will not be penalised for content surfaced through your own Recommendations API reel, because the moderation happens before it goes out.
That leaves one real rating risk. Your experience's content maturity rating is not affected just by calling the Upload API. What changes things is Cross-Experience Content. When Roblox opens cross-experience uploads, any game that lets users upload media recorded in other experiences has to answer yes to that questionnaire field, and that answer age-gates the experience to 16 and older.
The most useful thing Roblox shipped is not an API at all. The Moments experience source code is public. You open it from the Roblox Moments place with the three-dot menu and Edit in Studio, or download the
Code: Select all
roblox-moments.rbxlFAQ
How long can a Roblox video capture be?
30 seconds maximum. The recording stops on its own at that point and reports
Code: Select all
TimeLimitReachedDoes video capture record voice chat?
No. All user voices are muted during a recording, and Roblox strips player IDs, names and in-experience UI from the video as a privacy measure.
Can players upload videos from other experiences into my game?
Not during the beta. The Upload API only accepts captures recorded in your own experience. Cross-experience uploads are planned, and when they arrive they come with a 16 and older age gate on any experience that enables them.
How many videos can a player upload in a day?
20 per user per day through
Code: Select all
UploadCaptureAsyncCode: Select all
Enum.UploadCaptureResult.UploadQuotaReachedDo I need the Maturity and Compliance questionnaire filled in?
Yes. Roblox notes that
Code: Select all
UploadCaptureAsyncCan I hide my own HUD in a video capture?
Not selectively.
Code: Select all
HideCoreGuiForCapturesCode: Select all
HidePlayerGuiForCapturesSources
- Roblox Developer Forum: Video Captures API announcement, the 30 second limit, the callback enums, the 80 million daily screenshot and 500,000 daily share figures, and the FAQ on audio and privacy
- Roblox Developer Forum: Content Sharing APIs announcement, the Moments toolkit table, the Recommendations API code samples, the 16 plus age gate for Cross-Experience Content, and the Moments source code release
- Roblox Creator Hub: CaptureService reference, every method and event signature including StartVideoCaptureAsync, StopVideoCapture, PromptSaveCapturesToGallery and UploadCaptureAsync
- Roblox Creator Hub: StartVideoCaptureAsync reference, the 30 second stop rule, the muted voices note, and the captureParams no-op warning
- Roblox Creator Hub: RecommendationService reference, the eight ConfigName strategies, the HTTP 403 Studio limitation, and the moderation status behaviour for Private items
- Roblox Newsroom: Moments announcement at RDC, the 13 plus launch age, the Moderate maturity label, and the 930 million screenshot and 240 million video figures
- Roblox Newsroom: Moments becomes a dedicated tab, the 16 plus age-checked audience, the Canada, New Zealand and Singapore rollout, and the 132 million daily active user figure
- Roblox Developer Forum: Share Link API announcement, the PromptLinkSharing options and the LaunchData deep-linking pattern that pairs with captured clips