> For the complete documentation index, see [llms.txt](https://help.security.gallagher.com/knowledge-hub/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.security.gallagher.com/knowledge-hub/developer/rest-api/operator-groups.md).

# Operator Groups

An operator group is like an access group in that:

* one may contain any number of cardholders, and
* a cardholder can be a member of any number of operator groups.

However:

* there is no lineage: an operator group has no parent,
* memberships have no begin or end dates,
* a cardholder can have only one membership per group (and, because of the previous point, needs only one),
* operator group updates do not go to controllers, so editing them is a much cheaper operation.

The biggest difference is in their purpose, of course. They grant cardholders the use of software instead of doors.

These API methods give you read access to the system's operator groups. You can search them, list their cardholder members, and see the divisions into which they grant their privileges. The API will not tell you the privileges that they grant.

Your REST operator will need either the 'View' or 'Edit Operators' operator privilege for those GETs.

Operator groups first appeared in the API in version 8.50.

### Use cases

These are practically identical to the operations you'd perform on an access group, simplified because of the lack of lineage.

#### Finding members of an operator group, and managing memberships.

1. `GET /api`.
2. Follow the link at `features.operatorGroups.operatorGroups.href` ↪ (adding search terms, and setting `top` high to save pagination).
3. Find your operator group.
4. The link at `cardholders` returns the cardholders who have membership of your group.
5. Get the link at `cardholders` (which is the same on the search results and the details page), look in that cardholder's `operatorGroups` array, and manage each membership as you require. Send a DELETE to a membership's href to remove it, or an HTTP PATCH to the cardholder href to update it.

## Search operator groups

> \
> This returns operator groups matching your search criteria.\
> \
> The result will contain a batch of groups; you should follow the \`next\` link, if it is\
> present, to collect the next batch.\
> \
> When you have loaded all the operator groups there will be no \`next\` link.\
> \
> If your result set is empty it means either your search terms were too tight or your\
> operator does not have the privilege to view any operator groups.  Perhaps there are none in\
> the divisions in which your operator has 'View operators' or 'Edit operators', or your\
> operator does not have those privileges at all.\
> \
> This request does not return the group's cardholders.  That would make the results unwieldy.\
> Instead, it provides a separate link.\
> \
> Adding, deleting, or modifying operator groups between calls to this API will not affect the\
> pagination of its results if you sort by ID.\
> \
> You can find the URL for this call in the \`features.operatorGroups.operatorGroups.href\`\
> field of \`/api\`.  In the interest of forward compability, \[do not build it\
> yourself]\(forward-compatibility-hateoas).\
> \
> Added in 8.50.<br>

```json
{"openapi":"3.2.0","info":{"title":"Command Centre REST API","version":"2.0"},"tags":[{"name":"Operator Groups","description":"\nAn operator group is like an access group in that:\n  - one may contain any number of cardholders, and\n  - a cardholder can be a member of any number of operator groups.\n\nHowever:\n  - there is no lineage:  an operator group has no parent,\n  - memberships have no begin or end dates,\n\n  - a cardholder can have only one membership per group (and, because of the previous point,\n    needs only one),\n\n  - operator group updates do not go to controllers, so editing them is a much cheaper\n    operation.\n\nThe biggest difference is in their purpose, of course.  They grant cardholders the use of\nsoftware instead of doors.\n\nThese API methods give you read access to the system's operator groups.  You can search them,\nlist their cardholder members, and see the divisions into which they grant their privileges.\nThe API will not tell you the privileges that they grant.\n\nYour REST operator will need either the 'View' or 'Edit Operators' operator privilege for those\nGETs.\n\nOperator groups first appeared in the API in version 8.50.\n\n## Use cases\n\nThese are practically identical to the operations you'd perform on an access group, simplified\nbecause of the lack of lineage.\n\n### Finding members of an operator group, and managing memberships.\n\n1. `GET /api`.\n\n2. Follow the link at `features.operatorGroups.operatorGroups.href`\n   [↪](operator-groups#get-api-operator_groups) (adding search terms, and setting `top`\n   high to save pagination).\n\n3. Find your operator group.\n\n4. The link at `cardholders` returns the cardholders who have membership of your group.\n\n5. Get the link at `cardholders` (which is the same on the search results and the details page),\n   look in that cardholder's `operatorGroups` array, and manage each membership as you require.\n   Send a DELETE to a membership's href to remove it, or an HTTP PATCH to the cardholder href to\n   update it.\n"}],"servers":[{"url":"https://127.0.0.1:8904"}],"security":[{"API_key":[]},{"basic":[]}],"components":{"securitySchemes":{"API_key":{"type":"apiKey","name":"Authorization","in":"header","description":"\nClients authenticate by including a pre-shared API key in the `Authorization` header of each\nrequest after an authorisation method of `GGL-API-KEY`:\n\n`Authorization: GGL-API-KEY C774-B01F-D695-AA4B-215F-A158-AC22-ADEB`\n\nFor a fuller description see [API authentication](api-authentication).\n"},"basic":{"type":"http","scheme":"basic","description":"This is HTTP Basic authentication using a blank username and the API key as the password.\n\nExample:  `Authorization: Basic OkM3NzQtQjAxRi1ENjk1LUFBNEItMjE1Ri1BMTU4LUFDMjItQURFQg==`\n\nThat example is equivalent to the example in the description of the api_Key method:\nprepending a colon to the API key beginning with `C774` then encoding it into Base64\nproduces the 56 characters beginning with `OkM3`.\n\nThe colon is a separator between a username, which is blank in our case, and the password,\nwhich is our API key.\n\nFor a fuller description see [API authentication](api-authentication)\n"}},"parameters":{"sort":{"name":"sort","in":"query","schema":{"type":"string","enum":["id","name","-id","-name"]},"required":false,"description":"Changes the sort field between database ID and name.\n\nIf you prefix `id` or `name` with a minus sign (ASCII 45), the sort order is reversed.\n\nThere are two very strong reasons to sort by ID:\n\n1. Sorting by name carries a risk of missing or duplicating objects if your result set spans\n   multiple pages and another operator is editing the database while your REST client is\n   enumerating them.  This is known as \"page drift.\"  Sorting by ID does not carry that risk.\n2. Following a `next` link is _dramatically_ quicker when sorting by ID.\n\nWe _strongly_ recommend sorting by ID.  In case you were still in doubt, we will do that by\ndefault in a future version of Command Centre.\n\nThe server silently ignores anything except the options listed here.\n"},"top":{"name":"top","in":"query","required":false,"schema":{"type":"integer","minimum":1},"description":"Limits the results to no more than this many items per page.\n\nOlder versions of Command Centre returned 100 items per page in the absence of this parameter.  That is acceptable for GUI\napplications that will only display the first page, but for integrations that intend to\nproceed through the entire database it causes a lot of chatter.\n\n8.70 and later versions will default to 1000 items per request.  This is about where a graph\nof throughput versus page size begins to level out.\n"},"name":{"name":"name","in":"query","schema":{"type":"string"},"description":"Limits the returned items to those with a name that matches this string.  Without surrounding\nquotes or a percent sign or underscore, it is a substring match; surround the parameter with\ndouble quotes `\"...\"` for an exact match.  Without quotes, a percent sign `%` will match any\nsubstring and an underscore will match any single character.\n\nThe search is always case-insensitive.  Results are undefined if you do a substring search for\nthe empty string (`name=`).  You will receive no items if you search for those with no name\n(`name=\"\"`), as all items must have a name.\n\nSearch parameters are ANDed together.\n"},"division":{"name":"division","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"}},"style":"form","explode":false,"description":"Limits the returned items to those that are in these divisions.\n\nThat includes all the items in those divisions' child divisions, because Command Centre treats\nitems as though they are also in their division's parent, and its parent, and so on up to the\nroot division.\n\nSeparate the IDs of the divisions in you are interested with commas.  Item IDs are short\nalphanumeric strings, not URLs.\n\nResults are undefined if you provide an ID that is not in the form of a division ID.\n\nSearch parameters are ANDed together.\n"},"directDivision":{"name":"directDivision","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"}},"style":"form","explode":false,"description":"Restricts items to those whose division is in this list.\n\nUnlike `division=`, it does not follow ancestry.  That means it will limit the search to items\nthat are directly assigned to the divisions you list, whereas `division` (without the\n`direct`) will also include items that are assigned to their descendants.\n\nList the IDs of the divisions you are interested in separated by commas.  Item IDs are short\nalphanumeric strings, not URLs.\n\nBecause this is the first query parameter we added that contains a capital letter, this will\nbe the first time you have had to think about case sensitivity.  `directDivision` works,\n`directdivision` does not.\n\nResults are undefined if you provide an ID that is not in the form of a division ID.\n\nSearch parameters are ANDed together.\n\nAdded in 9.20.\n"},"description":{"name":"description","in":"query","required":false,"schema":{"type":"string"},"description":"Limits the returned items to those with a description that matches this string.  By default it\nis a substring match; surround it with double quotes `\"...\"` for an exact match.  A `_` will\nmatch any single character, and a `%` will match any substring.  With or without quotes,\nhaving either of these wildcards in the string will anchor it at both ends as though you had\nsurrounded it with `\"`.\n\nThe search is always case-insensitive.  Results are undefined if you search for the empty\nstring (`description=` or `description=\"\"`).\n\nSearch parameters are ANDed together.\n"},"pos":{"name":"pos","in":"query","required":false,"schema":{"type":"integer"},"description":"Reserved for internal use.  You may see it in URLs you receive from the server, but you must never add it yourself."},"skip":{"name":"skip","in":"query","required":false,"schema":{"type":"integer"},"description":"Reserved for internal use.  Do not add it to your queries."}},"schemas":{"OperatorGroupSearch":{"title":"Operator group search","description":"An array of operator group summaries and a `next` link for\nmore.\n","properties":{"results":{"type":"array","description":"An array of operator group summaries.","items":{"$ref":"#/components/schemas/OperatorGroupSummary"}},"next":{"type":"object","description":"The link to the next page.  Absent if you have retrieved them all.","properties":{"href":{"type":"string","format":"uri-reference"}}}}},"OperatorGroupSummary":{"title":"Operator group summary","description":"The operator group search at `/api/operator_groups` returns an array of these, and\n`/api/operator_groups/{id}` (linked as the href in this object) returns one with more fields.\n","properties":{"href":{"type":"string","format":"uri-reference","description":"A link to an [operator group detail](models#operatorgroupdetail) object for this\noperator group.\n"},"name":{"type":"string"},"serverDisplayName":{"readOnly":true,"type":"string","description":"If you are running a multi-server installation and this item is homed on a remote server, this\nfield will contain the name of that server.  This field is missing from items that are held on\nthe machine that served the API request.  Added in 8.40.\n\nThis is a read-only field.  The server will ignore it if you send it.\n"}}}}},"paths":{"/api/operator_groups":{"get":{"tags":["Operator Groups"],"summary":"Search operator groups","description":"\nThis returns operator groups matching your search criteria.\n\nThe result will contain a batch of groups; you should follow the `next` link, if it is\npresent, to collect the next batch.\n\nWhen you have loaded all the operator groups there will be no `next` link.\n\nIf your result set is empty it means either your search terms were too tight or your\noperator does not have the privilege to view any operator groups.  Perhaps there are none in\nthe divisions in which your operator has 'View operators' or 'Edit operators', or your\noperator does not have those privileges at all.\n\nThis request does not return the group's cardholders.  That would make the results unwieldy.\nInstead, it provides a separate link.\n\nAdding, deleting, or modifying operator groups between calls to this API will not affect the\npagination of its results if you sort by ID.\n\nYou can find the URL for this call in the `features.operatorGroups.operatorGroups.href`\nfield of `/api`.  In the interest of forward compability, [do not build it\nyourself](forward-compatibility-hateoas).\n\nAdded in 8.50.\n","parameters":[{"$ref":"#/components/parameters/sort"},{"$ref":"#/components/parameters/top"},{"$ref":"#/components/parameters/name"},{"$ref":"#/components/parameters/division"},{"$ref":"#/components/parameters/directDivision"},{"$ref":"#/components/parameters/description"},{"name":"fields","in":"query","required":false,"schema":{"type":"array","default":["defaults"],"items":{"type":"string","enum":["href","id","name","description","division","notes","cardholders","divisions","defaults"],"description":"Sets which fields to return.  The values you can list are the same as the field names\nin the [details page](models#operatorgroupdetail).  Using it you can return\neverything on the search page that you would find on the details page.  Separate\nvalues with commas.\n\nUse the special value `defaults` to return the fields you would have received had you\nnot given the parameter at all.  Add more after a comma.\n\nTreat the string matches as case sensitive.\n"}}},{"$ref":"#/components/parameters/pos"},{"$ref":"#/components/parameters/skip"}],"responses":{"200":{"description":"Success.  See the note in the description about privileges if your result set is empty.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OperatorGroupSearch"}}}},"403":{"description":"The site does not have the RESTCardholders licence."}}}}}}
```

## Get details of an operator group

> In addition to the group's vitals and a link to the membership document, this call returns\
> the divisions in which the operator group grants its privileges.\
> \
> Note that you can obtain the same results by adding\
> \`fields=defaults,description,division,divisions,cardholders\` to a\
> \[search]\(operator-groups#get-api-operator\_groups).\
> \
> You can find the URL for this call in the operator group search results and in a\
> cardholder's \`operatorGroups\` array.  In the interest of forward compability, \[do not build\
> it yourself]\(forward-compatibility-hateoas).\
> \
> Added in 8.50.<br>

```json
{"openapi":"3.2.0","info":{"title":"Command Centre REST API","version":"2.0"},"tags":[{"name":"Operator Groups","description":"\nAn operator group is like an access group in that:\n  - one may contain any number of cardholders, and\n  - a cardholder can be a member of any number of operator groups.\n\nHowever:\n  - there is no lineage:  an operator group has no parent,\n  - memberships have no begin or end dates,\n\n  - a cardholder can have only one membership per group (and, because of the previous point,\n    needs only one),\n\n  - operator group updates do not go to controllers, so editing them is a much cheaper\n    operation.\n\nThe biggest difference is in their purpose, of course.  They grant cardholders the use of\nsoftware instead of doors.\n\nThese API methods give you read access to the system's operator groups.  You can search them,\nlist their cardholder members, and see the divisions into which they grant their privileges.\nThe API will not tell you the privileges that they grant.\n\nYour REST operator will need either the 'View' or 'Edit Operators' operator privilege for those\nGETs.\n\nOperator groups first appeared in the API in version 8.50.\n\n## Use cases\n\nThese are practically identical to the operations you'd perform on an access group, simplified\nbecause of the lack of lineage.\n\n### Finding members of an operator group, and managing memberships.\n\n1. `GET /api`.\n\n2. Follow the link at `features.operatorGroups.operatorGroups.href`\n   [↪](operator-groups#get-api-operator_groups) (adding search terms, and setting `top`\n   high to save pagination).\n\n3. Find your operator group.\n\n4. The link at `cardholders` returns the cardholders who have membership of your group.\n\n5. Get the link at `cardholders` (which is the same on the search results and the details page),\n   look in that cardholder's `operatorGroups` array, and manage each membership as you require.\n   Send a DELETE to a membership's href to remove it, or an HTTP PATCH to the cardholder href to\n   update it.\n"}],"servers":[{"url":"https://127.0.0.1:8904"}],"security":[{"API_key":[]},{"basic":[]}],"components":{"securitySchemes":{"API_key":{"type":"apiKey","name":"Authorization","in":"header","description":"\nClients authenticate by including a pre-shared API key in the `Authorization` header of each\nrequest after an authorisation method of `GGL-API-KEY`:\n\n`Authorization: GGL-API-KEY C774-B01F-D695-AA4B-215F-A158-AC22-ADEB`\n\nFor a fuller description see [API authentication](api-authentication).\n"},"basic":{"type":"http","scheme":"basic","description":"This is HTTP Basic authentication using a blank username and the API key as the password.\n\nExample:  `Authorization: Basic OkM3NzQtQjAxRi1ENjk1LUFBNEItMjE1Ri1BMTU4LUFDMjItQURFQg==`\n\nThat example is equivalent to the example in the description of the api_Key method:\nprepending a colon to the API key beginning with `C774` then encoding it into Base64\nproduces the 56 characters beginning with `OkM3`.\n\nThe colon is a separator between a username, which is blank in our case, and the password,\nwhich is our API key.\n\nFor a fuller description see [API authentication](api-authentication)\n"}},"schemas":{"OperatorGroupDetail":{"title":"Operator group detail","description":"[/api/operator_groups/{id}](operator-groups#get-api-operator_groups-id-) returns one\nof these.  In addition to the basic item details such as division and description, it lists\nthe divisions in which it grants privileges to its members.\n","allOf":[{"$ref":"#/components/schemas/OperatorGroupSummary"},{"type":"object","properties":{"description":{"type":"string"},"division":{"type":"object","description":"The division that contains this operator group.  This has no bearing on the divisions\nto which this operator group grants privileges:  that is `divisions`.\n"},"cardholders":{"type":"object","description":"Following this link lists the group's [cardholder\nmembers](operator-groups#get-api-operator_groups-id-cardholders).\n"},"divisions":{"description":"An array containing the divisions in which this operator group grants its privileges.\n","type":"array","items":{"type":"object","properties":{"division":{"type":"object","properties":{"name":{"type":"string","readOnly":true},"href":{"type":"string","format":"uri-reference","description":"The API's identifier for an item."}}}}}}}}]},"OperatorGroupSummary":{"title":"Operator group summary","description":"The operator group search at `/api/operator_groups` returns an array of these, and\n`/api/operator_groups/{id}` (linked as the href in this object) returns one with more fields.\n","properties":{"href":{"type":"string","format":"uri-reference","description":"A link to an [operator group detail](models#operatorgroupdetail) object for this\noperator group.\n"},"name":{"type":"string"},"serverDisplayName":{"readOnly":true,"type":"string","description":"If you are running a multi-server installation and this item is homed on a remote server, this\nfield will contain the name of that server.  This field is missing from items that are held on\nthe machine that served the API request.  Added in 8.40.\n\nThis is a read-only field.  The server will ignore it if you send it.\n"}}}}},"paths":{"/api/operator_groups/{id}":{"get":{"tags":["Operator Groups"],"summary":"Get details of an operator group","description":"In addition to the group's vitals and a link to the membership document, this call returns\nthe divisions in which the operator group grants its privileges.\n\nNote that you can obtain the same results by adding\n`fields=defaults,description,division,divisions,cardholders` to a\n[search](operator-groups#get-api-operator_groups).\n\nYou can find the URL for this call in the operator group search results and in a\ncardholder's `operatorGroups` array.  In the interest of forward compability, [do not build\nit yourself](forward-compatibility-hateoas).\n\nAdded in 8.50.\n","parameters":[{"name":"fields","in":"query","required":false,"schema":{"default":["defaults"],"type":"array","items":{"type":"string","enum":["href","id","name","description","division","notes","cardholders","divisions","defaults"]}},"description":"Sets which fields to return.  The values you can list are the same as the field names in\nthe [detail results](models#operatorgroupdetail).  Use it to return the notes,\nwhich don't appear by default.  Separate values with commas.\n\nTreat the string matches as case sensitive.\n"}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OperatorGroupDetail"}}}},"403":{"description":"The site does not have the RESTCardholders licence."},"404":{"description":"That is not the URL of an operator group, or it is the URL of an operator group that the\noperator does not have the privilege to see ('View' or 'Edit Operators').\n"}}}}}}
```

## Get membership of an operator group

> \
> This lists all cardholders who are members of the group identified by the request URL.  It\
> does not paginate the results, so there is no \`next\` link.\
> \
> Operator groups cannot contain other operator groups, so every cardholder benefiting from\
> this operator group comes out of this call.\
> \
> If your operator does not have the privilege to view a cardholder item you will receive its\
> name but not its href (since following the href would 404).\
> \
> You can find this call's URL in the \`cardholders\` block of an operator group.  In the\
> interest of forward compability, \[do not build it\
> yourself]\(forward-compatibility-hateoas).\
> \
> Added in 8.50.\
> \
> There are two hrefs per cardholder.  The lower-level href is the identifier for the\
> cardholder, found throughout this API.  The higher-level \`href\` field only appears if you\
> ask for it using the \`fields\` query parameter, and only if the server is 8.70 or later.  It\
> refers to the cardholder's membership in the operator group.  If you DELETE it, you will\
> remove the cardholder from this operator group (which will demote them from an operator to a\
> regular cardholder if this was their last remaining operator group).

```json
{"openapi":"3.2.0","info":{"title":"Command Centre REST API","version":"2.0"},"tags":[{"name":"Operator Groups","description":"\nAn operator group is like an access group in that:\n  - one may contain any number of cardholders, and\n  - a cardholder can be a member of any number of operator groups.\n\nHowever:\n  - there is no lineage:  an operator group has no parent,\n  - memberships have no begin or end dates,\n\n  - a cardholder can have only one membership per group (and, because of the previous point,\n    needs only one),\n\n  - operator group updates do not go to controllers, so editing them is a much cheaper\n    operation.\n\nThe biggest difference is in their purpose, of course.  They grant cardholders the use of\nsoftware instead of doors.\n\nThese API methods give you read access to the system's operator groups.  You can search them,\nlist their cardholder members, and see the divisions into which they grant their privileges.\nThe API will not tell you the privileges that they grant.\n\nYour REST operator will need either the 'View' or 'Edit Operators' operator privilege for those\nGETs.\n\nOperator groups first appeared in the API in version 8.50.\n\n## Use cases\n\nThese are practically identical to the operations you'd perform on an access group, simplified\nbecause of the lack of lineage.\n\n### Finding members of an operator group, and managing memberships.\n\n1. `GET /api`.\n\n2. Follow the link at `features.operatorGroups.operatorGroups.href`\n   [↪](operator-groups#get-api-operator_groups) (adding search terms, and setting `top`\n   high to save pagination).\n\n3. Find your operator group.\n\n4. The link at `cardholders` returns the cardholders who have membership of your group.\n\n5. Get the link at `cardholders` (which is the same on the search results and the details page),\n   look in that cardholder's `operatorGroups` array, and manage each membership as you require.\n   Send a DELETE to a membership's href to remove it, or an HTTP PATCH to the cardholder href to\n   update it.\n"}],"servers":[{"url":"https://127.0.0.1:8904"}],"security":[{"API_key":[]},{"basic":[]}],"components":{"securitySchemes":{"API_key":{"type":"apiKey","name":"Authorization","in":"header","description":"\nClients authenticate by including a pre-shared API key in the `Authorization` header of each\nrequest after an authorisation method of `GGL-API-KEY`:\n\n`Authorization: GGL-API-KEY C774-B01F-D695-AA4B-215F-A158-AC22-ADEB`\n\nFor a fuller description see [API authentication](api-authentication).\n"},"basic":{"type":"http","scheme":"basic","description":"This is HTTP Basic authentication using a blank username and the API key as the password.\n\nExample:  `Authorization: Basic OkM3NzQtQjAxRi1ENjk1LUFBNEItMjE1Ri1BMTU4LUFDMjItQURFQg==`\n\nThat example is equivalent to the example in the description of the api_Key method:\nprepending a colon to the API key beginning with `C774` then encoding it into Base64\nproduces the 56 characters beginning with `OkM3`.\n\nThe colon is a separator between a username, which is blank in our case, and the password,\nwhich is our API key.\n\nFor a fuller description see [API authentication](api-authentication)\n"}},"schemas":{"OperatorGroupMembership":{"title":"Operator group membership","description":"Returned in an array by\n[/api/operator_groups/{id}/cardholders](operator-groups#get-api-operator_groups-id-cardholders),\ncontaining cardholders who are members of a particular operator group.\n\nEach item contains the cardholder's name and (if your operator has the privilege to view\nthat cardholder) an href to the cardholder record.  8.70 added an href that you can use to\ndelete the operator group membership.\n\n[PATCH](cardholders#patch-api-cardholders-id-) the href in the cardholder block if\nyou want to change anything about that cardholder.  The operator groups they are in, for\nexample.\n","properties":{"href":{"type":"string","format":"uri-reference","description":"[DELETE](cardholders#delete-api-cardholders-id-operator_groups-membership_id-)\nthis URL to remove the cardholder from this operator group.\n\nDELETE is the only verb you can use on this URL.  GET will return a 404.\n\nIt is not a default field.  If you want it, you need to request it using the `fields`\nquery parameter.\n\nAdded in 8.70.\n"},"cardholder":{"type":"object","description":"The name and href of the member cardholder."}}}}},"paths":{"/api/operator_groups/{id}/cardholders":{"get":{"tags":["Operator Groups"],"summary":"Get membership of an operator group","description":"\nThis lists all cardholders who are members of the group identified by the request URL.  It\ndoes not paginate the results, so there is no `next` link.\n\nOperator groups cannot contain other operator groups, so every cardholder benefiting from\nthis operator group comes out of this call.\n\nIf your operator does not have the privilege to view a cardholder item you will receive its\nname but not its href (since following the href would 404).\n\nYou can find this call's URL in the `cardholders` block of an operator group.  In the\ninterest of forward compability, [do not build it\nyourself](forward-compatibility-hateoas).\n\nAdded in 8.50.\n\nThere are two hrefs per cardholder.  The lower-level href is the identifier for the\ncardholder, found throughout this API.  The higher-level `href` field only appears if you\nask for it using the `fields` query parameter, and only if the server is 8.70 or later.  It\nrefers to the cardholder's membership in the operator group.  If you DELETE it, you will\nremove the cardholder from this operator group (which will demote them from an operator to a\nregular cardholder if this was their last remaining operator group).","parameters":[{"name":"fields","in":"query","required":false,"schema":{"type":"array","default":["defaults"],"items":{"type":"string","enum":["defaults","cardholder","href"]}},"description":"Specifies the fields you want in the search results.  The only two candidates are\n`cardholder` and `href`.  The default is `fields=defaults`, which is the same as\n`fields=cardholder`.  Separate values with commas.\n"}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object","properties":{"cardholders":{"type":"array","items":{"$ref":"#/components/schemas/OperatorGroupMembership"}}}}}}},"403":{"description":"You do not have privileges to see the operator group.  Check the body of the result for\na description of the problem.\n"},"404":{"description":"The ID is invalid, or it is valid but you do not have privileges to see the operator group.\n"}}}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://help.security.gallagher.com/knowledge-hub/developer/rest-api/operator-groups.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
