GraphQL API

Craft Pro provides an autogenerated GraphQL API for your content, which you can query to pull your content into separate applications, such as single-page apps (SPAs) or static site generators.

# Getting Started

Before you begin, make sure that you are running Craft 3.3 or later, and you’ve got the Pro edition installed.

# Create Your API Endpoint

The first step to adding a GraphQL API to your project is to set up a public endpoint for it.

To do that, create a URL rule from config/routes.php that points to the graphql/api controller action. For example, the following URL rule would cause /api requests to route to the GraphQL API:

return [
    'api' => 'graphql/api',
    // ...
];

You can verify that your endpoint is configured correctly, try sending a {ping} query to it.

curl -H "Content-Type: application/graphql" -d '{ping}' http://my-project.test/api

(Replace http://my-project.test/api with the actual URL to your endpoint.)

If that comes back with the following JSON response, then your GraphQL API is up and running!

{"data":{"ping":"pong"}}

# Define Your Schemas

Once you’ve created a GraphQL API endpoint, you need to tell Craft which content should be available from it. (No content is available by default.) You do that by defining a Schema.

Craft has two types of schemas:

  • The Public Schema defines which content should be available publicly.
  • You can also define multiple private schemas, which each have their own secret Access Token.

You can manage your schemas from the Control Panel, at GraphQL → Schemas. In addition to defining the scope of each schema, you can also give them expiration dates, or disable them.

TIP

When performing a GraphQL API request, the schema will be determined automatically based on the token that is supplied (if any). See below to learn how to do that.

# Sending API Requests

# Using GraphiQL

The easiest way to start exploring your GraphQL API is with the built-in GraphiQL IDE, which is available in the Control Panel from GraphQL → Explore.

The built-in GraphiQL IDE

# Using Another IDE

Additional GraphQL IDEs are available as well:

TIP

When you are initially exploring the API, make sure that Dev Mode is enabled so the IDE can be informed about the entire schema available to it.

# Sending Requests Manually

The GraphQL API can be queried in three ways:

  • Using a GET request, with the GraphQL query defined by a query parameter:
    curl \
      --data-urlencode "query={ping}" \
      http://craft32.test/api
    # or
    curl http://craft32.test/api?query=%7Bping%7D
    
  • Using a POST request with an application/json content type, with the GraphQL query defined by a query key:
    curl \
      -H "Content-Type: application/json" \
      -d '{"query":"{ping}"}' \
      http://my-project.test/api
    
  • Using a POST request with an application/graphql content type, with the GraphQL query defined by the raw request body:
    curl \
      -H "Content-Type: application/graphql" \
      -d '{ping}' \
      http://my-project.test/api
    

# Specifying Variables

If you need to specify any variables along with your query, then you must send request as a POST request with an application/json content type, and include a variables key in the JSON body alongside query.

curl \
    --data-urlencode "query={ping}" \
    http://craft32.test/api
  # or
  curl http://craft32.test/api?query=%7Bping%7D

# Querying a Private Schema

The Public Schema will be used by default. To query against a different schema, pass its Access Token using an Authorization header.

curl \
  -H "Content-Type: application/json" \
  -d '{
        "query": "query($id:[Int]) { entries(id: $id) { id, title } }",
        "variables": { "id": [1, 2, 3] }
      }' \
  http://my-project.test/api

# Query Reference

TIP

The actual API features will depend on what your schema allows.

# The assets query

This query is used to query for assets.

# The id argument

Narrows the query results based on the elements’ IDs.

# The uid argument

Narrows the query results based on the elements’ UIDs.

# The status argument

Narrows the query results based on the elements’ statuses.

# The archived argument

Narrows the query results to only elements that have been archived.

# The trashed argument

Narrows the query results to only elements that have been soft-deleted.

# The site argument

Determines which site(s) the elements should be queried in. Defaults to the primary site.

# The siteId argument

Determines which site(s) the elements should be queried in. Defaults to the primary site.

# The unique argument

Determines whether only elements with unique IDs should be returned by the query.

# The enabledForSite argument

Narrows the query results based on whether the elements are enabled in the site they’re being queried in, per the site argument.

# The title argument

Narrows the query results based on the elements’ titles.

# The slug argument

Narrows the query results based on the elements’ slugs.

# The uri argument

Narrows the query results based on the elements’ URIs.

