Reference: Role sync and groups

Role sync rules, and your Roblox group: members, ranks, join requests, and Roblox ranks from Discord roles.

Good to know

Every request needs your key: Authorization: Bearer tfy_…. Replace YOUR_SERVER_ID with your Discord server id. Errors are explained in Requests, errors and limits.

GET /bindings

GET /guilds/{guildId}/bindings

Key permissionbindings.read (See role rules)

No request body.

Example

curl -X GET "https://api.technified.xyz/v1/guilds/YOUR_SERVER_ID/bindings" \
  -H "Authorization: Bearer $TECHNIFIED_KEY"
Answer · 200
{
  "items": [
    {
      "id": "bnd_01M5TXYKJ4EJ5XZ9K4D2RMZWRC",
      "name": "Officers",
      "discordRoleId": "17929789298638349990006",
      "priority": 0,
      "condition": {
        "type": "group",
        "groupId": "7",
        "minRank": 100,
        "maxRank": 199
      },
      "createdAt": "2026-10-26T01:42:11.268Z"
    }
  ]
}

POST /bindings

POST /guilds/{guildId}/bindings

Key permissionbindings.write (Change role rules)

Request body

JSON, sent with Content-Type: application/json.

FieldTypeRequiredWhat it is
namestring or nullNoA name your team recognises the rule by, or null.at most 60 characters · default null
discordRoleIdstringYesThe Discord role the rule gives (role id).digits only
priorityintegerNoOrder rules are shown and explained in, 0 to 1000.0 to 1000 · default 0
conditionobject, one of the shapes belowYesWhen the role is given. type decides which other fields it takes.

condition takes one of these shapes:

type: "group" · In a Roblox group, optionally within a rank range or with one role.

FieldTypeRequiredWhat it is
type"group"Yes
groupIdstringYesThe Roblox group id.1 to 32 characters · digits only
minRankintegerNoLowest rank that counts, 0 to 255. Absent: any rank.0 to 255
maxRankintegerNoHighest rank that counts, 0 to 255. Absent: any rank.0 to 255
roleIdstringNoOne group role instead of a rank range: whoever holds it, whatever else they hold.1 to 32 characters · digits only
roleNamestringNoThat role’s name, kept for display only.at most 100 characters

type: "gamepass" · Owns a game pass.

FieldTypeRequiredWhat it is
type"gamepass"Yes
gamePassIdstringYesThe game pass id.1 to 32 characters · digits only

type: "asset" · Owns an item.

FieldTypeRequiredWhat it is
type"asset"Yes
assetIdstringYesThe item (asset) id.1 to 32 characters · digits only

type: "badge" · Has a badge.

FieldTypeRequiredWhat it is
type"badge"Yes
badgeIdstringYesThe badge id.1 to 32 characters · digits only

type: "account_age" · Account is old enough.

FieldTypeRequiredWhat it is
type"account_age"Yes
platform"roblox" | "discord"YesWhich account is measured.
minDaysintegerYesHow many days old it must be.1 to 10000

Example

curl -X POST "https://api.technified.xyz/v1/guilds/YOUR_SERVER_ID/bindings" \
  -H "Authorization: Bearer $TECHNIFIED_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Officers","discordRoleId":"17929789298638349990006","condition":{"type":"group","groupId":"7","minRank":100,"maxRank":199}}'
Answer · 201
{
  "id": "bnd_01M5TXYKJ4EJ5XZ9K4D2RMZWRC",
  "name": "Officers",
  "discordRoleId": "17929789298638349990006",
  "priority": 0,
  "condition": {
    "type": "group",
    "groupId": "7",
    "minRank": 100,
    "maxRank": 199
  },
  "createdAt": "2026-10-26T01:42:11.268Z"
}

PATCH /bindings/{bindingId}

PATCH /guilds/{guildId}/bindings/{bindingId}

Key permissionbindings.write (Change role rules)

In the address

FieldTypeRequiredWhat it is
bindingIdstringYesA role sync rule’s id (bnd_…).

Request body

JSON, sent with Content-Type: application/json.

FieldTypeRequiredWhat it is
namestring or nullNoA name your team recognises the rule by, or null.at most 60 characters
priorityintegerNoOrder rules are shown and explained in, 0 to 1000.0 to 1000
conditionobject, one of the shapes belowNoWhen the role is given. type decides which other fields it takes.

condition takes one of these shapes:

type: "group" · In a Roblox group, optionally within a rank range or with one role.

