Skip to main content
POST
cURL

Authorizations

Authorization
string
header
required

Paste your API key as the CMS showed it: fsk_<site>_<key id>_<secret> (issued under API Keys). ApiKey in front of it works too. Leave it empty to read as the public.

Scopes

content:testimonials:write

Query Parameters

aposMode
enum<string>
default:published

published (the default) or draft. Drafts need a credential that may see them: an API key with the type’s write scope (content:<type>:write), or a signed-in editor. The public and a key with only the read scope get 403.

Available options:
draft,
published
aposLocale
string

The locale to read or write, e.g. en (default: the site’s default locale).

Example:

"fr"

Body

application/json

Testimonial content type

title
string
default:""
required

Its title: the name it goes by in every list, and the heading of its page where it has one.

quote
string
default:""
required

The testimonial itself, in the author’s words.

slug
string
default:""
required

The URL name: lowercase words joined by hyphens (letters outside a–z, even emoji, are kept).

authorName
string | null
default:""

Who said it — e.g. “Jordan Lee”.

authorTitle
string | null
default:""

An optional second line under the name — e.g. “Founder, Acme Co.” or “Customer since 2021”.

rating
integer | null
default:5

Optional. Only shown when the Testimonials section has “Show star rating” turned on.

Required range: 1 <= x <= 5

Hand-curation flag. The widget can be set to show only featured testimonials.

visibility
enum<string> | null
default:public

Select whether this content is public or private

Available options:
public,
loginRequired,
null
scheduledPublish
string | null

An ISO 8601 date and time, e.g. 2026-10-21T14:30:00.000Z.

scheduledUnpublish
string | null

An ISO 8601 date and time, e.g. 2026-10-21T14:30:00.000Z.

testimonialFontOverrides
Typeface for this card · object[] | null

Optional. Set part of this testimonial’s card in a different typeface. Leave empty to follow the section (and the site fonts).

Maximum array length: 4
_authorPhoto
Author photo · object[] | null

Optional. A first-party headshot from the media library. Falls back to a lettered-initial avatar when empty. The related @apostrophecms/image documents, in order (empty when none). To set it, send a list of { "_id": "…" }, one per document (one at most); a document the site can’t find is left out.

Maximum array length: 1
authorPhotoUrl
string | null

Alternative to uploading: a full https:// link to a photo hosted elsewhere. Only used when no Author photo is selected above — prefer uploading when you can (it enables focal point and responsive sizes). When set, a URL; empty or null when not.

Optional. A link to the full story / case study / original post. When set, a URL; empty or null when not.

archived
boolean | null
default:false

In the archive: kept, but out of every list and off the site until it is restored. false (or null) for a live document.

Response

Success

Testimonial content type

title
string
default:""
required

Its title: the name it goes by in every list, and the heading of its page where it has one.

quote
string
default:""
required

The testimonial itself, in the author’s words.

slug
string
default:""
required

The URL name: lowercase words joined by hyphens (letters outside a–z, even emoji, are kept).

_id
string
required
read-only

The document’s id. On a type with drafts it ends in its locale and mode (…:en:published, …:en:draft): the part before the first colon is its aposDocId, shared by both copies. The {_id} the type’s routes take.

type
string
required
read-only

The document type’s name: always this type’s.

authorName
string | null
default:""

Who said it — e.g. “Jordan Lee”.

authorTitle
string | null
default:""

An optional second line under the name — e.g. “Founder, Acme Co.” or “Customer since 2021”.

rating
integer | null
default:5

Optional. Only shown when the Testimonials section has “Show star rating” turned on.

Required range: 1 <= x <= 5

Hand-curation flag. The widget can be set to show only featured testimonials.

visibility
enum<string> | null
default:public

Select whether this content is public or private

Available options:
public,
loginRequired,
null
scheduledPublish
string | null

An ISO 8601 date and time, e.g. 2026-10-21T14:30:00.000Z.

scheduledUnpublish
string | null

An ISO 8601 date and time, e.g. 2026-10-21T14:30:00.000Z.

testimonialFontOverrides
Typeface for this card · object[] | null

Optional. Set part of this testimonial’s card in a different typeface. Leave empty to follow the section (and the site fonts).

Maximum array length: 4
_authorPhoto
Author photo · object[] | null

Optional. A first-party headshot from the media library. Falls back to a lettered-initial avatar when empty. The related @apostrophecms/image documents, in order (empty when none). To set it, send a list of { "_id": "…" }, one per document (one at most); a document the site can’t find is left out.

Maximum array length: 1
authorPhotoUrl
string | null

Alternative to uploading: a full https:// link to a photo hosted elsewhere. Only used when no Author photo is selected above — prefer uploading when you can (it enables focal point and responsive sizes). When set, a URL; empty or null when not.

Optional. A link to the full story / case study / original post. When set, a URL; empty or null when not.

source
enum<string> | null
default:manual
read-only

Set automatically. Demo placeholders are removed the moment a real testimonial is published.

Available options:
manual,
demo,
null
sourceId
string | null
default:""
read-only

Internal de-duplication key set by the demo seed.

archived
boolean | null
default:false

In the archive: kept, but out of every list and off the site until it is restored. false (or null) for a live document.

createdAt
string<date-time> | null
read-only

When it was created (ISO 8601).

updatedAt
string<date-time> | null
read-only

When it last changed (ISO 8601).

aposShareKey
string | null
read-only

The draft’s preview share key, while its share link is on: the link is the draft’s _url with aposShareKey and aposShareId (the draft’s _id) in its query. Absent otherwise, and on published documents.

Example:

"k3v9x2m7q1z8w4p6"