# The search argument

Narrows the query results to only elements that match a search query.

# The ref argument

Narrows the query results based on a reference string.

# The fixedOrder argument

Causes the query results to be returned in the order specified by the id argument.

# The inReverse argument

Causes the query results to be returned in reverse order.

# The dateCreated argument

Narrows the query results based on the elements’ creation dates.

# The dateUpdated argument

Narrows the query results based on the elements’ last-updated dates.

# The offset argument

Sets the offset for paginated results.

# The limit argument

Sets the limit for paginated results.

# The orderBy argument

Sets the field the returned elements should be ordered by

# The volumeId argument

Narrows the query results based on the volumes the assets belong to, per the volumes’ IDs.

# The volume argument

Narrows the query results based on the volumes the assets belong to, per the volumes’ handles.

# The folderId argument

Narrows the query results based on the folders the assets belong to, per the folders’ IDs.

# The filename argument

Narrows the query results based on the assets’ filenames.

# The kind argument

Narrows the query results based on the assets’ file kinds.

# The height argument

Narrows the query results based on the assets’ image heights.

# The width argument

Narrows the query results based on the assets’ image widths.

# The size argument

Narrows the query results based on the assets’ file sizes (in bytes).

# The dateModified argument

Narrows the query results based on the assets’ files’ last-modified dates.

# The includeSubfolders argument

Broadens the query results to include assets from any of the subfolders of the folder specified by folderId.

# The entries query

This query is used to query for entries.

# The id argument

Narrows the query results based on the elements’ IDs.

# The uid argument

Narrows the query results based on the elements’ UIDs.

# The status argument

Narrows the query results based on the elements’ statuses.

# The archived argument

Narrows the query results to only elements that have been archived.

# The trashed argument

Narrows the query results to only elements that have been soft-deleted.

# The site argument

Determines which site(s) the elements should be queried in. Defaults to the primary site.

# The siteId argument

Determines which site(s) the elements should be queried in. Defaults to the primary site.

# The unique argument

Determines whether only elements with unique IDs should be returned by the query.

# The enabledForSite argument

Narrows the query results based on whether the elements are enabled in the site they’re being queried in, per the site argument.

# The title argument

Narrows the query results based on the elements’ titles.

# The slug argument

Narrows the query results based on the elements’ slugs.

# The uri argument

Narrows the query results based on the elements’ URIs.

# The search argument

Narrows the query results to only elements that match a search query.

# The ref argument

Narrows the query results based on a reference string.

# The fixedOrder argument

Causes the query results to be returned in the order specified by the id argument.

# The inReverse argument

Causes the query results to be returned in reverse order.

# The dateCreated argument

Narrows the query results based on the elements’ creation dates.

# The dateUpdated argument

Narrows the query results based on the elements’ last-updated dates.

# The offset argument

Sets the offset for paginated results.

# The limit argument

Sets the limit for paginated results.

# The orderBy argument

Sets the field the returned elements should be ordered by

# The withStructure argument

Explicitly determines whether the query should join in the structure data.

# The structureId argument

Determines which structure data should be joined into the query.

# The level argument

Narrows the query results based on the elements’ level within the structure.

# The hasDescendants argument

Narrows the query results based on whether the elements have any descendants.

# The ancestorOf argument

Narrows the query results to only elements that are ancestors of another element.

# The ancestorDist argument

Narrows the query results to only elements that are up to a certain distance away from the element specified by ancestorOf.

# The descendantOf argument

Narrows the query results to only elements that are descendants of another element.

# The descendantDist argument

Narrows the query results to only elements that are up to a certain distance away from the element specified by descendantOf.

# The leaves argument

Narrows the query results based on whether the elements are “leaves” (element with no descendants).

# The editable argument

Whether to only return entries that the user has permission to edit.

# The section argument

Narrows the query results based on the section handles the entries belong to.

# The sectionId argument

Narrows the query results based on the sections the entries belong to, per the sections’ IDs.

# The type argument

Narrows the query results based on the entries’ entry type handles.

# The typeId argument

Narrows the query results based on the entries’ entry types, per the types’ IDs.

# The authorId argument

Narrows the query results based on the entries’ authors.

# The authorGroup argument

Narrows the query results based on the user group the entries’ authors belong to.

# The postDate argument