FieldTypeRequiredWhat it is
type"group"Yes
groupIdstringYesThe Roblox group id.1 to 32 characters · digits only
minRankintegerNoLowest rank that counts, 0 to 255. Absent: any rank.0 to 255
maxRankintegerNoHighest rank that counts, 0 to 255. Absent: any rank.0 to 255
roleIdstringNoOne group role instead of a rank range: whoever holds it, whatever else they hold.1 to 32 characters · digits only
roleNamestringNoThat role’s name, kept for display only.at most 100 characters

type: "gamepass" · Owns a game pass.

FieldTypeRequiredWhat it is
type"gamepass"Yes
gamePassIdstringYesThe game pass id.1 to 32 characters · digits only

type: "asset" · Owns an item.

FieldTypeRequiredWhat it is
type"asset"Yes
assetIdstringYesThe item (asset) id.1 to 32 characters · digits only

type: "badge" · Has a badge.

FieldTypeRequiredWhat it is
type"badge"Yes
badgeIdstringYesThe badge id.1 to 32 characters · digits only

type: "account_age" · Account is old enough.

FieldTypeRequiredWhat it is
type"account_age"Yes
platform"roblox" | "discord"YesWhich account is measured.
minDaysintegerYesHow many days old it must be.1 to 10000

Example

curl -X PATCH "https://api.technified.xyz/v1/guilds/YOUR_SERVER_ID/bindings/BINDINGID" \
  -H "Authorization: Bearer $TECHNIFIED_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

DELETE /bindings/{bindingId}

DELETE /guilds/{guildId}/bindings/{bindingId}

Key permissionbindings.write (Change role rules)

In the address

FieldTypeRequiredWhat it is
bindingIdstringYesA role sync rule’s id (bnd_…).

No request body.

Example

curl -X DELETE "https://api.technified.xyz/v1/guilds/YOUR_SERVER_ID/bindings/BINDINGID" \
  -H "Authorization: Bearer $TECHNIFIED_KEY"

GET /bindings/preview/{discordUserId}

GET /guilds/{guildId}/bindings/preview/{discordUserId}

What would happen to one member. Changes nothing. Show this before any bulk action.

Key permissionbindings.read (See role rules)

In the address

FieldTypeRequiredWhat it is
discordUserIdstringYesA Discord user id (digits).

No request body.

Example

curl -X GET "https://api.technified.xyz/v1/guilds/YOUR_SERVER_ID/bindings/preview/DISCORDUSERID" \
  -H "Authorization: Bearer $TECHNIFIED_KEY"

GET /bindings/roblox-group/{groupId}

GET /guilds/{guildId}/bindings/roblox-group/{groupId}

A Roblox group's name and ranks, for building a rule.

Key permissionbindings.write (Change role rules)

In the address

FieldTypeRequiredWhat it is
groupIdstringYesThe Roblox group id (the number in the group’s address on roblox.com).

No request body.

Example

curl -X GET "https://api.technified.xyz/v1/guilds/YOUR_SERVER_ID/bindings/roblox-group/GROUPID" \
  -H "Authorization: Bearer $TECHNIFIED_KEY"

POST /bindings/sync/{discordUserId}

POST /guilds/{guildId}/bindings/sync/{discordUserId}

Applies to one member now.

Key permissionbindings.write (Change role rules)

In the address

FieldTypeRequiredWhat it is
discordUserIdstringYesA Discord user id (digits).

No request body.

Example

curl -X POST "https://api.technified.xyz/v1/guilds/YOUR_SERVER_ID/bindings/sync/DISCORDUSERID" \
  -H "Authorization: Bearer $TECHNIFIED_KEY"

GET /group-binds

GET /guilds/{guildId}/group-binds

Key permissiongroups.read (See Roblox groups)

No request body.

Example

curl -X GET "https://api.technified.xyz/v1/guilds/YOUR_SERVER_ID/group-binds" \
  -H "Authorization: Bearer $TECHNIFIED_KEY"

POST /group-binds

POST /guilds/{guildId}/group-binds

Key permissiongroups.write (Change Roblox group ranks)

Request body

JSON, sent with Content-Type: application/json.

FieldTypeRequiredWhat it is
discordRoleIdstringYesdigits only
robloxGroupIdstringYes1 to 32 characters · digits only
robloxRoleIdstringYes1 to 32 characters · digits only
mode"rank" | "extra"Nodefault "rank"
minAccountAgeDaysinteger or nullNo1 to 3650 · default null

