Release Notes

Release Notes

Every Core dna product, release by release, newest first. Each product ships on its own schedule.

Platform 2026.9.1

What’s new in Core dna Platform 2026.9.1

Multiple Custom Field Search and Bug Fixes

The API, GraphQL and template queries can now filter records by several custom fields at once. API requests with invalid input return a 422 that explains the problem instead of a server error.

Key highlights

  • Filter by several custom fields: API, GraphQL and template queries return the records that match every custom field in the filter.
  • Clearer API errors: a request the API cannot accept returns a 422 with a message that names the problem, instead of a server error.

Changes in behaviour

  • API errors: a request the API rejects as invalid input now returns HTTP 422 with a JSON message, on every route and in GraphQL, where it returned a 500 server error before. An integration that retries on 5xx responses now gets the 422 at once and should log or show the message instead of retrying.
  • customFields and numbered lists in REST requests: a list request that already sent customFields[…] or a numbered list such as tags[0][name]=… used to get the unfiltered list. It is now filtered, and customFields on pages, blog posts, custom entity records and orders, which have no custom fields, returns a 422.
  • Job conditions: a condition that uses customFields or a numbered list now fails the job run with "Criteria groups and the customFields filter are not supported in hook conditions", and none of its branches run. Before, such a condition never matched, or matched every record when negated, without an error.

Filter records by several custom fields

A list request can now name several custom fields in customFields, and only records that match every one of them are returned. The filter works in REST list requests, in GraphQL and with $_query in templates, on every record type that has custom fields, such as products and product categories, categories and tags, menus and menu elements, people, users, forms, invoices and books.

These are the elements of menu 1 that are not mega menus and use the coffee icon:

Menu elements that match two custom fields
GET /cdna-api/menus/elements/1?customFields[isMegaMenu]=0&customFields[icon]=coffee HTTP/1.1
Host: hub.coredna.com
Authorization: Bearer YOUR_ACCESS_TOKEN
Accept: application/json

In GraphQL the fields go in the filter argument, filter: {customFields: {isMegaMenu: "0", icon: "coffee"}}, and in a template $_query takes the same pairs under a customFields key.

Comparisons

Values are compared as text. A prefix on the field name changes the comparison, with the same prefixes other filters take:

  • customFields[!icon]=coffee: records that have an icon other than coffee.
  • customFields[%icon]=cof: an icon that contains "cof".
  • customFields[|icon]=coffee,tea: either value.
  • customFields[>rank]=5 and <: compared as text, so "10" comes before "9".

A ! in front of customFields excludes the match instead: !customFields[icon]=coffee returns every record whose icon is not coffee, including records with no icon. Image and file custom fields do not hold text, so they cannot be filtered this way.

Lists of conditions on related records

A related list, such as tags, also accepts numbered conditions. Each condition has to be met by one related record, and different conditions can be met by different records: tags[0][name]=summer&tags[1][name]=sale returns records tagged both summer and sale. In GraphQL the conditions are an array, tags: [{name: "summer"}, {name: "sale"}]. With ! in front, !tags[0][name]=summer returns records with no tag named summer.

Limits

  • A request can hold at most 10 of these conditions: each custom field in customFields and each numbered condition counts as one.
  • A numbered condition can hold at most 20 field comparisons.
  • They cannot be used inside or next to an OR.
  • They work in API requests and in $_query, not in the query string of a website page.

A filter that breaks one of these rules returns a 422 whose message names the rule.

Other improvements and bug fixes

  • Fixed an issue where signing in with Core dna, Google, Facebook or Microsoft ended on an error page for people who already had an account, on sites where public visitors are not allowed to read users or people.
  • Fixed an issue where a URL menu element with no URL left the Target column of the Menu Elements list blank for every element on that page, instead of showing a dash for that one element.
  • Fixed an issue where a list filter sent as an array of values, such as |id[]=17&|id[]=18, returned a server error instead of the matching records.
Go deeper

Was this page helpful?

Your answer goes to the docs team.