Narrows the query results based on the entries’ post dates.

# The before argument

Narrows the query results to only entries that were posted before a certain date.

# The after argument

Narrows the query results to only entries that were posted on or after a certain date.

# The expiryDate argument

Narrows the query results based on the entries’ expiry dates.

# The globalSets query

This query is used to query for global sets.

# The id argument

Narrows the query results based on the elements’ IDs.

# The uid argument

Narrows the query results based on the elements’ UIDs.

# The status argument

Narrows the query results based on the elements’ statuses.

# The archived argument

Narrows the query results to only elements that have been archived.

# The trashed argument

Narrows the query results to only elements that have been soft-deleted.

# The site argument

Determines which site(s) the elements should be queried in. Defaults to the primary site.

# The siteId argument

Determines which site(s) the elements should be queried in. Defaults to the primary site.

# The unique argument

Determines whether only elements with unique IDs should be returned by the query.

# The enabledForSite argument

Narrows the query results based on whether the elements are enabled in the site they’re being queried in, per the site argument.

# The title argument

Narrows the query results based on the elements’ titles.

# The slug argument

Narrows the query results based on the elements’ slugs.

# The uri argument

Narrows the query results based on the elements’ URIs.

# The search argument

Narrows the query results to only elements that match a search query.

# The ref argument

Narrows the query results based on a reference string.

# The fixedOrder argument

Causes the query results to be returned in the order specified by the id argument.

# The inReverse argument

Causes the query results to be returned in reverse order.

# The dateCreated argument

Narrows the query results based on the elements’ creation dates.

# The dateUpdated argument

Narrows the query results based on the elements’ last-updated dates.

# The offset argument

Sets the offset for paginated results.

# The limit argument

Sets the limit for paginated results.

# The orderBy argument

Sets the field the returned elements should be ordered by

# The handle argument

Narrows the query results based on the global sets’ handles.

# The users query

This query is used to query for users.

# The id argument

Narrows the query results based on the elements’ IDs.

# The uid argument

Narrows the query results based on the elements’ UIDs.

# The status argument

Narrows the query results based on the elements’ statuses.

# The archived argument

Narrows the query results to only elements that have been archived.

# The trashed argument

Narrows the query results to only elements that have been soft-deleted.

# The site argument

Determines which site(s) the elements should be queried in. Defaults to the primary site.

# The siteId argument

Determines which site(s) the elements should be queried in. Defaults to the primary site.

# The unique argument

Determines whether only elements with unique IDs should be returned by the query.

# The enabledForSite argument

Narrows the query results based on whether the elements are enabled in the site they’re being queried in, per the site argument.

# The title argument

Narrows the query results based on the elements’ titles.

# The slug argument

Narrows the query results based on the elements’ slugs.

# The uri argument

Narrows the query results based on the elements’ URIs.

# The search argument

Narrows the query results to only elements that match a search query.

# The ref argument

Narrows the query results based on a reference string.

# The fixedOrder argument

Causes the query results to be returned in the order specified by the id argument.

# The inReverse argument

Causes the query results to be returned in reverse order.

# The dateCreated argument

Narrows the query results based on the elements’ creation dates.

# The dateUpdated argument

Narrows the query results based on the elements’ last-updated dates.

# The offset argument

Sets the offset for paginated results.

# The limit argument

Sets the limit for paginated results.

# The orderBy argument

Sets the field the returned elements should be ordered by

# The email argument

Narrows the query results based on the users’ email addresses.

# The username argument

Narrows the query results based on the users’ usernames.

# The firstName argument

Narrows the query results based on the users’ first names.

# The lastName argument

Narrows the query results based on the users’ last names.

# The tags query

This query is used to query for tags.

# The id argument

Narrows the query results based on the elements’ IDs.

# The uid argument

Narrows the query results based on the elements’ UIDs.

# The status argument

Narrows the query results based on the elements’ statuses.

# The archived argument

Narrows the query results to only elements that have been archived.

# The trashed argument

Narrows the query results to only elements that have been soft-deleted.

# The site argument

Determines which site(s) the elements should be queried in. Defaults to the primary site.

# The siteId argument

Determines which site(s) the elements should be queried in. Defaults to the primary site.

# The unique argument

Determines whether only elements with unique IDs should be returned by the query.

# The enabledForSite argument