Example

curl -X POST "https://api.technified.xyz/v1/guilds/YOUR_SERVER_ID/group-binds" \
  -H "Authorization: Bearer $TECHNIFIED_KEY" \
  -H "Content-Type: application/json" \
  -d '{"discordRoleId":"123456789012345678","robloxGroupId":"123456789012345678","robloxRoleId":"123456789012345678"}'

DELETE /group-binds/{bindId}

DELETE /guilds/{guildId}/group-binds/{bindId}

Removes one.

Key permissiongroups.write (Change Roblox group ranks)

In the address

FieldTypeRequiredWhat it is
bindIdstringYesA Roblox rank rule’s id (gbd_…).

No request body.

Example

curl -X DELETE "https://api.technified.xyz/v1/guilds/YOUR_SERVER_ID/group-binds/BINDID" \
  -H "Authorization: Bearer $TECHNIFIED_KEY"

GET /groups/{groupId}

GET /guilds/{guildId}/groups/{groupId}

The group as its Roblox page shows it: icon, description, owner, shout, size, whether joining needs a request.

Key permissiongroups.read (See Roblox groups)

In the address

FieldTypeRequiredWhat it is
groupIdstringYesThe Roblox group id (the number in the group’s address on roblox.com).

No request body.

Example

curl -X GET "https://api.technified.xyz/v1/guilds/YOUR_SERVER_ID/groups/GROUPID" \
  -H "Authorization: Bearer $TECHNIFIED_KEY"

GET /groups/{groupId}/history

GET /guilds/{guildId}/groups/{groupId}/history

Rank changes and join decisions made through Technified, newest first.

Key permissiongroups.read (See Roblox groups)

In the address

FieldTypeRequiredWhat it is
groupIdstringYesThe Roblox group id (the number in the group’s address on roblox.com).

Query parameters

Added to the address after a ?, like ?limit=10&order=asc.

FieldTypeRequiredWhat it is
cursorstringNoThe nextCursor of the page before, to get the next page. Absent: the first page.at most 64 characters
limitintegerNoHow many to answer with at most, 1 to 100.1 to 100 · default 25

No request body.

Example

curl -X GET "https://api.technified.xyz/v1/guilds/YOUR_SERVER_ID/groups/GROUPID/history" \
  -H "Authorization: Bearer $TECHNIFIED_KEY"

GET /groups/{groupId}/join-requests

GET /guilds/{guildId}/groups/{groupId}/join-requests

Key permissiongroups.read (See Roblox groups)

In the address

FieldTypeRequiredWhat it is
groupIdstringYesThe Roblox group id (the number in the group’s address on roblox.com).

Query parameters

Added to the address after a ?, like ?limit=10&order=asc.

FieldTypeRequiredWhat it is
cursorstringNoThe nextCursor of the page before.at most 1024 characters

No request body.

Example

curl -X GET "https://api.technified.xyz/v1/guilds/YOUR_SERVER_ID/groups/GROUPID/join-requests" \
  -H "Authorization: Bearer $TECHNIFIED_KEY"

POST /groups/{groupId}/join-requests

POST /guilds/{guildId}/groups/{groupId}/join-requests

Key permissiongroups.write (Change Roblox group ranks)

In the address

FieldTypeRequiredWhat it is
groupIdstringYesThe Roblox group id (the number in the group’s address on roblox.com).

Request body

JSON, sent with Content-Type: application/json.

FieldTypeRequiredWhat it is
robloxUserIdstringYesThe person who asked to join (Roblox user id).1 to 32 characters · digits only
decision"accept" | "decline"Yesaccept or decline.

Example

curl -X POST "https://api.technified.xyz/v1/guilds/YOUR_SERVER_ID/groups/GROUPID/join-requests" \
  -H "Authorization: Bearer $TECHNIFIED_KEY" \
  -H "Content-Type: application/json" \
  -d '{"robloxUserId":"123456789012345678","decision":"accept"}'

POST /groups/{groupId}/join-requests/batch

POST /guilds/{guildId}/groups/{groupId}/join-requests/batch

Accepts or declines up to 25 at once; one that fails does not stop the rest.

Key permissiongroups.write (Change Roblox group ranks)

In the address

FieldTypeRequiredWhat it is
groupIdstringYesThe Roblox group id (the number in the group’s address on roblox.com).

Request body

JSON, sent with Content-Type: application/json.

