REST API integration
A REST API for listing, creating, updating and deleting testimonials and spaces, authenticated with API keys.
Short answer
The VideoTestimonials REST API lives at https://app.videotestimonials.video/api/v1. Create a key under Settings → API Keys and send it as Authorization: Bearer sk_live_…. It lists, creates, updates and deletes testimonials — with filters for space, status, type, rating, text search and dates — batch-updates or deletes up to 100 at once, and manages spaces. The API is part of the Pro plan.
- Plan
- Pro and above
- Set up in
- Dashboard → Settings → API Keys
- Direction
- Read and write: the API reads testimonials and spaces and can create, update and delete them.
How to connect REST API
- 1In the dashboard, open Settings → API Keys and create a key, choosing its scopes: read, write and delete.
- 2Copy the key when it is shown: it starts with sk_live_ and is displayed only once.
- 3Call https://app.videotestimonials.video/api/v1 with the header Authorization: Bearer YOUR_KEY, from a server — never from browser code.
Available on Pro plan ($49/month).
How it works
- Authentication
- Authorization: Bearer sk_live_… . Each key has the scopes you chose (read, write, delete); deleting a key revokes it.
- Pagination
- limit (1–100, default 50) and offset; responses include pagination.total, limit, offset and has_more.
- Sorting
- sort_by created_at, updated_at, rating or shares; sort_order asc or desc (default desc).
- Rate limit
- 1,000 requests per hour, reported in X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset headers. Over the limit returns 429 RATE_LIMIT_EXCEEDED.
- Errors
- { error: { code, message, details } } with codes such as INVALID_API_KEY, INSUFFICIENT_SCOPE, VALIDATION_ERROR and TESTIMONIAL_NOT_FOUND.
- Data scope
- A key sees the spaces and testimonials of the account that created it.
Endpoints
Base URL: https://app.videotestimonials.video/api/v1
| Request | What it does |
|---|---|
| GET /testimonials | List testimonials. Filters: space_id, status (pending, approved, rejected), type (text, video), rating, search, date_from, date_to. |
| POST /testimonials | Create a testimonial: space_id, type, submitter_name and submitter_email, plus optional company, role, avatar, text, video URL, rating and status. |
| GET /testimonials/{id} | Get one testimonial. |
| PATCH /testimonials/{id} | Update status, text, rating, company or role. |
| DELETE /testimonials/{id} | Delete a testimonial and its stored files. |
| POST /testimonials/batch/update | Set the status of up to 100 testimonials. |
| POST /testimonials/batch/delete | Delete up to 100 testimonials. |
| GET /spaces | List spaces. |
| POST /spaces | Create a space: name, plus optional description, logo URL, primary color and custom questions. |
| GET · PATCH · DELETE /spaces/{id} | Read, update or delete a space. |
Good to know
- Call the API at app.videotestimonials.video. Requests to /api on the main domain are redirected there, and many HTTP clients drop the Authorization header across a redirect.
- There are no API endpoints for forms, walls or widgets yet.
- API keys are secrets — keep them on your server.
REST API integration: frequently asked questions
What is the API base URL?
https://app.videotestimonials.video/api/v1.
How do I authenticate?
Create a key under Settings → API Keys and send it in the Authorization header as Bearer sk_live_… .
Can I fetch only approved testimonials for my website?
Yes: GET /testimonials?status=approved&space_id=YOUR_SPACE_ID, then render them however you like — for example in a Next.js Server Component.
Is there a rate limit?
Yes, 1,000 requests per hour. Each response reports the limit, the remaining requests and the reset time in X-RateLimit headers.
