Introduction
The Shiny Reviews API allows you to interact with your Shiny Reviews project and attached reviews. Create, search, filter, or fetch, all your reviews.
This documentation aims to provide all the information you need to work with our API.
Authenticating requests
To authenticate requests, include a query parameter token
in the request.
All authenticated endpoints are marked with a requires authentication
badge in the documentation below.
You can retrieve your token by visiting your dashboard and going to your project settings.
Endpoints
Display project details
requires authentication
List all the details for the project. Requires a read token when "Public/unprotected" is enabled.
Example request:
curl --request GET \
--get "https://demo.shiny-reviews.test/api/v1?token=iT1fTUMRpZxgMaTxo1R2xyBc4KW8WF2abXF5hNNo" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://demo.shiny-reviews.test/api/v1"
);
const params = {
"token": "iT1fTUMRpZxgMaTxo1R2xyBc4KW8WF2abXF5hNNo",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
Example response (200):
{
"data": {
"code": "ib627lob1",
"name": "Maggio, Heller and Schuppe",
"description": "Laudantium voluptatibus voluptatum alias natus suscipit. Eaque id quo et et eius.",
"domain": "https://www.gmail.com",
"features": {
"review-notification": true,
"metafields": true,
"sentiment-analysis": false,
"review-approval": true,
"public-unprotected": true,
"domain-locked": false,
"markdown": false
},
"review_stats": {
"average": 0,
"total_count": 0,
"approved_count": 0
},
"ratings_style": "stars",
"ratings_style_options": [
1,
2,
3,
4,
5
]
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Display project details
requires authentication
List all the details for the project. Requires a read token when "Public/unprotected" is enabled.
Example request:
curl --request GET \
--get "https://demo.shiny-reviews.test/api/v1/project?token=iT1fTUMRpZxgMaTxo1R2xyBc4KW8WF2abXF5hNNo" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://demo.shiny-reviews.test/api/v1/project"
);
const params = {
"token": "iT1fTUMRpZxgMaTxo1R2xyBc4KW8WF2abXF5hNNo",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
Example response (200):
{
"data": {
"code": "qbxspizlg",
"name": "Maggio, Heller and Schuppe",
"description": "Laudantium voluptatibus voluptatum alias natus suscipit. Eaque id quo et et eius.",
"domain": "https://www.gmail.com",
"features": {
"review-notification": true,
"metafields": true,
"sentiment-analysis": false,
"review-approval": true,
"public-unprotected": true,
"domain-locked": false,
"markdown": false
},
"review_stats": {
"average": 0,
"total_count": 0,
"approved_count": 0
},
"ratings_style": "stars",
"ratings_style_options": [
1,
2,
3,
4,
5
]
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Approve a review
requires authentication
Used for approving reviews through emails. Requires a signed URL. Currently, this cannot be called directly.
Example request:
curl --request GET \
--get "https://demo.shiny-reviews.test/api/v1/reviews/1/approve?token=iT1fTUMRpZxgMaTxo1R2xyBc4KW8WF2abXF5hNNo" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://demo.shiny-reviews.test/api/v1/reviews/1/approve"
);
const params = {
"token": "iT1fTUMRpZxgMaTxo1R2xyBc4KW8WF2abXF5hNNo",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
Example response (200):
{
"data": {
"id": 293,
"rating": 0,
"title": "Eos voluptas molestias aut laudantium voluptatibus voluptatum alias natus.",
"body": "Odit eaque id quo et et eius voluptatem. Accusantium aliquam dicta et et labore voluptate doloremque voluptatem. Vitae porro voluptatum odio. Beatae numquam voluptate et omnis in. Blanditiis et laudantium aut porro et.",
"metafields": null,
"created_at": "2024-09-15T20:25:27.000000Z"
}
}
Example response (302, authenticated user approved):
Example response (302, unauthenticated user approved):
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
List reviews
requires authentication
List all the reviews in the project. Results are paginated. Requires a read token when "Public/unprotected" is enabled.
Example request:
curl --request GET \
--get "https://demo.shiny-reviews.test/api/v1/reviews?token=iT1fTUMRpZxgMaTxo1R2xyBc4KW8WF2abXF5hNNo" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"positive\": true,
\"negative\": true
}"
const url = new URL(
"https://demo.shiny-reviews.test/api/v1/reviews"
);
const params = {
"token": "iT1fTUMRpZxgMaTxo1R2xyBc4KW8WF2abXF5hNNo",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"positive": true,
"negative": true
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
Example response (200):
{
"data": [
{
"id": 294,
"rating": 0,
"title": "Eos voluptas molestias aut laudantium voluptatibus voluptatum alias natus.",
"body": "Odit eaque id quo et et eius voluptatem. Accusantium aliquam dicta et et labore voluptate doloremque voluptatem. Vitae porro voluptatum odio. Beatae numquam voluptate et omnis in. Blanditiis et laudantium aut porro et.",
"metafields": null,
"created_at": "2024-09-15T20:25:27.000000Z"
},
{
"id": 295,
"rating": 0,
"title": "Aperiam blanditiis voluptatem officia magnam rerum minima.",
"body": "Quam nisi quisquam sit quos. Laboriosam deleniti minima vitae assumenda rerum. Ut illum accusamus illo et et aperiam. Repellendus nostrum amet quo molestiae. Et ea numquam totam maxime ea provident magni quisquam.",
"metafields": null,
"created_at": "2024-09-15T20:25:27.000000Z"
}
],
"links": {
"first": "/?page=1",
"last": "/?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"active": false
},
{
"url": "/?page=1",
"label": "1",
"active": true
},
{
"url": null,
"label": "Next »",
"active": false
}
],
"path": "/",
"per_page": 10,
"to": 2,
"total": 2
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Store a review
requires authentication
Store a single review. Requires a write token.
Example request:
curl --request POST \
"https://demo.shiny-reviews.test/api/v1/reviews?token=iT1fTUMRpZxgMaTxo1R2xyBc4KW8WF2abXF5hNNo" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"rating\": 1,
\"title\": \"c\",
\"body\": \"error\"
}"
const url = new URL(
"https://demo.shiny-reviews.test/api/v1/reviews"
);
const params = {
"token": "iT1fTUMRpZxgMaTxo1R2xyBc4KW8WF2abXF5hNNo",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"rating": 1,
"title": "c",
"body": "error"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
Example response (200):
{
"data": {
"id": 296,
"rating": 0,
"title": "Voluptatibus eveniet voluptatem mollitia et magni nam cupiditate.",
"body": "Voluptatem ea numquam eos architecto. Aspernatur dolore et dignissimos quibusdam consectetur eos voluptas molestias. Laudantium voluptatibus voluptatum alias natus suscipit. Eaque id quo et et eius. Vel accusantium aliquam dicta et et labore voluptate doloremque.",
"metafields": null,
"created_at": "2024-09-15T20:25:27.000000Z"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Show a review
requires authentication
Show the details for a single review. Requires a read token when "Public/unprotected" is enabled.
Example request:
curl --request GET \
--get "https://demo.shiny-reviews.test/api/v1/reviews/1?token=iT1fTUMRpZxgMaTxo1R2xyBc4KW8WF2abXF5hNNo" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://demo.shiny-reviews.test/api/v1/reviews/1"
);
const params = {
"token": "iT1fTUMRpZxgMaTxo1R2xyBc4KW8WF2abXF5hNNo",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
Example response (200):
{
"data": {
"id": 297,
"rating": 0,
"title": "Eos voluptas molestias aut laudantium voluptatibus voluptatum alias natus.",
"body": "Odit eaque id quo et et eius voluptatem. Accusantium aliquam dicta et et labore voluptate doloremque voluptatem. Vitae porro voluptatum odio. Beatae numquam voluptate et omnis in. Blanditiis et laudantium aut porro et.",
"metafields": null,
"created_at": "2024-09-15T20:25:27.000000Z"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.