Rolink is free during the beta, with quotas per project so one game can’t crowd out the others. This page lists every limit in one place: the beta quotas, the limits on what a project can hold, the transaction policy you control, and the rules the dashboard checks when you save.
| Quota | Limit | Window | Refused with |
|---|
| API requests per project | 100,000 | Per UTC day, reset at 00:00 UTC | daily_quota_exceeded (429) |
| API requests per project | 600 | Per minute | rate_limited (429) |
| Transactions per project | 1,000 | Rolling 24 hours | daily_tx_quota_exceeded (429) |
| Projects per developer | 5 | At any time | project_limit_reached (403) |
- Every
/v1 request with a valid key counts, whatever its answer, errors included. A lookup of 200 players with GetWallets is one request.
- Requests refused by the quota itself don’t count toward the daily total.
- Nothing else counts:
GET /health, the linking page, the dashboard, live events and watched-address polling are not API requests.
- Answers from the SDK’s wallet cache never reach the API, so they don’t count either.
- No rate-limit headers. Responses don’t carry quota headers. The project’s Overview in the dashboard shows today’s usage and the last 14 days. Counts there update every few seconds.
The SDK retries rate_limited after 0.5 and 1.5 seconds, and raises daily_quota_exceeded at once.
- Rolling 24 hours. At each request, Rolink counts the project’s transaction requests created in the last 24 hours that are
pending, submitted or confirmed.
- Failed attempts don’t count, so a
failed transaction never uses quota.
- Replays don’t count twice. Sending the same request again with a key that is already
pending, submitted or confirmed returns the earlier attempt and creates nothing new.
- Refused requests don’t count. A request refused by validation, the policy or a quota creates no transaction.
The SDK raises daily_tx_quota_exceeded at once. Queue the payment and retry later with the same key.
The Overview’s Transactions today figure is a usage counter, not the quota itself: it counts every transaction call that returned a result during the current UTC day, replays and failed results included, so it can differ from the count the quota uses.
| Limit | Value |
|---|
| Active API keys per project | 10 (key_limit_reached beyond that) |
| API key name | Up to 48 characters. An empty name becomes Default. |
| Managed wallets per project | 1 |
| Watched addresses per project | 10 |
| Allowed mints in the transaction policy | 20 |
| Hourly budgets in the transaction policy | One per asset: SOL and each allowed mint |
Deleted projects don’t count toward the 5 projects per developer. Revoked keys don’t count toward the 10 active keys.
Set per project under Transactions in the dashboard. A new project starts with the defaults below, which allow nothing: SOL transfers are off and no mint is listed. Validation messages in the dashboard name each field by its dashboard label.
| Field | Dashboard label | Default | Rules |
|---|
solLimit | Max SOL per transfer | Empty: SOL transfers off | A decimal such as 0.05, with at most 9 decimals. |
tokenLimits | Allowed mints | None: no token transfers or mints | Up to 20 entries. Each mint must be a token mint (SPL Token or Token-2022) on the project’s cluster. Each maximum is a decimal in token units, with no more decimals than the mint has. |
recipientHourlyLimit | Per recipient wallet | 20 | A whole number from 1 to 10,000: transactions to one wallet per rolling hour. |
playerHourlyLimit | Per player | 20 | A whole number from 1 to 10,000: transactions to one player, across their wallets, per rolling hour. |
hourlyBudgets | Hourly budgets | None | One entry per asset, keyed by SOL or an allowed mint. Each budget is a decimal in that asset’s units, within its decimals. |
Rolling-hour limits and budgets count requests created in the last 60 minutes that are pending, submitted or confirmed. Minting and transferring the same mint share its budget. Policy changes take effect within about 30 seconds. See Send transactions for how each limit is applied.
The dashboard checks these when you save, and refuses anything else with invalid_settings and a message that names the field.
| Setting | Rules |
|---|
| Name | 2 to 48 characters. You can rename a project at any time. |
| Cluster | devnet or mainnet, chosen when you create the project. It applies to every read, transaction and watched address of the project. |
| Slug | Set from the name when the project is created: lowercase letters, digits and hyphens, up to 40 characters, plus a short suffix if the slug is already taken. It’s part of the linking page URL and doesn’t change when you rename the project. |
| Setting | Rules |
|---|
| Client ID | Digits only, up to 32. Clearing it turns Roblox sign-in off. |
| Client secret | Up to 512 characters. Stored encrypted. Leave the field empty to keep the saved secret. |
| Setting | Rules |
|---|
| Universe ID | Digits only. Clearing it turns live events off. |
| Open Cloud API key | Up to 4,096 characters. Stored encrypted. |
| Event topic | 1 to 80 letters, digits, - and _. Default rolink. |
| Setting | Rules |
|---|
| Name | 1 to 32 characters: lowercase letters, digits, - and _, starting with a letter or a digit. Unique within the project. |
| Address | A valid Solana address. Read on the project’s cluster. |
| Count | Up to 10 per project. |
| Value | Limit |
|---|
idempotencyKey | 1 to 128 characters, unique per payment within the project |
amount | A decimal string matching ^\d+(\.\d+)?$, greater than zero, with no more decimals than the asset (9 for SOL) |
userIds in a bulk wallet lookup | Up to 200 per request. The SDK splits longer lists. |
| User IDs | Positive integers |
| Assets per read | The first 1,000 assets of the wallet or collection |
| What | Value |
|---|
| A transaction request waits for confirmation | Up to 15 seconds, then answers submitted |
Confirmation checks for a submitted transaction | Every 1.5 seconds, with a sweep every 30 seconds |
| Proof of expiry | The finalized chain is more than 32 blocks past the transaction’s last valid block height |
| A request interrupted before sending | Marked failed (Abandoned before sending) after 2 minutes |
| Balance, token and asset reads | Cached for about 10 seconds |
| Watched addresses | Polled every few seconds, up to 1,000 new transactions per watch per poll |
| Settings, policy and key revocations | Take effect within about 30 seconds |
| Linking challenge | Expires after 10 minutes |
| Player session (one game’s linking page) | 1 hour |
| Developer session (dashboard) | 12 hours |
| Sign in with Roblox handshake | 10 minutes |
| Dashboard wallet sign-in, from choosing the wallet to signing | 10 minutes |
| Event publishing | Up to 4 attempts of 5 seconds each |
| SDK wallet cache | walletCacheSeconds, 60 by default |
| SDK request retries | 3 attempts, 0.5 and 1.5 seconds apart |
| SDK event subscription | 5 attempts, 2, 4, 8 and 16 seconds apart |
- HttpService allows each game server 500 requests per minute, to every host combined. Cache wallet lookups and batch with
GetWallets.
- MessagingService refuses messages over 1 kB. Rolink keeps every event under that size. See Events.