# Setup options

> The ways to connect Sayproof to your site, and choosing the option that suits your site.

Source: /en/integrate/overview/

Connecting Sayproof to a site involves two independent tasks, and both are required:

1. **Display.** The product page shows reviews and opens the review form. This is done in the page's code.
2. **Order transfer.** Orders and deliveries reach Sayproof: on stores that run on Akinon, Shopify or WooCommerce, Sayproof reads them from the platform itself; on other stores, your store system sends them. The right to write a review and the invitation emails are based on this data; without order transfer, nobody can write a review.

Whichever display option you choose, order transfer works the same way: [Akinon orders](/en/integrate/akinon.md), [Shopify orders](/en/integrate/shopify.md), [WooCommerce orders](/en/integrate/woocommerce.md) or [Sending orders and deliveries](/en/integrate/orders.md).

If you also want to show reviews written for your store on marketplaces, this is a separate, optional feature that you connect in the panel without adding code to your site: [Marketplace reviews](/en/features/marketplace-reviews.md).

## Display options

| Option | Where reviews are prepared | Reviews in the page's first response | Requirements | When it fits |
|---|---|---|---|---|
| [Script](/en/integrate/script.md) | The visitor's browser | No; they arrive once the script has loaded | A `<script>` tag and a container | Any site; the quickest start |
| [Server-side rendering (SSR)](/en/integrate/server-rendering.md) + script | Your store's server fetches ready-made HTML from Sayproof; the script then takes over | Yes, including text and structured data (JSON-LD) | A server key and a few lines of server-side code | Sites where search visibility matters (recommended) |
| [Headless](/en/integrate/headless.md) | You fetch the data and display it with your own components; the script only runs the review writing flow | Up to you | Development effort; you display the required elements yourself | Brands with their own design system |

All three options use the same script and the same endpoints. You can start with the script and move to SSR or headless use later; the container on the page and the site key stay the same.

### By type of project

| Project | SSR | Script |
|---|---|---|
| Next.js App Router (for example Akinon Next) | [Next.js](/en/integrate/nextjs.md) page and ready kit | The same kit, without an SSR response |
| Django or Jinja templates | [Django / Jinja](/en/integrate/django.md) page and ready kit | The same kit, without a server key |
| Other sites | Node.js, Python and PHP examples on the [Server-side rendering](/en/integrate/server-rendering.md) page | [Script](/en/integrate/script.md) page |

The ready kits are copied into the store project; they need no package installation. In the panel, the **Integration › Showing reviews** tab shows, for the chosen **Setup route**, the values for the setup (site key, Sayproof address, script address or channel code) and the **Step-by-step setup (docs)** button that opens the matching page of this documentation. The code samples are in this documentation.

### Choosing an option

- If you cannot run code on your site's server (a hosted site builder, a tag manager only): the **script**.
- If you can run code on the server: **SSR + script**. The review text is part of the page source, so search engines and link previews see the content without waiting for the script.
- If you want to decide the entire look of the review section yourself: **headless**. If you only want to change how the default component looks, see [Customising](/en/customize/overview.md) first; CSS is enough in most cases.

## Protecting the page from failures

Display works in layers; if one layer fails, the next one takes over and the rest of the page is not affected:

1. If the server-rendered HTML arrived, reviews are visible in the first response; once the script loads, it takes over the interaction.
2. If the server call does not respond in time, the page does not wait; the script fetches the reviews in the browser.
3. If the script cannot get the reviews either, the `data-review-failed` attribute is added to the container. The rest of the page is unaffected; you can use this attribute to hide the container.

Give the server call a short timeout (1.5 seconds is recommended). Sayproof being unreachable must never delay your page.

## Signed-in customers (optional)

If the customer is signed in to your site, the review form can open without asking for an order number. To do this, your server asks Sayproof, using the signed-in email address, whether the customer can review this product. In the same way, the items of an order can be reviewed inside the order detail page. For details, see [Signed-in customers](/en/integrate/signed-in-customers.md).

## Order of setup

1. In the panel, create the channel, verify the domain and create the keys: [Channel, domain and keys](/en/integrate/channels-and-keys.md).
2. Start the order transfer and send a few test orders.
3. Add the review display to the product page.
4. Check the "Seen on your site?" section on the **Integration › Showing reviews** tab in the panel and the **Connection log** screen.
5. Write a review with a delivered test order; the review appears in the **Awaiting approval** list.

If a developer does the setup, you don't need to open a panel account for them: from **Integration › Share with a developer** in the panel you can send a time-limited link to a setup guide with your channel's addresses, site key and code samples. The guide contains no secret key.

For a step-by-step list, see [Quick setup](/en/start/quickstart.md).
