Download OpenAPI specification:
The Published API provides access to user-generated content (UGC), including product and brand reviews and ratings, for Skeepers organizations. It is designed to facilitate seamless integration with e-commerce platforms, analytics tools, and other applications by offering:
This API empowers businesses to leverage user reviews and enhance customer experiences through insights and integrations.
The base URL for accessing the Published API is:
https://api.skeepers.io/verified-reviews/v1/published
Authentication is required to use the Published API. Follow the step-by-step guide below to retrieve your API credentials, obtain an access token, and use it to authenticate your requests.
To begin, log in to your Ratings & Reviews account: https://app.netreviews.eu/
To obtain an access token, make a POST request to the authentication endpoint as follows:
Authentication endpoint
https://auth.skeepers.io/realms/skeepers/protocol/openid-connect/token
Header Parameters
Authorization: Basic <base64 encoded "clientId:clientSecret">
Content-Type: application/x-www-form-urlencoded
Replace <base64 encoded "clientId:clientSecret"> with the Base64-encoded value of your API credentials (Client ID and Client secret).
Request Parameters
grant_type: client_credentials
audience: verified-reviews
Example
curl -X POST "https://auth.skeepers.io/realms/skeepers/protocol/openid-connect/token" \
-H "Authorization: Basic <base64(client_id:client_secret)>" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials" \
-d "audience=verified-reviews"
Once you've obtained the access token, include it in the Authorization header of all your requests to the Published API as follows:
Authorization: Bearer <access_token>
Replace <access_token> with the actual access token you received from the previous step.
Great job! You are now ready to make authenticated requests to the Published API.
Let's explore the methods below!
To ensure fair usage and optimal performance for all users, the Published API implements rate limiting on all endpoints.
Rate Limits:
Exceeding Rate Limits:
If you exceed the rate limit, you will receive a 429 Too Many Requests response. We recommend implementing exponential backoff in your application to handle these responses gracefully.
Response Headers:
The API returns the following headers to help you track and manage rate limits:
| Header | Description |
|---|---|
RateLimit-Limit |
Allowed limit in the timeframe. |
RateLimit-Remaining |
Number of available requests remaining. |
RateLimit-Reset |
The time remaining, in seconds, until the rate limit quota is reset. |
X-RateLimit-Limit-Second |
The time limit, in number of seconds. |
X-RateLimit-Limit-Minute |
The time limit, in number of minutes. |
X-RateLimit-Remaining-Second |
The number of seconds still left in the time frame. |
X-RateLimit-Remaining-Minute |
The number of minutes still left in the time frame. |
Retry-After |
This header appears on 429 errors, indicating how long the upstream service is expected to be unavailable to the client. |
Need Higher Limits?
If your use case requires higher rate limits, custom limits can be configured on a per-client basis. Please contact our support team to discuss your requirements and we'll work with you to establish appropriate limits for your needs.
Given our OAuth2.0 authentication system and rate limiting implementation, we recommend a specific integration pattern to optimize performance and ensure reliable data access.
Recommended Integration Pattern:
For most use cases, we recommend pulling review data into your own system rather than making direct API calls from your backend. This approach provides better performance, reliability, and user experience.
1. Initial Full Synchronization
Start by performing a complete data pull to populate your local system:
# First request - get initial batch
GET /products/reviews?limit=200&sort=publish_date
# Use cursor in Link header to know if there are more pages and continue until all data is retrieved
GET /products/reviews?cursor=eyJpZCI6MTIzfQ&limit=200&sort=publish_date
GET /products/reviews?cursor=eyJpZCI6NDU2fQ&limit=200&sort=publish_date
# ... continue until no more pages
2. Periodic Updates
After the initial sync, implement periodic updates to capture new reviews. The frequency can be determined based on your business needs while respecting our rate limits:
# Get newest reviews first, sorted by publish date descending
GET /products/reviews?limit=200&sort=publish_date&desc=publish_date
# Continue pagination until you reach reviews you already have in your system
GET /products/reviews?cursor=eyJpZCI6MTIzfQ&limit=200&sort=publish_date&desc=publish_date
# ... stop iterating once you encounter a review already in your local system
Benefits of This Approach:
Future Frontend Access:
For clients requiring direct frontend API access, we plan to introduce a dedicated public endpoint with specific rate limiting designed for client-side usage. This endpoint will complement the current server-to-server API.
Reporting reviews capacity
The API does not allow reporting reviews directly. You need to implement the reporting functionality in your own system and then report the reviews directly in our backoffice or contact our support team for assistance.
Most endpoints in the Published API use cursor-based pagination for efficient navigation through large result sets.
How it works:
Link response headerGetting started:
Link header (rel="next") and use it in your next requestrel="prev" to navigate backwardImportant rules:
Example workflow:
# First request
GET /products/reviews?limit=10&sort=review_date
# Response includes Link header:
Link: <...?cursor=eyJpZCI6MTIzLCJ0aW1lc3RhbXAiOiIyMDI0LTA2LTI0VDE1OjEyOjMxWiJ9&limit=10&sort=review_date>; rel="next"
# Next request
GET /products/reviews?cursor=eyJpZCI6MTIzLCJ0aW1lc3RhbXAiOiIyMDI0LTA2LTI0VDE1OjEyOjMxWiJ9&limit=10&sort=review_date
For detailed parameter information, see the cursor and limit query parameters in each endpoint.
Retrieve comprehensive product information including aggregated ratings, AI-generated review summaries, and quality criteria data.
Use this endpoint to:
Pagination: This endpoint supports cursor-based pagination. See the Pagination section for details.
Note: Products are identified by product_variation_id. For GTIN-based lookups, use the /products/ratings endpoint instead.
| cursor | string Example: cursor=eyJpZCI6MTIzLCJ0aW1lc3RhbXAiOiIyMDI0LTA2LTI0VDE1OjEyOjMxWiJ9 Cursor for navigating through paginated results page by page, both forward and backward. Navigation Flow:
Important Rules:
Example: |
| limit | integer [ 1 .. 200 ] Default: 10 Example: limit=10 Number of items to return per page. Constraints:
Note: The limit must remain consistent when using cursors for navigation. |
| sort | string Example: sort=review_date,review_rate Field(s) to sort results by, separated by commas for multiple fields. Sorting Rules:
Validation:
Common sortable fields:
|
| desc | string Example: desc=review_date,review_rate Specify which fields should be sorted in descending order. By default, all sorting is ascending. Usage Rules:
Validation:
Examples:
|
| product_variation_id | string Product's unique identifier. String separated by commas for multiple values. |
[- {
- "ratings": {
- "average": 4.5,
- "count_total": 127,
- "count_5": 89,
- "count_4": 23,
- "count_3": 10,
- "count_2": 3,
- "count_1": 2
}, - "review_summary": {
- "content": "Customers love the build quality and performance, with many praising the excellent customer service. Some minor concerns about delivery times.",
- "last_updated_at": "2024-06-24T15:12:31Z"
}, - "product_variation_id": "PRODUCT-ABC-123",
- "website_id": "55d5588-5454s-55d5-1225-12558s5525",
- "extras": [
- {
- "type": "rate",
- "display_name": "QUALITY",
- "label": "Quality",
- "rate": {
- "average": 4.8,
- "count": 95
}
}
]
}
]Retrieve individual product reviews with comprehensive filtering options for building review displays, analytics, and customer insights.
Use this endpoint to:
Advanced filtering: Supports multiple product identifiers (GTIN, SKU, MPN) and various date ranges for precise data retrieval.
Pagination: This endpoint supports cursor-based pagination. See the Pagination section for details.
| cursor | string Example: cursor=eyJpZCI6MTIzLCJ0aW1lc3RhbXAiOiIyMDI0LTA2LTI0VDE1OjEyOjMxWiJ9 Cursor for navigating through paginated results page by page, both forward and backward. Navigation Flow:
Important Rules:
Example: |
| limit | integer [ 1 .. 200 ] Default: 10 Example: limit=10 Number of items to return per page. Constraints:
Note: The limit must remain consistent when using cursors for navigation. |
| sort | string Example: sort=review_date,review_rate Field(s) to sort results by, separated by commas for multiple fields. Sorting Rules:
Validation:
Common sortable fields:
|
| desc | string Example: desc=review_date,review_rate Specify which fields should be sorted in descending order. By default, all sorting is ascending. Usage Rules:
Validation:
Examples:
|
| product_variation_id | string Product's unique identifier. String separated by commas for multiple values. |
| product_ean | string GTIN/EAN code of the product(s). String separated by commas for multiple values. |
| product_mpn | string Manufacturer Part Number, a unique product identifier from the manufacturer. Can be a single value or a list of value separated by comma. |
| product_jan | string GTIN/JAN code of the product(s). String separated by commas for multiple values. |
| order_reference | string Reference linked to the purchase order. String separated by commas for multiple values. |
| product_upc | string GTIN/UPC code of the product(s). String separated by commas for multiple values. |
| product_sku | string Stock Keeping Unit of the product(s). String separated by commas for multiple values. |
| review_rate | Array of integers Items Enum: 1 2 3 4 5 Filter reviews by rating (1-5). |
| publish_date.$KEYWORD | string <date-time> Example: publish_date.$KEYWORD=2024-01-01T00:00:00Z Filter reviews by their publication date using date range operators. Available operators:
Format: Use ISO 8601 format: Examples:
|
| review_date.$KEYWORD | string <date-time> Example: review_date.$KEYWORD=2024-01-01T00:00:00Z Filter reviews by the date when customers originally wrote the review. Available operators:
Common use cases:
|
| order_date.$KEYWORD | string <date-time> Example: order_date.$KEYWORD=2024-01-01T00:00:00Z Filter reviews by the original purchase order date. Available operators:
Business use cases:
|
| search | string Search term to filter reviews. This search term will be applied on both the review content and the moderation text. |
| incentivization | string Enum: "none" "gifted" "compensated" "spontaneous" If the review was incentivized. Gifted meaning the product was gifted to the consumer in exchange for a review. Compensated meaning the product was bought by the consumer but the review was still compensated with monetary value. |
| syndicated_review | boolean If the review was syndicated, meaning if was not deposited on this account but on the same product on another account. |
[- {
- "review_id": "67d7b591-40a2-7ab4-1925-0b2db7753c90",
- "author_firstname": "John",
- "author_lastname": "Doe",
- "is_personal_data_disclosed": true,
- "locale": "fr",
- "review_date": "2024-06-24T15:12:31Z",
- "review_content": "Great product!",
- "review_rate": 5,
- "publish_date": "2024-06-24T15:12:31Z",
- "order_date": "2024-06-24T15:12:31Z",
- "order_reference": "1527455",
- "product_variation_id": "1527455",
- "product_ean": "9520001112225",
- "product_upc": "012345678905",
- "product_jan": "4901234567897",
- "product_sku": "XYZ-12345",
- "product_mpn": "00638NAGPE",
- "product_brand": "Nintendo",
- "product_name": "Nintendo Switch",
- "order_id": "1527455",
- "is_verified": true,
- "medias": [
- {
- "type": "IMAGE",
}
], - "incentivization": "gifted",
- "syndicated_review": true,
- "syndicated_review_source": "Nintendo (NL)",
- "translated_review": {
- "bg": "Страхотен продукт!",
- "cs": "Skvělý produkt!",
- "de": "Großartiges Produkt!",
- "el": "Εξαιρετικό προϊόν!",
- "en": "Great product!",
- "es": "Gran producto!",
- "fr": "Très bon produit!",
- "it": "Ottimo prodotto!",
- "nl": "Geweldig product!",
- "pl": "Świetny produkt!",
- "pt": "Ótimo produto!",
- "sk": "Odličen izdelek!",
- "tr": "Harika ürün!"
}, - "moderations": [
- {
- "comment": "Merci beaucoup pour votre commentaire.",
- "date": "2025-05-28T15:30:00.000Z",
- "origin": "moderator",
- "translated_comment": {
- "bg": "Благодарим за коментара!",
- "cs": "Děkujeme za komentář!",
- "de": "Vielen Dank für Ihren Kommentar!",
- "el": "Σας ευχαριστούμε για το σχόλιό σας!",
- "en": "Thank you for your comment!",
- "es": "¡Gracias por tu comentario!",
- "fr": "Merci pour votre commentaire!",
- "it": "Grazie per il tuo commento!",
- "nl": "Bedankt voor je reactie!",
- "pl": "Dziękujemy za komentarz!",
- "pt": "Obrigado pelo seu comentário!",
- "sk": "Hvala za komentar!",
- "tr": "Yorumunuz için teşekkürler!"
}
}
], - "extras": {
- "QUALITY": {
- "display_name": "PRICE",
- "label": "Price",
- "type": "I1",
- "value": 5
}, - "REVIEW_TITLE": {
- "display_name": "REVIEW_TITLE",
- "label": "Title of the review",
- "type": "S",
- "value": "Really good product"
}
}
}
]Retrieve aggregated rating statistics for multiple products simultaneously. Ideal for catalog integrations and bulk rating lookups.
Use this endpoint to:
Key features:
| type required | string Enum: "product_ean" "product_variation_id" Type of aggregation for your ratings. Retrieve ratings by GTIN or aggregate rating at the parent level to regroup all the values per product variation id. |
| value required | string The identifier of the product you want to get ratings for. Either a list of product_variation_id or a list of GTINs. Maximum number of values is 200. String separated by commas for multiple values. |
| sort | string Example: sort=review_date,review_rate Field(s) to sort results by, separated by commas for multiple fields. Sorting Rules:
Validation:
Common sortable fields:
|
| desc | string Example: desc=review_date,review_rate Specify which fields should be sorted in descending order. By default, all sorting is ascending. Usage Rules:
Validation:
Examples:
|
[- {
- "product_variation_id": "PRODUCT-REF-03",
- "product_ean": "GTIN-EAN",
- "average": 4.76,
- "count_total": 43,
- "count_5": 37,
- "count_4": 4,
- "count_3": 1,
- "count_2": 0,
- "count_1": 1,
- "extras": [
- {
- "count": 20,
- "average": 3.45,
- "label": "QUALITY"
}
]
}
]Retrieve reviews about your brand or individual shops with advanced filtering for reputation management and customer feedback analysis.
Use this endpoint to:
Pagination: This endpoint supports cursor-based pagination. See the Pagination section for details.
| cursor | string Example: cursor=eyJpZCI6MTIzLCJ0aW1lc3RhbXAiOiIyMDI0LTA2LTI0VDE1OjEyOjMxWiJ9 Cursor for navigating through paginated results page by page, both forward and backward. Navigation Flow:
Important Rules:
Example: |
| limit | integer [ 1 .. 200 ] Default: 10 Example: limit=10 Number of items to return per page. Constraints:
Note: The limit must remain consistent when using cursors for navigation. |
| sort | string Example: sort=review_date,review_rate Field(s) to sort results by, separated by commas for multiple fields. Sorting Rules:
Validation:
Common sortable fields:
|
| desc | string Example: desc=review_date,review_rate Specify which fields should be sorted in descending order. By default, all sorting is ascending. Usage Rules:
Validation:
Examples:
|
| search | string Search term to filter reviews. This search term will be applied on both the review content and the moderation text. |
| is_verified | boolean Review is verified or not. |
| is_personal_data_disclosed | boolean Whether the author has agreed to share personal data or not. |
| shop_key | string Search review by shop key of the brand. Can be a single value or a list of value separated by comma. |
| review_rate | Array of integers Items Enum: 1 2 3 4 5 Filter reviews by rating (1-5). |
| linked_to_shop | boolean The linked_to_shop filter allows you to retrieve the reviews that are linked to a shop for a brand. Using false will return only reviews that are not linked to shops. |
[- {
- "review_id": "67d7b591-40a2-7ab4-1925-0b2db7753c90",
- "order_reference": "1527455",
- "shop_key": "B001",
- "review_content": "Great merchant!",
- "author_lastname": "Doe",
- "review_rate": 5,
- "incentivization": "gifted",
- "locale": "fr",
- "is_verified": true,
- "order_date": "2024-06-24T15:12:31Z",
- "review_date": "2024-06-24T15:12:31Z",
- "is_personal_data_disclosed": true,
- "author_firstname": "John",
- "publish_date": "2024-06-24T15:12:31Z",
- "website_id": "55d5588-5454s-55d5-1225-12558s5525",
- "moderations": [
- {
- "comment": "Merci beaucoup pour votre commentaire.",
- "date": "2025-05-28T15:30:00.000Z",
- "origin": "moderator"
}
], - "extras": {
- "REVIEW_TITLE": {
- "display_name": "REVIEW_TITLE",
- "label": "Title of the review",
- "type": "S",
- "value": "Really good product"
}
}
}
]Retrieve aggregated rating statistics and performance metrics for your brand and individual shop locations.
Use this endpoint to:
Pagination: This endpoint supports cursor-based pagination. See the Pagination section for details.
| cursor | string Example: cursor=eyJpZCI6MTIzLCJ0aW1lc3RhbXAiOiIyMDI0LTA2LTI0VDE1OjEyOjMxWiJ9 Cursor for navigating through paginated results page by page, both forward and backward. Navigation Flow:
Important Rules:
Example: |
| limit | integer [ 1 .. 200 ] Default: 10 Example: limit=10 Number of items to return per page. Constraints:
Note: The limit must remain consistent when using cursors for navigation. |
| sort | string Example: sort=review_date,review_rate Field(s) to sort results by, separated by commas for multiple fields. Sorting Rules:
Validation:
Common sortable fields:
|
| desc | string Example: desc=review_date,review_rate Specify which fields should be sorted in descending order. By default, all sorting is ascending. Usage Rules:
Validation:
Examples:
|
| shop_key | string Search review by shop key of the brand. Can be a single value or a list of value separated by comma. |
| linked_to_shop | boolean The linked_to_shop filter allows you to retrieve the reviews that are linked to a shop for a brand. Using false will return only reviews that are not linked to shops. |
[- {
- "five_year": {
- "average": 4.76,
- "count_5": 37,
- "count_4": 4,
- "count_3": 1,
- "count_2": 0,
- "count_1": 1
}, - "shop_key": "B001",
- "count_total_since_creation": 43,
- "one_year": {
- "average": 4.76,
- "count_5": 37,
- "count_4": 4,
- "count_3": 1,
- "count_2": 0,
- "count_1": 1
}, - "oldest_review_publish_date": "2024-06-24T15:12:31Z",
- "website_id": "55d5588-5454s-55d5-1225-12558s5525",
}
]