Customer Reviews

Get a list of customer reviews

Note: This endpoint is deprecated. Use the new endpoint listed under Reviews.

This endpoint retrieves your customer reviews by channel ID. The result set can be modified using a set of filters.

The path must contain a channelId. Note that this must be the channel ID that was assigned by eTrusted and not a user-defined ID.

Query parameters can be added to the request, separated by &.

Conceptually, there are two types of categories for the query parameters: actual filter parameters on the one hand, rating, submittedAfter and submittedBefore, and pagination parameters on the other, count, after and before. See our article on paginating response data for more information.

Parameters

Route Parameters

Name Description
channelId

The ID of the channel for which a list of customer reviews will be returned.

Example: chl-xxxxxxxx-yyyy-xxxx-yyyy-xxxxxxxxxxxx

HTTP Headers

Name Description
Authorization

An OAuth2 authorization header with an access token, see OAuth2

Query Parameters

Name Description
after

after is a customer review ID. The list of customer reviews in the response will only contain customer reviews submitted earlier than the customer review with this ID.

Example: rev-xxxxxxxa-yyyy-xxxx-yyyy-xxxxxxxxxxxx

before

before is a customer review ID. The list of customer reviews in the response will only contain customer reviews submitted later than the customer review with this ID.

Example: rev-xxxxxxxb-yyyy-xxxx-yyyy-xxxxxxxxxxxx

submittedAfter

submittedAfter is a timestamp in the ISO 8601 and RFC 3339 compliant format yyyy-MM-dd’T’HH:mm:ss.SSSZ. Check the glossary for examples of valid datetime formats. The list of customer reviews will only contain customer reviews submitted with a later timestamp.

Example: 2018-02-01T17:10:42.733Z

submittedBefore

submittedBefore is a timestamp in the ISO 8601 and RFC 3339 compliant format yyyy-MM-dd’T’HH:mm:ss.SSSZ. Check the glossary for examples of valid datetime formats. The list of customer reviews will only contain customer reviews submitted with an earlier timestamp.

Example: 2018-02-01T17:10:42.733Z

count

The desired number of customer reviews to be retrieved per page.

NB: This can be set to any number from 1 to 1000 with 1000 being the maximum number of records you can get per a page

rating

A comma-separated list of star rating values to be retrieved. If not set, all customer reviews are listed.

Example: 1, 2, 5

status

A comma-separated list of statuses to be retrieved. If not set, all customer reviews are listed.

The statuses you can filter for are:

  • APPROVED
  • MODERATION
  • REJECTED

Example: APPROVED, MODERATION

See our glossary entry for more information on review statuses.

type

A comma-separated list of customer review types to be retrieved. If not set, all customer reviews are listed.

The customer review types are:

  • SERVICE_REVIEW
  • PRODUCT_REVIEW

Example: PRODUCT_REVIEW

See our glossary entry for more information on review types.

hasReply

Reduces the list of customer reviews to only match customer reviews that either have been replied to or not. If not set, all customer reviews are listed.

Example: true

additionalInformation

A comma-separated list of additional pieces of information to be retrieved with the customer review.

If this property is not set, none of the of additional information are included in the customer review.

There are the following valid additional information types:

  • VETO, which holds information about a veto by our customer
  • ATTACHMENTS, which hold information about file attachments for this review
  • ORIGINAL_REVIEW, which holds information about the original review, in case the consumer edited their review via our B2C world.

Also see the response object additionalInformation.

Example: [VETO]

ignoreStatements

Filters the list to ignore statements. Default is true.

query

A full-text search query that is matched against the transaction reference and customer email address properties (see the response schema). Only matching customer reviews will be included in the response.

orderBy

Specify the date to sort the returned list of reviews by. Possible options:

  • editedAt: This is the date when the consumer last changed the review.It sorts the reviews in descending order using the lastEditedAt date
  • updatedAt:This is the date when the review was last updated. It sorts the reviews in descending order using the updatedAt date
  • submittedAt: This is the date when the review was created by the consumer. Reviews will be sorted by default in descending order using the submittedAt date if the orderBy parameter is not set or set to a non existing value.

Responses

200 - The list of customer reviews for the `channelId`.

Name Description
application/json CustomerReviewListResponseDto
{ "totalElements": 0, "paging": { "count": 10, "cursor": { "before": "rev-xxxxxxxa-yyyy-xxxx-yyyy-xxxxxxxxxxxx", "after": "rev-xxxxxxxb-yyyy-xxxx-yyyy-xxxxxxxxxxxx" }, "links": { "previous": "https://api.etrusted.com/channels/{channelId}/customer-reviews?count=10&before=rev-xxxxxxxa-yyyy-xxxx-yyyy-xxxxxxxxxxxx", "next": "https://api.etrusted.com/channels/{channelId}/customer-reviews?count=10&after=rev-xxxxxxxb-yyyy-xxxx-yyyy-xxxxxxxxxxxx" } }, "items": [ { "_object": "CustomerReview", "id": "rev-xxxxxxxx-yyyy-xxxx-yyyy-xxxxxxxxxxxx", "accountRef": "acc-xxxxxxxx-yyyy-xxxx-yyyy-xxxxxxxxxxxx", "channelRef": "chl-xxxxxxxx-yyyy-xxxx-yyyy-xxxxxxxxxxxx", "inviteRef": "inv-xxxxxxxx-yyyy-xxxx-yyyy-xxxxxxxxxxxx", "rating": null, "title": "Great experience", "comment": "Everything went well. Very helpful staff!", "createdAt": "2018-02-01T17:09:41.790Z", "updatedAt": "2018-02-01T17:09:41.790Z", "submittedAt": "2018-02-01T17:09:41.790Z", "feedbackType": {}, "state": {}, "type": {}, "verificationType": {}, "reply": { "createdAt": "2018-02-01T17:10:42.733Z", "updatedAt": "2018-02-01T17:11:33.121Z", "comment": "We appreciate your feedback.", "sendNotification": false }, "customer": { "firstName": "John", "lastName": "Doe", "fullName": "John Doe", "email": "john.doe@example.com", "mobile": "+123456789" }, "transaction": { "reference": "ORDER-12792", "date": "2018-01-04T12:09:50.722Z" }, "event": { "id": "evt-xxxxxxxx-yyyy-xxxx-yyyy-xxxxxxxxxxxx", "type": "checkout" }, "metadata": { "customParam1": "customVal1", "customParam2": "customVal2" }, "surveyData": { "responseParam1": "responseVal1", "responseParam2": "responseVal2" }, "questionnaire": { "id": "qre-xxxxxxxx-yyyy-xxxx-yyyy-xxxxxxxxxxxx", "locale": "en_GB", "templateRef": "qrt-xxxxxxxx-yyyy-xxxx-yyyy-xxxxxxxxxxxx" }, "hasAttachments": false, "additionalInformation": { "veto": { "createdAt": "2018-02-01T17:09:41.790Z", "comment": "Example comment", "reason": "value goes here", "ticketId": "123123" }, "attachments": { "images": [ { "id": "atc-xxxxxxxx-yyyy-xxxx-yyyy-xxxxxxxxxxxx", "extensions": "png", "urlOriginal": "https://attachments.etrusted.koeln/attachments/id/more/directories/image.png", "pathOriginal": "/attachments/id/more/directories/image.png", "pathThumbnail": "/attachments/id/more/directories/image.png", "pathLarge": "/attachments/id/more/directories/image.png" } ] }, "originalReview": { "rating": null, "title": "Great experience", "comment": "Everything went well. Very helpful staff!", "reply": { "createdAt": "2018-02-01T17:10:42.733Z", "updatedAt": "2018-02-01T17:11:33.121Z", "comment": "We appreciate your feedback.", "sendNotification": false } } }, "product": { "id": "prt-xxxxxxxx-yyyy-xxxx-yyyy-xxxxxxxxxxxx", "sku": "1234-TS-WH-M", "mpn": "23687778", "gtin": 1234567890123, "name": "Specialbrand T-Shirt White M", "url": "http://www.specialbrandshop.com/article123-TS-WH-M/", "imageUrl": "https://www.specialbrandshop.com/article123-TS-WH-M/image.jpg", "brand": "specialbrand" }, "editedAt": "2018-02-01T17:09:41.790Z", "originalReview": { "rating": null, "comment": "It was a very good experience. The service team is very friendly and the prices are good. I can only recommend this store.", "title": "It was a very good experience.", "reply": { "replyComment": "We appreciate your feedback.", "replyCreatedAt": "2018-02-01T17:10:42.733Z", "replyUpdatedAt": "2018-02-01T17:11:33.121Z" } } } ] }

