Exports & API

Current server and client exports exposed by Oxide Vending.

Server Exports

Admin and Read Exports

GetAllBusinesses()

Returns the in-memory business cache keyed by business_id.

local result = exports['oxide-vending']:GetAllBusinesses()

GetBusinessById(businessId)

Returns one business row or nil.

local result = exports['oxide-vending']:GetBusinessById(businessId)

GetBusinessByOwner(citizenid)

Returns the business owned by the given identifier or nil.

local result = exports['oxide-vending']:GetBusinessByOwner(citizenid)

GetBusinessStats(businessId)

Returns summary data for a business:

local stats = exports['oxide-vending']:GetBusinessStats(businessId)
-- {
--   machine_count = number,
--   total_revenue = number,
--   uncollected_balance = number,
--   total_items_sold = number,
-- }

GetAllMachines()

Returns the in-memory machine cache keyed by machine_id.

local result = exports['oxide-vending']:GetAllMachines()

GetMachineById(machineId)

Returns one machine row or nil.

local result = exports['oxide-vending']:GetMachineById(machineId)

GetMachinesByBusiness(businessId)

Returns the machine list for a business.

local result = exports['oxide-vending']:GetMachinesByBusiness(businessId)

GetMachineStats(machineId)

Returns aggregate machine stats or nil if the machine is missing.

local result = exports['oxide-vending']:GetMachineStats(machineId)

GetMachineStock(machineId)

Returns cached stock rows for a machine.

local result = exports['oxide-vending']:GetMachineStock(machineId)

GetEmployeesByBusiness(businessId)

Returns the employee table for the business.

local result = exports['oxide-vending']:GetEmployeesByBusiness(businessId)

GetTransactionHistory(businessId, limit, offset)

Returns paginated transaction rows.

local result = exports['oxide-vending']:GetTransactionHistory(businessId, limit, offset)
  • limit defaults to 50
  • limit is capped at 500
  • offset defaults to 0

AdminDeleteBusiness(businessId, adminIdentifier)

Force-deletes a business and returns:

local success, message = exports['oxide-vending']:AdminDeleteBusiness(businessId, adminIdentifier)

adminIdentifier is optional and is used for transaction logging.

AdminDeleteMachine(machineId, adminIdentifier)

Force-deletes a machine and returns:

local success, message = exports['oxide-vending']:AdminDeleteMachine(machineId, adminIdentifier)

Progression Exports

GetBusinessLevel(businessId)

Returns the current business level. Falls back to 1 if no progression row exists.

local result = exports['oxide-vending']:GetBusinessLevel(businessId)

GetBusinessProgression(businessId)

Returns the cached progression row or nil.

local result = exports['oxide-vending']:GetBusinessProgression(businessId)

AddXP(businessId, amount, source, notifySource)

Adds XP and returns:

local success, leveledUp = exports['oxide-vending']:AddXP(businessId, amount, source, notifySource)
  • source is a string label such as 'Event Bonus'
  • notifySource is an optional player source for XP gain notifications

AddRevenue(businessId, amount)

Tracks progression revenue and returns true if the business leveled up from the revenue update.

local result = exports['oxide-vending']:AddRevenue(businessId, amount)

GetMaxMachines(businessId)

Returns the effective machine cap, using progression rewards when enabled or Config.Business.MaxMachinesPerBusiness otherwise.

local result = exports['oxide-vending']:GetMaxMachines(businessId)

GetMaxEmployees(businessId)

Returns the effective employee cap.

local result = exports['oxide-vending']:GetMaxEmployees(businessId)

IsMachineTypeUnlocked(businessId, machineType)

Returns true if the machine type is currently unlocked for the business.

local result = exports['oxide-vending']:IsMachineTypeUnlocked(businessId, machineType)

IsWarehouseUnlocked(businessId)

Returns true if the warehouse should be available to the business.

local result = exports['oxide-vending']:IsWarehouseUnlocked(businessId)

GetPricingRange(businessId, itemName)

Returns minPrice, maxPrice for the item after applying the current level or fallback pricing config.

local result = exports['oxide-vending']:GetPricingRange(businessId, itemName)

GetWholesaleDiscount(businessId)

Returns the current wholesale discount as a decimal percentage, such as 0.08.

