Does VideoTestimonials have an API?

Updated

Short answer

Yes. VideoTestimonials has a REST API at https://app.videotestimonials.video/api/v1 for spaces and testimonials: list, create, read, update and delete, plus batch status updates and deletes of up to 100 testimonials. Authenticate with an API key from Settings โ†’ API Keys, sent as a Bearer token. Requests are limited to 1,000 an hour, and webhooks push testimonial events to your own URL. The pricing page lists the API on Pro.

Yes. VideoTestimonials has a REST API for reading and writing your spaces and testimonials, plus webhooks that tell your systems when something changes. Use it to send testimonials from your own forms or CRM, pull approved testimonials into a custom page, or approve testimonials from another tool. The full endpoint reference is at /docs/api.

Base URL and authentication

All endpoints live under:

https://app.videotestimonials.video/api/v1

Every request needs an API key in the Authorization header:

Authorization: Bearer sk_live_your_key

Create keys in Dashboard โ†’ Settings โ†’ API Keys. Each key has one or more scopes: Read, Write and Delete. A request without the scope it needs is rejected with a 403 error. The full key is shown only once, when you create it. See API keys for creating, disabling and rotating keys.

Endpoints

MethodPathScopeWhat it does
GET/spacesReadList your spaces
POST/spacesWriteCreate a space
GET/spaces/:idReadGet one space
PATCH/spaces/:idWriteUpdate a space's name, description, logo, color or questions
DELETE/spaces/:idDeleteDelete a space
GET/testimonialsReadList testimonials, with filters
POST/testimonialsWriteCreate a testimonial
GET/testimonials/:idReadGet one testimonial
PATCH/testimonials/:idWriteUpdate status, text, rating, company or role
DELETE/testimonials/:idDeleteDelete a testimonial
POST/testimonials/batch/updateWriteSet the status of up to 100 testimonials
POST/testimonials/batch/deleteDeleteDelete up to 100 testimonials

Listing testimonials

GET /testimonials accepts these query parameters, all optional:

  • space_id, status (pending, approved or rejected), type (text or video) and rating (1 to 5)
  • search, which matches the testimonial text
  • date_from and date_to, as ISO date-times
  • limit (1 to 100, default 50) and offset
  • sort_by (created_at, updated_at, rating or shares) and sort_order (asc or desc)

The response has a data array and a pagination object with total, limit, offset and has_more.

curl "https://app.videotestimonials.video/api/v1/testimonials?status=approved&limit=10" \
  -H "Authorization: Bearer sk_live_your_key"

Creating a testimonial

POST /testimonials takes JSON. Required fields are space_id, type (text or video), submitter_name and submitter_email. Optional fields are submitter_company, submitter_role, submitter_avatar_url, text_content, video_url, video_thumbnail_url, rating (1 to 5) and status, which defaults to pending.

curl -X POST "https://app.videotestimonials.video/api/v1/testimonials" \
  -H "Authorization: Bearer sk_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{"space_id":"YOUR_SPACE_ID","type":"text","submitter_name":"Jane Doe","submitter_email":"jane@example.com","text_content":"Setup took ten minutes.","rating":5}'

Video testimonials created with a video_url are transcribed automatically when the link points straight to a video file.

Limits and errors

  • Rate limit: 1,000 requests per hour per account. Responses carry X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset headers, and a 429 response means you've hit the limit.
  • Errors come back as JSON with an error object containing a code (for example UNAUTHORIZED, INVALID_API_KEY, INSUFFICIENT_SCOPE or RATE_LIMIT_EXCEEDED) and a message.

Webhooks

To react to changes instead of polling, open Dashboard โ†’ Automations, add the URL that should receive events, and choose the events to send:

  • testimonial.created, when someone submits a testimonial
  • testimonial.approved
  • testimonial.rejected
  • testimonial.deleted

Each delivery is a JSON POST with the event name, a timestamp and the testimonial's data. You can pause a webhook and view its delivery logs on the same page.

Plans

The pricing page lists API & Webhooks on the Pro plan ($49/month or $490/year), which also includes 10 spaces, 3 team seats, 2,000 emails a month and AI features. Paid plans start with a 7-day free trial.

Frequently asked questions

What can I do with the VideoTestimonials API?

Read your spaces and testimonials, filtered by space, status, type, rating, text search or date range; create testimonials from your own forms, CRM or backend; update a testimonial's status, text, rating, company or role; approve or reject up to 100 testimonials in one call; and delete testimonials or spaces.

Can I get notified when a new testimonial arrives?

Yes, with webhooks. In Dashboard โ†’ Automations, add the URL that should receive events and choose which ones to send: new, approved, rejected or deleted testimonials. Each delivery is a JSON POST with the event name, a timestamp and the testimonial's data.

Which plan includes the API?

The pricing page lists API and webhooks on the Pro plan, $49 a month or $490 a year, which also includes 10 spaces, 3 team seats and AI features. Paid plans start with a 7-day free trial.

Is there an SDK or a Zapier app?

Not yet. The API is plain HTTPS and JSON, so any language with an HTTP client can call it. The Zapier integration isn't available yet; connect automation tools through webhooks or direct API calls instead.

Want to try this yourself?

The free plan includes 10 video testimonials, 20 text, a Wall of Love embed and CSV import. No credit card, and nothing expires.

Start free
Was this article helpful?