401 - Unauthorized

No body is sent for this status code.

403 - Forbidden

No body is sent for this status code.

404 - Not found

No body is sent for this status code.
GET
https://api.etrusted.com/channels/{channelId}/customer-reviews
/** * Please be aware that storing your Authorization on the client side is strongly discourge. * This code example should only be used for testing purposes. */ //#region Parameters const baseUrl = 'https://api.etrusted.com'; const channelId = null; // Change me! const headers = { 'Authorization': null, // Change me! }; // Some query parameters are optional and should only be set if needed. const queryParameters = { 'after': null, // Change me! 'before': null, // Change me! 'submittedAfter': null, // Change me! 'submittedBefore': null, // Change me! 'count': null, // Change me! 'rating': null, // Change me! 'status': null, // Change me! 'type': null, // Change me! 'hasReply': null, // Change me! 'additionalInformation': null, // Change me! 'ignoreStatements': null, // Change me! 'query': null, // Change me! 'orderBy': null, // Change me! }; const body = ""; //#endregion let url = `${baseUrl}/channels/${channelId}/customer-reviews`; const queryString = Object .keys(queryParameters) .map(key => `${key}=${encodeURIComponent(queryParameters[key])}`) .join('&'); url = queryString ? `${url}?${url}` : url; const xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.setRequestHeader('Authorization', `${headers["Authorization"]}`); xhr.onreadystatechange = function() { if(xhr.readyState == 4 && xhr.status == 200) { console.log(xhr.responseText); } }; xhr.send(body || undefined);
const https = require('https'); //#region Parameters const baseUrl = 'https://api.etrusted.com'; const channelId = null; // Change me! const headers = { 'Authorization': null, // Change me! }; // Some query parameters are optional and should only be set if needed. const queryParameters = { 'after': null, // Change me! 'before': null, // Change me! 'submittedAfter': null, // Change me! 'submittedBefore': null, // Change me! 'count': null, // Change me! 'rating': null, // Change me! 'status': null, // Change me! 'type': null, // Change me! 'hasReply': null, // Change me! 'additionalInformation': null, // Change me! 'ignoreStatements': null, // Change me! 'query': null, // Change me! 'orderBy': null, // Change me! }; const body = ""; //#endregion let urlAsString = `${baseUrl}/channels/${channelId}/customer-reviews`; const queryString = Object .keys(queryParameters) .map(key => `${key}=${encodeURIComponent(queryParameters[key])}`) .join('&'); urlAsString = queryString ? `${urlAsString}?${queryString}` : urlAsString; const url = new URL(urlAsString); const options = { hostname: url.hostname, port: url.port, path: url.path, method: 'GET', headers: { 'Authorization': `${headers["Authorization"]}`, } }; const req = https.request(options, res => { console.log(`statusCode: ${res.statusCode}`) res.on('data', d => { process.stdout.write(d) }); }); req.on('error', error => { console.error(error) }); if (body) { req.write(JSON.stringify(data)); } req.end();
require "uri" require "json" require "net/http" baseUrl = "https://api.etrusted.com"; # Some query parameters are optional and should only be set if needed. queryStringParameters = { "after": nil, # Change me! "before": nil, # Change me! "submittedAfter": nil, # Change me! "submittedBefore": nil, # Change me! "count": nil, # Change me! "rating": nil, # Change me! "status": nil, # Change me! "type": nil, # Change me! "hasReply": nil, # Change me! "additionalInformation": nil, # Change me! "ignoreStatements": nil, # Change me! "query": nil, # Change me! "orderBy": nil, # Change me! } routeParameters = { "channelId": nil, # Change me! } headers = { "Authorization": nil, # Change me! } queryStringValues = queryStringParameters.to_a queryStringPairs = queryStringValues.map { |entry| entry[0].to_s + "=" + (entry[1] || '') }; queryString = queryStringPairs.join('&') urlAsString = baseUrl + "/channels/{channelId}/customer-reviews" + (queryString != "" ? "?" + queryString : "") urlAsString.gsub!(/\{[^\}]*\}/) { |m| routeParameters[m[1...-1].to_sym] } if urlAsString url = URI(urlAsString) https = Net::HTTP.new(url.host, url.port) https.use_ssl = true request = Net::HTTP::Get.new(url) request["Authorization"] = headers["Authorization"] response = https.request(request) puts response.read_body
//#region Imports import java.net.URL; import java.net.URLEncoder; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.io.IOException; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.lang.StringBuffer; import java.util.Map; import java.util.HashMap; import java.util.AbstractMap; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.ArrayList; //#endregion public class main { public static final Pattern PATTERN = Pattern.compile("\\{([^\\}]*)\\}"); public static void main(String[] args) throws IOException { try { Map<String, String> headers = new HashMap<>(); Map<String, String> queryStringValues = new HashMap<>(); Map<String, String> routeParameters = new HashMap<>(); //#region Parameters String baseUrl = "https://api.etrusted.com"; routeParameters.put("channelId", null); // Change me! headers.put("Authorization", null); // Change me! // Some query parameters are optional and should only be set if needed. queryStringValues.put("after", null); // Change me! queryStringValues.put("before", null); // Change me! queryStringValues.put("submittedAfter", null); // Change me! queryStringValues.put("submittedBefore", null); // Change me! queryStringValues.put("count", null); // Change me! queryStringValues.put("rating", null); // Change me! queryStringValues.put("status", null); // Change me! queryStringValues.put("type", null); // Change me! queryStringValues.put("hasReply", null); // Change me! queryStringValues.put("additionalInformation", null); // Change me! queryStringValues.put("ignoreStatements", null); // Change me! queryStringValues.put("query", null); // Change me! queryStringValues.put("orderBy", null); // Change me! //#endregion String urlAsString = baseUrl + "/channels/{channelId}/customer-reviews"; Matcher matcher = PATTERN.matcher(urlAsString); StringBuffer out = new StringBuffer(); while (matcher.find()) { String variable = routeParameters.get(matcher.group(1)); matcher.appendReplacement(out, variable); } matcher.appendTail(out); urlAsString = out.toString(); ArrayList<String> queryStringParts = new ArrayList<>(); for (String key : queryStringValues.keySet()){ queryStringParts.add(key + "=" + URLEncoder.encode(queryStringValues.get(key))); } if (queryStringParts.size() > 0) { urlAsString += "?" + String.join("&", queryStringParts); } URL url = new URL(urlAsString); HttpURLConnection httpRequest = (HttpURLConnection) url.openConnection(); for (String key : headers.keySet()){ httpRequest.setRequestProperty(key, headers.get(key)); } httpRequest.setRequestMethod("GET"); BufferedReader in = new BufferedReader(new InputStreamReader(httpRequest.getInputStream())); String inputLine; StringBuffer content = new StringBuffer(); while ((inputLine = in.readLine()) != null) { content.append(inputLine); } in.close(); int status = httpRequest.getResponseCode(); httpRequest.disconnect(); System.out.println("Response Status: " + String.valueOf(status)); System.out.println("Response Body: " + content.toString()); } catch (MalformedURLException ex) { System.out.println("URL provided not valid"); } catch (IOException ex) { System.out.println("Error reading HTTP connection" + ex.toString()); throw ex; } } }
<?php //#region Parameters $baseUrl = 'https://api.etrusted.com'; // Some query parameters are optional and should only be set if needed. $channelId = null; // Change me! // Some query parameters are optional and should only be set if needed. $after = null; // Change me! $before = null; // Change me! $submittedAfter = null; // Change me! $submittedBefore = null; // Change me! $count = null; // Change me! $rating = null; // Change me! $status = null; // Change me! $type = null; // Change me! $hasReply = null; // Change me! $additionalInformation = null; // Change me! $ignoreStatements = null; // Change me! $query = null; // Change me! $orderBy = null; // Change me! $headers = array( "Authorization" => null, // Change me! );//#endregion $url = "$baseUrl/channels/$channelId/customer-reviews"; $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => array( "Authorization: " . $headers["Authorization"], ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { echo $response; }
import http.client import json from urllib.parse import urlparse # Some query parameters are optional and should only be set if needed. query_string_parameters = { 'after': '', # Change me! 'before': '', # Change me! 'submittedAfter': '', # Change me! 'submittedBefore': '', # Change me! 'count': '', # Change me! 'rating': '', # Change me! 'status': '', # Change me! 'type': '', # Change me! 'hasReply': '', # Change me! 'additionalInformation': '', # Change me! 'ignoreStatements': '', # Change me! 'query': '', # Change me! 'orderBy': '', # Change me! } route_parameters = { 'channelId': '', # Change me! } headers = { 'Authorization': '', # Change me! } url_as_string = 'https://api.etrusted.com/channels/{channelId}/customer-reviews?after={after}&before={before}&submittedAfter={submittedAfter}&submittedBefore={submittedBefore}&count={count}&rating={rating}&status={status}&type={type}&hasReply={hasReply}&additionalInformation={additionalInformation}&ignoreStatements={ignoreStatements}&query={query}&orderBy={orderBy}'.format(**{ **query_string_parameters, **route_parameters }) payload = '' url = urlparse(url_as_string) http_client = http.client.HTTPSConnection(url.netloc) http_client.request("GET", url_as_string, payload, headers) response = http_client.getresponse() data = response.read() print(data.decode("utf-8"))
curl 'https://api.etrusted.com/channels/{channelId}/customer-reviews?after={after}&before={before}&submittedAfter={submittedAfter}&submittedBefore={submittedBefore}&count={count}&rating={rating}&status={status}&type={type}&hasReply={hasReply}&additionalInformation={additionalInformation}&ignoreStatements={ignoreStatements}&query={query}&orderBy={orderBy}' \ --request GET \ --header 'Authorization: value' \ --location

      <?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.etrusted.com/channels/{channelId}/customer-reviews?count=95&rating=2,3,4,5",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_POSTFIELDS => "",
  CURLOPT_HTTPHEADER => array(
    "Authorization: Bearer {access_token}",
    "Content-Type: application/json",
    "cache-control: no-cache"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}


    

      var settings = {
  "async": true,
  "crossDomain": true,
  "url": "https://api.etrusted.com/channels/{channelId}/customer-reviews?count=95&rating=2,3,4,5",
  "method": "GET",
  "headers": {
    "Content-Type": "application/json",
    "Authorization": "Bearer {access_token}",
    "cache-control": "no-cache",
  },
  "processData": false,
  "data": ""
}

