Documentation

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/verify
Base URL
https://checkshop.eu
Format
JSON
Rate Limit
120 req/min

Authentication

GET/api/v1/verifyAPI KEY

Test 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

GET/api/v1/badge/{shopIdOrDomain}PUBLIC

Get 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

GET/api/v1/shops/{domain}PUBLIC

Look 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

POST/api/v1/reviews/publicPUBLIC

Submit 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..." }
POST/api/v1/invitationsAPI KEY

Create 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"
}
POST/api/v1/reviews/{reviewId}/helpfulPUBLIC

Mark a review as helpful. Increments the helpful count.

Response

{ "helpfulCount": 42 }
GET/api/v1/reviews/widget/{shopIdOrDomain}?limit=3&minRating=4PUBLIC

Fetch 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

GET/api/v1/feeds/google-seller-ratings/{shopIdOrDomain}PUBLIC

Export 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>
GET/api/v1/feeds/schema-org/{shopIdOrDomain}PUBLIC

Export 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

POST/api/v1/webhooks/woocommerceAPI KEY

Receive 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..."
}
POST/api/v1/webhooks/shopifyAPI KEY

Receive 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

CodeDescription
200Success
400Bad request — missing or invalid parameters
401Unauthorized — missing or invalid API key
403Forbidden — shop not active or plan too low
404Not found — shop or resource doesn't exist
409Conflict — duplicate entry (e.g. already reviewed)
429Too many requests — rate limit exceeded
500Server error — try again later
CheckShop in numbers
shops in our directory, each checked again every week
2,162
countries where the listed shops are based
13