Narrows the query results based on whether the elements are enabled in the site they’re being queried in, per the site argument.

# The title argument

Narrows the query results based on the elements’ titles.

# The slug argument

Narrows the query results based on the elements’ slugs.

# The uri argument

Narrows the query results based on the elements’ URIs.

# The search argument

Narrows the query results to only elements that match a search query.

# The ref argument

Narrows the query results based on a reference string.

# The fixedOrder argument

Causes the query results to be returned in the order specified by the id argument.

# The inReverse argument

Causes the query results to be returned in reverse order.

# The dateCreated argument

Narrows the query results based on the elements’ creation dates.

# The dateUpdated argument

Narrows the query results based on the elements’ last-updated dates.

# The offset argument

Sets the offset for paginated results.

# The limit argument

Sets the limit for paginated results.

# The orderBy argument

Sets the field the returned elements should be ordered by

# The group argument

Narrows the query results based on the tag groups the tags belong to per the group’s handles.

# The groupId argument

Narrows the query results based on the tag groups the tags belong to, per the groups’ IDs.

# The categories query

This query is used to query for categories.

# The id argument

Narrows the query results based on the elements’ IDs.

# The uid argument

Narrows the query results based on the elements’ UIDs.

# The status argument

Narrows the query results based on the elements’ statuses.

# The archived argument

Narrows the query results to only elements that have been archived.

# The trashed argument

Narrows the query results to only elements that have been soft-deleted.

# The site argument

Determines which site(s) the elements should be queried in. Defaults to the primary site.

# The siteId argument

Determines which site(s) the elements should be queried in. Defaults to the primary site.

# The unique argument

Determines whether only elements with unique IDs should be returned by the query.

# The enabledForSite argument

Narrows the query results based on whether the elements are enabled in the site they’re being queried in, per the site argument.

# The title argument

Narrows the query results based on the elements’ titles.

# The slug argument

Narrows the query results based on the elements’ slugs.

# The uri argument

Narrows the query results based on the elements’ URIs.

# The search argument

Narrows the query results to only elements that match a search query.

# The ref argument

Narrows the query results based on a reference string.

# The fixedOrder argument

Causes the query results to be returned in the order specified by the id argument.

# The inReverse argument

Causes the query results to be returned in reverse order.

# The dateCreated argument

Narrows the query results based on the elements’ creation dates.

# The dateUpdated argument

Narrows the query results based on the elements’ last-updated dates.

# The offset argument

Sets the offset for paginated results.

# The limit argument

Sets the limit for paginated results.

# The orderBy argument

Sets the field the returned elements should be ordered by

# The withStructure argument

Explicitly determines whether the query should join in the structure data.

# The structureId argument

Determines which structure data should be joined into the query.

# The level argument

Narrows the query results based on the elements’ level within the structure.

# The hasDescendants argument

Narrows the query results based on whether the elements have any descendants.

# The ancestorOf argument

Narrows the query results to only elements that are ancestors of another element.

# The ancestorDist argument

Narrows the query results to only elements that are up to a certain distance away from the element specified by ancestorOf.

# The descendantOf argument

Narrows the query results to only elements that are descendants of another element.

# The descendantDist argument

Narrows the query results to only elements that are up to a certain distance away from the element specified by descendantOf.

# The leaves argument

Narrows the query results based on whether the elements are “leaves” (element with no descendants).

# The editable argument

Whether to only return categories that the user has permission to edit.

# The group argument

Narrows the query results based on the category groups the categories belong to per the group’s handles.

# The groupId argument

Narrows the query results based on the category groups the categories belong to, per the groups’ IDs.

# List of available directives

Directives are not regulated by permissions and they affect how the returned data is displayed.

# The formatDateTime directive

This directive allows for formatting any date to the desired format. It can be applied to all fields, but changes anything only when applied to a DateTime field.

# The format argument

This specifies the format to use. It defaults to the Atom date time format.

# The timezone argument

The full name of the timezone, defaults to UTC. (E.g., America/New_York)

# The transform directive

This directive is used to return a URL for an asset tranform. It accepts the same arguments you would use for a transform in Craft and adds the immediately argument.

# The handle argument

The handle of the named transform to use.

# The width argument

Width for the generated transform

# The height argument

Height for the generated transform

# The mode argument

The mode to use for the generated transform.

# The position argument