$.ajax(settings).done(function (response) {
  console.log(response);
});


    

      OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.etrusted.com/channels/{channelId}/customer-reviews?count=95&rating=2,3,4,5")
  .get()
  .addHeader("Content-Type", "application/json")
  .addHeader("Authorization", "Bearer {access_token}")
  .addHeader("cache-control", "no-cache")
  .build();

Response response = client.newCall(request).execute();


    
This feature is coming soon!
The operation tester will give you the possibility to pre-test operations with our sandbox environment.
What would you expect from the operation tester? Tell us your opinion!

Get a customer review by ID

Note: This endpoint is deprecated. Use the new endpoint listed under Reviews.

This endpoint retrieves a customer review by its ID and its channel ID.

The path must contain a channelId. Note that this must be the channel ID that was assigned by eTrusted and not a customer-defined ID.

Parameters

Route Parameters

Name Description
channelId

The ID of the channel for which the customer review will be returned.

Example: chl-xxxxxxxa-yyyy-xxxx-yyyy-xxxxxxxxxxxx

customerReviewId

The customer review ID.

Example: rev-xxxxxxxa-yyyy-xxxx-yyyy-xxxxxxxxxxxx

HTTP Headers

Name Description
Authorization

An OAuth2 authorization header with an access token, see OAuth2

