# API Endpoints When you create a `Content Type` you will have a certain number of **REST API endpoints** available to interact with it. ::: warning Components don't have API endpoints ::: As an **example**, let's consider the following models: **Content Types**: - `Restaurant` (Collection Type) - `Homepage` (Single Type) **Components**: - `Opening hours` (category: `restaurant`) - `Title With Subtitle` (category: `content`) - `Image With Description` (category: `content`) --- :::: tabs ::: tab "Content Types" ### `Restaurant` Content Type | Fields | Type | Description | Options | | :------------ | :---------- | :----------------------------------- | :------------------- | | name | string | Restaurant's title | | | slug | uid | Restaurant's slug | `targetField="name"` | | cover | media | Restaurant's cover image | | | content | dynamiczone | The restaurant profile content | | | opening_hours | component | Restaurant's opening hours component | `repeatable` | --- ### `Homepage` Content Type | Fields | Type | Description | Options | | :------- | :---------- | :----------------- | :------ | | title | string | Homepage title | | | subTitle | string | Homepage sub title | | | content | dynamiczone | Homepage content | | ::: ::: tab Components ### `Opening hours` Component | Fields | Type | Description | | :----------- | :----- | :------------------ | | day_interval | string | Meta's day interval | | opening_hour | string | Meta's opening hour | | closing_hour | string | Meta's closing hour | --- ### `Title With Subtitle` Component | Fields | Type | Description | | :------- | :----- | :------------ | | title | string | The title | | subTitle | string | The sub title | --- ### `Image With Description` Component | Fields | Type | Description | | :---------- | :----- | :-------------------- | | image | media | The image file | | title | string | The image title | | description | text | The image description | ::: :::: ## Endpoints Here is the list of endpoints generated for each of your **Content Types**. :::: tabs ::: tab "Collection Type"
| Method | Path | Description | | :----- | :---------------------- | :----------------------------------- | | GET | `/{content-type}` | Get a list of {content-type} entries | | GET | `/{content-type}/:id` | Get a specific {content-type} entry | | GET | `/{content-type}/count` | Count {content-type} entries | | POST | `/{content-type}` | Create a {content-type} entry | | DELETE | `/{content-type}/:id` | Delete a {content-type} entry | | PUT | `/{content-type}/:id` | Update a {content-type} entry |
::: ::: tab "Single Type"
| Method | Path | Description | | :----- | :---------------- | :-------------------------------- | | GET | `/{content-type}` | Get a the {content-type} content | | PUT | `/{content-type}` | Update the {content-type} content | | DELETE | `/{content-type}` | Delete the {content-type} content |
::: :::: ### Here are some Content Type examples #### Single Types :::: tabs ::: tab Homepage `Homepage` **Content Type**
| Method | Path | Description | | :----- | :---------- | :-------------------------- | | GET | `/homepage` | Get the homepage content | | PUT | `/homepage` | Update the homepage content | | DELETE | `/homepage` | Delete the homepage content |
::: ::: tab Contact `Contact` **Content Type**
| Method | Path | Description | | :----- | :--------- | :------------------------- | | GET | `/contact` | Get the contact content | | PUT | `/contact` | Update the contact content | | DELETE | `/contact` | Delete the contact content |
::: :::: #### Collection Types :::: tabs ::: tab Restaurant `Restaurant` **Content Type**
| Method | Path | Description | | :----- | :------------------- | :------------------------ | | GET | `/restaurants` | Get a list of restaurants | | GET | `/restaurants/:id` | Get a specific restaurant | | GET | `/restaurants/count` | Count restaurants | | POST | `/restaurants` | Create a restaurant | | DELETE | `/restaurants/:id` | Delete a restaurant | | PUT | `/restaurants/:id` | Update a restaurant |
::: ::: tab Article `Article` **Content Type**
| Method | Path | Description | | :----- | :---------------- | :--------------------- | | GET | `/articles` | Get a list of articles | | GET | `/articles/:id` | Get a specific article | | GET | `/articles/count` | Count articles | | POST | `/articles` | Create a article | | DELETE | `/articles/:id` | Delete a article | | PUT | `/articles/:id` | Update a article |
::: ::: tab Product `Product` **Content Type**
| Method | Path | Description | | :----- | :---------------- | :--------------------- | | GET | `/products` | Get a list of products | | GET | `/products/:id` | Get a specific product | | GET | `/products/count` | Count products | | POST | `/products` | Create a product | | DELETE | `/products/:id` | Delete a product | | PUT | `/products/:id` | Update a product |
::: ::: tab Category `Category` **Content Type**
| Method | Path | Description | | :----- | :------------------ | :----------------------- | | GET | `/categories` | Get a list of categories | | GET | `/categories/:id` | Get a specific category | | GET | `/categories/count` | Count categories | | POST | `/categories` | Create a category | | DELETE | `/categories/:id` | Delete a category | | PUT | `/categories/:id` | Update a category |
::: ::: tab Tag `Tag` **Content Type**
| Method | Path | Description | | :----- | :------------ | :----------------- | | GET | `/tags` | Get a list of tags | | GET | `/tags/:id` | Get a specific tag | | GET | `/tags/count` | Count tags | | POST | `/tags` | Create a tag | | DELETE | `/tags/:id` | Delete a tag | | PUT | `/tags/:id` | Update a tag |
::: :::: ## Get entries Returns entries matching the query filters. You can read more about parameters [here](./parameters.md). **Example request** ```js GET http://localhost:1337/restaurants ``` **Example response** ```json [ { "id": 1, "name": "Restaurant 1", "cover": { "id": 1, "name": "image.png", "hash": "123456712DHZAUD81UDZQDAZ", "sha256": "v", "ext": ".png", "mime": "image/png", "size": 122.95, "url": "http://localhost:1337/uploads/123456712DHZAUD81UDZQDAZ.png", "provider": "local", "provider_metadata": null, "created_at": "2019-12-09T00:00:00.000Z", "updated_at": "2019-12-09T00:00:00.000Z" }, "content": [ { "__component": "content.title-with-subtitle", "id": 1, "title": "Restaurant 1 title", "subTitle": "Cozy restaurant in the valley" }, { "__component": "content.image-with-description", "id": 1, "image": { "id": 1, "name": "image.png", "hash": "123456712DHZAUD81UDZQDAZ", "sha256": "v", "ext": ".png", "mime": "image/png", "size": 122.95, "url": "http://localhost:1337/uploads/123456712DHZAUD81UDZQDAZ.png", "provider": "local", "provider_metadata": null, "created_at": "2019-12-09T00:00:00.000Z", "updated_at": "2019-12-09T00:00:00.000Z" }, "title": "Amazing photography", "description": "This is an amazing photography taken..." } ], "opening_hours": [ { "id": 1, "day_interval": "Tue - Sat", "opening_hour": "7:30 PM", "closing_hour": "10:00 PM" } ] } ] ``` ## Get an entry Returns an entry by id. **Example request** ```js GET http://localhost:1337/restaurants/1 ``` **Example response** ```json { "id": 1, "title": "Restaurant 1", "cover": { "id": 1, "name": "image.png", "hash": "123456712DHZAUD81UDZQDAZ", "sha256": "v", "ext": ".png", "mime": "image/png", "size": 122.95, "url": "http://localhost:1337/uploads/123456712DHZAUD81UDZQDAZ.png", "provider": "local", "provider_metadata": null, "created_at": "2019-12-09T00:00:00.000Z", "updated_at": "2019-12-09T00:00:00.000Z" }, "content": [ { "__component": "content.title-with-subtitle", "id": 1, "title": "Restaurant 1 title", "subTitle": "Cozy restaurant in the valley" }, { "__component": "content.image-with-description", "id": 1, "image": { "id": 1, "name": "image.png", "hash": "123456712DHZAUD81UDZQDAZ", "sha256": "v", "ext": ".png", "mime": "image/png", "size": 122.95, "url": "http://localhost:1337/uploads/123456712DHZAUD81UDZQDAZ.png", "provider": "local", "provider_metadata": null, "created_at": "2019-12-09T00:00:00.000Z", "updated_at": "2019-12-09T00:00:00.000Z" }, "title": "Amazing photography", "description": "This is an amazing photography taken..." } ], "opening_hours": [ { "id": 1, "day_interval": "Tue - Sat", "opening_hour": "7:30 PM", "closing_hour": "10:00 PM" } ] } ``` ## Count entries Returns the count of entries matching the query filters. You can read more about parameters [here](./parameters.md). **Example request** ```js GET http://localhost:1337/restaurants/count ``` **Example response** ``` 1 ``` ## Create an entry Creates an entry and returns its value. **Example request** ```js POST http://localhost:1337/restaurants ``` ```json { "title": "Restaurant 1", "cover": 1, "content": [ { "__component": "content.title-with-subtitle", "title": "Restaurant 1 title", "subTitle": "Cozy restaurant in the valley" }, { "__component": "content.image-with-description", "image": 1, // user form data to upload the file or an id to reference an exisiting image "title": "Amazing photography", "description": "This is an amazing photography taken..." } ], "opening_hours": [ { "day_interval": "Tue - Sat", "opening_hour": "7:30 PM", "closing_hour": "10:00 PM" } ] } ``` **Example response** ```json { "id": 1, "title": "restaurant 1", "cover": { "id": 1, "name": "image.png", "hash": "123456712DHZAUD81UDZQDAZ", "sha256": "v", "ext": ".png", "mime": "image/png", "size": 122.95, "url": "http://localhost:1337/uploads/123456712DHZAUD81UDZQDAZ.png", "provider": "local", "provider_metadata": null, "created_at": "2019-12-09T00:00:00.000Z", "updated_at": "2019-12-09T00:00:00.000Z" }, "content": [ { "__component": "content.title-with-subtitle", "id": 1, "title": "Restaurant 1 title", "subTitle": "Cozy restaurant in the valley" }, { "__component": "content.image-with-description", "id": 1, "image": { "id": 1, "name": "image.png", "hash": "123456712DHZAUD81UDZQDAZ", "sha256": "v", "ext": ".png", "mime": "image/png", "size": 122.95, "url": "http://localhost:1337/uploads/123456712DHZAUD81UDZQDAZ.png", "provider": "local", "provider_metadata": null, "created_at": "2019-12-09T00:00:00.000Z", "updated_at": "2019-12-09T00:00:00.000Z" }, "title": "Amazing photography", "description": "This is an amazing photography taken..." } ], "opening_hours": [ { "id": 1, "day_interval": "Tue - Sat", "opening_hour": "7:30 PM", "closing_hour": "10:00 PM" } ] } ``` ## Update an entry Partially updates an entry by id and returns its value. Fields that aren't sent in the query are not changed in the db. Send a `null` value if you want to clear them. **Example request** ```js PUT http://localhost:1337/restaurants/1 ``` ```json { "title": "Restaurant 1", "content": [ { "__component": "content.title-with-subtitle", // editing one of the previous item by passing its id "id": 2, "title": "Restaurant 1 title", "subTitle": "Cozy restaurant in the valley" }, { "__component": "content.image-with-description", "image": 1, // user form data to upload the file or an id to reference an exisiting image "title": "Amazing photography", "description": "This is an amazing photography taken..." } ], "opening_hours": [ { // adding a new item "day_interval": "Sun", "opening_hour": "7:30 PM", "closing_hour": "10:00 PM" }, { // editing one of the previous item by passing its id "id": 1, "day_interval": "Mon - Sat", "opening_hour": "7:30 PM", "closing_hour": "10:00 PM" } ] } ``` **Example response** ```json { "id": 1, "title": "Restaurant 1", "cover": { "id": 1, "name": "image.png", "hash": "123456712DHZAUD81UDZQDAZ", "sha256": "v", "ext": ".png", "mime": "image/png", "size": 122.95, "url": "http://localhost:1337/uploads/123456712DHZAUD81UDZQDAZ.png", "provider": "local", "provider_metadata": null, "created_at": "2019-12-09T00:00:00.000Z", "updated_at": "2019-12-09T00:00:00.000Z" }, "content": [ { "__component": "content.title-with-subtitle", "id": 1, "title": "Restaurant 1 title", "subTitle": "Cozy restaurant in the valley" }, { "__component": "content.image-with-description", "id": 2, "image": { "id": 1, "name": "image.png", "hash": "123456712DHZAUD81UDZQDAZ", "sha256": "v", "ext": ".png", "mime": "image/png", "size": 122.95, "url": "http://localhost:1337/uploads/123456712DHZAUD81UDZQDAZ.png", "provider": "local", "provider_metadata": null, "created_at": "2019-12-09T00:00:00.000Z", "updated_at": "2019-12-09T00:00:00.000Z" }, "title": "Amazing photography", "description": "This is an amazing photography taken..." } ], "opening_hours": [ { "id": 1, "day_interval": "Mon - Sat", "opening_hour": "7:30 PM", "closing_hour": "10:00 PM" }, { "id": 2, "day_interval": "Sun", "opening_hour": "7:30 PM", "closing_hour": "10:00 PM" } ] } ``` ## Delete an entry Deletes an entry by id and returns its value. **Example request** ```js DELETE http://localhost:1337/restaurants/1 ``` **Example response** ```json { "id": 1, "title": "Restaurant 1", "cover": { "id": 1, "name": "image.png", "hash": "123456712DHZAUD81UDZQDAZ", "sha256": "v", "ext": ".png", "mime": "image/png", "size": 122.95, "url": "http://localhost:1337/uploads/123456712DHZAUD81UDZQDAZ.png", "provider": "local", "provider_metadata": null, "created_at": "2019-12-09T00:00:00.000Z", "updated_at": "2019-12-09T00:00:00.000Z" }, "content": [ { "__component": "content.title-with-subtitle", "id": 1, "title": "Restaurant 1 title", "subTitle": "Cozy restaurant in the valley" }, { "__component": "content.image-with-description", "id": 2, "image": { "id": 1, "name": "image.png", "hash": "123456712DHZAUD81UDZQDAZ", "sha256": "v", "ext": ".png", "mime": "image/png", "size": 122.95, "url": "http://localhost:1337/uploads/123456712DHZAUD81UDZQDAZ.png", "provider": "local", "provider_metadata": null, "created_at": "2019-12-09T00:00:00.000Z", "updated_at": "2019-12-09T00:00:00.000Z" }, "title": "Amazing photography", "description": "This is an amazing photography taken..." } ], "opening_hours": [ { "id": 1, "day_interval": "Mon - Sat", "opening_hour": "7:30 PM", "closing_hour": "10:00 PM" }, { "id": 2, "day_interval": "Sun", "opening_hour": "7:30 PM", "closing_hour": "10:00 PM" } ] } ``` ::: tip Whether you are using MongoDB or a SQL database you can use the field `id` as described in this documentation. It will be provided in both cases and work the same way. :::