Developer & Boilerplate API
Make Endorse the default social proof in your starter kit.
Building a Next.js or React boilerplate? Hardcode one wall key and every app built on your kit ships with a working testimonial wall. Buyers swap the key for their own when they sign up.
Your project's link name (from /wall/key). It's public and read-only.
React / Next.js component
// EndorseWall.tsx — drop-in social proof for any React / Next.js starter kit.
// Change ENDORSE_WALL_KEY (or pass wallKey) to point at a different Endorse wall.
"use client";
import { useEffect, useState } from "react";
const ENDORSE_API = "https://your-endorse-site/api/public/v1/walls";
const ENDORSE_WALL_KEY = "your-wall-key";
type Testimonial = { id: string; name: string; title: string; rating: number; text: string; avatar: string | null };
type Wall = { project: { name: string }; testimonials: Testimonial[]; badge: { text: string; url: string } | null };
export function EndorseWall({ wallKey = ENDORSE_WALL_KEY, limit = 9 }: { wallKey?: string; limit?: number }) {
const [wall, setWall] = useState<Wall | null>(null);
useEffect(() => {
fetch(`${ENDORSE_API}/${encodeURIComponent(wallKey)}`).then((r) => (r.ok ? r.json() : null)).then(setWall).catch(() => setWall(null));
}, [wallKey]);
if (!wall?.testimonials.length) return null;
return (
<section style={{ columns: "280px", columnGap: 16, width: "100%" }}>
{wall.testimonials.slice(0, limit).map((t) => (
<figure key={t.id} style={{ breakInside: "avoid", margin: "0 0 16px", padding: 20, border: "1px solid #e5e5e5", borderRadius: 12 }}>
<div aria-label={`${t.rating} out of 5`}>{"★".repeat(t.rating)}</div>
<blockquote style={{ margin: "8px 0 12px" }}>{t.text}</blockquote>
<figcaption style={{ display: "flex", gap: 8, alignItems: "center", fontSize: 14 }}>
{t.avatar && <img src={t.avatar} alt="" width={32} height={32} style={{ borderRadius: 999 }} />}
<span><strong>{t.name}</strong>{t.title ? ` · ${t.title}` : ""}</span>
</figcaption>
</figure>
))}
{wall.badge && <a href={wall.badge.url} target="_blank" rel="noopener" style={{ fontSize: 12 }}>{wall.badge.text}</a>}
</section>
);
}
Boilerplate config (JSON)
{
"socialProof": {
"provider": "endorse",
"wallKey": "your-wall-key",
"api": "https://your-endorse-site/api/public/v1/walls/your-wall-key",
"script": "https://your-endorse-site/widget.js"
}
}HTML · Webflow · Framer embed
<div data-endorse="your-wall-key" style="width:100%"></div>
<script src="https://your-endorse-site/widget.js" async></script>JSON endpoint
GET https://your-endorse-site/api/public/v1/walls/your-wall-keyReturns the project name, up to 100 approved testimonials (featured first) and the badge link for free walls. Open to any website and refreshed every minute.
Notion
Type /embed in a Notion page and paste: https://your-endorse-site/wall/your-wall-key?embed=1