Responses

200 - The customer review with the specified ID.

Name Description
application/json CustomerReviewResponseDto
{ "_object": "CustomerReview", "id": "rev-xxxxxxxx-yyyy-xxxx-yyyy-xxxxxxxxxxxx", "accountRef": "acc-xxxxxxxx-yyyy-xxxx-yyyy-xxxxxxxxxxxx", "channelRef": "chl-xxxxxxxx-yyyy-xxxx-yyyy-xxxxxxxxxxxx", "inviteRef": "inv-xxxxxxxx-yyyy-xxxx-yyyy-xxxxxxxxxxxx", "rating": null, "title": "Great experience", "comment": "Everything went well. Very helpful staff!", "createdAt": "2018-02-01T17:09:41.790Z", "updatedAt": "2018-02-01T17:09:41.790Z", "submittedAt": "2018-02-01T17:09:41.790Z", "feedbackType": {}, "state": {}, "type": {}, "verificationType": {}, "reply": { "createdAt": "2018-02-01T17:10:42.733Z", "updatedAt": "2018-02-01T17:11:33.121Z", "comment": "We appreciate your feedback.", "sendNotification": false }, "customer": { "firstName": "John", "lastName": "Doe", "fullName": "John Doe", "email": "john.doe@example.com", "mobile": "+123456789" }, "transaction": { "reference": "ORDER-12792", "date": "2018-01-04T12:09:50.722Z" }, "event": { "id": "evt-xxxxxxxx-yyyy-xxxx-yyyy-xxxxxxxxxxxx", "type": "checkout" }, "metadata": { "customParam1": "customVal1", "customParam2": "customVal2" }, "surveyData": { "responseParam1": "responseVal1", "responseParam2": "responseVal2" }, "questionnaire": { "id": "qre-xxxxxxxx-yyyy-xxxx-yyyy-xxxxxxxxxxxx", "locale": "en_GB", "templateRef": "qrt-xxxxxxxx-yyyy-xxxx-yyyy-xxxxxxxxxxxx" }, "hasAttachments": false, "additionalInformation": { "veto": { "createdAt": "2018-02-01T17:09:41.790Z", "comment": "Example comment", "reason": "value goes here", "ticketId": "123123" }, "attachments": { "images": [ { "id": "atc-xxxxxxxx-yyyy-xxxx-yyyy-xxxxxxxxxxxx", "extensions": "png", "urlOriginal": "https://attachments.etrusted.koeln/attachments/id/more/directories/image.png", "pathOriginal": "/attachments/id/more/directories/image.png", "pathThumbnail": "/attachments/id/more/directories/image.png", "pathLarge": "/attachments/id/more/directories/image.png" } ] }, "originalReview": { "rating": null, "title": "Great experience", "comment": "Everything went well. Very helpful staff!", "reply": { "createdAt": "2018-02-01T17:10:42.733Z", "updatedAt": "2018-02-01T17:11:33.121Z", "comment": "We appreciate your feedback.", "sendNotification": false } } }, "product": { "id": "prt-xxxxxxxx-yyyy-xxxx-yyyy-xxxxxxxxxxxx", "sku": "1234-TS-WH-M", "mpn": "23687778", "gtin": 1234567890123, "name": "Specialbrand T-Shirt White M", "url": "http://www.specialbrandshop.com/article123-TS-WH-M/", "imageUrl": "https://www.specialbrandshop.com/article123-TS-WH-M/image.jpg", "brand": "specialbrand" }, "editedAt": "2018-02-01T17:09:41.790Z", "originalReview": { "rating": null, "comment": "It was a very good experience. The service team is very friendly and the prices are good. I can only recommend this store.", "title": "It was a very good experience.", "reply": { "replyComment": "We appreciate your feedback.", "replyCreatedAt": "2018-02-01T17:10:42.733Z", "replyUpdatedAt": "2018-02-01T17:11:33.121Z" } } }

401 - Unauthorized

No body is sent for this status code.

403 - Forbidden

No body is sent for this status code.

404 - Not found

