# SCIM Query syntax

SCIM protocol provides a language to search and filter resources.

<p class="callout info">Please browse the standard specifications in this link: [https://tools.ietf.org/html/rfc7644#section-3.4.2.2](https://tools.ietf.org/html/rfc7644#section-3.4.2.2)</p>

## Example

To search all users having "John" as name:

```XML
http://<domain>/webservice/scim2/v1/User/?filter=userName eq "John"
```

## Use

This feature can be used with the Search by filter operation.

After the URL resource. the filter parameter with the language expression to apply must be added: **&lt;URL&gt;?filter=&lt;expression&gt;**

Remember that in this case the HTTP method is GET.

<p class="callout info">The result always is a SCIM response list.</p>

## Syntax

### Attribute operators

<table class="confluenceTable tablesorter tablesorter-default stickyTableHeaders" id="bkmrk-operator-description" role="grid"><thead class="tableFloatingHeaderOriginal"><tr class="tablesorter-headerRow" role="row"><th aria-disabled="false" aria-label="Operator: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="0" role="columnheader" scope="col" style="width: 127px;" tabindex="0">**Operator**

</th><th aria-disabled="false" aria-label="Description: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="1" role="columnheader" scope="col" style="width: 664px;" tabindex="0">**Description**

</th></tr></thead><tbody aria-live="polite" aria-relevant="all"><tr role="row"><td class="confluenceTd" style="width: 127px;">eq

</td><td class="confluenceTd" style="width: 664px;">equal

</td></tr><tr><td style="width: 127px;">eq\_ci

</td><td style="width: 664px;">case insensitive version of equal operator

</td></tr><tr role="row"><td class="confluenceTd" style="width: 127px;">ne

</td><td class="confluenceTd" style="width: 664px;">not equal

</td></tr><tr role="row"><td class="confluenceTd" style="width: 127px;">co

</td><td class="confluenceTd" style="width: 664px;">contains

</td></tr><tr role="row"><td class="confluenceTd" style="width: 127px;">sw

</td><td class="confluenceTd" style="width: 664px;">starts with

</td></tr><tr role="row"><td class="confluenceTd" style="width: 127px;">ew

</td><td class="confluenceTd" style="width: 664px;">ends with

</td></tr><tr role="row"><td class="confluenceTd" style="width: 127px;">pr

</td><td class="confluenceTd" style="width: 664px;">present (has value)

</td></tr><tr role="row"><td class="confluenceTd" style="width: 127px;">gt

</td><td class="confluenceTd" style="width: 664px;">greater than

</td></tr><tr role="row"><td class="confluenceTd" style="width: 127px;">ge

</td><td class="confluenceTd" style="width: 664px;">greater than or equal to

</td></tr><tr role="row"><td class="confluenceTd" style="width: 127px;">lt

</td><td class="confluenceTd" style="width: 664px;">less than

</td></tr><tr role="row"><td class="confluenceTd" style="width: 127px;">le

</td><td class="confluenceTd" style="width: 664px;">less than or equal to

</td></tr></tbody></table>

### Logical operators

<table class="confluenceTable tablesorter tablesorter-default stickyTableHeaders" id="bkmrk-operator-description-0" role="grid"><thead class="tableFloatingHeaderOriginal"><tr class="tablesorter-headerRow" role="row"><th aria-disabled="false" aria-label="Operator: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="0" role="columnheader" scope="col" style="width: 122px;" tabindex="0">**Operator**

</th><th aria-disabled="false" aria-label="Description: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="1" role="columnheader" scope="col" style="width: 675px;" tabindex="0">**Description**

</th></tr></thead><tbody aria-live="polite" aria-relevant="all"><tr role="row"><td class="confluenceTd" colspan="1" style="width: 122px;">and

</td><td class="confluenceTd" colspan="1" style="width: 675px;">Logical "and"

</td></tr><tr role="row"><td class="confluenceTd" colspan="1" style="width: 122px;">or

</td><td class="confluenceTd" colspan="1" style="width: 675px;">Logical "or"

</td></tr><tr role="row"><td class="confluenceTd" colspan="1" style="width: 122px;">not

</td><td class="confluenceTd" colspan="1" style="width: 675px;">"Not" function

</td></tr></tbody></table>

### Grouping operators

<table class="confluenceTable tablesorter tablesorter-default stickyTableHeaders" id="bkmrk-operator-description-1" role="grid"><thead class="tableFloatingHeaderOriginal"><tr class="tablesorter-headerRow" role="row"><th aria-disabled="false" aria-label="Operator: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="0" role="columnheader" scope="col" style="width: 121px;" tabindex="0">**Operator**

</th><th aria-disabled="false" aria-label="Description: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="1" role="columnheader" scope="col" style="width: 681px;" tabindex="0">**Description**

</th></tr></thead><tbody aria-live="polite" aria-relevant="all"><tr role="row"><td class="confluenceTd" colspan="1" style="width: 121px;">( )

</td><td class="confluenceTd" colspan="1" style="width: 681px;">Precedence grouping

</td></tr><tr role="row"><td class="confluenceTd" colspan="1" style="width: 121px;">\[ \]

</td><td class="confluenceTd" colspan="1" style="width: 681px;">Complex attribute filter group

</td></tr></tbody></table>

### Data values

<table class="confluenceTable tablesorter tablesorter-default stickyTableHeaders" id="bkmrk-data-type-value-numb" role="grid"><thead class="tableFloatingHeaderOriginal"><tr class="tablesorter-headerRow" role="row"><th aria-disabled="false" aria-label="Data type: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="0" role="columnheader" scope="col" style="width: 110px;" tabindex="0">**Data type**

</th><th aria-disabled="false" aria-label="Value: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="1" role="columnheader" scope="col" style="width: 692px;" tabindex="0">**Value**

</th></tr></thead><tbody aria-live="polite" aria-relevant="all"><tr role="row"><td class="confluenceTd" colspan="1" style="width: 110px;">Numbers</td><td class="confluenceTd" colspan="1" style="width: 692px;">Use the value without ", for example 1234</td></tr><tr role="row"><td class="confluenceTd" colspan="1" style="width: 110px;">Text</td><td class="confluenceTd" colspan="1" style="width: 692px;">Use the value within ", for example "John"</td></tr><tr role="row"><td class="confluenceTd" colspan="1" style="width: 110px;">Date</td><td class="confluenceTd" colspan="1" style="width: 692px;">Use the value within " with an ISO format, for example "2011-05-13T04:42:34Z"

</td></tr><tr role="row"><td class="confluenceTd" colspan="1" style="width: 110px;">Boolean</td><td class="confluenceTd" colspan="1" style="width: 692px;">Use \[ true | false \] (without ")</td></tr><tr role="row"><td class="confluenceTd" colspan="1" style="width: 110px;">Null</td><td class="confluenceTd" colspan="1" style="width: 692px;">Use \[ null \] (without ")</td></tr></tbody></table>

### Filter examples

```shell
filter=userName eq "admin"
filter=userName ne "admin"
filter=userName co "ad"
filter=userName sw "a"
filter=userName ew "n"
filter=userName pr
filter=id gt 1
filter=id ge 60
filter=id lt 1000
filter=id le 1188
filter=consoleProperties.id eq 229
filter=createdDate gt "2011-05-13T04:42:34Z"
filter=id eq 60 and id eq 1188
filter=id eq 60 or id eq 1188
filter=firstName eq "Admin" and id eq 60
filter=firstName eq "Admin" or id eq 61
filter=primaryGroup eq "world" and (firstName co "John” or lastName co "Smith")
filter=userName co "i" and (userName co "a" or userName co "s")
filter=id eq 60 and (userName co "a" and consoleProperties.id eq 229)
```

### Sorting

Short is optional .

<table class="confluenceTable tablesorter tablesorter-default stickyTableHeaders" id="bkmrk-parameter-descriptio" role="grid"><thead class="tableFloatingHeaderOriginal"><tr class="tablesorter-headerRow" role="row" style="height: 35px;"><th aria-disabled="false" aria-label="Data type: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="0" role="columnheader" scope="col" style="width: 110px; height: 35px;" tabindex="0">**Parameter**

</th><th aria-disabled="false" aria-label="Value: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="1" role="columnheader" scope="col" style="width: 692px; height: 35px;" tabindex="0">**Description**

</th></tr></thead><tbody aria-live="polite" aria-relevant="all"><tr role="row" style="height: 29px;"><td class="confluenceTd" colspan="1" style="width: 110px; height: 29px;">sortBy</td><td class="confluenceTd" colspan="1" style="width: 692px; height: 29px;">Specifies the attribute whose value will be used to order ther returned responses.</td></tr><tr role="row" style="height: 29px;"><td class="confluenceTd" colspan="1" style="width: 110px; height: 29px;">sortOrder</td><td class="confluenceTd" colspan="1" style="width: 692px; height: 29px;">Allowed values are "ascending" and "descending".

If sortBy is provided, and sortOrder is nos provided, sortOrder will be "ascending" by default.

</td></tr></tbody></table>

Example:

```XML
http://<your-server>/webservice/scim2/v1/User?sortBy=lastName&sortOrder=descending
```

### Pagination

<table class="confluenceTable tablesorter tablesorter-default stickyTableHeaders" id="bkmrk-parameter-descriptio-0" role="grid" style="height: 93px;"><thead class="tableFloatingHeaderOriginal"><tr class="tablesorter-headerRow" role="row" style="height: 35px;"><th aria-disabled="false" aria-label="Data type: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="0" role="columnheader" scope="col" style="width: 110px; height: 35px;" tabindex="0">**Parameter**

</th><th aria-disabled="false" aria-label="Value: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="1" role="columnheader" scope="col" style="width: 692px; height: 35px;" tabindex="0">**Description**

</th></tr></thead><tbody aria-live="polite" aria-relevant="all"><tr role="row" style="height: 29px;"><td class="confluenceTd" colspan="1" style="width: 110px; height: 29px;">startIndex</td><td class="confluenceTd" colspan="1" style="width: 692px; height: 29px;">Index of the first query result. Default 1</td></tr><tr role="row" style="height: 29px;"><td class="confluenceTd" colspan="1" style="width: 110px; height: 29px;">count</td><td class="confluenceTd" colspan="1" style="width: 692px; height: 29px;">Maximun numer of query results per page</td></tr></tbody></table>

Example:

```XML
http://<your-server>/webservice/scim2/v1/User?startIndex=1&count=10
```

```JSON
{
     "totalResults":100,
     "itemsPerPage":10,
     "startIndex":1,
     "schemas":["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
     "Resources":[{
       ...
     }]
}
```