The position to use when cropping, if no focal point specified.

# The interlace argument

The interlace mode to use for the transform

# The quality argument

The quality of the transform

# The format argument

The format to use for the transform

# The immediately argument

Whether the transform should be generated immediately or only when the image is requested used the generated URL

# The markdown directive

Parses the passed field value as Markdown.

# The flavor argument

The “flavor” of Markdown the input should be interpreted with. Accepts the same arguments as yii\helpers\Markdown::process().

# Pre-defined interfaces

Craft defines several interfaces to be implemented by the different GraphQL types.

# The AssetInterface interface

This is the interface implemented by all assets.

# The id field

The id of the entity

# The uid field

The uid of the entity

# The title field

The element’s title.

# The slug field

The element’s slug.

# The uri field

The element’s URI.

# The enabled field

Whether the element is enabled or not.

# The archived field

Whether the element is archived or not.

# The siteId field

The ID of the site the element is associated with.

# The searchScore field

The element’s search score, if the search parameter was used when querying for the element.

# The trashed field

Whether the element has been soft-deleted or not.

# The status field

The element's status.

# The dateCreated field

The date the element was created.

# The dateUpdated field

The date the element was last updated.

# The volumeId field

The ID of the volume that the asset belongs to.

# The folderId field

The ID of the folder that the asset belongs to.

# The filename field

The filename of the asset file.

# The extension field

The file extension for the asset file.

# The hasFocalPoint field

Whether a user-defined focal point is set on the asset.

# The focalPoint field

The focal point represented as an array with x and y keys, or null if it's not an image.

# The kind field

The file kind.

# The size field

The file size in bytes.

# The height field

The height in pixels or null if it's not an image.

# The width field

The width in pixels or null if it's not an image.

# The img field

An <img> tag based on this asset.

# The url field

The full URL of the asset. This field accepts the same fields as the transform directive.

# The mimeType field

The file’s MIME type, if it can be determined.

# The path field

The asset's path in the volume.

# The dateModified field

The date the asset file was last modified.

# The EntryInterface interface

This is the interface implemented by all entries.

# The id field

The id of the entity

# The uid field

The uid of the entity

# The title field

The element’s title.

# The slug field

The element’s slug.

# The uri field

The element’s URI.

# The enabled field

Whether the element is enabled or not.

# The archived field

Whether the element is archived or not.

# The siteId field

The ID of the site the element is associated with.

# The searchScore field

The element’s search score, if the search parameter was used when querying for the element.

# The trashed field

Whether the element has been soft-deleted or not.

# The status field

The element's status.

# The dateCreated field

The date the element was created.

# The dateUpdated field

The date the element was last updated.

# The lft field

The element’s left position within its structure.

# The rgt field

The element’s right position within its structure.

# The level field

The element’s level within its structure

# The root field

The element’s structure’s root ID

# The structureId field

The element’s structure ID.

# The sectionId field

The ID of the section that contains the entry.

# The sectionHandle field

The handle of the section that contains the entry.

# The typeId field

The ID of the entry type that contains the entry.

# The typeHandle field

The handle of the entry type that contains the entry.

# The authorId field

The ID of the author of this entry.

# The author field

The entry's author.

# The postDate field

The entry's post date.

# The expiryDate field

The expiry date of the entry.

# The children field

The entry’s children, if the section is a structure. Accepts the same arguments as the entries query.

# The parent field

The entry’s parent, if the section is a structure.

# The GlobalSetInterface interface

This is the interface implemented by all global sets.

# The id field

The id of the entity

# The uid field

The uid of the entity

# The title field

The element’s title.

# The slug field

The element’s slug.

# The uri field

The element’s URI.

# The enabled field

Whether the element is enabled or not.

# The archived field

Whether the element is archived or not.

# The siteId field

The ID of the site the element is associated with.

# The searchScore field

The element’s search score, if the search parameter was used when querying for the element.

# The trashed field

Whether the element has been soft-deleted or not.

# The status field

The element's status.

# The dateCreated field

The date the element was created.

# The dateUpdated field

The date the element was last updated.

# The name field

The name of the global set.

# The handle field

The handle of the global set.

# The MatrixBlockInterface interface

This is the interface implemented by all matrix blocks.

# The id field

The id of the entity

# The uid field

The uid of the entity

# The title field

The element’s title.