No body is sent for this status code.
GET
https://api.etrusted.com/channels/{channelId}/customer-reviews/{customerReviewId}
/** * Please be aware that storing your Authorization on the client side is strongly discourge. * This code example should only be used for testing purposes. */ //#region Parameters const baseUrl = 'https://api.etrusted.com'; const channelId = null; // Change me! const customerReviewId = null; // Change me! const headers = { 'Authorization': null, // Change me! }; const body = ""; //#endregion let url = `${baseUrl}/channels/${channelId}/customer-reviews/${customerReviewId}`; const xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.setRequestHeader('Authorization', `${headers["Authorization"]}`); xhr.onreadystatechange = function() { if(xhr.readyState == 4 && xhr.status == 200) { console.log(xhr.responseText); } }; xhr.send(body || undefined);
const https = require('https'); //#region Parameters const baseUrl = 'https://api.etrusted.com'; const channelId = null; // Change me! const customerReviewId = null; // Change me! const headers = { 'Authorization': null, // Change me! }; const body = ""; //#endregion let urlAsString = `${baseUrl}/channels/${channelId}/customer-reviews/${customerReviewId}`; const queryString = Object .keys(queryParameters) .map(key => `${key}=${encodeURIComponent(queryParameters[key])}`) .join('&'); urlAsString = queryString ? `${urlAsString}?${queryString}` : urlAsString; const url = new URL(urlAsString); const options = { hostname: url.hostname, port: url.port, path: url.path, method: 'GET', headers: { 'Authorization': `${headers["Authorization"]}`, } }; const req = https.request(options, res => { console.log(`statusCode: ${res.statusCode}`) res.on('data', d => { process.stdout.write(d) }); }); req.on('error', error => { console.error(error) }); if (body) { req.write(JSON.stringify(data)); } req.end();
require "uri" require "json" require "net/http" baseUrl = "https://api.etrusted.com"; # Some query parameters are optional and should only be set if needed. queryStringParameters = { } routeParameters = { "channelId": nil, # Change me! "customerReviewId": nil, # Change me! } headers = { "Authorization": nil, # Change me! } queryStringValues = queryStringParameters.to_a queryStringPairs = queryStringValues.map { |entry| entry[0].to_s + "=" + (entry[1] || '') }; queryString = queryStringPairs.join('&') urlAsString = baseUrl + "/channels/{channelId}/customer-reviews/{customerReviewId}" + (queryString != "" ? "?" + queryString : "") urlAsString.gsub!(/\{[^\}]*\}/) { |m| routeParameters[m[1...-1].to_sym] } if urlAsString url = URI(urlAsString) https = Net::HTTP.new(url.host, url.port) https.use_ssl = true request = Net::HTTP::Get.new(url) request["Authorization"] = headers["Authorization"] response = https.request(request) puts response.read_body
//#region Imports import java.net.URL; import java.net.URLEncoder; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.io.IOException; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.lang.StringBuffer; import java.util.Map; import java.util.HashMap; import java.util.AbstractMap; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.ArrayList; //#endregion public class main { public static final Pattern PATTERN = Pattern.compile("\\{([^\\}]*)\\}"); public static void main(String[] args) throws IOException { try { Map<String, String> headers = new HashMap<>(); Map<String, String> queryStringValues = new HashMap<>(); Map<String, String> routeParameters = new HashMap<>(); //#region Parameters String baseUrl = "https://api.etrusted.com"; routeParameters.put("channelId", null); // Change me! routeParameters.put("customerReviewId", null); // Change me! headers.put("Authorization", null); // Change me! //#endregion String urlAsString = baseUrl + "/channels/{channelId}/customer-reviews/{customerReviewId}"; Matcher matcher = PATTERN.matcher(urlAsString); StringBuffer out = new StringBuffer(); while (matcher.find()) { String variable = routeParameters.get(matcher.group(1)); matcher.appendReplacement(out, variable); } matcher.appendTail(out); urlAsString = out.toString(); ArrayList<String> queryStringParts = new ArrayList<>(); for (String key : queryStringValues.keySet()){ queryStringParts.add(key + "=" + URLEncoder.encode(queryStringValues.get(key))); } if (queryStringParts.size() > 0) { urlAsString += "?" + String.join("&", queryStringParts); } URL url = new URL(urlAsString); HttpURLConnection httpRequest = (HttpURLConnection) url.openConnection(); for (String key : headers.keySet()){ httpRequest.setRequestProperty(key, headers.get(key)); } httpRequest.setRequestMethod("GET"); BufferedReader in = new BufferedReader(new InputStreamReader(httpRequest.getInputStream())); String inputLine; StringBuffer content = new StringBuffer(); while ((inputLine = in.readLine()) != null) { content.append(inputLine); } in.close(); int status = httpRequest.getResponseCode(); httpRequest.disconnect(); System.out.println("Response Status: " + String.valueOf(status)); System.out.println("Response Body: " + content.toString()); } catch (MalformedURLException ex) { System.out.println("URL provided not valid"); } catch (IOException ex) { System.out.println("Error reading HTTP connection" + ex.toString()); throw ex; } } }
<?php //#region Parameters $baseUrl = 'https://api.etrusted.com'; // Some query parameters are optional and should only be set if needed. $channelId = null; // Change me! $customerReviewId = null; // Change me! $headers = array( "Authorization" => null, // Change me! );//#endregion $url = "$baseUrl/channels/$channelId/customer-reviews/$customerReviewId"; $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => array( "Authorization: " . $headers["Authorization"], ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { echo $response; }
import http.client import json from urllib.parse import urlparse # Some query parameters are optional and should only be set if needed. query_string_parameters = { } route_parameters = { 'channelId': '', # Change me! 'customerReviewId': '', # Change me! } headers = { 'Authorization': '', # Change me! } url_as_string = 'https://api.etrusted.com/channels/{channelId}/customer-reviews/{customerReviewId}'.format(**{ **query_string_parameters, **route_parameters }) payload = '' url = urlparse(url_as_string) http_client = http.client.HTTPSConnection(url.netloc) http_client.request("GET", url_as_string, payload, headers) response = http_client.getresponse() data = response.read() print(data.decode("utf-8"))
curl 'https://api.etrusted.com/channels/{channelId}/customer-reviews/{customerReviewId}' \ --request GET \ --header 'Authorization: value' \ --location

      <?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.etrusted.com/channels/{channelId}/customer-reviews/{customerReviewId}",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_POSTFIELDS => "",
  CURLOPT_HTTPHEADER => array(
    "Authorization: Bearer {access_token}",
    "Content-Type: application/json",
    "cache-control: no-cache"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}


    

      var settings = {
  "async": true,
  "crossDomain": true,
  "url": "https://api.etrusted.com/channels/{channelId}/customer-reviews/{customerReviewId}",
  "method": "GET",
  "headers": {
    "Content-Type": "application/json",
    "Authorization": "Bearer {access_token}",
    "cache-control": "no-cache",
  },
  "processData": false,
  "data": ""
}

$.ajax(settings).done(function (response) {
  console.log(response);
});


    

      OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.etrusted.com/channels/{channelId}/customer-reviews/{customerReviewId}")
  .get()
  .addHeader("Content-Type", "application/json")
  .addHeader("Authorization", "Bearer {access_token}")
  .addHeader("cache-control", "no-cache")
  .build();

Response response = client.newCall(request).execute();


    
This feature is coming soon!
The operation tester will give you the possibility to pre-test operations with our sandbox environment.
What would you expect from the operation tester? Tell us your opinion!

Create a veto for a customer review

Note: This endpoint is deprecated. Use the new endpoint listed under Reviews.

This endpoint creates a veto for the specified customer review. A veto flags a customer review as inappropriate and suggests that the customer review should be removed or investigated. Veto objects consist of a comment, a reason and the associated channel name.

Note that whenever this method is called, eTrusted will create a ticket in Trusted Shops' Review Team board containing the veto data for further investigation.

Parameters

Route Parameters

Name Description
channelId

The channel UUID.

customerReviewId

The customer review UUID.

HTTP Headers

Name Description
Authorization

A token header containing information such as the account ID.

Body

Content-Type Type
application/json ReviewVetoRequestDto
{ "comment": "My veto comment.", "reason": "UNTRUTHFUL", "vetoReporterEmail": "my-name@my-domain.com", "channelName": "My channel name." }

Responses

200 - The veto has been saved succesfully.

Name Description
application/json ReviewVetoResponseDto
{ "id": "vet-xxxxxxxx-yyyy-xxxx-yyyy-xxxxxxxxxxxx", "ticketId": "123123", "comment": "example comment", "reason": "UNTRUTHFUL", "createdAt": "2018-02-01T17:09:41.790Z", "updatedAt": "2018-02-01T17:09:41.790Z" }

400 - Bad Request

No body is sent for this status code.

401 - Unauthorized

No body is sent for this status code.

403 - Forbidden

No body is sent for this status code.

404 - Not Found

