Testimonials
Testimonials endpoints of the Zanfia Workspace API, with schemas and code samples.
Testimonials ("wall of love"): moderate and curate submitted testimonials, add or import them manually, manage the public collection forms, and ask a specific client for a testimonial by email. Deleting a testimonial is permanent — the dashboard hides via status instead. All routes require a Authorization: Bearer header — see Authentication.
List testimonials
/testimonialsAuthorization
bearerAuth API key from Dashboard → Integrations → API, MCP and CLI.
In: header
Query Parameters
Value in
- "pending"
- "approved"
- "hidden"
value <= 200Response Body
application/json
application/json
curl -X GET "https://example.com/testimonials"{ "testimonials": [ { "id": "string", "type": "text", "featured": true, "quote": "string", "rating": 0, "author": { "name": "string", "avatarUrl": "string", "role": "string" }, "video": { "bunnyVideoId": "string", "bunnyLibraryId": "string", "thumbnailUrl": "string", "durationSec": 0 }, "productIds": [ "string" ], "tags": [ "string" ], "source": "form", "importedFrom": "string", "submittedAt": 0, "status": "pending", "authorEmail": "string", "formId": "string", "approvedAt": 0, "clientId": "string" } ], "nextCursor": "string"}{ "error": "string"}Add a testimonial
/testimonialsAuthorization
bearerAuth API key from Dashboard → Integrations → API, MCP and CLI.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Manual add / import by a workspace member (video manual adds are not supported).
Response Body
application/json
application/json
curl -X POST "https://example.com/testimonials" \ -H "Content-Type: application/json" \ -d '{ "type": "text", "quote": "string", "authorName": "string" }'{ "testimonial": { "id": "string", "type": "text", "featured": true, "quote": "string", "rating": 0, "author": { "name": "string", "avatarUrl": "string", "role": "string" }, "video": { "bunnyVideoId": "string", "bunnyLibraryId": "string", "thumbnailUrl": "string", "durationSec": 0 }, "productIds": [ "string" ], "tags": [ "string" ], "source": "form", "importedFrom": "string", "submittedAt": 0, "status": "pending", "authorEmail": "string", "formId": "string", "approvedAt": 0, "clientId": "string" }}{ "error": "string"}Ask a client for a testimonial
/testimonials/requestsAuthorization
bearerAuth API key from Dashboard → Integrations → API, MCP and CLI.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Ask a specific customer for a testimonial (one-off, creator-initiated). The form is resolved server-side: formId if given, else the active form for productId, else the workspace-general form.
Response Body
application/json
application/json
curl -X POST "https://example.com/testimonials/requests" \ -H "Content-Type: application/json" \ -d '{ "clientId": "string" }'{ "ok": true}{ "error": "string"}Update a testimonial
/testimonials/{testimonialId}Authorization
bearerAuth API key from Dashboard → Integrations → API, MCP and CLI.
In: header
Path Parameters
Testimonial id
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X PATCH "https://example.com/testimonials/string" \ -H "Content-Type: application/json" \ -d '{}'{ "testimonial": { "id": "string", "type": "text", "featured": true, "quote": "string", "rating": 0, "author": { "name": "string", "avatarUrl": "string", "role": "string" }, "video": { "bunnyVideoId": "string", "bunnyLibraryId": "string", "thumbnailUrl": "string", "durationSec": 0 }, "productIds": [ "string" ], "tags": [ "string" ], "source": "form", "importedFrom": "string", "submittedAt": 0, "status": "pending", "authorEmail": "string", "formId": "string", "approvedAt": 0, "clientId": "string" }}{ "error": "string"}Delete a testimonial
/testimonials/{testimonialId}Authorization
bearerAuth API key from Dashboard → Integrations → API, MCP and CLI.
In: header
Path Parameters
Testimonial id
Response Body
application/json
application/json
curl -X DELETE "https://example.com/testimonials/string"{ "deleted": true}{ "error": "string"}List collection forms
/testimonial-formsAuthorization
bearerAuth API key from Dashboard → Integrations → API, MCP and CLI.
In: header
Response Body
application/json
application/json
curl -X GET "https://example.com/testimonial-forms"{ "forms": [ { "id": "string", "name": "string", "slug": "string", "productId": "string", "headline": "string", "questions": [ "string" ], "collectRating": true, "collectRole": true, "allowVideo": true, "thankYouMessage": "string", "active": true, "createdAt": 0 } ]}{ "error": "string"}Create a collection form
/testimonial-formsAuthorization
bearerAuth API key from Dashboard → Integrations → API, MCP and CLI.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/testimonial-forms" \ -H "Content-Type: application/json" \ -d '{ "name": "string" }'{ "form": { "id": "string", "name": "string", "slug": "string", "productId": "string", "headline": "string", "questions": [ "string" ], "collectRating": true, "collectRole": true, "allowVideo": true, "thankYouMessage": "string", "active": true, "createdAt": 0 }}{ "error": "string"}Update a collection form
/testimonial-forms/{formId}Authorization
bearerAuth API key from Dashboard → Integrations → API, MCP and CLI.
In: header
Path Parameters
Form id
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X PATCH "https://example.com/testimonial-forms/string" \ -H "Content-Type: application/json" \ -d '{}'{ "form": { "id": "string", "name": "string", "slug": "string", "productId": "string", "headline": "string", "questions": [ "string" ], "collectRating": true, "collectRole": true, "allowVideo": true, "thankYouMessage": "string", "active": true, "createdAt": 0 }}{ "error": "string"}Delete a collection form
/testimonial-forms/{formId}Authorization
bearerAuth API key from Dashboard → Integrations → API, MCP and CLI.
In: header
Path Parameters
Form id
Response Body
application/json
application/json
curl -X DELETE "https://example.com/testimonial-forms/string"{ "deleted": true}{ "error": "string"}Was this article helpful?

