Org Admin Guide

Orders

The Orders API lets your in-game scripts submit service or product requests that are tracked and fulfilled by your staff team in the dashboard.

What are orders?#

Orders are a general-purpose request system separate from payment links. Where payment links are about collecting Robux, orders are about tracking the fulfilment of a service or product request — for example, a custom item creation, a whitelist application, or a service booking.

When a player submits an order in-game, it appears in the dashboard's Orders queue. Staff can update the order status as they work through it.

SDK functions#

fnSubmitOrderorderId | nil
RoPerms.SubmitOrder(items: table, opts: table?): string | nil

Submits a new order on behalf of the current player (the script's player context). Returns the order ID on success, or nil on failure.

lua
-- items is an array of { name, quantity, unitPrice? } tables
local orderId = RoPerms.SubmitOrder(
    {
        { name = "Custom Uniform", quantity = 1 },
        { name = "Extra Badge",    quantity = 2, unitPrice = 250 },
    },
    {
        -- Optional: attach a note to the order
        note = "Please make the uniform red",

        -- Optional: player submitting (defaults to current player context)
        playerId = player.UserId,
    }
)

if orderId then
    print("Order submitted:", orderId)
end
fnUpdateOrderboolean
RoPerms.UpdateOrder(orderId: string, status: string, opts: table?): boolean

Updates the status of an order. Typically called from a staff-side script or triggered by a dashboard action.

lua
-- Valid statuses: "PENDING", "IN_PROGRESS", "COMPLETED", "CANCELLED"
RoPerms.UpdateOrder(orderId, "COMPLETED", {
    note = "Delivered to player",
})
ParameterTypeDescription
orderId*stringThe order ID returned by SubmitOrder.
status*stringNew status. One of: PENDING, IN_PROGRESS, COMPLETED, CANCELLED.
opts.notestringOptional note recorded with the status change.
fnGetOrderstable
RoPerms.GetOrders(opts: table?): table

Returns a list of orders. Filters by player, status, or date range via opts.

lua
-- Get all pending orders
local orders = RoPerms.GetOrders({ status = "PENDING" })

-- Get orders for a specific player
local playerOrders = RoPerms.GetOrders({ playerId = player.UserId })

for _, order in ipairs(orders) do
    print(order.id, order.status, order.createdAt)
end

Order statuses#

  • PENDING — submitted, awaiting staff action.
  • IN_PROGRESS — a staff member has started working on the order.
  • COMPLETED — the order has been fulfilled.
  • CANCELLED — the order was cancelled by staff or the system.

Dashboard view#

Staff with the orders.viewcapability can see the Orders queue in the dashboard. The sidebar badge shows the count of PENDING orders. Clicking an order shows the items, the submitting player's profile, timestamps, and any notes.

Staff with orders.manage can update order statuses directly from the dashboard without going through the SDK.

Combining orders and payments

Orders and payments solve different problems. Use Payments when you need to collect Robux via Developer Products. Use Orders when you need to track a service fulfilment workflow — even if no payment is involved. They can be combined: a staff member creates a payment link, the customer pays, and the game script automatically submits an order to track the service delivery.