FieldTypeRequiredWhat it is
robloxUserIdsarray of stringYesThe people who asked to join (Roblox user ids), 1 to 25.1 to 25 items
decision"accept" | "decline"Yesaccept or decline.

Example

curl -X POST "https://api.technified.xyz/v1/guilds/YOUR_SERVER_ID/groups/GROUPID/join-requests/batch" \
  -H "Authorization: Bearer $TECHNIFIED_KEY" \
  -H "Content-Type: application/json" \
  -d '{"robloxUserIds":["123456789012345678"],"decision":"accept"}'

GET /groups/{groupId}/members

GET /guilds/{guildId}/groups/{groupId}/members

Who is in the group, paged.

Key permissiongroups.read (See Roblox groups)

In the address

FieldTypeRequiredWhat it is
groupIdstringYesThe Roblox group id (the number in the group’s address on roblox.com).

Query parameters

Added to the address after a ?, like ?limit=10&order=asc.

FieldTypeRequiredWhat it is
cursorstringNoThe nextCursor of the page before.at most 1024 characters
roleIdstringNoOnly members holding this group role (role id). Needs the server’s Roblox API key.

No request body.

Example

curl -X GET "https://api.technified.xyz/v1/guilds/YOUR_SERVER_ID/groups/GROUPID/members" \
  -H "Authorization: Bearer $TECHNIFIED_KEY"

POST /groups/{groupId}/members

POST /guilds/{guildId}/groups/{groupId}/members

Sets somebody's rank.

Key permissiongroups.write (Change Roblox group ranks)

In the address

FieldTypeRequiredWhat it is
groupIdstringYesThe Roblox group id (the number in the group’s address on roblox.com).

Request body

JSON, sent with Content-Type: application/json.

FieldTypeRequiredWhat it is
robloxUserIdstringYesThe member whose rank changes (Roblox user id).1 to 32 characters · digits only
robloxRoleIdstringYesThe group role to give them (its id, from the ranks endpoint). It must be below your own rank in the group.1 to 32 characters · digits only

Example

curl -X POST "https://api.technified.xyz/v1/guilds/YOUR_SERVER_ID/groups/GROUPID/members" \
  -H "Authorization: Bearer $TECHNIFIED_KEY" \
  -H "Content-Type: application/json" \
  -d '{"robloxUserId":"123456789012345678","robloxRoleId":"123456789012345678"}'

GET /guilds/{guildId}/groups/{groupId}/members/search

Key permissiongroups.read (See Roblox groups)

In the address

FieldTypeRequiredWhat it is
groupIdstringYesThe Roblox group id (the number in the group’s address on roblox.com).

Query parameters

Added to the address after a ?, like ?limit=10&order=asc.

FieldTypeRequiredWhat it is
qstringYesA whole Roblox username or id, or part of the name of a member verified here.

No request body.

Example

curl -X GET "https://api.technified.xyz/v1/guilds/YOUR_SERVER_ID/groups/GROUPID/members/search?q=Q" \
  -H "Authorization: Bearer $TECHNIFIED_KEY"

GET /groups/{groupId}/ranks

GET /guilds/{guildId}/groups/{groupId}/ranks

The ranks a group offers, with how many members hold each.

Key permissiongroups.read (See Roblox groups)

In the address

FieldTypeRequiredWhat it is
groupIdstringYesThe Roblox group id (the number in the group’s address on roblox.com).

No request body.

Example

curl -X GET "https://api.technified.xyz/v1/guilds/YOUR_SERVER_ID/groups/GROUPID/ranks" \
  -H "Authorization: Bearer $TECHNIFIED_KEY"

GET /groups/credential

GET /guilds/{guildId}/groups/credential

Which Roblox account the server acts as, and whether it still works. Never the credential itself.

Key permissiongroups.read (See Roblox groups)

No request body.

Example

curl -X GET "https://api.technified.xyz/v1/guilds/YOUR_SERVER_ID/groups/credential" \
  -H "Authorization: Bearer $TECHNIFIED_KEY"

POST /groups/credential/test

POST /guilds/{guildId}/groups/credential/test

Checks it still works. Show this before anybody blames the product.

Key permissiongroups.write (Change Roblox group ranks)

No request body.

Example

curl -X POST "https://api.technified.xyz/v1/guilds/YOUR_SERVER_ID/groups/credential/test" \
  -H "Authorization: Bearer $TECHNIFIED_KEY"

Still stuck? Get help from the Technified team.