# The slug field

The element’s slug.

# The uri field

The element’s URI.

# The enabled field

Whether the element is enabled or not.

# The archived field

Whether the element is archived or not.

# The siteId field

The ID of the site the element is associated with.

# The searchScore field

The element’s search score, if the search parameter was used when querying for the element.

# The trashed field

Whether the element has been soft-deleted or not.

# The status field

The element's status.

# The dateCreated field

The date the element was created.

# The dateUpdated field

The date the element was last updated.

# The fieldId field

The ID of the field that owns the matrix block.

# The ownerId field

The ID of the element that owns the matrix block.

# The typeId field

The ID of the matrix block's type.

# The typeHandle field

The handle of the matrix block's type.

# The sortOrder field

The sort order of the matrix block within the owner element field.

# The UserInterface interface

This is the interface implemented by all users.

# The id field

The id of the entity

# The uid field

The uid of the entity

# The title field

The element’s title.

# The slug field

The element’s slug.

# The uri field

The element’s URI.

# The enabled field

Whether the element is enabled or not.

# The archived field

Whether the element is archived or not.

# The siteId field

The ID of the site the element is associated with.

# The searchScore field

The element’s search score, if the search parameter was used when querying for the element.

# The trashed field

Whether the element has been soft-deleted or not.

# The status field

The element's status.

# The dateCreated field

The date the element was created.

# The dateUpdated field

The date the element was last updated.

# The friendlyName field

The user's first name or username.

# The fullName field

The user's full name.

# The name field

The user's full name or username.

# The photo field

The user's photo.

# The preferences field

The user’s preferences.

# The preferredLanguage field

The user’s preferred language.

# The username field

The username.

# The firstName field

The user's first name.

# The lastName field

The user's last name.

# The email field

The user's email.

# The CategoryInterface interface

This is the interface implemented by all categories.

# The id field

The id of the entity

# The uid field

The uid of the entity

# The title field

The element’s title.

# The slug field

The element’s slug.

# The uri field

The element’s URI.

# The enabled field

Whether the element is enabled or not.

# The archived field

Whether the element is archived or not.

# The siteId field

The ID of the site the element is associated with.

# The searchScore field

The element’s search score, if the search parameter was used when querying for the element.

# The trashed field

Whether the element has been soft-deleted or not.

# The status field

The element's status.

# The dateCreated field

The date the element was created.

# The dateUpdated field

The date the element was last updated.

# The lft field

The element’s left position within its structure.

# The rgt field

The element’s right position within its structure.

# The level field

The element’s level within its structure

# The root field

The element’s structure’s root ID

# The structureId field

The element’s structure ID.

# The groupId field

The ID of the group that contains the category.

# The groupHandle field

The handle of the group that contains the category.

# The children field

The category’s children.

# The parent field

The category’s parent.

# The TagInterface interface

This is the interface implemented by all tags.

# The id field

The id of the entity

# The uid field

The uid of the entity

# The title field

The element’s title.

# The slug field

The element’s slug.

# The uri field

The element’s URI.

# The enabled field

Whether the element is enabled or not.

# The archived field

Whether the element is archived or not.

# The siteId field

The ID of the site the element is associated with.

# The searchScore field

The element’s search score, if the search parameter was used when querying for the element.

# The trashed field

Whether the element has been soft-deleted or not.

# The status field

The element's status.

# The dateCreated field

The date the element was created.

# The dateUpdated field

The date the element was last updated.

# The groupId field

The ID of the group that contains the tag.

# The groupHandle field

The handle of the group that contains the tag.

# Interface Implementation

A defined type exists for each specific interface implementation. For example, if a “News” section has “Article” and “Editorial” entry types, in addition to the EntryInterface interface type, two additional types would be defined the GraphQL schema, if the token used allows it: news_article_Entry and news_editorial_Entry types.

# An example query and response

# Query payload

curl \
  -H "Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/graphql" \
  -d '{entries{id}}' \
  http://my-project.test/api

# The response

{
  queryEntries (section: "news", limit: 2, orderBy: "dateCreated DESC"){
    dateCreated @formatDateTime (format: "Y-m-d")
    title
    children {
      title
    }
    ... on news_article_Entry {
      shortDescription
      featuredImage {
        url @transform (width: 300, immediately: true)
      }
    }
  }
}