API Reference
REST API for integrating CheckShop.eu with your platform.
Authentication
API key endpoints require the x-api-key header. Find your API key in Dashboard > Integrations.
curl -H "x-api-key: YOUR_API_KEY" \
https://checkshop.eu/api/v1/verifyhttps://checkshop.euJSON120 req/minAuthentication
/api/v1/verifyAPI KEYTest your API key and get shop info. Use this to verify your integration is working.
Response
{
"ok": true,
"shop": {
"id": "clx...",
"name": "My Shop",
"domain": "myshop.com",
"plan": "PRO",
"status": "APPROVED",
"verified": true,
"badgeEnabled": true,
"score": 87,
"badgeColor": "GOLD"
}
}Badge
/api/v1/badge/{shopIdOrDomain}PUBLICGet trust badge data for a shop by Shop ID or domain. Used by the badge widget to show the latest score. Works on every plan: tier is "basic" on Free (the default card) and "full" on paid plans (the designer styles). Returns 404 for an unknown shop and 403 only for a rejected or suspended shop. Responses are cached for 5 minutes. reviewCount and avgRating are this shop's own reviews; when the shop shares its reviews with other shops of the same verified owner and company, the group* fields hold the combined figures.
Response
{
"shop": "My Shop",
"domain": "myshop.com",
"verified": true,
"tier": "full",
"status": "APPROVED",
"score": 87,
"badgeColor": "GOLD",
"reviewCount": 142,
"avgRating": 4.6,
"groupReviewCount": 398,
"groupAvgRating": 4.4,
"groupShopCount": 3,
"groupCompany": "My Company B.V.",
"lastChecked": "2026-04-12T10:00:00Z"
}Shops
/api/v1/shops/{domain}PUBLICLook up a shop by domain. Returns trust score, review summary, profile links, review collection links, and feed URLs when the shop status is eligible.
Response
{
"found": true,
"shop": {
"name": "My Shop",
"domain": "myshop.com",
"country": "NL",
"verified": true,
"status": "APPROVED",
"memberSince": "2026-01-15T00:00:00Z"
},
"links": {
"profile": "https://checkshop.eu/shop/myshop.com",
"writeReview": "https://checkshop.eu/shop/myshop.com/review",
"reviewWidget": "https://checkshop.eu/api/v1/reviews/widget/myshop.com",
"schemaOrgFeed": "https://checkshop.eu/api/v1/feeds/schema-org/myshop.com",
"googleSellerRatingsFeed": "https://checkshop.eu/api/v1/feeds/google-seller-ratings/myshop.com"
},
"score": {
"overall": 87,
"technical": 92,
"reviews": 80,
"badge": "GOLD",
"lastChecked": "2026-04-12T10:00:00Z"
},
"reviews": { "count": 142, "average": 4.6 }
}Reviews
/api/v1/reviews/publicPUBLICSubmit a review for a shop. Reviews are moderated before publishing.
Request Body
{
"domain": "myshop.com",
"rating": 5,
"title": "Great shop!",
"content": "Fast delivery and excellent customer service.",
"name": "Jan de Vries",
"email": "[email protected]"
}Response
{ "reviewId": "clx..." }/api/v1/invitationsAPI KEYCreate a verified purchase review invitation from your backend, Zapier, Klaviyo, or order system. Optional product data is stored with the invitation so future product-rating exports can map reviews to products correctly. Optional "locale" (for example "nl") sets the e-mail language; optional "delayDays" (0 to 30, default 0) makes CheckShop send the e-mail that many days later.
Request Body
{
"customerEmail": "[email protected]",
"customerName": "Jan de Vries",
"orderReference": "ORDER-1234",
"locale": "nl",
"delayDays": 7,
"products": [
{
"productId": "123",
"name": "Leather backpack",
"url": "https://myshop.com/products/backpack",
"sku": "BAG-001",
"gtin": "08712345678901",
"brand": "My Brand"
}
]
}Response
{
"ok": true,
"invitationId": "clx...",
"reviewUrl": "https://checkshop.eu/review/token...",
"scheduledFor": "2026-10-20T10:00:00.000Z"
}/api/v1/reviews/{reviewId}/helpfulPUBLICMark a review as helpful. Increments the helpful count.
Response
{ "helpfulCount": 42 }/api/v1/reviews/widget/{shopIdOrDomain}?limit=3&minRating=4PUBLICFetch recent approved reviews for the embeddable reviews widget by Shop ID or domain. Defaults to 4+ star reviews, with limit capped at 12 and minRating capped between 1 and 5. For a shop that shares its reviews with other shops of the same verified owner and company, group holds the combined reviews, each with the shop it was written for.
Response
{
"shop": {
"name": "My Shop",
"domain": "myshop.com",
"profileUrl": "https://checkshop.eu/shop/myshop.com",
"reviewUrl": "https://checkshop.eu/shop/myshop.com/review"
},
"minRating": 4,
"totalPositiveReviews": 42,
"reviews": [
{
"id": "clx...",
"reviewerName": "Jan de Vries",
"rating": 5,
"title": "Great shop",
"content": "Fast delivery and clear communication.",
"isVerifiedPurchase": true,
"createdAt": "2026-04-12T10:00:00Z"
}
],
"group": {
"shopCount": 3,
"company": "My Company B.V.",
"shops": ["myshop.com", "othershop.com", "thirdshop.com"],
"totalPositiveReviews": 310,
"reviews": [{ "id": "clx...", "shopDomain": "othershop.com", "rating": 5, "...": "..." }]
}
}Google and SEO Feeds
/api/v1/feeds/google-seller-ratings/{shopIdOrDomain}PUBLICExport the approved reviews CheckShop collected itself (no imported reviews) for approved or conditional shops, in Google's Merchant Review Feed schema 5.0. Accepts a shop ID or domain. CheckShop is not a Google store-ratings partner yet, so Google does not read this file; merchants cannot upload it to Merchant Center themselves. Use it for partner workflows or review-data portability.
Response
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://schemas.google.com/merchant_reviews/5.0" ...>
<merchants>
<merchant id="clx...">
<name>My Shop</name>
<merchant_url>https://myshop.com/</merchant_url>
<rating_url>https://checkshop.eu/shop/myshop.com</rating_url>
<create_timestamp>2026-01-02T10:00:00Z</create_timestamp>
<last_update_timestamp>2026-10-01T10:00:00Z</last_update_timestamp>
</merchant>
</merchants>
<reviews>
<review id="clx..." mid="clx...">
<reviewer_name>Jan V.</reviewer_name>
<create_timestamp>2026-09-30T10:00:00Z</create_timestamp>
<last_update_timestamp>2026-09-30T10:00:00Z</last_update_timestamp>
<country_code>NL</country_code>
<content>Fast delivery, well packed.</content>
<ratings>
<overall min="1" max="5">5</overall>
</ratings>
<collection_method>after_fulfillment</collection_method>
</review>
</reviews>
</feed>/api/v1/feeds/schema-org/{shopIdOrDomain}PUBLICExport Organization, AggregateRating, and recent Review objects for approved or conditional shops as JSON-LD for third-party profile pages and structured-data workflows. Accepts a shop ID or domain; Google controls rich-result eligibility.
Response
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "My Shop",
"url": "https://myshop.com",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.6",
"bestRating": 5,
"worstRating": 1,
"ratingCount": 142
}
}Webhooks
/api/v1/webhooks/woocommerceAPI KEYReceive WooCommerce order completions. Automatically creates a review invitation for the customer.
Request Body
{
"billing": {
"email": "[email protected]",
"first_name": "Jan",
"last_name": "de Vries"
},
"number": "1234",
"status": "completed"
}Response
{
"ok": true,
"invitationId": "clx...",
"reviewUrl": "https://checkshop.eu/review/token..."
}/api/v1/webhooks/shopifyAPI KEYReceive Shopify webhooks (orders/paid, app/uninstalled, shop/update). Uses x-shopify-hmac-sha256 for verification.
Response
{ "ok": true }Google Product Ratings readiness
CheckShop exposes a store-ratings partner export today and stores optional product context on new invitations and verified reviews. Google Product Ratings feeds must only be created when each review is tied to reliable product data such as product URL, product name, GTIN, MPN, brand, or SKU. Do not map generic shop reviews into product feeds; collect product-level identifiers first.
Error Codes
| Code | Description |
|---|---|
200 | Success |
400 | Bad request — missing or invalid parameters |
401 | Unauthorized — missing or invalid API key |
403 | Forbidden — shop not active or plan too low |
404 | Not found — shop or resource doesn't exist |
409 | Conflict — duplicate entry (e.g. already reviewed) |
429 | Too many requests — rate limit exceeded |
500 | Server error — try again later |