# Changelog

All the changes to the Content Delivery API:

## 2022/06/10 - Add `RecordInterface` and `FileFieldInterface` interfaces

-   Every GraphQL type related records/blocks now implement the `RecordInterface` interface;
    
-   Every GraphQL type related to uploads, single asset or asset gallery fields now implements the `FileFieldInterface` interface.
    

## 2021/04/12 - Add `isBlank` filter to text fields

To have a simple way to filter empty texts, especially when using a structured text field, we have added a `isBlank` filter to the textual fields.

-   **Changes to item fields**
    
    -   **Single-line text field** Added boolean filter `isBlank`
        
    -   **Multiple-line text field** Added boolean filter `isBlank`
        
    -   **Structured text field** Added boolean filter `isBlank`
        

## 2020/05/11 - Changes in GraphQL filtering

To make the API more consistent and prevent ambiguous results we have changed how filtering works in some edge cases.

This is a big changeset, but should only affect edge cases and the minority of usages, following all the details.

-   **Changes to item fields**
    
    -   **Boolean field**Filtering fields with `{eq: null}` will return an error message in response payload. Before this change, the filter would have returned always an empty array. You can still retrieve fields with `null` value using `{eq: false}`
        
    -   **Color field**Filtering fields with `{exists: null}` will return an error message in response payload. Before this change, the filter would have returned the same result as `{exists: false}`. You can use `{exists: false}` from now on.
        
    -   **DateTime field**Filtering fields with, for instance `{neq: "2020-04-09T00:00:00+02:00"}` will return *also* items with `null` values. Before this change, the filter would have returned only for `not null` values different from `2020-04-09T00:00:00+02:00`.
        
    -   **Date field**Filtering fields with, for instance `{neq: "2020-04-09"}` will return *also* items with `null` values. Before this change, the filter would have returned only for `not null` values different from `2020-04-09`.
        
    -   **Upload field**
        
        -   Filtering fields with `{eq: null}` now has the same effect of using `{exists: false}`. Before this change, the filter would have returned always an empty array.
            
        -   Filtering fields with `{neq: null}` now has the same effect of using `{exists: true}`. Before this change, the filter would have returned always an empty array.
            
        -   Filtering fields with, for instance `{neq: "123456"}` will return *also* items with `null` values. Before this change, the filter would have returned only for items with `not null` uploads ids different from `123456`.
            
        -   Filtering fields with `{exists: null}` will return an error message in response payload. Before this change, the filter would have returned the same result as `{exists: false}`. Please, use `{exists: false}` instead.
            
        -   **Important**: Filtering fields with `{in: []}` will return an empty collection. Before this change, the request would have returned all items.
            
        -   **Important**: Filtering fields with `{notIn: []}` will return all items. Before this change, the request would have returned an empty collection.
            
        -   **Important**: Filtering fields with, for instance `{notIn: ["123456"]}` will return all items having values different from `123456` **OR** equal to `null`. Before this change, the request would have returned only items having `not null`values different from `123456`.
            
    -   **Float fields**
        
        -   Filtering fields with, for instance, `{neq: "2.42"}` will return *also* items with `null` values. Before this change, the filter would have returned only for items with `not null` values different from `2.42`.
            
        -   Filtering fields with `{exists: null}` will return an error message in response payload. Before this change, the filter would have returned the same result as `{exists: false}`. Please, use `{exists: false}` instead.
            
    -   **Gallery**Filtering fields with `{exists: null}` will return an error message in response payload. Before this change, the filter would have returned the same result as `{exists: false}`. Please, use `{exists: false}` instead.
        
    -   **Integer**
        
        -   Filtering fields with, for instance, `{neq: "5"}` now will return *also* items with `null` values. Before this change, the filter would have returned only for items with `not null` values different from `5`.
            
        -   Filtering fields with `{exists: null}` will return an error message in response payload. Before this change, the filter would have returned the same result as `{exists: false}`. Please, use `{exists: false}` instead.
            
    -   **JSON**Filtering fields with `{exists: null}` will return an error message in response payload. Before this change, the filter would have returned the same result as `{exists: false}`. Please, use `{exists: false}` instead.
        
    -   **Position (geo points)**Filtering fields with `{exists: null}` will return an error message in response payload. Before this change, the filter would have returned the same result as `{exists: false}`. Please, use `{exists: false}` instead.
        
    -   **Link**
        
        -   Filtering fields with `{exists: null}` will return an error message in response payload. Before this change, the filter would have returned the same result as `{exists: false}`. Please, use `{exists: false}` instead.
            
        -   Filtering fields with `{eq: null}` now has the same effect of using `{exists: false}`. Before this change, the filter would have returned always an empty array.
            
        -   Filtering fields with `{neq: null}` now has the same effect of using `{exists: true}`. Before this change, the filter would have returned always an empty array.
            
        -   Filtering fields with, for instance, `{neq: "123456"}` will return *also* items with `null` values. Before this change, the filter would have returned only for items with `not null` values different from `123456`.
            
        -   **Important**: Filtering fields with `{in: []}` will return an empty collection. Before this change, the request would have returned all items.
            
        -   **Important**: Filtering fields with `{notIn: []}` will return all items. Before this change, the request would have returned an empty collection.
            
        -   Filtering fields with, for instance `{notIn: ["123456"]}` will return all items having values different from `123456` **OR** equal to `null`. Before this change, the request would have returned only items having `not null`values different from `123456`.
            
    -   **Links**Filtering fields with `{exists: null}` will return an error message in response payload. Before this change, the filter would have returned the same result as `{exists: false}`. Please, use `{exists: false}` instead.
        
    -   **Seo**Filtering fields with `{exists: null}` will return an error message in response payload. Before this change, the filter would have returned the same result as `{exists: false}`. Please, use `{exists: false}` instead.
        
    -   **Slug**
        
        -   Filtering fields with, for instance, `{neq: "foobar"}` now will return *also* items with `null` values. Before this change, the filter would have returned only for items with `not null` values different from `foobar`.
            
        -   Filtering fields with, for instance `{notIn: ["foobar"]}` will return all items having values different from `foobar` **OR** equal to `null`. Before this change, the request would have returned only items having `not null`values different from `foobar`.
            
    -   **String**
        
        -   Filtering fields with `{exists: null}` will return an error message in response payload. Before this change, the filter would have returned the same result as `{exists: false}`. Please, use `{exists: false}` instead.
            
        -   Filtering fields with `{eq: null}` now has the same effect of using `{exists: false}`. Before this change, the filter would have returned always an empty array.
            
        -   Filtering fields with `{neq: null}` now has the same effect of using `{exists: true}`. Before this change, the filter would have returned always an empty array.
            
        -   Filtering fields with, for instance, `{neq: "foobar"}` will return *also* items with `null` values. Before this change, the filter would have returned only for items with `not null` values different from `foobar`.
            
        -   Filtering fields with, for instance, `{notMatches: { pattern: "foobar"}}` will return *also* items with `null` values. Before this change, the filter would have returned only for items with `not null` values different from `foobar`.
            
        -   Filtering fields with, for instance `{notIn: ["foobar"]}` will return all items having values different from `foobar` **OR** equal to `null`. Before this change, the request would have returned only items having `not null`values different from `foobar`.
            
    -   **Text**
        
        -   Filtering fields with `{exists: null}` will return an error message in response payload. Before this change, the filter would have returned the same result as `{exists: false}`. Please, use `{exists: false}` instead.
            
        -   Filtering fields with, for instance, `{notMatches: { pattern: "foobar"}}` will return *also* items with `null` values. Before this change, the filter would have returned only for items with `not null` values different from `foobar`.
            
    -   **Video**Filtering fields with `{exists: null}` will return an error message in response payload. Before this change, the filter would have returned the same result as `{exists: false}`. Please, use `{exists: false}` instead.
        
