FeedCheck offers an API in order to help consumer brands easily integrate review management into their platforms. Below you will find the technical documentation required for your integration. You can play with the api using our swagger page.
The first interaction with our API is the authentication. The FeedCheck API uses Basic Authentication with username and password (Secret API Key). You can find this information in the Settings section ( https://app.feedcheck.co/settings ). The Secret API Key needs to be included in any of the following API calls. Otherwise, a 401 error code with the message "Could not verify your access level for that URL" will be returned.
Basic authentication is a simple authentication scheme built into the HTTP protocol. The client sends HTTP requests with the Authorization header that contains the word Basic word followed by a space and a base64-encoded string username:password.
In FeedCheck, a product is defined by a group of links, each link pointing out to a product page (e.g. https://www.amazon.com/Apple-iPhone-Fully-Unlocked-5-8/dp/B075QNGDZD/ ).
For adding a product you need to make a POST request at /api/v2/products
endpoint with the following payload:
{ "name":"product name", "owner":"my product", "links": [ "https://www.amazon.com/Apple-Generation-Cancelling-Transparency-Personalized/dp/B0BDHWDR12?ref_=ast_sto_dp" ] }where "name" contains your product name, owner contains "my product" or "competitor" value, "links" is a list of string which contains the links related to this product.
curl -X POST "https://app.feedcheck.co/api/v2/products" -H "accept: application/json" -H "Authorization: Basic {{ base64 encoded username:password }}" -H "Content-Type: application/json" -d "{ "name":"product name", "owner":"my product", "links":["https://www.amazon.com/Apple-Generation-Cancelling-Transparency-Personalized/dp/B0BDHWDR12?ref_=ast_sto_dp"] }"where username and password are auth informations.
Retrieving products from your account is done by GET request at /api/v2/products
. The response has the following format:
[ { "groups": [], "id": 29438, "links": [ 119105 ], "name": "Webcam Cover Slide 6 Pack, 0.027 inch Ultra-Thin Metal Magnet Web Camera Cover for MacBook Pro iMac Laptop PC iPad Pro iPhone Surface Pro Echo Show Camera Blocker Slider, Protect Your Visual Prvacy", "owner": "my product", "rating": 3.8, "ratingsNumber": 203 }, { "groups": [], "id": 29439, "links": [ 119106 ], "name": "Portable Monitor, InnoView 15.8 Inch FHD 1080P USB C HDMI Second External Monitor for Laptop, Desktop, MacBook, Phones, Tablet, PS5/4, Xbox, Switch, Built-in Speaker with Protective Case", "owner": "my product", "rating": 4.5, "ratingsNumber": 2032 } ]
Below is the request in cURL format:
curl -X GET "https://app.feedcheck.co/api/v2/products" -H "accept: application/json" -H "Authorization: Basic {{ base64 encoded username:password }}"
We can do that with the same request as seen above but we have to complete the parameter describer in the list. In this way we pass a query parameter to the request and it will return the product that we search for.
Below is the request in cURL format:curl -X GET "https://app.feedcheck.co/api/v2/products?name=test%20" -H "accept: application/json" -H "Authorization: Basic {{ base64 encoded username:password }}"The request returns the following object:
[ { "groups": [], "id": 31547, "links": [ 127816 ], "name": "test", "owner": "my product", "rating": 5, "ratingsNumber": 7 } ]
In FeedCheck we can fetch a products based on its ID with a request at /api/v2/products/{productId}
and "productId" is a integer which represents the id of a product that exists in FeedCheck.
curl -X GET "https://app.feedcheck.co/api/v2/products/31547" -H "accept: application/json" -H "Authorization: Basic {{ base64 encoded username:password }}"The request returns the next response:
{ "groups": [], "id": 31547, "links": [ 127816 ], "name": "Test Name Example", "owner": "my product", "rating": 5, "ratingsNumber": 7 }
In FeedCheck we can update a product if we pass its id to this PATCH request /api/v2/products/{productId}
and a payload which will contain the updated name. "productId" is a integer which represents the id of a product that exists in FeedCheck.
curl -X PATCH "https://app.feedcheck.co/api/v2/products/31547" -H "accept: application/json" -H "Authorization: Basic {{ base64 encoded username:password }}" -H "Content-Type: application/json" -d { "name":"Name Example Product" }The request returns the next response:
{ "groups": [], "id": 31547, "links": [ 127816 ], "name": "Name Example Product", "owner": "my product", "rating": 5, "ratingsNumber": 7 }
In FeedCheck we can delete a products based on its ID with a DELETE request at /api/v2/products/{productId}
.
curl -X DELETE "https://app.feedcheck.co/api/v2/products/31547" -H "accept: application/json" -H "Authorization: Basic {{ base64 encoded username:password }}"
In FeedCheck we can fetch products from a specific group making a request at /api/v2/groups/{groupId}/products
and "groupId" is a integer which represents the id of a group that exists in FeedCheck.
curl -X GET "https://app.feedcheck.co/api/v2/groups/2804/products" -H "accept: application/json" -H "Authorization: Basic {{ base64 encoded username:password }}"The request returns the next response:
[ { "groups": [ 2804 ], "id": 31490, "links": [ 127737 ], "name": "My apple", "owner": "my product", "rating": 4.7, "ratingsNumber": 9258 } ]
In FeedCheck the key-drivers are used to calculate different metrics. By identifying the key drivers, your company can gain insights into the factors that have the most significant impact on your performance. This knowledge enables your business to make informed decisions, allocate resources effectively, and develop strategies to optimize the key drivers to achieve their desired outcomes. In our app you can make different operations over key-drivers like related below.
Getting all key drivers is done by a GET request at /api/v2/features
.
curl -X GET "https://app.feedcheck.co/api/v2/features" -H "accept: application/json" -H "Authorization: Basic {{ base64 encoded username:password }}"The request returns a list with all key-drivers for a customer.
This data is available at the endpoint /api/v2/featureSets/{featureSetId}/features
where featureSetId represent the id of a key driver set.
curl -X GET "https://app.feedcheck.co/api/v2/featureSets/115/features" -H "accept: application/json" -H "Authorization: Basic {{ base64 encoded username:password }}"
The response has the following format:
[ { "featureSet": { "id": 23562623, "name": "Makeup Products" }, "id": 32458432, "keywords": "size, width, height", "name": "Makeup" }, { "featureSet": { "id": 33547453, "name": "Makeup Products" }, "id": 235263362, "keywords": "material, like, good", "name": "Style" } ]
Retrieving key drivers sets is done by a GET request at /api/v2/featureSets
.
curl -X GET "https://app.feedcheck.co/api/v2/featureSets" -H "accept: application/json" -H "Authorization: Basic {{ base64 encoded username:password }}"The request returns the next response:
[ { "id": 23562623, "name": "Makeup Products" }, { "id": 235634623, "name": "Phone Apple 13" } ]
Creating a key driver for a key driver set is done by a POST request at /api/v2/featureSets/{featureSetId}/features
with the following payload:
{ "name": "strength", "keywords": "power, voltage, great" }Below is the request in cURL format:
curl -X POST "https://app.feedcheck.co/api/v2/featureSets/23562623/features" -H "accept: application/json" -H "Authorization: Basic " -H "Content-Type: application/json" -d "{ "name": "strength", "keywords": "power, voltage, great" }"The request returns the next response:
[ { "id": 23562623, "name": "Makeup Products" }, { "id": 235634623, "name": "Phone Apple 13" } ]
In FeedCheck the links are the places from where reviews are collected. A link point to a product page. All links belong to products, as we mentioned previously.
Adding a link to a product is done by a POST request at /api/v2/products/{productId}/links
endpoint with the following payload:
{ "links":[ "https://www.amazon.com/Apple-iPhone-Fully-Unlocked-5-8/dp/B075QNGDZD/" ] }
Deleting a link from a product is done by a DELETE request at /api/v2/products/{productId}/links/{linkId}
endpoint with the following payload:
Retrieving links for a specific product is done by GET request at /api/v2/products/{productId}/links
. The response has the following format:
[ { "id": 31978, "url": "https://www.amazon.com/Apple-iPhone-Fully-Unlocked-5-8/dp/B075QNGDZD/", "product_id": 3351 } ]
Deleting a specific link is done by a DELETE request at /api/v2/links/{linkId}
.
Updating a specific link is done by a PATCH request at /api/v2/links/{linkId}
with a payload that contains the new URL.
We can fetch all reviews from the database using a single GET request to the endpoint /api/v2/reviews
In this way we will get a list of reviews that looks like this:
[ { "id": 12551741, "title": "Beautiful phone, happy with the upgrade", "content": "Phone freezes a bit and I need to reboot but that is maybe once a week. I am hopeful that a future update will fix this. Annoying that it doesn't read my face properly when I am wearing my glasses. Not many apps are up to the speed with the facial scan so I need to type in my password every time I check my banking statements. The missing fingerprint button took some time getting used to but once I did, I don't even miss it. The camera is lovely as is the speed. I wish there were more color and size choices, but prob next year.", "translatedEnTitle": "", "translatedEnContent": "", "rating": "4.0", "website": "amazon.com", "user": "Ofelia P.", "dataCreated": 1486447200, "dataDiscovered": 1486447200, "productId": 31978, "linkId": 121521, "signature": "3fa85f64-5717-4562-b3fc-2c963f66afa6" } ]
Retrieving reviews for a specific product is done by GET request at /api/v2/products/{productId}/reviews
.
If you want to get reviews that are newer than a certain date you can use the URL param start_timestamp
with a timestamp in UNIX format.
To limit the output you can use the end_timestamp
parameter or limit
to limit to a fix number of results.
The timestamp limiting params (start_timestamp
and end_timestamp
) use dataCreated field (in contrast to API V1).
The response has the following format:
[ { "id": 12551741, "title": "Beautiful phone, happy with the upgrade", "content": "Phone freezes a bit and I need to reboot but that is maybe once a week. I am hopeful that a future update will fix this. Annoying that it doesn't read my face properly when I am wearing my glasses. Not many apps are up to the speed with the facial scan so I need to type in my password every time I check my banking statements. The missing fingerprint button took some time getting used to but once I did, I don't even miss it. The camera is lovely as is the speed. I wish there were more color and size choices, but prob next year.", "translatedEnTitle": "", "translatedEnContent": "", "rating": "4.0", "website": "amazon.com", "user": "Ofelia P.", "dataCreated": 1486447200, "dataDiscovered": 1486447200, "productId": 31978, "linkId": 121521, "signature": "3fa85f64-5717-4562-b3fc-2c963f66afa6" } ]
Retrieving reviews for a specific group is done by GET request at /api/v2/group/{groupId}/reviews
.
If you want to get reviews that are newer than a certain date you can use the URL param start_timestamp
with a timestamp in UNIX format.
The response has the same format as reviews endpoint.
Retrieving reviews for a specific link is done by GET request at /api/v2/links/{linkId}/reviews
.
If you want to get reviews that are newer than a certain date you can use the URL param start_timestamp
with a timestamp in UNIX format.
The response has the same format as reviews endpoint.
The new version of api comes with a new endpoint that returns histogram data for all products related to a customer.
You can make a get request at /api/v2/histogram
and you will receive an object that looks like this:
{ "histogram": [ { "percentFromTotal": 50, "rating": 5, "reviewsNumber": 181 }, { "percentFromTotal": 11, "rating": 4, "reviewsNumber": 40 }, { "percentFromTotal": 6, "rating": 3, "reviewsNumber": 22 }, { "percentFromTotal": 8, "rating": 2, "reviewsNumber": 29 }, { "percentFromTotal": 24, "rating": 1, "reviewsNumber": 86 } ], "totals": { "nps": 12.3, "reviewAverageNorm": 0.28, "reviewAverageRank": 3.56, "reviewCount": 358 } }
We can fetch all values needed for histogram to be displayed. We have to make a single GET request to the endpoint /api/v2/product/{productId}/histogram
In this way, we will get an object with values that describe the histogram and look like the response from the request above.
curl -X GET "http://0.0.0.0:32323/api/v2/histogram/29444" -H "accept: application/json" -H "Authorization: Basic {{ base64 encoded username:password }}"
Retrieving all groups in your account is done by GET request at /api/v2/groups
.
The response has the following format:
[ { "id": 123, "name": "The group name", "productIds": [ 29440, 29881 ] } ]
In FeedCheck groups can be created with a POST request at /api/v2/groups
with the following payload:
{ "name": "Group Name" }Below is the request in cURL format:
curl -X POST "https://app.feedcheck.co/api/v2/groups" -H "accept: application/json" -H "Authorization: Basic {{ base64 encoded username:password }}" -H "Content-Type: application/json" -d "{"name":"Group Name"}"
The above request returns the created group id.
Retrieving a group by id from your account is done by GET request at /api/v2/groups/{groupId}
.
The response has the following format:
{ "id": 123, "name": "The group name", "productIds": [ 29440, 29881 ] }
Deleting a group by id from your account is done by DELETE request at /api/v2/groups/{groupId}
.
The response is represented by the id of the group that has been deleted.
Updating a group by id from your account is done by PATCH request at /api/v2/groups/{groupId}
.
The body of the request contains the new name that will be associated to the group.
As response we get the entire group that has been updated.
In FeedCheck the products can be added one by one to a group with a POST request at /api/v2/groups/{groupId}/addProduct
with the following payload:
{ "productId": 31490 }where "productId" contains the id of the product and "groupId" is a integer which represents the id of a group that exists in FeedCheck.
curl -X POST "https://app.feedcheck.co/api/v2/groups/2804/addProduct" -H "accept: application/json" -H "Authorization: Basic {{ base64 encoded username:password }}" -H "Content-Type: application/json" -d "{"productId":31490}"
In FeedCheck the products can be deleted one by one from a group with a DELETE request at /api/v2/groups/{groupId}/deleteProduct/{productId}
.
curl -X POST "https://app.feedcheck.co/api/v2/groups/2804/deleteProduct/31234" -H "accept: application/json" -H "Authorization: Basic {{ base64 encoded username:password }}" -H "Content-Type: application/json"
Retrieving all alerts from your account is done by GET request at /api/v2/alerts
.
The response has the following format:
[ { "id": 0, "email": "example@gmail.com", "method": "daily email", "type": "rating", "phone": "(555) 555-1234", "condition": "lt", "product": "product_29441", "channel": "amazon.com" } ]
In FeedCheck alerts can be created with a POST request at /api/v2/alerts
with the following payload:
{ "email": "example@gmail.com", "method": "email", "type": "new_reviews", "phone": "(555) 555-1234", "product": "product_29444", "channel": "ebay.com", "symbol": "", "sensitivity": "" }
The above request returns the id of created alert.
Retrieving alert by id from your account is done by GET request at /api/v2/alert/{alertId}
.
The response has the following format:
{ "channel": "website-example.com", "condition": "lte 5", "email": "example@gmail.com", "id": 731, "method": "daily email", "phone": "(555) 555-1234", "product": "myproducts", "type": "rating" }
Deleting an alert by id from your account is done by DELETE request at /api/v2/alert/{alertId}
.
The response is represented by the id of the alert that has been deleted.
If you have different products with the same links in a group you may receive duplicate reviews.
If you want to deduplicate reviews use the query parameter deduplicate=1