{% note tip "" %}
If you are developing integrations for Bitrix24 using AI tools (Codex, Claude Code, Cursor), connect to the MCP server so that the assistant can utilize the official REST documentation.
{% endnote %}
Scope:
sonetWho can execute the method: any user
The method sonet_group.get returns a list of workgroups and projects considering the permissions of the current user.
{% include Note on required parameters %}
#|
|| Name
type | Description ||
|| ORDER
object | Sorting direction.
Possible values:
ASC— ascending orderDESC— descending order
Default — ID:'DESC' ||
|| FILTER
object | Object for filtering in the format {"field_1": "value_1", ... "field_N": "value_N"}.
See below list of available fields for filtering.
Supported operators in the filter key:
!— not equal>=— greater than or equal>— greater than<=— less than or equal<— less than><— between (inclusive range)!><— not between (outside the range)?— string search=— equal, exact match (used by default)!=— not equal%— LIKE, substring search!%— NOT LIKE, substring search
Default — no filtering ||
|| GROUP_ID
integer | Return group or project by identifier.
If the parameter is provided, the method adds the filter condition ID = GROUP_ID ||
|| IS_ADMIN
string | Disable permission check.
Possible values:
Y— disable permission check if the current user is an administrator
If Y is provided by a non-administrator, the value is ignored.
Default — permission check is enabled ||
|| start
integer | Pagination parameter.
The page size of results is 50 records.
To get the second page, pass 50; the third — 100, and so on.
Formula:
start = (N - 1) * 50, where N — page number ||
|#
#|
|| Name
type | Description ||
|| ID
integer | Identifier of the group or project ||
|| NAME
string | Name of the group or project ||
|| OWNER_ID
integer | Identifier of the owner ||
|| ACTIVE
string | Activity status of the group.
Possible values:
Y— group is activeN— group is deactivated || || VISIBLEstring| Visibility of the group in the list.
Possible values:
Y— group is visible in the general listN— group is hidden from the general list || || OPENEDstring| Is the group open for free membership.
Possible values:
Y— user can join the group without confirmationN— membership by invitation or request || || CLOSEDstring| Is the group archived.
Possible values:
Y— group is archivedN— active group || || DATE_CREATEdatetime| Creation date of the group in ISO-8601 format || || DATE_UPDATEdatetime| Modification date of the group in ISO-8601 format || || DATE_ACTIVITYdatetime| Date of last activity in the group in ISO-8601 format || || IS_EXTRANETstring| Filter by the type of the group's site.
Possible values:
Y— extranet groupsN— non-extranet groups || |#
{% include Note on examples %}
{% list tabs %}
-
cURL (Webhook)
curl -X POST \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{"ORDER":{"NAME":"ASC"},"FILTER":{"%NAME":"Pro"}}' \ https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/sonet_group.get
-
cURL (OAuth)
curl -X POST \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{"ORDER":{"NAME":"ASC"},"FILTER":{"%NAME":"Pro"},"auth":"**put_access_token_here**"}' \ https://**put_your_bitrix24_address**/rest/sonet_group.get
-
JS (TS)
// This snippet is an ES module: top-level await requires type="module" or a bundler. // $b24 is an already-initialized SDK instance (see the SDK "Get started" guide). import { Text } from '@bitrix24/b24jssdk' import type { B24Frame, ISODate } from '@bitrix24/b24jssdk' declare const $b24: B24Frame // Shape of each SonetGroup returned in result[] type SonetGroup = { ID: string SITE_ID: string NAME: string DESCRIPTION: string | null DATE_CREATE: ISODate DATE_UPDATE: ISODate DATE_ACTIVITY: ISODate ACTIVE: string VISIBLE: string OPENED: string CLOSED: string SUBJECT_ID: string OWNER_ID: string KEYWORDS: string | null NUMBER_OF_MEMBERS: string SUBJECT_NAME: string PROJECT: string IS_EXTRANET: string } try { // sonet_group.get returns a single page (max 50 records). For the whole result set // use a list helper: $b24.actions.v2.callList.make() returns every record as one // array, $b24.actions.v2.fetchList.make() yields them in chunks (async generator). // NOTE: the list helpers do not accept `order` (it is excluded from their params, so // passing it is a TS error) — keep this call.make + `start` variant when sort matters. const response = await $b24.actions.v2.call.make<SonetGroup[]>({ method: 'sonet_group.get', params: { ORDER: { NAME: 'ASC' }, FILTER: { '%NAME': 'Pro' }, start: 0, }, requestId: Text.getUuidRfc4122() }) // The payload is available only on a successful response if (!response.isSuccess) { console.error(response.getErrorMessages().join('; ')) } else { const result = response.getData()!.result console.info('Retrieved groups:', result.length, result[0]?.NAME) } } catch (error) { // Thrown on transport or SDK failures (AjaxError, SdkError, etc.) console.error(error) }
-
JS (UMD)
<!-- Load the SDK (UMD build); it is exposed as the global B24Js --> <script src="https://unpkg.com/@bitrix24/b24jssdk@1/dist/umd/index.min.js"></script> <script> async function getGroups() { try { // Initialize the SDK inside a Bitrix24 frame const $b24 = await B24Js.initializeB24Frame() // sonet_group.get returns a single page (max 50 records). For the whole result set // use a list helper: $b24.actions.v2.callList.make() returns every record as one // array, $b24.actions.v2.fetchList.make() yields them in chunks (async generator). // NOTE: the list helpers do not accept `order` (it is excluded from their params, so // passing it is a TS error) — keep this call.make + `start` variant when sort matters. const response = await $b24.actions.v2.call.make({ method: 'sonet_group.get', params: { ORDER: { NAME: 'ASC' }, FILTER: { '%NAME': 'Pro' }, start: 0, }, requestId: B24Js.Text.getUuidRfc4122() }) // The payload is available only on a successful response if (!response.isSuccess) { console.error(response.getErrorMessages().join('; ')) return } const result = response.getData().result console.info('Retrieved groups:', result.length, result[0]?.NAME) } catch (error) { // Thrown on transport or SDK failures (AjaxError, SdkError, etc.) console.error(error) } } document.addEventListener('DOMContentLoaded', getGroups) </script>
-
PHP
try { $response = $b24Service ->core ->call( 'sonet_group.get', [ 'ORDER' => ['NAME' => 'ASC'], 'FILTER' => ['%NAME' => 'Pro'] ] ); $result = $response ->getResponseData() ->getResult(); echo 'Success: ' . print_r($result, true); processData($result); } catch (Throwable $e) { error_log($e->getMessage()); echo 'Error retrieving groups: ' . $e->getMessage(); }
-
BX24.js
BX24.callMethod('sonet_group.get', { ORDER: { NAME: 'ASC' }, FILTER: { '%NAME': 'Pro' } }, function(result) { if (result.error()) { console.error(result.error(), result.error_description()); } else { console.log(result.data()); } });
-
PHP CRest
require_once('crest.php'); $result = CRest::call( 'sonet_group.get', [ 'ORDER' => ['NAME' => 'ASC'], 'FILTER' => ['%NAME' => 'Pro'] ] ); echo '<PRE>'; print_r($result); echo '</PRE>';
-
Go
// client and ctx are already created — see the Go SDK section res, err := client.Core().Call(ctx, "sonet_group.get", b24.Params{ "ORDER": b24.Params{ "NAME": "ASC", }, "FILTER": b24.Params{ "%NAME": "Pro", }, }, b24.WithIdempotent()) if err != nil { return fmt.Errorf("sonet_group.get: %w", err) } var items []struct { ID b24.ID `json:"ID"` SiteID string `json:"SITE_ID"` Name string `json:"NAME"` DateCreate string `json:"DATE_CREATE"` DateUpdate string `json:"DATE_UPDATE"` Active string `json:"ACTIVE"` } if err := json.Unmarshal(res.Result, &items); err != nil { return fmt.Errorf("parse response: %w", err) } for _, it := range items { fmt.Println(it.ID, it.SiteID) }
{% endlist %}
HTTP status: 200
{
"result": [
{
"ID": "77",
"SITE_ID": "s1",
"NAME": "New Project Title",
"DESCRIPTION": null,
"DATE_CREATE": "2026-03-19T15:01:27+02:00",
"DATE_UPDATE": "2026-03-19T15:01:27+02:00",
"ACTIVE": "Y",
"VISIBLE": "Y",
"OPENED": "N",
"CLOSED": "N",
"SUBJECT_ID": "1",
"OWNER_ID": "1271",
"KEYWORDS": null,
"NUMBER_OF_MEMBERS": "12",
"DATE_ACTIVITY": "2026-03-19T15:01:27+02:00",
"SUBJECT_NAME": "Workgroups",
"PROJECT": "Y",
"IS_EXTRANET": "N"
},
{
"ID": "79",
"SITE_ID": "s1",
"NAME": "Scrum Project",
"DESCRIPTION": null,
"DATE_CREATE": "2026-03-19T15:15:06+02:00",
"DATE_UPDATE": "2026-03-19T15:15:06+02:00",
"ACTIVE": "Y",
"VISIBLE": "Y",
"OPENED": "N",
"CLOSED": "N",
"SUBJECT_ID": "1",
"OWNER_ID": "1269",
"KEYWORDS": null,
"NUMBER_OF_MEMBERS": "8",
"DATE_ACTIVITY": "2026-03-19T15:15:06+02:00",
"SUBJECT_NAME": "Workgroups",
"PROJECT": "Y",
"IS_EXTRANET": "N"
}
],
"total": 2,
"time": {
"start": 1773925430,
"finish": 1773925430.419962,
"duration": 0.41996192932128906,
"processing": 0,
"date_start": "2026-03-19T16:03:50+02:00",
"date_finish": "2026-03-19T16:03:50+02:00",
"operating_reset_at": 1773926030,
"operating": 0
}
}#|
|| Name
type | Description ||
|| result
object | Array of groups and projects that match the FILTER conditions.
An empty array means that there are no suitable records considering the access permissions of the current user ||
|| ID
integer | Identifier of the group ||
|| SITE_ID
string | Identifier of the group's site ||
|| NAME
string | Name of the group ||
|| DESCRIPTION
string | Description of the group ||
|| DATE_CREATE
datetime | Creation date of the group in ISO-8601 format ||
|| DATE_UPDATE
datetime | Modification date of the group in ISO-8601 format ||
|| DATE_ACTIVITY
datetime | Date of last activity in ISO-8601 format ||
|| ACTIVE
string | Activity status ||
|| VISIBLE
string | Visibility of the group ||
|| OPENED
string | Is the group open ||
|| CLOSED
string | Is the group archived ||
|| SUBJECT_ID
integer | Identifier of the group's subject ||
|| OWNER_ID
integer | Identifier of the owner ||
|| KEYWORDS
string | Keywords of the group ||
|| NUMBER_OF_MEMBERS
integer | Number of members ||
|| SUBJECT_NAME
string | Name of the group's subject ||
|| IMAGE
string | URL of the group's avatar ||
|| IS_EXTRANET
string | Indicator of the extranet group ||
|| total
integer | Total number of items in the selection ||
|| next
integer | Offset for the next page (if any) ||
|| time
time | Information about the execution time of the request ||
|#
{% include system errors %}