Testimonial API

📋

Testimonial API

List testimonials

Returns all testimonials in the Space, with optional filtering.

Query parameters

Parameter

Type

Required

Description

type

string

No

Filter by type: video, image, text, document

folderId

UUID

No

Return only testimonials in this folder

id

UUID

No

Return a single testimonial by ID

limit

number

No

Maximum results to return. Default: 200. Max: 500

skipUrls

string

No

Pass skipUrls=1 to skip asset URL signing. Signed URLs will be null. Use when you only need metadata.

Example request

curl "https://app.endors.io/api/spaces/YOUR_SPACE_ID/testimonials?type=video&limit=50" \
  -H "Authorization: Bearer sk_live_your_api_key_here"
curl "https://app.endors.io/api/spaces/YOUR_SPACE_ID/testimonials?type=video&limit=50" \
  -H "Authorization: Bearer sk_live_your_api_key_here"
curl "https://app.endors.io/api/spaces/YOUR_SPACE_ID/testimonials?type=video&limit=50" \
  -H "Authorization: Bearer sk_live_your_api_key_here"

Response

{
  "ok": true,
  "data": [
    {
      "id": "uuid",
      "name": "Jane Smith",
      "type": "video",
      "text_content": null,
      "rating": 5,
      "source_created_at": "2026-05-01T10:00:00.000Z",
      "created_at": "2026-05-01T10:05:00.000Z",
      "updated_at": "2026-05-01T10:05:00.000Z",
      "client_id": "uuid",
      "clients": {
        "id": "uuid",
        "first_name": "Jane",
        "last_name": "Smith",
        "company": "Acme Studios",
        "email": "jane@acme.com",
        "profile_image_url": "https://...",
        "job_title": "CEO",
        "service": null,
        "product": null,
        "quote": null,
        "custom_field_values": null
      },
      "active_asset": {
        "id": "uuid",
        "type": "video",
        "status": "ready",
        "originalFilename": "testimonial.mp4",
        "durationSeconds": 42.5,
        "embedUrl": "https://customer.cloudflarestream.com/.../iframe",
        "hlsUrl": "https://customer.cloudflarestream.com/.../manifest/video.m3u8",
        "posterUrl": "https://customer.cloudflarestream.com/.../thumbnails/thumbnail.jpg",
        "trimStartSeconds": null,
        "trimEndSeconds": null
      }
    }
  ]
}
{
  "ok": true,
  "data": [
    {
      "id": "uuid",
      "name": "Jane Smith",
      "type": "video",
      "text_content": null,
      "rating": 5,
      "source_created_at": "2026-05-01T10:00:00.000Z",
      "created_at": "2026-05-01T10:05:00.000Z",
      "updated_at": "2026-05-01T10:05:00.000Z",
      "client_id": "uuid",
      "clients": {
        "id": "uuid",
        "first_name": "Jane",
        "last_name": "Smith",
        "company": "Acme Studios",
        "email": "jane@acme.com",
        "profile_image_url": "https://...",
        "job_title": "CEO",
        "service": null,
        "product": null,
        "quote": null,
        "custom_field_values": null
      },
      "active_asset": {
        "id": "uuid",
        "type": "video",
        "status": "ready",
        "originalFilename": "testimonial.mp4",
        "durationSeconds": 42.5,
        "embedUrl": "https://customer.cloudflarestream.com/.../iframe",
        "hlsUrl": "https://customer.cloudflarestream.com/.../manifest/video.m3u8",
        "posterUrl": "https://customer.cloudflarestream.com/.../thumbnails/thumbnail.jpg",
        "trimStartSeconds": null,
        "trimEndSeconds": null
      }
    }
  ]
}
{
  "ok": true,
  "data": [
    {
      "id": "uuid",
      "name": "Jane Smith",
      "type": "video",
      "text_content": null,
      "rating": 5,
      "source_created_at": "2026-05-01T10:00:00.000Z",
      "created_at": "2026-05-01T10:05:00.000Z",
      "updated_at": "2026-05-01T10:05:00.000Z",
      "client_id": "uuid",
      "clients": {
        "id": "uuid",
        "first_name": "Jane",
        "last_name": "Smith",
        "company": "Acme Studios",
        "email": "jane@acme.com",
        "profile_image_url": "https://...",
        "job_title": "CEO",
        "service": null,
        "product": null,
        "quote": null,
        "custom_field_values": null
      },
      "active_asset": {
        "id": "uuid",
        "type": "video",
        "status": "ready",
        "originalFilename": "testimonial.mp4",
        "durationSeconds": 42.5,
        "embedUrl": "https://customer.cloudflarestream.com/.../iframe",
        "hlsUrl": "https://customer.cloudflarestream.com/.../manifest/video.m3u8",
        "posterUrl": "https://customer.cloudflarestream.com/.../thumbnails/thumbnail.jpg",
        "trimStartSeconds": null,
        "trimEndSeconds": null
      }
    }
  ]
}

