API docs
A read-only REST API for your spaces and testimonials. It can’t create, edit or delete anything. Included in the Solo and Pro plans. Base URL: https://kiwiproof.app/api/v1
Authentication
Create a key in Dashboard → Account → API keys. The key is shown once: we only keep a hash of it, so copy it somewhere safe. Send it in the X-API-KEY header (Authorization: Bearer <key> works too). A key reads only the spaces of the account that created it. Revoke a key on the same page: requests with it stop working right away.
curl https://kiwiproof.app/api/v1/testimonials -H "X-API-KEY: kp_your_key"401missing, unknown or revoked key.402the account has no Solo or Pro plan.429more than 60 requests in a minute with one key (retry after theRetry-Afterseconds).400a bad query parameter (theerrorfield says which),404a space that isn’t yours.
GET/api/v1/spaces
Your spaces, oldest first: id, slug, name, created_at, form_url, wall_url.
{ "data": [{ "id": "0b9e…", "slug": "acme", "name": "Acme", "created_at": "…",
"form_url": "https://kiwiproof.app/c/acme", "wall_url": "https://kiwiproof.app/wall/acme" }] }GET/api/v1/testimonials
Testimonials of your spaces, newest first. Query parameters, all optional:
status:approved(default),pending,rejectedorall.space: a space id or slug (default: all your spaces).since: an ISO 8601 date, only newer testimonials. Approved testimonials are dated by approval time, the other statuses by the time they were sent.limit: 1 to 100 (default 25). When a page is full, pass itsnext_beforevalue asbeforeto get the next one.
{
"data": [
{
"id": "6f1c…",
"space": { "id": "0b9e…", "slug": "acme", "name": "Acme" },
"status": "approved",
"author_name": "Ada Lovelace",
"author_title": "CTO, Analytical Engines",
"rating": 5,
"text": "We set it up in ten minutes.",
"photo_url": "https://kiwiproof.app/api/photo/6f1c…",
"video_url": null,
"source": "form",
"source_url": null,
"tags": ["onboarding"],
"public_answers": [{ "label": "What did you buy?", "value": "Pro" }],
"created_at": "2026-10-12T09:30:00.000Z",
"approved_at": "2026-10-12T10:02:11.000Z"
}
],
"next_before": null
}Never in a response: the reviewer’s private answers (only answers to questions you marked public, when the reviewer agreed to show them), an email field, or import metadata. photo_url is set for approved testimonials with a photo.
GET/api/v1/zapier/testimonials
For the polling triggers of Zapier (“Webhooks by Zapier → Retrieve Poll”) and Make (HTTP module on a schedule): the same items and filters as /api/v1/testimonials, as a plain JSON array, newest first, up to 50 (limit is capped at 50 here). Each item has a unique id, which both tools use to fire once per new testimonial.
- New approved testimonial:
https://kiwiproof.app/api/v1/zapier/testimonials - Every new testimonial, before review:
https://kiwiproof.app/api/v1/zapier/testimonials?status=all - Add the header
X-API-KEYwith your key. - A poll sees the 50 newest items: when more arrive between two polls (a large CSV import), only 50 of them fire the trigger. Use
/api/v1/testimonialswith paging to read them all.
Want a push instead of polling? Space settings → Alerts → Webhook sends a signed POST the moment a testimonial arrives or is approved.