No body is sent for this status code.
POST
https://api.etrusted.com/channels/{channelId}/customer-reviews/{customerReviewId}/vetos
/** * Please be aware that storing your Authorization on the client side is strongly discourge. * This code example should only be used for testing purposes. */ //#region Parameters const baseUrl = 'https://api.etrusted.com'; const channelId = null; // Change me! const customerReviewId = null; // Change me! const headers = { 'Authorization': null, // Change me! }; const body = { "comment": "My veto comment.", "reason": "UNTRUTHFUL", "vetoReporterEmail": "my-name@my-domain.com", "channelName": "My channel name." }; //#endregion let url = `${baseUrl}/channels/${channelId}/customer-reviews/${customerReviewId}/vetos`; const xhr = new XMLHttpRequest(); xhr.open('POST', url, true); xhr.setRequestHeader('Content-Type', 'application/json'); xhr.setRequestHeader('Authorization', `${headers["Authorization"]}`); xhr.onreadystatechange = function() { if(xhr.readyState == 4 && xhr.status == 200) { console.log(xhr.responseText); } }; xhr.send(body || undefined);
const https = require('https'); //#region Parameters const baseUrl = 'https://api.etrusted.com'; const channelId = null; // Change me! const customerReviewId = null; // Change me! const headers = { 'Authorization': null, // Change me! }; const body = { "comment": "My veto comment.", "reason": "UNTRUTHFUL", "vetoReporterEmail": "my-name@my-domain.com", "channelName": "My channel name." }; //#endregion let urlAsString = `${baseUrl}/channels/${channelId}/customer-reviews/${customerReviewId}/vetos`; const queryString = Object .keys(queryParameters) .map(key => `${key}=${encodeURIComponent(queryParameters[key])}`) .join('&'); urlAsString = queryString ? `${urlAsString}?${queryString}` : urlAsString; const url = new URL(urlAsString); const options = { hostname: url.hostname, port: url.port, path: url.path, method: 'POST', headers: { 'Authorization': `${headers["Authorization"]}`, 'Content-Type': 'application/json' } }; const req = https.request(options, res => { console.log(`statusCode: ${res.statusCode}`) res.on('data', d => { process.stdout.write(d) }); }); req.on('error', error => { console.error(error) }); if (body) { req.write(JSON.stringify(data)); } req.end();
require "uri" require "json" require "net/http" baseUrl = "https://api.etrusted.com"; # Some query parameters are optional and should only be set if needed. queryStringParameters = { } routeParameters = { "channelId": nil, # Change me! "customerReviewId": nil, # Change me! } headers = { "Authorization": nil, # Change me! } queryStringValues = queryStringParameters.to_a queryStringPairs = queryStringValues.map { |entry| entry[0].to_s + "=" + (entry[1] || '') }; queryString = queryStringPairs.join('&') urlAsString = baseUrl + "/channels/{channelId}/customer-reviews/{customerReviewId}/vetos" + (queryString != "" ? "?" + queryString : "") urlAsString.gsub!(/\{[^\}]*\}/) { |m| routeParameters[m[1...-1].to_sym] } if urlAsString url = URI(urlAsString) https = Net::HTTP.new(url.host, url.port) https.use_ssl = true request = Net::HTTP::Post.new(url) request["Authorization"] = headers["Authorization"] request["Content-Type"] = "application/json" request.body = JSON.dump({ "comment": "My veto comment.", "reason": "UNTRUTHFUL", "vetoReporterEmail": "my-name@my-domain.com", "channelName": "My channel name." }) response = https.request(request) puts response.read_body
//#region Imports import java.net.URL; import java.net.URLEncoder; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.io.IOException; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.lang.StringBuffer; import java.util.Map; import java.util.HashMap; import java.util.AbstractMap; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.ArrayList; //#endregion public class main { public static final Pattern PATTERN = Pattern.compile("\\{([^\\}]*)\\}"); public static void main(String[] args) throws IOException { try { Map<String, String> headers = new HashMap<>(); Map<String, String> queryStringValues = new HashMap<>(); Map<String, String> routeParameters = new HashMap<>(); //#region Parameters String body = new StringBuilder() .append("{") .append(" \"comment\": \"My veto comment.\",") .append(" \"reason\": \"UNTRUTHFUL\",") .append(" \"vetoReporterEmail\": \"my-name@my-domain.com\",") .append(" \"channelName\": \"My channel name.\"") .append("}") .toString(); String baseUrl = "https://api.etrusted.com"; routeParameters.put("channelId", null); // Change me! routeParameters.put("customerReviewId", null); // Change me! headers.put("Authorization", null); // Change me! //#endregion String urlAsString = baseUrl + "/channels/{channelId}/customer-reviews/{customerReviewId}/vetos"; Matcher matcher = PATTERN.matcher(urlAsString); StringBuffer out = new StringBuffer(); while (matcher.find()) { String variable = routeParameters.get(matcher.group(1)); matcher.appendReplacement(out, variable); } matcher.appendTail(out); urlAsString = out.toString(); ArrayList<String> queryStringParts = new ArrayList<>(); for (String key : queryStringValues.keySet()){ queryStringParts.add(key + "=" + URLEncoder.encode(queryStringValues.get(key))); } if (queryStringParts.size() > 0) { urlAsString += "?" + String.join("&", queryStringParts); } URL url = new URL(urlAsString); HttpURLConnection httpRequest = (HttpURLConnection) url.openConnection(); for (String key : headers.keySet()){ httpRequest.setRequestProperty(key, headers.get(key)); } httpRequest.setRequestMethod("POST"); httpRequest.setRequestProperty("Content-Type", "application/json"); httpRequest.setDoOutput(true); OutputStream outputStream = httpRequest.getOutputStream(); OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream, "UTF-8"); outputStreamWriter.write(body); outputStreamWriter.flush(); outputStreamWriter.close(); outputStream.close(); httpRequest.connect(); BufferedReader in = new BufferedReader(new InputStreamReader(httpRequest.getInputStream())); String inputLine; StringBuffer content = new StringBuffer(); while ((inputLine = in.readLine()) != null) { content.append(inputLine); } in.close(); int status = httpRequest.getResponseCode(); httpRequest.disconnect(); System.out.println("Response Status: " + String.valueOf(status)); System.out.println("Response Body: " + content.toString()); } catch (MalformedURLException ex) { System.out.println("URL provided not valid"); } catch (IOException ex) { System.out.println("Error reading HTTP connection" + ex.toString()); throw ex; } } }
<?php //#region Parameters $baseUrl = 'https://api.etrusted.com'; // Some query parameters are optional and should only be set if needed. $channelId = null; // Change me! $customerReviewId = null; // Change me! $headers = array( "Authorization" => null, // Change me! ); // Change me! $body = json_decode('{ "comment": "My veto comment.", "reason": "UNTRUTHFUL", "vetoReporterEmail": "my-name@my-domain.com", "channelName": "My channel name." }'); //#endregion $url = "$baseUrl/channels/$channelId/customer-reviews/$customerReviewId/vetos"; $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => json_encode($body), CURLOPT_HTTPHEADER => array( "Content-Type: application/json", "Authorization: " . $headers["Authorization"], ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { echo $response; }
import http.client import json from urllib.parse import urlparse # Some query parameters are optional and should only be set if needed. query_string_parameters = { } route_parameters = { 'channelId': '', # Change me! 'customerReviewId': '', # Change me! } headers = { 'Content-Type': 'application/json' 'Authorization': '', # Change me! } url_as_string = 'https://api.etrusted.com/channels/{channelId}/customer-reviews/{customerReviewId}/vetos'.format(**{ **query_string_parameters, **route_parameters }) payload = '' payload = json.dumps({ "comment": "My veto comment.", "reason": "UNTRUTHFUL", "vetoReporterEmail": "my-name@my-domain.com", "channelName": "My channel name." }) url = urlparse(url_as_string) http_client = http.client.HTTPSConnection(url.netloc) http_client.request("POST", url_as_string, payload, headers) response = http_client.getresponse() data = response.read() print(data.decode("utf-8"))
curl 'https://api.etrusted.com/channels/{channelId}/customer-reviews/{customerReviewId}/vetos' \ --request POST \ --data-raw '{ "comment": "My veto comment.", "reason": "UNTRUTHFUL", "vetoReporterEmail": "my-name@my-domain.com", "channelName": "My channel name." }' \ --header 'Content-Type: application/json' \ --header 'Authorization: value' \ --location

      <?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.etrusted.com/channels/{channelId}/customer-reviews/{customerReviewId}/vetos",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS =>
  '{
    "comment": "My veto comment.",
    "reason": "UNTRUTHFUL",
    "channelName": "My channel name."
   }',
  CURLOPT_HTTPHEADER => array(
    "Authorization: Bearer {access_token}",
    "Content-Type: application/json",
    "cache-control: no-cache"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}


    

      var settings = {
  "async": true,
  "crossDomain": true,
  "url": "https://api.etrusted.com/channels/{channelId}/customer-reviews/{customerReviewId}/vetos",
  "method": "POST",
  "headers": {
    "Content-Type": "application/json",
    "Authorization": "Bearer {access_token}",
    "cache-control": "no-cache",
  },
  "processData": false,
  "data": {
    "comment": "My veto comment.",
    "reason": "UNTRUTHFUL",
    "channelName": "My channel name."
    }
}

