# Troubleshooting

> Steps to follow when reviews do not appear, invitations are not sent or an order cannot be verified.

Source: /en/integrate/troubleshooting/

The quickest way to tell whether reviews appear on your site is the **Seen on your site?** report on the **Integration › Showing reviews** tab: loading, turned-away requests, unrecognised product codes and the review form are checked in one list ([Seen on your site?](/en/features/setup-screens.md#seen-on-your-site)). For details, check the **Connection log** screen in the panel. Every request your site and store system send to Sayproof is listed on this screen, together with its request type, its source, the product concerned and the result. Entries are kept for 30 days.

| Result | Meaning |
|---|---|
| Succeeded | The request was handled without problems; for a review list, reviews were returned, for an order transfer, the records were accepted. |
| No reviews found | The request is valid, but there are no published reviews for this product. |
| Site not verified | The request came from a domain that is not verified. |
| Key not valid | The site key is wrong or cancelled, or the channel is off; for an order transfer, the server key or the signature was not accepted. |
| Not allowed | The server key is not authorised for this operation (for example, sending orders), or an endpoint that can only be called from a server was called from the browser. |
| Too many requests | The rate limit was exceeded. |
| Error | An unexpected error occurred; pass the record number to the Sayproof team. |

## Reviews do not appear

**A CORS error in the console, or a `403 origin_unverified: …` response**
The page's domain is not verified. The `detail` value in the response shows the domain the request came from (for example `origin_unverified: yourbrand.com`); the domain is read from the `Origin` header, or from the `Referer` header if there is none. `www.yourbrand.com` and `yourbrand.com` are separate domains; add the domain named in the error message on the **Channels › Domains** tab and verify it. If you can't put a file on your site, verify the domain with a DNS record ([Domain verification](/en/integrate/channels-and-keys.md#domain-verification)). Verification works on domains that can be reached from the internet; during development, use a test domain that is reachable from the internet (for example `test.yourbrand.com`).

**"No reviews found"**

- The `data-review-product` value on the container must be exactly the same as the `variant_key` value you send in order transfer, including letter case and hyphens.
- If you use a group code, the container must have the `data-review-scope="group"` attribute.
- The reviews must be published; reviews awaiting approval are not shown.
- The site key of the correct channel must be used; each channel only shows the reviews of its own market.

**The script does not load**

- The `<script>` tag must include `type="module"`.
- Your site's Content Security Policy (CSP) rules must allow the address of the script and of the Sayproof API. For details, see [Setting up with the script › Content Security Policy (CSP)](/en/integrate/script.md#content-security-policy-csp).

**The component opens in the wrong language**
The script takes the language, in order, from the `data-review-locale` value on the container or the script tag, the page's `<html lang>` value and, failing those, the channel's language. The browser's language setting (`Accept-Language`) is not used. The value must be `tr` or `en`.

**The server call receives a `403` or `409` response**
For details, see [Server-side rendering (SSR) › Timeouts and errors](/en/integrate/server-rendering.md#timeouts-and-errors).

**A newly approved review does not appear**
The SSR response can be cached for up to 60 seconds.

## Invitations are not sent

On the **Invitations** screen, check the invitation's status and the **Result** column, and on the **Invitation sending** screen the **Why invitations were stopped** card.

| Reason | What to do |
|---|---|
| No invitation landing page set | Edit the channel on the **Channels** screen and enter the page address, or map the product addresses in your product source. |
| Payment not completed | The order's `payment_state` value must be `paid` or `partially_refunded`. |
| No email address on the order | Send the order with the `customer_email` field. |
| Customer's daily invitation limit reached | The next day a new invitation is created for the same products. You can change the limit on the **Invitation sending** screen. |
| Customer does not want emails | The address is on the list of people who do not want emails (the customer unsubscribed, the address bounced permanently or a complaint was made); no invitation is sent. |

If an invitation is "Failed", first fix the cause (the sender domain's verification or your own system's notification address), then use the **Try failed ones again** button on the **Invitations** screen; invitations whose link has expired are not tried again ([Invitations](/en/features/invitations.md#invitations)).

If no invitations are created at all:

- The order line must have been sent with the **delivered** (`delivered`) state. Estimated (`estimated`) delivery information does not create invitations.
- The waiting time after delivery (2 days by default) must have passed.
- For returned or cancelled lines, a shopping experience invitation is created instead of a product invitation; these invitations can be filtered by invitation type on the **Invitations** screen.

An invitation created outside the sending hours shows as "Queued" on the **Invitations** screen and is sent when the sending hours begin.

## The invitation link does not open the form

- The page the link opens must contain a review container.
- The link may have expired. Its lifetime is the time allowed to write a review in the market rule in force on the channel (90 days after delivery under the Sayproof rule).
- Once reviews have been written for every product in the invitation, the link closes.
- If the link was opened on a page belonging to a channel of another market than the order's, the token is not accepted (`token_foreign_market`). Set the channel's invitation page to the site of the order's market.

## The "Verify my order to write a review" step fails

For security reasons, the customer sees a single, general error message. Possible causes:

- The order number is not exactly the same as the `external_id` value you sent (it is case-sensitive).
- The email address entered is not the address on the order.
- The payment is not complete, the product has not been delivered, or the time allowed to write a review has passed.
- A review has already been written for this product with this order.
- The order came through a channel in another market.
- The product is not in this order (the product code on the container differs from the `variant_key` value on the order line).

After 20 attempts in 5 minutes from the same IP address, the message "Too many attempts, please try again later." is shown for a while.

## Order transfer receives a `401` or `403` response

For details, see [Sending orders and deliveries › Errors](/en/integrate/orders.md#errors). The **Test the connection** action in the panel checks the content to be sent without saving it; it does not check the key.

If the answer is `refused / unknown_key` or `revoked_key`, check that the `Authorization` header carries the whole server key after the `Bearer ` prefix and that the key is **In use** on the **Channels › Keys** tab. A `403 refused / scope_missing` answer means the key does not have the send orders permission; create a new server key in the panel.

With signed sending, if the answer is `secret_unknown`, check that the `X-Sayproof-Secret` header carries the password's ID, not its name. The ID is in the **Password ID** column of the **Signing passwords** table in the **Advanced: signing passwords** section of the **Channels › Keys** tab.

## A submitted review does not appear

Depending on the publishing method, reviews first go to the **Awaiting approval** list and are published once approved. For details, see [Reviews and approval](/en/features/reviews.md).
