Review API

Fetch approved testimonials anywhere.

The Review API returns public, approved testimonials for a space as JSON. It is designed for custom marketing sites, product pages, and internal proof dashboards.

Endpoint
GET /api/public/testimonials/{spaceSlug}?limit=6

Use the space slug from your public Wall of Love URL. It is the spaces.slug value, also shown on each space install page. The optional limit query parameter accepts 1 to 50 results and defaults to 30.

Approved only

Pending and rejected testimonials stay private to your dashboard.

No private emails

Submitter email addresses, moderation status, and raw drafts are never returned by the public API.

CORS enabled

Use the endpoint directly from browser-rendered pages or server functions.

JavaScript example
const res = await fetch("https://www.saynicely.me/api/public/testimonials/acme?limit=6");

if (!res.ok) {
  throw new Error("Could not load testimonials");
}

const data = await res.json();

const reviews = data.testimonials.map((review) => ({
  name: review.author_name,
  role: review.author_role,
  quote: review.text,
  rating: review.rating,
}));
Response shape
{
  "space": {
    "slug": "acme",
    "product_name": "Acme",
    "logo_url": "https://...",
    "brand_color": "#6366f1"
  },
  "testimonials": [
    {
      "id": "review_123",
      "author_name": "Jane Cooper",
      "author_role": "Founder",
      "author_avatar_url": "https://...",
      "text": "SayNicely helped us publish better proof faster.",
      "rating": 5,
      "is_pinned": true,
      "created_at": "2026-05-26T10:00:00.000Z"
    }
  ]
}

Fields returned

The API returns the display-ready review content plus a few fields that help you sort, feature, or style testimonials in your own UI.

FieldDescription
space.slugThe public space slug used in the endpoint. This is the value stored in spaces.slug.
space.product_nameThe product or brand name configured for the space.
testimonials[].textThe approved, display-ready testimonial text.
testimonials[].ratingA number from 1 to 5.
testimonials[].is_pinnedWhether the review is featured in the dashboard.
testimonials[].created_atThe testimonial creation timestamp.