-   **Changes to item metas**
    
    -   **ID**
        
        -   Filtering fields with `{eq: null}` will return an error message in response payload. Before this change, the filter would have returned an empty result.
            
        -   Filtering fields with `{neq: null}` will return an error message in response payload. Before this change, the filter would have returned an empty result.
            
    -   **Parent**
        
        -   Filtering fields with `{exists: null}` will return an error message in response payload. Before this change, the filter would have returned the same result as `{exists: false}`. Please, use `{exists: false}` instead.
            
        -   Filtering fields with `{eq: null}` now has the same effect of using `{exists: false}`. Before this change, the filter would have returned always an empty array.
            
    -   **Position**Filtering fields with, for instance, `{neq: 3}` will return *also* items with `null` values. Before this change, the filter would have returned only for items with `not null` values different from `3`.
        
    -   **Status**
        
        -   Filtering fields with `{eq: null}` will return an error message in response payload. Before this change, the filter would have returned an empty result.
            
        -   Filtering fields with `{neq: null}` will return an error message in response payload. Before this change, the filter would have returned an empty result.
            
-   **Changes to Upload fields**
    
    -   **Alt, Title**
        
        -   Added `exist` filter.
            
        -   Filtering fields with `{eq: null}` now has the same effect of using `{exists: false}`. Before this change, the filter would have returned always an empty array.
            
        -   Filtering fields with `{neq: null}` now has the same effect of using `{exists: true}`. Before this change, the filter would have returned always an empty array.
            
        -   Filtering fields with, for instance, `{neq: "foobar"}` will return *also* items with `null` values. Before this change, the filter would have returned only for items with `not null` values different from `foobar`.
            
        -   Filtering fields with, for instance, `{notMatches: { pattern: "foobar"}}` will return *also* items with `null` values. Before this change, the filter would have returned only for items with `not null` values different from `foobar`.
            
        -   Filtering fields with, for instance `{notIn: ["foobar"]}` will return all items having values different from `foobar` **OR** equal to `null`. Before this change, the request would have returned only items having `not null` values different from `foobar`.
            
    -   **Author**
        
        -   Filtering fields with, for instance, `{notMatches: { pattern: "foobar"}}` will return *also* items with `null` values. Before this change, the filter would have returned only for items with `not null` values different from `foobar`.
            
        -   Filtering fields with `{exists: null}` will return an error message in response payload. Before this change, the filter would have returned the same result as `{exists: false}`. Please, use `{exists: false}` instead.
            
    -   **Copyright**
        
        -   Filtering fields with, for instance, `{notMatches: { pattern: "foobar"}}` will return *also* items with `null` values. Before this change, the filter would have returned only for items with `not null` values different from `foobar`.
            
        -   Filtering fields with `{exists: null}` will return an error message in response payload. Before this change, the filter would have returned the same result as `{exists: false}`. Please, use `{exists: false}` instead.
            
    -   **Format**Filtering fields with `{eq: null}`, `{neq: null}`, will now return an error message in response payload. Before this change, the request would have return an empy collection.
        
    -   **Height, Width**Filtering fields with, for instance, `{neq: "500"}` will return *also* items with `null` values. Before this change, the filter would have returned only for items with `not null` values different from `500`.
        
    -   **ID**Filtering fields with `{eq: null}`, `{neq: null}`, will now return an error message in response payload. Before this change, the request would have return an empy collection.
        
    -   **InUse**Filtering fields with `{eq: null}` will return an error message in response payload. Before this change, the filter would have returned the same result as `{eq: false}`. You can use `{eq: false}` from now on.
        
    -   **MimeType**Filtering fields with `{eq: null}`, `{neq: null}`, will now return an error message in response payload. Before this change, the request would have return an empy collection.
        
    -   **Notes**
        
        -   Filtering fields with, for instance, `{notMatches: { pattern: "foobar"}}` will return *also* items with `null` values. Before this change, the filter would have returned only for items with `not null` values different from `foobar`.
            
        -   Filtering fields with `{exists: null}` will return an error message in response payload. Before this change, the filter would have returned the same result as `{exists: false}`. Please, use `{exists: false}` instead.
            
    -   **Size**Filtering fields with `{eq: null}`, `{neq: null}`, will now return an error message in response payload. Before this change, the request would have return an empy collection.
        
    -   **SmartTags, Tags**Filtering fields with `{contains: null}`, will now return an error message in response payload. Before this change, the request would have return an empy collection.

