Skip to main content
GET
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:photo-feeds:read

Path Parameters

_id
string
required

The document’s _id: a full id names its own locale and mode (the draft’s …:en:draft, the published one’s …:en:published; no aposMode needed), a bare aposDocId takes the request’s (aposLocale, aposMode).

Query Parameters

render-areas
boolean
default:false

true: each area’s widgets come back rendered as HTML (_rendered), beside their data.

Response

Success

PhotoFeed 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.

slug
string
default:""
required

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

visibility
enum<string>
default:public
required

Select whether this content is public or private

Available options:
public,
loginRequired
_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.

createdAt
string<date-time>
required
read-only

When it was created (ISO 8601).

updatedAt
string<date-time>
required
read-only

When it last changed (ISO 8601).

feedConnectionId
string | null

Which external photo store to draw from. Connections (bucket, region, keys) are set up once in Connections → Photo storage.

feedPrefix
string | null
default:""

Optional. The folder inside the bucket the dated folders live under — leave empty when they sit at the top level (e.g. “2026/May/31/…”).

feedLayout
enum<string> | null
default:ymd

How deep the dated folders go. The month and day folder NAMES don’t matter — “May”, “05” and “5” are all understood — only the depth.

Available options:
ymd,
ym,
y,
flat,
null
feedDateRule
enum<string> | null
default:recentDays

Which dates this feed is allowed to pull from. Only the folders inside this window are ever listed, so a huge library stays cheap to sample.

Available options:
recentDays,
thisYear,
lastYears,
range,
all,
null
feedRecentDays
integer | null
default:5

Counting today. 5 means today and the four days before it.

Required range: 1 <= x <= 365
feedYears
integer | null
default:2

Counting this one. 2 means this calendar year and last.

Required range: 1 <= x <= 25
feedRangeStart
string<date> | null

From.

feedRangeEnd
string<date> | null

To.

feedDistribution
enum<string> | null
default:total

Spread samples one target count across as many different days as possible (best for a wide window). Every day takes the same number from each day in the window (best for a daily-update wall).

Available options:
total,
perDay,
null
feedTargetCount
integer | null
default:30

How many photos this feed shows. Each refresh replaces the whole set.

Required range: 1 <= x <= 500
feedPerDayCount
integer | null
default:10

Taken from every day in the window — 10 from each of the last 5 days is 50 photos.

Required range: 1 <= x <= 200
feedAvoidRepeats
boolean | null
default:true

Remember which photos were used and prefer ones that haven’t been shown lately, so a big library keeps producing new sets. When a date window runs out of unseen photos it reuses the oldest ones rather than showing fewer.

feedSeenLimit
integer | null
default:2000

The size of that memory. Bigger means longer before a photo can repeat; 0 turns the memory off.

Required range: 0 <= x <= 20000
feedFormat
enum<string> | null
default:webp

Every photo is re-encoded on the way in — which also strips camera metadata (location, device) from what the site serves.

Available options:
webp,
jpeg,
null
feedMaxDimension
integer | null
default:2000

Photos larger than this are scaled down. 2000 is plenty for a full-screen lightbox; the gallery tiles use much smaller generated sizes.

Required range: 320 <= x <= 6000
feedQuality
integer | null
default:82

Encoder quality, 40–100. 82 is a good balance; above 90 grows files fast with little visible gain.

Required range: 40 <= x <= 100
feedAspect
enum<string> | null
default:original

Keep each photo’s own proportions (best for the Mosaic and Masonry layouts), or crop everything to one shape for a perfectly uniform wall. Crops are centered on the busiest part of the photo.

Available options:
original,
1:1,
4:3,
3:2,
16:9,
4:5,
null
feedAltText
string | null
default:""

Optional. Describes what these photos generally show, for screen readers and the lightbox caption. Applied to each photo as it is imported — leave empty to import them without alt text.

feedEnabled
boolean | null
default:false

Master switch. When off, the feed keeps showing its current photos and only refreshes when you run it by hand.

feedInterval
enum<string> | null
default:6

How often to fetch a fresh set. Change it anytime — no restart.

Available options:
1,
2,
3,
4,
6,
12,
24,
48,
null
feedRetainMinutes
integer | null
default:30

After a refresh the old photos stop being shown immediately, but their files are kept this long before being deleted — a safety margin for pages already sent to a browser and for CDN caches. 0 deletes them right away.

Required range: 0 <= x <= 10080
feedLastRunAt
string | null
default:""
read-only

Set automatically. The schedule paces the next refresh off this.

feedLastStatus
string | null
default:""
read-only

Last result.

feedPhotoCount
integer | null
read-only

Photos showing.

feedLastError
string | null
default:""
read-only

Why the last refresh failed, when it did. A failed refresh never empties the gallery — the previous photos keep showing.

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.