Browse docs

CrewLink Exports

CrewLink Exports for the Free Phone custom-app, billing and CrewLink integrations.

All exports

This page documents the supported public integration calls. Client exports must run in a client script and server exports must run in a server script. Internal NUI callbacks and net events are not public APIs.

Keep the resource folder named sky_phone. Validate every returned success value and keep money, permissions, ownership, and other authoritative changes on the server.

CrewLink read exports require a valid phone session. External ping mutations additionally require the calling resource in Config.CrewLink.ExternalPingResources.

GetCrewLinkActiveGroup(source)

  • Purpose: Returns the active CrewLink group of a player with an open, unlocked phone session.
  • Arguments:
    • source (number): Player server ID.
  • Returns: table | nil.
server.lua
local group = exports["sky_phone"]:GetCrewLinkActiveGroup(source)

if group then
    print(("Active CrewLink group: %s"):format(group.id))
end

GetCrewLinkGroupMembers(groupId)

  • Purpose: Returns public member data for a CrewLink group.
  • Arguments:
    • groupId (string): CrewLink group ID.
  • Returns: table — array of member records.
server.lua
local members = exports["sky_phone"]:GetCrewLinkGroupMembers(group_id)

for _, member in ipairs(members) do
    print(member.id, member.username, member.role, member.joinedAt)
end

IsCrewLinkGroupMember(source, groupId)

  • Purpose: Checks whether a player belongs to a CrewLink group.
  • Arguments:
    • source (number): Player server ID.
    • groupId (string): CrewLink group ID.
  • Returns: boolean.
server.lua
if exports["sky_phone"]:IsCrewLinkGroupMember(source, group_id) then
    print("Player is a member of the group")
end

GetCrewLinkGroupRole(source, groupId)

  • Purpose: Returns a player's role in a CrewLink group.
  • Arguments:
    • source (number): Player server ID.
    • groupId (string): CrewLink group ID.
  • Returns: string | nil.
server.lua
local role = exports["sky_phone"]:GetCrewLinkGroupRole(source, group_id)

if role == "owner" or role == "moderator" then
    print("Player can manage this CrewLink group")
end

CreateCrewLinkPing(groupId, data)

  • Purpose: Creates a shared external ping for a CrewLink group.
  • Arguments:
    • groupId (string): Target group ID.
    • data (table): Ping definition.
      • type (string): meeting, danger, help, target, or info.
      • label (string): Player-facing ping label.
      • coords (table): { x, y, z } world coordinates.
      • lifetimeSeconds (number?): Requested lifetime within configured limits.
  • Returns: table | nil, string? — created ping or an error code.
server.lua
local ping, error_code = exports["sky_phone"]:CreateCrewLinkPing(
    group_id,
    {
        type = "target",
        label = "Mission target",
        coords = {
            x = 125.0,
            y = -840.0,
            z = 30.0,
        },
        lifetimeSeconds = 180,
    }
)

if not ping then
    print(("CrewLink ping failed: %s"):format(error_code))
end

RemoveCrewLinkPing(groupId, pingId)

  • Purpose: Removes an external ping created by the calling resource.
  • Arguments:
    • groupId (string): CrewLink group ID.
    • pingId (string): Ping ID returned by CreateCrewLinkPing.
  • Returns: boolean.
server.lua
local removed = exports["sky_phone"]:RemoveCrewLinkPing(group_id, ping.id)

if not removed then
    print("Ping does not exist or belongs to another resource")
end