Mutations
Your project endpoint exposes GraphQL mutations you can use to modify the contents of your project. The mutations API allows you to interact with content ouside of the GraphCMS UI using GraphQL.
It's not recommended you enable Public API Permissions for mutations, but instead use a Permanent Auth Token for mutating data.
Auto-generated mutations
When a new model is added to your project, so are custom GraphQL mutations.
For example, if you created a Product
model, these mutations would also be generated inside your GraphQL schema:
createProduct
updateProduct
deleteProduct
upsertProduct
publishProduct
unpublishProduct
updateManyProductsConnection
deleteManyProductsConnection
publishManyProductsConnection
unpublishManyProductsConnection
All of these mutations accept input types that are specific to your projects GraphQL schema.
Create entries
When creating new content entries, the data
argument will have an associated input type that is specific to your content model.
For example, if your project contains the model Product
, you will have:
Mutation | Argument | Input Type |
---|---|---|
createProduct | data | ProductCreateInput! |
The id
is a default system field that is automatically generated for all new entries.
Update entries
When updating single content entry, you must specify the unique where
criteria of which you want to update, as well as the new data
.
For example, if your project contains the model Product
, you will have:
Argument | Input Type |
---|---|
where | ProductWhereUniqueInput! |
data | ProductUpdateInput! |
You can also update any unique field on your model.
Upsert entries
The upsert mutation allows you to create, or update a content entry based on whether the unique where
values exist.
For example, if your project contains the model Product
, you will have:
Argument | Input Type |
---|---|
where | ProductWhereUniqueInput! |
upsert | ProductUpsertInput! |
upsert > create | ProductCreateInput! |
upsert > update | ProductUpdateInput! |
You must provide both create
, and update
to the upsert
argument.
Delete entries
Similar to updating, and upserting entries, you can specify using where
the entries you want to delete.
For example, if your project contains the model Product
, you will have:
Argument | Input Type |
---|---|
where | ProductWhereUniqueInput! |
Nested mutations
create
: Create and relate entriesconnect
: Connect additional existing entries by unique fieldupdate
: Update the connected entriesupsert
: Create or update connected entriesdisconnect
: Disconnect connected relations by unique fielddelete
: Delete all connected entriesset
: Override all connected entries
Create
Update
Insert at position
When inserting related entries, you can connect
entries at a given position. The position of entries reflects that fetching relations.
The position
input accepts the following values:
Field | Type | Definition |
---|---|---|
before | ID | The ID of the entry you want to insert before |
after | ID | The ID of the entry you want to insert after |
start | Boolean | Set to true if you want to insert at the start |
end | Boolean | Set to true if you want to insert at the end |
You must only provide one of these values.
Before
mutation {updateAuthor(where: { id: "..." }data: { posts: { connect: { position: { before: "..." } } } }) {id}}
After
mutation {updateAuthor(where: { id: "..." }data: { posts: { connect: { position: { after: "..." } } } }) {id}}
Start
mutation {updateAuthor(where: { id: "..." }data: { posts: { connect: { position: { start: true } } } }) {id}}
End
mutation {updateAuthor(where: { id: "..." }data: { posts: { connect: { position: { end: true } } } }) {id}}
Publishing content mutations
GraphCMS automatically generates publish, and unpublish mutations for each of your content models, including the asset model.
Learn more about publishing and unpublishing content.
Batch mutations
GraphCMS supports batch mutations that can be applied to "many" entries at once. You may wish to update, or delete many entries at once that fit given criteria.
Batch mutations comply with the Relay connection type specification.
Update many
To update many entries at once, you must use the updateMany[Model]Connection
mutation. You can use where, or pagination filters to set the criteria you wish to update.
Argument | Input Type | Description |
---|---|---|
where | ProductManyWhereInput | Filtering criteria for entries you want to update. |
data | CreateInput! | An object that specifies the data you'd like to update matching entries with. |
first | Int | Seek forwards from end of result set. |
last | Int | Seek backwards from start of result set. |
skip | Int | Skip result set by given amount. |
before | ID | Seek backwards before specific ID. |
after | ID | Seeks forwards after specific ID. |
If you do not pass any filters, then the first 100 entries will be updated. See Pagination for updating pages.
For example, let's update all products where featured: true
, to be featured: false
.
Delete many
To delete many entries at once, you must use the deleteMany[Model]Connection
mutation. You can use where, or pagination filters to set the criteria you wish to delete.
Argument | Input Type | Description |
---|---|---|
where | ProductManyWhereInput | Filtering criteria for entries you want to delete. |
first | Int | Seek forwards from end of result set. |
last | Int | Seek backwards from start of result set. |
skip | Int | Skip result set by given amount. |
before | ID | Seek backwards before specific ID. |
after | ID | Seeks forwards after specific ID. |
If you do not pass any filters, then the first 100 entries will be deleted. See Pagination for updating pages.
Publish many
Just like you can publish content, you can also batch publish.
Argument | Input Type | Description |
---|---|---|
where | ProductManyWhereInput | Filtering criteria finding entries. |
from | Stage = DRAFT | The content stage to find entries from. |
to | [Stage!]! = [PUBLISHED] | The target published content stage. |
first | Int | Seek forwards from end of result set. |
last | Int | Seek backwards from start of result set. |
skip | Int | Skip result set by given amount. |
before | ID | Seek backwards before specific ID. |
after | ID | Seeks forwards after specific ID. |
For example, we could publish the first 5 products to the PUBLISHED
stage.
Unpublish many
Just like you can batch publish, you can also batch unpublish.
Argument | Input Type | Description |
---|---|---|
where | ProductManyWhereInput | Filtering criteria for entries you want to find. |
stage | Stage = DRAFT | The content stage to find entries in. |
to | [Stage!]! = [PUBLISHED] | The target published content stage. |
first | Int | Seek forwards from end of result set. |
last | Int | Seek backwards from start of result set. |
skip | Int | Skip result set by given amount. |
before | ID | Seek backwards before specific ID. |
after | ID | Seeks forwards after specific ID. |
Localized content mutations
Depending on whether or not you have localized fields in your schema, you will be able to mutate each of the localized content entries.
Learn more about mutating localized content.