$.ajax(settings).done(function (response) {
  console.log(response);
});


    

      OkHttpClient client = new OkHttpClient();

MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType,
  "{" +
     "\"comment\": \"My veto comment.\"," +
     "\"reason\": \"UNTRUTHFUL\"," +
     "\"channelName\": \"My channel name.\"" +
 "}"
);

Request request = new Request.Builder()
  .url("https://api.etrusted.com/channels/{channelId}/customer-reviews/{customerReviewId}/vetos")
  .post(body)
  .addHeader("Content-Type", "application/json")
  .addHeader("Authorization", "Bearer {access_token}")
  .addHeader("cache-control", "no-cache")
  .build();

Response response = client.newCall(request).execute();


    
This feature is coming soon!
The operation tester will give you the possibility to pre-test operations with our sandbox environment.
What would you expect from the operation tester? Tell us your opinion!

Models

FeedbackType

The feedback type which is determined by the customer review title, comment and rating. The type is REVIEW unless either the comment or the rating are missing. In that case it is STATEMENT.

Properties

ReviewState

The state of the customer review when the API request was processed. See our glossary entry for more information on review states.

Properties

Type

The customer review type.

A service review is a review for a channel as a whole, e.g. a shop or a store, while a product review is tied to a single product.

Properties

VerificationType

Specifies whether the collection method in combination with the provider/source can be trusted. A Review will be VERIFIED unless it comes from an external import by an account that is not explicitly marked as verified.

Properties

CustomerReviewReplyDto

The reply to the customer review, written by the channel owner.

Properties

createdAt
string
 

The date and time when the reply was stored initially, in the ISO 8601 and RFC 3339 compliant format yyyy-MM-dd’T’HH:mm:ss.SSSZ. Check the glossary for examples of valid datetime formats.

updatedAt
string
 

The date and time when the reply was last updated, in the ISO 8601 and RFC 3339 compliant format yyyy-MM-dd’T’HH:mm:ss.SSSZ. Check the glossary for examples of valid datetime formats.

comment
string
 

The text message of the reply.

sendNotification
boolean

Indicates whether the reviewer is notified about the reply by eTrusted or not.

CustomerReviewResponseProductDto

The product data retrieved with the customer review.

Properties

id
string
 

The product UUID.

sku
string
 

The Stock Keeping Unit is a specific article number of the product, most often assigned by a specific retail shop as a scannable bar code. It lets the shops track movement of inventory. The SKU must be unique and usually consists of about 8 characters.

mpn
string

The Manufacturer Part Number is an identifier for a product by the manufacturer if applicable. In some cases it can serve as a substitute for the GTIN.

gtin
string

The GTIN is a unique string that identifies the product globally. A GTIN can be an ISBN, an EAN, and much more. Refer to gtin.info.

name
string
 

The product name contains information about a product that is associated with the customer review. E.g. Specialbrand T-Shirt White M.

url
string
 