local result = exports['oxide-vending']:GetWholesaleDiscount(businessId)

GetNPCRevenueBoost(businessId)

Returns the NPC revenue boost as a decimal percentage, such as 0.15.

local result = exports['oxide-vending']:GetNPCRevenueBoost(businessId)

CreateProgressionRecord(businessId)

Creates a missing progression row. Returns true on success.

local result = exports['oxide-vending']:CreateProgressionRecord(businessId)

ClaimDailyBonus(source, businessId)

Claims the daily bonus and returns:

local success, xpOrError, streak = exports['oxide-vending']:ClaimDailyBonus(source, businessId)
  • Success path: true, xpAmount, streakDays
  • Failure path: false, errorMessage

Warehouse Exports

GetBusinessInventory(businessId)

Returns the raw warehouse inventory table for a business.

local result = exports['oxide-vending']:GetBusinessInventory(businessId)

GetBusinessInventoryItem(businessId, itemName)

Returns the stored quantity or 0.

local result = exports['oxide-vending']:GetBusinessInventoryItem(businessId, itemName)

GetBusinessInventoryList(businessId)

Returns a formatted item list:

{
  { item_name = 'water_bottle', label = 'Water Bottle', quantity = 40, image = 'water_bottle.png' }
}

GetTotalWarehouseItems(businessId)

Returns the total item count across all stored items.

local result = exports['oxide-vending']:GetTotalWarehouseItems(businessId)

AddToWarehouse(businessId, itemName, quantity)

Adds items to warehouse storage and returns:

local success, error = exports['oxide-vending']:AddToWarehouse(businessId, itemName, quantity)

RemoveFromWarehouse(businessId, itemName, quantity)

Removes items from warehouse storage and returns:

local success, error = exports['oxide-vending']:RemoveFromWarehouse(businessId, itemName, quantity)

HasWarehouse(businessId)

Returns true if the business owns a warehouse.

local result = exports['oxide-vending']:HasWarehouse(businessId)

GetWarehouseByBusiness(businessId)

Returns:

{
  business_id = string,
  access_code = string,
  bucket_id = number,
}

or nil.

GetWarehouseByBucket(bucketId)

Returns warehouse, businessId or nil.

local result = exports['oxide-vending']:GetWarehouseByBucket(bucketId)

PurchaseWarehouse(source, businessId)

Purchases the warehouse using the business balance and returns:

local success, codeOrError = exports['oxide-vending']:PurchaseWarehouse(source, businessId)
  • Success path: true, accessCode
  • Failure path: false, errorMessage

UpdateWarehouseCode(businessId, newCode)

Returns true on success or false, errorMessage on failure.

local result = exports['oxide-vending']:UpdateWarehouseCode(businessId, newCode)

ValidateAccessCode(code)

Returns:

local valid, businessId, warehouse = exports['oxide-vending']:ValidateAccessCode(code)

Pickup Export

CreatePickupBox(businessId, itemName, quantity, orderedBy)

Creates a wholesale pickup box and returns:

local boxData, error = exports['oxide-vending']:CreatePickupBox(businessId, itemName, quantity, orderedBy)

GetPickupBoxesByBusiness(businessId)

Returns pickup boxes for the business.

local result = exports['oxide-vending']:GetPickupBoxesByBusiness(businessId)

GetPickupBox(boxId)

Returns one cached pickup box or nil.

local result = exports['oxide-vending']:GetPickupBox(boxId)

NPC Sales Export

GetNPCSalesStats()

Returns current simulation totals:

local stats = exports['oxide-vending']:GetNPCSalesStats()
-- {
--   totalSales = number,
--   totalRevenue = number,
--   simulationActive = boolean,
--   lastTickTime = number,
--   tickInterval = number,
-- }

Weather Settings Exports

GetSetting('WeatherIntegration')

Returns a copy of the weather settings in use (see Configuration → Weather). Any other key returns nil.

SetSetting('WeatherIntegration', values)

Changes some or all of the weather settings while the server runs, for example:

exports['oxide-vending']:SetSetting('WeatherIntegration', { Enabled = true, RainSales = 0.7 })

