2019-10-05 17:58:59 +02:00
# API Endpoints
2019-10-29 17:08:36 +01:00
When you create a `Content Type` you will have a certain number of **REST API endpoints** available to interact with it.
2019-10-05 17:58:59 +02:00
2020-02-02 15:35:25 +01:00
As an **example** , let's consider the following models:
2019-12-09 14:38:19 +01:00
2020-02-25 18:13:24 +01:00
**Content Types**:
2019-12-09 14:38:19 +01:00
2020-02-25 18:13:24 +01:00
- `Restaurant` ** (Collection Type)**
- `Homepage` ** (Single Type)**
2019-12-09 14:38:19 +01:00
**Components**:
2019-12-27 16:15:22 +05:30
- `Opening hours` (category: `restaurant` )
2019-12-09 14:38:19 +01:00
- `Title With Subtitle` (category: `content` )
- `Image With Description` (category: `content` )
2019-10-29 17:08:36 +01:00
2020-02-25 18:13:24 +01:00
---
2019-11-07 12:05:39 +01:00
:::: tabs
2019-10-29 17:08:36 +01:00
2019-12-09 14:38:19 +01:00
::: tab "Content Types"
2019-10-05 17:58:59 +02:00
### `Restaurant` Content Type
2020-02-25 18:13:24 +01:00
| 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 | |
2019-10-05 17:58:59 +02:00
2019-10-29 17:08:36 +01:00
:::
2019-12-09 14:38:19 +01:00
::: tab Components
2019-10-29 17:08:36 +01:00
2019-12-09 14:38:19 +01:00
### `Opening hours` Component
2019-10-05 17:58:59 +02:00
| Fields | Type | Description |
| :----------- | :----- | :------------------ |
| day_interval | string | Meta's day interval |
| opening_hour | string | Meta's opening hour |
| closing_hour | string | Meta's closing hour |
2019-12-09 14:38:19 +01:00
---
2019-12-09 16:18:58 +01:00
### `Title With Subtitle` Component
2019-12-09 14:38:19 +01:00
| Fields | Type | Description |
| :------- | :----- | :------------ |
| title | string | The title |
2020-02-02 15:35:25 +01:00
| subTitle | string | The sub title |
2019-12-09 14:38:19 +01:00
---
2019-12-09 16:18:58 +01:00
### `Image With Description` Component
2019-12-09 14:38:19 +01:00
2020-01-02 14:00:44 +01:00
| Fields | Type | Description |
| :---------- | :----- | :-------------------- |
| image | media | The image file |
2020-02-02 15:35:25 +01:00
| title | string | The image title |
| description | text | The image description |
2019-12-09 14:38:19 +01:00
2019-10-29 17:08:36 +01:00
:::
::::
2019-10-05 17:58:59 +02:00
## Endpoints
2020-02-02 15:35:25 +01:00
Here is the list of endpoints generated for each of your **Content Types** .
2019-10-29 17:08:36 +01:00
2019-10-05 17:58:59 +02:00
< style lang = "stylus" >
#endpoint-table
table
display table
width 100%
tr
border none
& :nth-child(2n)
background-color white
tbody
tr
border-top 1px solid #dfe2e5
th, td
border none
padding 1.2em 1em
border-right 1px solid #dfe2e5
& :last-child
border-right none
< / style >
2020-02-25 18:13:24 +01:00
:::: tabs
::: tab "Collection Type"
2019-10-05 17:58:59 +02:00
< div id = "endpoint-table" >
2020-02-25 18:13:24 +01:00
| 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 |
2019-10-29 17:08:36 +01:00
< / div >
2020-02-25 18:13:24 +01:00
:::
::: tab "Single Type"
< div id = "endpoint-table" >
| 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 |
< / div >
:::
::::
2020-02-02 15:35:25 +01:00
### Here are some Content Type examples
2019-10-29 17:08:36 +01:00
2020-02-25 18:13:24 +01:00
### Single Types
:::: tabs
::: tab Homepage
`Homepage` **Content Type**
< div id = "endpoint-table" >
| Method | Path | Description |
| :----- | :---------- | :-------------------------- |
| GET | `/homepage` | Get the homepage content |
| PUT | `/homepage` | Update the homepage content |
| DELETE | `/homepage` | Delete the homepage content |
< / div >
:::
2020-03-10 16:47:41 +01:00
::: tab Contact
`Contact` **Content Type**
< div id = "endpoint-table" >
| Method | Path | Description |
| :----- | :--------- | :------------------------- |
| GET | `/contact` | Get the contact content |
| PUT | `/contact` | Update the contact content |
| DELETE | `/contact` | Delete the contact content |
< / div >
2020-02-25 18:13:24 +01:00
### Collection Types
2019-11-07 12:05:39 +01:00
:::: tabs
2019-10-29 17:08:36 +01:00
2019-11-07 12:05:39 +01:00
::: tab Restaurant
2019-10-29 17:08:36 +01:00
`Restaurant` **Content Type**
< div id = "endpoint-table" >
2020-02-25 18:13:24 +01:00
| 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 |
2019-10-29 17:08:36 +01:00
< / div >
:::
2019-11-07 12:05:39 +01:00
::: tab Article
2019-10-29 17:08:36 +01:00
`Article` **Content Type**
< div id = "endpoint-table" >
2020-02-25 18:13:24 +01:00
| 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 |
2019-10-29 17:08:36 +01:00
< / div >
:::
2019-11-07 12:05:39 +01:00
::: tab Product
2019-10-29 17:08:36 +01:00
`Product` **Content Type**
< div id = "endpoint-table" >
2020-02-25 18:13:24 +01:00
| 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 |
2019-10-29 17:08:36 +01:00
< / div >
:::
2019-11-07 12:05:39 +01:00
::: tab Category
2019-10-29 17:08:36 +01:00
`Category` **Content Type**
< div id = "endpoint-table" >
2020-02-25 18:13:24 +01:00
| 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 |
2019-10-29 17:08:36 +01:00
< / div >
:::
2019-11-07 12:05:39 +01:00
::: tab Tag
2019-10-29 17:08:36 +01:00
`Tag` **Content Type**
< div id = "endpoint-table" >
2020-02-25 18:13:24 +01:00
| 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 |
2019-10-05 17:58:59 +02:00
< / div >
2019-10-29 17:08:36 +01:00
:::
::::
## Get entries
2019-10-05 17:58:59 +02:00
2019-10-29 17:08:36 +01:00
Returns entries matching the query filters. You can read more about parameters [here ](./parameters.md ).
2019-10-05 17:58:59 +02:00
**Example request**
```js
GET http://localhost:1337/restaurants
```
**Example response**
```json
[
{
"id": 1,
"name": "Restaurant 1",
"cover": {
"id": 1,
"url": "/uploads/3d89ba92f762433bbb75bbbfd9c13974.png"
},
2019-12-09 14:38:19 +01:00
"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..."
}
],
2019-10-05 17:58:59 +02:00
"opening_hours": [
{
"id": 1,
"day_interval": "Tue - Sat",
"opening_hour": "7:30 PM",
"closing_hour": "10:00 PM"
}
]
}
]
```
2019-11-22 15:03:20 +01:00
## 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,
"url": "/uploads/3d89ba92f762433bbb75bbbfd9c13974.png"
},
2019-12-09 14:38:19 +01:00
"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..."
}
],
2019-11-22 15:03:20 +01:00
"opening_hours": [
{
"id": 1,
"day_interval": "Tue - Sat",
"opening_hour": "7:30 PM",
"closing_hour": "10:00 PM"
}
]
}
```
2019-10-29 17:08:36 +01:00
## Count entries
2019-10-05 17:58:59 +02:00
2019-10-29 17:08:36 +01:00
Returns the count of entries matching the query filters. You can read more about parameters [here ](./parameters.md ).
2019-10-05 17:58:59 +02:00
2019-10-29 17:16:52 +01:00
**Example request**
```js
GET http://localhost:1337/restaurants/count
```
2019-10-05 17:58:59 +02:00
**Example response**
```
1
```
2019-10-29 17:08:36 +01:00
## Create an entry
2019-10-05 17:58:59 +02:00
2019-10-29 17:08:36 +01:00
Creates an entry and returns its value.
2019-10-05 17:58:59 +02:00
**Example request**
```js
POST http://localhost:1337/restaurants
```
```json
{
"title": "Restaurant 1",
"cover": 1,
2019-12-09 14:38:19 +01:00
"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..."
}
],
2019-10-05 17:58:59 +02:00
"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,
"url": "/uploads/3d89ba92f762433bbb75bbbfd9c13974.png"
},
2019-12-09 14:38:19 +01:00
"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..."
}
],
2019-10-05 17:58:59 +02:00
"opening_hours": [
{
"id": 1,
"day_interval": "Tue - Sat",
"opening_hour": "7:30 PM",
"closing_hour": "10:00 PM"
}
]
}
```
2019-10-29 17:08:36 +01:00
## Update an entry
2019-10-05 17:58:59 +02:00
2019-10-29 17:08:36 +01:00
Partially updates an entry by id and returns its value.
2019-10-05 17:58:59 +02:00
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",
2019-12-09 14:38:19 +01:00
"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..."
}
],
2019-10-05 17:58:59 +02:00
"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,
"url": "/uploads/3d89ba92f762433bbb75bbbfd9c13974.png"
},
2019-12-09 14:38:19 +01:00
"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..."
}
],
2019-10-05 17:58:59 +02:00
"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"
}
]
}
```
2019-10-29 17:08:36 +01:00
## Delete an entry
2019-10-05 17:58:59 +02:00
2019-10-29 17:08:36 +01:00
Deletes an entry by id and returns its value.
2019-10-05 17:58:59 +02:00
**Example request**
```js
DELETE http://localhost:1337/restaurants/1
```
**Example response**
```json
{
"id": 1,
"title": "Restaurant 1",
"cover": {
"id": 1,
"url": "/uploads/3d89ba92f762433bbb75bbbfd9c13974.png"
},
2019-12-09 14:38:19 +01:00
"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..."
}
],
2019-10-05 17:58:59 +02:00
"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.
:::