
roblox-gamepasses
Implement Roblox game passes, developer products, subscriptions, and Robux transfers. Use for purchase prompts, server-side fulfillment, ownership checks, recurring benefits, and monetization policy.
- Installs
- 306
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/nonlooped/roblox-suite --skill roblox-gamepasses- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads roblox-gamepasses automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
roblox-gamepasses
Primary official source: https://create.roblox.com/docs/en-us/production/monetization/passes (plus developer-products.md for contrast, and the MarketplaceService class reference).
Grant benefits on the server after verifying the purchase or ownership. Keep purchase prompts and shop display on the client.
See roblox-datastores for how to store "player owns this pass" state or associated perks, and roblox-networking for the Remote validation layer around purchase prompts.
Game passes and developer products
- Game Pass: One-time purchase. Permanent privilege for that specific experience (VIP access, permanent item, extra slot, cosmetic unlock, etc.). Roblox tracks ownership per user per experience.
- Developer Product: Repeatable / consumable (currency packs, potions, revives, temporary boosts). Can be bought many times. Requires ProcessReceipt callback on the server for fulfillment.
- As of May 30, 2026, cross-experience game pass and developer product sales are disabled. Design experience-specific passes or use the Robux Transfers API for donation-style flows.
MarketplaceService:PromptRobuxTransferAsyncmust be called from the server. Only Roblox Plus subscribers can initiate transfers, transfer amounts must be between 10 and 500 Robux, and the sender cannot equal the receiver. The recipient receives 90% and the experience earns the other 10%; Roblox takes no transfer fee. ABindReceiptHandlercallback must process transfer receipts. Roblox permits an experience to grant items or perks after a successful receipt; choosing not to attach rewards is an opinionated anti-abuse/design recommendation, not a platform rule. - You (the creator) are 100% responsible for actually delivering the benefit. Roblox only handles the transaction and the UserOwnsGamePassAsync query.
- Passes can be used for randomized virtual items only if you follow the Paid Random Items policy.
Creation and asset ID
- Creator Dashboard → your published experience → Monetization → Passes → Create a Pass.
- Upload circular-friendly icon (≤512×512, jpg/png/bmp; important content must survive circular crop).
- Name + description.
- After creation: hover the pass → ⋯ → Copy Asset ID. This number is the passID you use in all scripts.
For external sales on the game page Store tab: go to the pass → Sales → enable "Item for Sale" and set Robux price (1 to 1B).
Prompt purchases and grant benefits
Client side (LocalScript or UI module; only for prompting and optimistic display):
- Call MarketplaceService:UserOwnsGamePassAsync (pcall) to decide "Buy" vs "Owned" button state.
- If not owned, call MarketplaceService:PromptGamePassPurchase(player, passID).
Server side (Script in ServerScriptService; the only place that grants benefits):
local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")
local PASS_ID = 1234567890
local granted = {} -- idempotency guard: granted[player][passID]
local function grantPassBenefits(player: Player, passID: number)
if not player or not player:IsDescendantOf(Players) then
return
end
local playerGranted = granted[player]
if not playerGranted then
playerGranted = {}
granted[player] = playerGranted
end
if playerGranted[passID] then
return
end
playerGranted[passID] = true
-- Apply the actual privilege (attributes, table entry, DataStore flag, Remote to client for visuals, etc.)
-- This is the source of truth.
end
MarketplaceService.PromptGamePassPurchaseFinished:Connect(function(player: Player, purchasedPassID: number, wasPurchased: boolean)
-- This event also fires on the client; never grant benefits from the client copy.
if not player or typeof(purchasedPassID) ~= "number" then
return
end
if wasPurchased and purchasedPassID == PASS_ID then
local ok, err = pcall(function()
grantPassBenefits(player, PASS_ID)
end)
if not ok then
warn("Failed to grant pass benefits:", err)
end
end
end)
Players.PlayerAdded:Connect(function(player: Player)
local success, owns = pcall(function()
return MarketplaceService:UserOwnsGamePassAsync(player.UserId, PASS_ID)
end)
if success and owns then
local ok, err = pcall(function()
grantPassBenefits(player, PASS_ID)
end)
if not ok then
warn("Failed to apply owned pass benefits:", err)
end
elseif not success then
warn("UserOwnsGamePassAsync failed for", player.Name)
end
end)
Players.PlayerRemoving:Connect(function(player: Player)
granted[player] = nil
end)
GetProductInfoAsync for dynamic UI (price, name, description, IsForSale):
Use MarketplaceService:GetProductInfoAsync(id, Enum.InfoType.GamePass). Do this on the client for display, but never grant based on the result. The non-async counterpart GetProductInfo still exists, but GetProductInfoAsync is preferred.
Capability requirements
Game passes and developer products require a published experience. Enable Studio Access to API Services only when a specific API used by a dedicated test experience requires it; do not treat that Studio setting as a blanket prerequisite for every MarketplaceService purchase API. Verify each API's current requirements in its Engine Reference entry.
Product recommendations
MarketplaceService:RankProductsAsync(arrayOfIdentifiers): pass a table of up to 50{InfoType = Enum.InfoType.GamePass, Id = ...}. Returns a personalized ranking for the current user as{ProductIdentifier, ProductInfo}items. Use sparingly; call once at join.MarketplaceService:RecommendTopProductsAsync({Enum.InfoType.GamePass, Enum.InfoType.Product}): returns up to 50 recommended products the user is likely to engage with. Results usually exclude already-owned items, but verify in your UI. Use sparingly; call once at join.
Use these results in a "Recommended for you" section of your shop. Measure whether they improve conversion in your experience.
Promotions (buy robux page bonus pool)
You can opt passes into the promotion pool so that users buying Robux packages may receive the pass for free (contextually relevant to their history).
Requirements (from the passes doc):
- Unique pass recommended.
- If on sale, price between 50 and 800 Robux.
- Must have thumbnail.
- Must comply with Community Standards.
- Cannot be a paid random item.
Opt-in via the pass's Promotions tab in the dashboard.
Analytics and iteration
In Creator Dashboard → experience → Monetization → Passes → Analytics tab you get:
- Top passes by sales and net Robux.
- Time-series graphs.
- Attribution for passes acquired via Buy Robux promotions and subsequent joins.
Use this data to decide pricing, which perks are compelling, and when to run promotions.
Security, data, and policy constraints
- Prompt only from client. Grant and record only on the server in the PromptGamePassPurchaseFinished handler or on PlayerAdded re-check.
- Always pcall
UserOwnsGamePassAsyncandPrompt...calls. - Re-check ownership on every relevant join/session start before granting gameplay or economy perks.
- Store your own record of ownership + associated state in DataStores if you need history or custom metadata (Roblox does not expose full per-user pass purchase history via the Engine API).
- For RTBF / right-to-be-forgotten, include pass-related keys in your deletion patterns (see roblox-datastores skill).
- Never hardcode Robux prices in UI that the player sees: use
GetProductInfoAsyncso regional pricing and optimizations work. - Test purchases only on dedicated test experiences.
- For paid random items (loot boxes / gacha passes), use
PolicyServicefirst: checkPolicyService:GetPolicyInfoForPlayerAsync(player).ArePaidRandomItemsRestrictedandIsPaidItemTradingAllowedbefore offering randomized paid content. - For developer products,
MarketplaceService.ProcessReceiptcan only be assigned once globally; assign it once in a single server script. The callback must returnEnum.ProductPurchaseDecision.PurchaseGrantedafter successful fulfillment, orEnum.ProductPurchaseDecision.NotProcessedYetif fulfillment fails, because Roblox may redeliver the receipt untilPurchaseGrantedis returned. - Donation / tipping games using
PromptRobuxTransferAsyncare high-risk for abuse; implement rate limits, alt-account detection, moderation pipelines, and avoid granting in-experience advantages in exchange for transfers.
Subscriptions (recurring benefits)
Subscriptions offer users recurring benefits for a monthly fee, auto-renewing in Robux or local currency. Unlike passes (permanent), subscription benefits persist only while the user keeps paying. Up to 50 per experience; single-tiered (no mutually exclusive Bronze/Silver/Gold); regional pricing enabled by default for Robux-priced subs.
API surface (subscription IDs are strings like "EXP-11111111"):
MarketplaceService:GetUserSubscriptionStatusAsync(player, subscriptionId): server-only, returns{IsSubscribed: boolean}.MarketplaceService:PromptSubscriptionPurchase(player, subscriptionId): client prompt.MarketplaceService.PromptSubscriptionPurchaseFinished(player, subscriptionId, didTryPurchasing): notedidTryPurchasingis an attempt signal, not success; re-check status after a delay.Players.UserSubscriptionStatusChanged(player, subscriptionId): server-only, fires on purchase/renewal/cancellation.MarketplaceService:GetSubscriptionProductInfoAsync(subscriptionId)andGetUserSubscriptionPaymentHistoryAsync(player, subscriptionId).
Security (same posture as passes): prompt on client, check status and grant/revoke on server only, pcall everything, re-check on every join (subscriptions lapse), respect PolicyService:IsEligibleToPurchaseSubscription per player, persist nothing sensitive on the client.
Payouts: Robux-priced subs pay 70% each month. Local-currency subs pay 70% first month, 100% thereafter, with a 30-day hold. Robux subs are not refundable; local-currency subs are refundable within the hold window.
See references/subscriptions.md for the complete flow, client/server code, migration from passes, and gotchas.
Creator Rewards (replaces Premium Payouts)
As of July 24, 2025, Engagement-Based Payouts (formerly "Premium Payouts") and the Creator Affiliate program were discontinued and replaced by Creator Rewards. There is no longer a per-Premium-play-minute payout to integrate against.
Creator Rewards is a platform program with two payment types. It requires no in-experience integration:
- Daily Engagement Rewards: 5 Robux per day per Active Spender who spends 10+ minutes in your experience, provided it's one of the first three experiences they visit that day.
- Audience Expansion Rewards: 35% revenue share on a new/reactivated user's first $100 of qualifying purchases in their first 60 days, attributed via Share Links, direct experience links, or experience-name search.
Official source: https://create.roblox.com/docs/en-us/creator-rewards
When to use game passes vs other monetization
- One-time permanent unlock or access → Game Pass.
- Repeatable purchase (currency, consumables, temporary power) → Developer Product (with proper ProcessReceipt).
- Recurring monthly benefit → Subscription (see references/subscriptions.md;
MarketplaceService:GetUserSubscriptionStatusAsyncetc.).
See the developer-products doc for the repeatable flow.
Scripts
scripts/PassPurchaseHelper.lua: a client-side helper for game pass button state, price display, and prompting.
Reference index
- creation-and-setup.md: Create a pass, find its asset ID, or configure sales and test access.
- policyservice.md: Gate a feature using per-player monetization or content restrictions.
- purchase-flow-and-granting.md: Implement pass purchase prompts, ownership checks, and server grants.
- rules-policies-and-security.md: Review monetization restrictions, paid random items, or purchase security.
- subscriptions.md: Create recurring benefits or handle subscription status and renewals.
FAQ
What does the roblox-gamepasses skill do?
Implement Roblox game passes, developer products, subscriptions, and Robux transfers. Use for purchase prompts, server-side fulfillment, ownership checks, recurring benefits, and monetization policy.
How do I install roblox-gamepasses?
Run npx skills add https://github.com/nonlooped/roblox-suite --skill roblox-gamepasses in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/roblox-gamepasses/ (personal) or .claude/skills/roblox-gamepasses/ (project).
Which AI agents can use roblox-gamepasses?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is roblox-gamepasses safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains roblox-gamepasses?
It is published by nonlooped in nonlooped/roblox-suite. It has 306 recorded installs.
More from nonlooped/roblox-suite
roblox-vfx
nonlooped/roblox-suite
Build or optimize Roblox particles, beams, trails, and highlights. Use for emitter shapes, flipbooks, one-shot bursts, animation-marker effects, distance culling, and overdraw.
roblox-animation
nonlooped/roblox-suite
Build or debug Roblox character animations, IK poses, animation-marker events, and UI or object tweens. Use for locomotion, emotes, motion blending, and timed effects.
roblox-user-interfaces
nonlooped/roblox-suite
Build or debug Roblox HUDs, menus, and world-space interfaces. Use for GUI containers, responsive layouts, input handling, ViewportFrame previews, and particle effects in 2D UI.
roblox-testing
nonlooped/roblox-suite
Test, debug, or profile Roblox experiences. Use for Studio debugging, TestEZ, logging, connection cleanup, memory or network diagnostics, MicroProfiler, Scene Analysis, and Script Profiler.
roblox
nonlooped/roblox-suite
Route Roblox Luau tasks to specialist skills. Use for architecture decisions, broad development requests, or work spanning several Roblox systems.
roblox-mcp
nonlooped/roblox-suite
Connect an AI client to Roblox Studio through MCP. Use for connection setup, Studio tools, multiple Studio windows, playtesting, or combining MCP with Script Sync.
Popular backend & apis skills
find-skills
vercel-labs/skills
Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. This skill should be used when the user is looking for functionality that might exist as an installable skill.
entra-app-registration
microsoft/azure-skills
Guides Microsoft Entra ID app registration, OAuth 2.0 authentication, and MSAL integration. USE FOR: create app registration, register Azure AD app, configure OAuth, set up authentication, add API permissions, generate service principal, MSAL example, console app auth, Entra ID setup, Azure AD authentication. DO NOT USE FOR: Key Vault secrets (use azure-keyvault-expiration-audit), general Azure resource security guidance.
google-agents-cli-adk-code
google/agents-cli
This skill should be used when the user wants to "write agent code", "build an agent with ADK", "add a tool", "create a callback", "define an agent", "use state management" — in a project that needs ADK (Agent Development Kit) API patterns and code examples. It provides a quick reference for agent types, tool definitions, orchestration patterns, callbacks, state management, the graph Workflow API, and reference recipes to study. Do NOT use for scaffolding (use google-agents-cli-scaffold) or deployment (use google-agents-cli-deploy).
embedded-captions
heygen-com/hyperframes
Add captions or subtitles to an existing single-subject talking-head video without editing the footage. Use for plain verbatim captions, cinematic captions embedded behind the subject, VFX captions, “炸/特效/酷炫字幕,” or a named identity from the 35-style catalog. Route by visual identity, not by backend engine. The quiet anchor rail is the default; embed every word only when the user explicitly wants a fully cinematic treatment. The workflow runs locally end to end, including transcription and subject matting; split multi-shot footage before applying it.
entra-agent-id
microsoft/azure-skills
Provision Microsoft Entra Agent Identity Blueprints, BlueprintPrincipals, and per-instance Agent Identities via Microsoft Graph, and configure OAuth 2.0 token exchange (fmipath, OBO, cross-tenant) including the Microsoft Entra SDK for AgentID sidecar. USE FOR: Agent Identity Blueprint, BlueprintPrincipal, agent OAuth, fmipath token exchange, agent OBO, Workload Identity Federation for agents, polyglot agent auth, Microsoft.Identity.Web.AgentIdentities. DO NOT USE FOR: standard Entra app registration (use entra-app-registration), Microsoft Foundry agent authoring (use microsoft-foundry).
neon
neondatabase/agent-skills
Overview of Neon, a complete set of cloud backend primitives around Lakebase Postgres: Auth, Object Storage, Functions, the AI Gateway, and Realtime. Start here to choose Neon for undecided login, files, APIs, and LLM calls, set up the CLI or MCP server, and follow the branch-first workflow. Use when building an app or backend on Neon, or when "Neon" or "Lakebase Postgres" is mentioned. Child skill neon-postgres wins for an existing DATABASEURL, SQL, schema, inspect, or search. Child skill neon-auth wins for login, users, sessions, identity routing, and Managed Better Auth setup. Child skill neon-realtime wins for live queries in reactive apps and agents. Also use for object storage, S3, buckets, serverless functions, function triggers, cron, AI gateway, LLM calls, realtime, logs, Loki, Grafana, observability, postgres, database, backend, Claimable Neon, neon.new, or a no-signup database.