Returns true when applied. Returns false, and changes nothing, if any value has the wrong type or is outside its range, or for any other key. The change is logged with the calling resource and lasts until the next restart; after that config/weather.lua applies again.

Client Exports

Dashboard and Contract

OpenDashboard()

Opens the business dashboard UI. When oxide-tablet is running and Config.Dashboard.UseTablet is on, this opens the tablet straight to the Vending app instead.

local result = exports['oxide-vending']:OpenDashboard()

CloseDashboard()

Closes the dashboard UI.

local result = exports['oxide-vending']:CloseDashboard()

OpenContract()

Opens the registration contract UI.

local result = exports['oxide-vending']:OpenContract()

CloseContract()

Closes the contract UI.

local result = exports['oxide-vending']:CloseContract()

Placement

StartPlacement(machineType, modelName)

Starts the raycast placement flow for the given machine type and prop model. The player aims with the camera, rotates with the scroll wheel, and confirms with E (or cancels with Backspace).

local result = exports['oxide-vending']:StartPlacement(machineType, modelName)

CancelPlacement()

Cancels the active placement flow.

local result = exports['oxide-vending']:CancelPlacement()

IsInPlacementMode()

Returns a boolean.

local result = exports['oxide-vending']:IsInPlacementMode()

GetPlacementState()

Returns the current placement state string:

local result = exports['oxide-vending']:GetPlacementState()
  • "placing" while placement is active
  • nil when idle

Warehouse

OpenChangeCodeMenu()

Opens the warehouse access-code change menu for the owner flow.

local result = exports['oxide-vending']:OpenChangeCodeMenu()

Usage Examples

Check Progression Limits

local maxMachines = exports['oxide-vending']:GetMaxMachines(businessId)
local maxEmployees = exports['oxide-vending']:GetMaxEmployees(businessId)

Grant XP From Another Resource

local success, leveledUp = exports['oxide-vending']:AddXP(businessId, 500, 'Event Bonus', source)

Open the Dashboard From Another Client Resource

exports['oxide-vending']:OpenDashboard()

Monitor NPC Sales

local stats = exports['oxide-vending']:GetNPCSalesStats()
print(stats.totalSales, stats.totalRevenue)

Next Steps

On this page

Server ExportsGetAllBusinesses()GetBusinessById(businessId)GetBusinessByOwner(citizenid)GetBusinessStats(businessId)GetAllMachines()GetMachineById(machineId)GetMachinesByBusiness(businessId)GetMachineStats(machineId)GetMachineStock(machineId)GetEmployeesByBusiness(businessId)GetTransactionHistory(businessId, limit, offset)AdminDeleteBusiness(businessId, adminIdentifier)AdminDeleteMachine(machineId, adminIdentifier)GetBusinessLevel(businessId)GetBusinessProgression(businessId)AddXP(businessId, amount, source, notifySource)AddRevenue(businessId, amount)GetMaxMachines(businessId)GetMaxEmployees(businessId)IsMachineTypeUnlocked(businessId, machineType)IsWarehouseUnlocked(businessId)GetPricingRange(businessId, itemName)GetWholesaleDiscount(businessId)GetNPCRevenueBoost(businessId)CreateProgressionRecord(businessId)ClaimDailyBonus(source, businessId)GetBusinessInventory(businessId)GetBusinessInventoryItem(businessId, itemName)GetBusinessInventoryList(businessId)GetTotalWarehouseItems(businessId)AddToWarehouse(businessId, itemName, quantity)RemoveFromWarehouse(businessId, itemName, quantity)HasWarehouse(businessId)GetWarehouseByBusiness(businessId)GetWarehouseByBucket(bucketId)PurchaseWarehouse(source, businessId)UpdateWarehouseCode(businessId, newCode)ValidateAccessCode(code)CreatePickupBox(businessId, itemName, quantity, orderedBy)GetPickupBoxesByBusiness(businessId)GetPickupBox(boxId)GetNPCSalesStats()GetSetting('WeatherIntegration')SetSetting('WeatherIntegration', values)Client ExportsOpenDashboard()CloseDashboard()OpenContract()CloseContract()StartPlacement(machineType, modelName)CancelPlacement()IsInPlacementMode()GetPlacementState()OpenChangeCodeMenu()Usage ExamplesNext Steps