## Related content in "Content Delivery API"

- [Content Delivery API Overview](https://www.datocms.com/docs/content-delivery-api.md)

- [Your first request](https://www.datocms.com/docs/content-delivery-api/your-first-request.md)
- [How to fetch records](https://www.datocms.com/docs/content-delivery-api/how-to-fetch-records.md)

- [API headers (environments, drafts, strict mode, cache tags, content link)](https://www.datocms.com/docs/content-delivery-api/api-endpoints.md)
- [Authentication and permissions](https://www.datocms.com/docs/content-delivery-api/authentication.md)

- [Error codes & handling failures (CDA)](https://www.datocms.com/docs/content-delivery-api/errors.md)
- [Technical Limits (CDA)](https://www.datocms.com/docs/content-delivery-api/technical-limits.md)

- [Complexity](https://www.datocms.com/docs/content-delivery-api/complexity.md)
- [Custom Scalar Types](https://www.datocms.com/docs/content-delivery-api/custom-scalar-types.md)

- [Pagination](https://www.datocms.com/docs/content-delivery-api/pagination.md)
- [Filtering records](https://www.datocms.com/docs/content-delivery-api/filtering-records.md)

- [Deep Filtering](https://www.datocms.com/docs/content-delivery-api/deep-filtering.md)
- [Ordering records](https://www.datocms.com/docs/content-delivery-api/ordering-records.md)

- [Localization](https://www.datocms.com/docs/content-delivery-api/localization.md)
- [Direct vs. Inverse relationships](https://www.datocms.com/docs/content-delivery-api/inverse-relationships.md)

- [Modular content fields](https://www.datocms.com/docs/content-delivery-api/modular-content-fields.md)
- [Structured text fields](https://www.datocms.com/docs/content-delivery-api/structured-text-fields.md)

- [Hierarchical sorting (Tree-like collections)](https://www.datocms.com/docs/content-delivery-api/hierarchical-sorting.md)
- [Images and videos](https://www.datocms.com/docs/content-delivery-api/images-and-videos.md)

- [Filtering uploads](https://www.datocms.com/docs/content-delivery-api/filtering-uploads.md)
- [SEO and favicon](https://www.datocms.com/docs/content-delivery-api/seo-and-favicon.md)

- [Meta fields](https://www.datocms.com/docs/content-delivery-api/meta-fields.md)
- [Cache Tags](https://www.datocms.com/docs/content-delivery-api/cache-tags.md)

- [Changelog](https://www.datocms.com/docs/content-delivery-api/changelog.md)