# Metadata Filtering

To filter by object's metadata which is stored as JSON a query parameter with `metadata` prefix must be sent in the URL. Here are some examples of how this filtering works:

### Filter by whole metadata value

Query param: `metadata={"key1":"value1"}`

Response:

```json
[
    ...
    "metadata": {
        "key1": "value1"
    }
]
```

### Filter by string key value

Query param: `metadata__key1="value1"`

Response:

```json
[
    {
        ...
        "metadata": {
            "key1": "value1"
        }
    },
    {
        ...
        "metadata": {
            "key1": "value1",
            "key2": "value2"
        }
    }
]
```

### Filter by number key value

Query param: `metadata__key1=123`

Response:

```json
[
    {
        ...
        "metadata": {
            "key1": 123
        }
    }
]
```

### Filter by array key value

Query param: `metadata__key1=[1, 2, 3]`

Response:

```json
[
    {
        ...
        "metadata": {
            "key1": [
                1,
                2,
                3
            ]
        }
    }
]
```

### Filter by object key value

Query param: `metadata__key1={"key2": "value2"}`

Response:

```json
[
    {
        ...
        "metadata": {
            "key1": {
                "key2": "value2"
            }
        }
    }
]
```

### Filter by boolen key value

Query param: `metadata__key1=true`

Response:

```json
[
    {
        ...
        "metadata": {
            "key1": true
        }
    }
]
```

### Filter by null key value

Query param: `metadata__key1=null`

Response:

```json
[
    {
        ...
        "metadata": {
            "key1": null
        }
    }
]
```

### Filter by nested key value

Query param: `metadata__key1__key2__key3="value3"`

Response:

```json
[
    {
        ...
        "metadata": {
            "key1": {
                "key2": {
                    "key3": "value3"
                }
            }
        }
    }
]
```

### Filter by array item

Query param: `metadata__key1__0=1`

Response:

```json
[
    {
        ...
        "metadata": {
            "key1": [
                1,
                2,
                3
            ]
        }
    }
]
```

### Filter by array containing item

Query param: `metadata__key1__contains=1`

Response:

```json
[
    {
        "metadata": {
            "key1": [
                1,
                2,
                3
            ]
        }
    },
    {
        "metadata": {
            "key1": [
                3,
                2,
                1
            ]
        }
    }
]
```