Asset shapes by type

Video (type: "video"):

Field

Type

id

UUID

type

"video"

status

string (e.g. "ready", "processing")

originalFilename

string or null

durationSeconds

number or null

embedUrl

string or null

hlsUrl

string or null

posterUrl

string or null

trimStartSeconds

number or null

trimEndSeconds

number or null

Image (type: "image"):

Field

Type

id

UUID

type

"image"

status

string

originalFilename

string or null

url

signed URL (expires in 1 hour)

Other types (document, etc.):

Field

Type

id

UUID

type

string

status

string

originalFilename

string or null

url

signed URL

Get a single testimonial

Example request

curl "https://app.endors.io/api/spaces/YOUR_SPACE_ID/testimonials/TESTIMONIAL_ID" \
  -H "Authorization: Bearer sk_live_your_api_key_here"
curl "https://app.endors.io/api/spaces/YOUR_SPACE_ID/testimonials/TESTIMONIAL_ID" \
  -H "Authorization: Bearer sk_live_your_api_key_here"
curl "https://app.endors.io/api/spaces/YOUR_SPACE_ID/testimonials/TESTIMONIAL_ID" \
  -H "Authorization: Bearer sk_live_your_api_key_here"

Response

Same shape as a single item from the list endpoint.

Errors

HTTP

Code

Message

404

NOT_FOUND

"Testimonial not found"

Update a testimonial

Updates one or more fields on a testimonial. Send only the fields you want to change.

Request body

{
  "text_content": "Updated testimonial text",
  "rating": 5
}
{
  "text_content": "Updated testimonial text",
  "rating": 5
}
{
  "text_content": "Updated testimonial text",
  "rating": 5
}

Field

Type

Description

text_content

string

The testimonial text

rating

number

Star rating

status

string

Testimonial status

body

string

Body content

author_name

string

Author display name

author_title

string

Author title or role

At least one field is required.

Example request

curl -X PATCH "https://app.endors.io/api/spaces/YOUR_SPACE_ID/testimonials/TESTIMONIAL_ID" \
  -H "Authorization: Bearer sk_live_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{"text_content": "This product changed everything.", "rating": 5}'
curl -X PATCH "https://app.endors.io/api/spaces/YOUR_SPACE_ID/testimonials/TESTIMONIAL_ID" \
  -H "Authorization: Bearer sk_live_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{"text_content": "This product changed everything.", "rating": 5}'
curl -X PATCH "https://app.endors.io/api/spaces/YOUR_SPACE_ID/testimonials/TESTIMONIAL_ID" \
  -H "Authorization: Bearer sk_live_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{"text_content": "This product changed everything.", "rating": 5}'

Response

{
  "ok": true
}
{
  "ok": true
}
{
  "ok": true
}

Errors

HTTP

Code

Message

400

BAD_REQUEST

"Invalid JSON"

400

BAD_REQUEST

"No valid fields to update"