The link to the product detail page in your online shop or public catalog (e.g. http://www.specialbrandshop.com/article123-TS-WH-M/).

imageUrl
string

The link to the product image of the product. eTrusted shows a picture of the product to the customer who wants to write a review. This makes it easier for customers to remember the purchase and recognize the product.

brand
string

The brand of the product. A product can only have one brand.

OriginalReview

This is the initial unedited customer review. This object will not change when the review gets edited.

Properties

rating
number

The original core review star rating. The value ranges from 1 to 5.

comment
string

The original review comment. It is a string of up to 4000 characters.

title
string

The original review title.

reply
object

The original reply to the customer review, written by the channel owner.

Properties
replyComment
string

The text message of the reply.

replyCreatedAt
string

The date and time when the reply was stored initially, in the ISO 8601 and RFC 3339 compliant format yyyy-MM-dd’T’HH:mm:ss.SSSZ. Check the glossary for examples of valid datetime formats.

replyUpdatedAt
string

The date and time when the reply was last updated, in the ISO 8601 and RFC 3339 compliant format yyyy-MM-dd’T’HH:mm:ss.SSSZ. Check the glossary for examples of valid datetime formats.

CustomerReviewResponseDto

A single retrieved customer review.

Properties

_object
string
 

The object type of this response object, which is CustomerReview.

id
string
 

The customer review UUID.

accountRef
string
 

A UUID as account reference.

channelRef
string
 

A UUID as channel reference.

inviteRef
string

A UUID as invite reference.

rating
number
 

The star rating.

The value ranges from 1.0 to 5.0.

title
string
 

A title headline for this customer review.

comment
string
 

The review text for this customer review.

createdAt
string
 

The date and time when the customer review was stored initially, in the ISO 8601 and RFC 3339 compliant format yyyy-MM-dd’T’HH:mm:ss.SSSZ. Check the glossary for examples of valid datetime formats. This date will be after submittedAt for imported reviews.

updatedAt
string
 

The date and time when the customer review was last modified, in the ISO 8601 and RFC 3339 compliant format yyyy-MM-dd’T’HH:mm:ss.SSSZ. Check the glossary for examples of valid datetime formats.

submittedAt
string
 

The date and time when the customer review was submitted by the reviewer, in the ISO 8601 and RFC 3339 compliant format yyyy-MM-dd’T’HH:mm:ss.SSSZ. Check the glossary for examples of valid datetime formats.

feedbackType

state
 

type
 

verificationType

customer
object

This object holds information about the customer who wrote the review.

Properties
firstName
string

The first name of the customer.

lastName
string

The last name of the customer.

fullName
string

The full name of the customer.

email
string

An email address of the customer.

mobile
string

A mobile phone number of the customer.

transaction
object

The transaction associated with the customer review.

Properties
reference
string
 

The transaction reference, e.g. ORDER-12345.

date
string

The date and time when the transaction took place, in the ISO 8601 and RFC 3339 compliant format yyyy-MM-dd’T’HH:mm:ss.SSSZ. Check the glossary for examples of valid datetime formats.

event
object

The event object that is associated with the customer review.

Properties
id
string
 

The event UUID.

type
string
 

The event type.

metadata
object

The metadata object is a collection of user-defined data added to the customer review.

surveyData
object

The surveyData object holds custom response data from additional questions from eTrusted questionnaires.

questionnaire
object
 

The questionnaire that was used to collect the customer review.

Properties
id
string
 

The questionnaire UUID.

locale
string
 

The questionnaire locale.

templateRef
string
 

A UUID as questionnaire template reference.

hasAttachments
boolean

This indicates if the whether the customer review has attachments, such as images.

additionalInformation
object

This object containts all of the additional information that is stored with the customer review.

Properties
veto
object

The veto of this customer review.

Properties
createdAt
string
 

The date and time when the veto was created, in the ISO 8601 and RFC 3339 compliant format yyyy-MM-dd’T’HH:mm:ss.SSSZ.

comment
string
 

The comment in the ticket that was created internally at Trusted Shops for this veto.

reason
string
 

The reason for this veto.

This string may only have the following values:

  • UNTRUTHFUL
  • ABUSIVE
  • VIOLATES_THE_TERMS_OF_USE

ticketId
string
 

A reference to the ticket that was created internally at Trusted Shops for this veto. The ID is a sequence of six digits.

attachments
object

Holds information about the attachments of this customer review.

Properties
images
object[]

This is a list of image objects.

Each image object represents a single image attached to this customer review.

originalReview
object

This object contains the original review, in case the consumer edited their review via our B2C world.

Properties
rating
number

The star rating before the changes.

The value ranges from 1.0 to 5.0.

title
string

A title headline for this customer review before any changes.

comment
string

The review text for this customer review before any changes.

editedAt
string

The date and time when the customer review was last edited by the consumer via our B2C world, in the ISO 8601 and RFC 3339 compliant format yyyy-MM-dd’T’HH:mm:ss.SSSZ. Check the glossary for examples of valid datetime formats. Will not be present in the response when the review was never edited by the consumer.

originalReview

CustomerReviewListResponseDto

The list of retrieved reviews.

Properties

totalElements
integer
 

Deprecated. Use review/count. The value will return 0.

paging
object
 

The paging object holds pagination information for the reviews retrieved via this API.

Properties
count
integer
 

This is the number of reviews displayed in one page of the pagination.

Note that this number might be lower than the count number in the request. This happens when the last page is reached.

For example: A total number of 105 reviews are displayed in chunks of 20 reviews per page. The sixth and last page will only have 5 reviews. The count property will hold the value 5.

cursor
object
 

The cursor object contains information to navigate to the previous and next pages in a subsequent request.

Properties
before
string
 

This is a review ID to retrieve the previous page in the pagination.

after
string

This is a review ID to retrieve the next page in the pagination. It is empty if it is the last page in the pagination.

links
object
 

Links to the previous and next pages in the pagination.

Note that the links contain the exact filter parameters that were used in the request (rating, submittedBefore, submittedAfter). This makes sure that the pagination is always relative to the same filter in subsequent requests. If developers build URLs themselves using after, before, and the matching information inside the cursor object, they may need to ensure to recreate the same filter as well.

Properties
previous
string
 

The link to the previous page in the pagination.

next
string

The link to the next page in the pagination. It is empty if it is the last page in the pagination.

items
 

This is the list of review objects.

Each item object represents a single retrieved review.

ReviewVetoRequestDto

Properties

comment
string
 

The veto comment. Provide additional information on the review or your veto here.

reason
string
 

The reason for the veto.

This string may only have the following values:

  • UNTRUTHFUL
  • ABUSIVE,
  • VIOLATES_THE_TERMS_OF_USE

vetoReporterEmail
string

The E-Mail address of the veto reporter.

channelName
string

The name of the channel the review is associated with.

ReviewVetoResponseDto

The veto has been saved successfully.

Properties

id
string
 

The veto UUID.

ticketId
string
 

A reference to the ticket that was created internally at Trusted Shops for this veto. The ID is a sequence of six digits.

comment
string
 

The comment in the ticket that was created internally at Trusted Shops for this veto.

reason
string
 

The reason for this veto.

This string may only have the following values:

  • UNTRUTHFUL
  • ABUSIVE
  • VIOLATES_THE_TERMS_OF_USE

createdAt
string
 

The date and time when the veto was created, in the ISO 8601 and RFC 3339 compliant format yyyy-MM-dd’T’HH:mm:ss.SSSZ.

updatedAt
string

The date and time when the veto was last modified, in the ISO 8601 and RFC 3339 compliant format yyyy-MM-dd’T’HH:mm:ss.SSSZ.

Need further support?

Visit the Help Centre for further information, or contact us. Are some words or terms unfamiliar? Then visit the glossary for clarification.