# Entity Service API: CRUD operations
The Entity Service API is built on top of the the Query Engine API and uses it to perform CRUD operations on entities.
# findOne()
Finds the first entry matching the parameters.
Syntax: findOne(uid: string, id: ID, parameters: Params) ⇒ Entry
# Parameters
| Parameter | Description | Type | 
|---|---|---|
| fields | Attributes to return | String[] | 
| populate | Relations, components and dynamic zones to populate | PopulateParameter | 
# Example
const entry = await strapi.entityService.findOne('api::article.article', 1, {
  fields: ['title', 'description'],
  populate: { category: true },
});
# findMany()
Finds entries matching the parameters.
Syntax: findMany(uid: string, parameters: Params) ⇒ Entry[]
# Parameters
| Parameter | Description | Type | 
|---|---|---|
| fields | Attributes to return | String[] | 
| filters | Filters to use | FiltersParameters | 
| start | Number of entries to skip (see pagination) | Number | 
| limit | Number of entries to return (see pagination) | Number | 
| sort | Order definition | OrderByParameter | 
| populate | Relations, components and dynamic zones to populate | PopulateParameter | 
| publicationState | Publication state, can be: 
 | PublicationStateParameter | 
# Example
const entries = await strapi.entityService.findMany('api::article.article', {
  fields: ['title', 'description'],
  filters: { title: 'Hello World' },
  sort: { createdAt: 'DESC' },
  populate: { category: true },
});
# create()
Creates one entry and returns it
Syntax: create(uid: string, parameters: Params) ⇒ Entry
# Parameters
| Parameter | Description | Type | 
|---|---|---|
| fields | Attributes to return | String[] | 
| populate | Relations, components and dynamic zones to populate | PopulateParameter | 
| data | Input data | Object | 
# Example
const entry = await strapi.entityService.create('api::article.article', {
  data: {
    title: 'My Article',
  },
});
# update()
Updates one entry and returns it.
✏️ NOTE
update() only performs a partial update, so existing fields that are not included won't be replaced.
Syntax: update(uid: string, id: ID, parameters: Params) ⇒ Entry
# Parameters
| Parameter | Description | Type | 
|---|---|---|
| fields | Attributes to return | String[] | 
| populate | Relations, components and dynamic zones to populate | PopulateParameter | 
| data | Input data | object | 
# Example
const entry = await strapi.entityService.update('api::article.article', 1, {
  data: {
    title: 'xxx',
  },
});
# delete()
Deletes one entry and returns it.
Syntax: delete(uid: string, id: ID, parameters: Params) ⇒ Entry
# Parameters
| Parameter | Description | Type | 
|---|---|---|
| fields | Attributes to return | String[] | 
| populate | Relations, components and dynamic zones to populate | PopulateParameter | 
# Example
const entry = await strapi.entityService.delete('api::article.article', 1);
