Storyblok wire-format compatibility
The three places the API matches Storyblok byte-for-byte, the one place it deliberately does not, and the overflow rule you hit at scale.
Three guarantees the SDK depends on
Deliberate deviation: pagination
Storyblok defaults to per_page=25. OSSTBlok returns all rows when per_page is missing, capped at 10000. The per-page and x-total response headers are always set so the SDK iterates correctly either way. Pass per_page explicitly if you want Storyblok's behaviour.
resolve_relations overflow
When more than 50 unique relations resolve, the response switches rels → [] and returns rel_uuids: [<uuids>] instead. Clients fetch the full referenced stories in a follow-up call (cdn/stories?by_uuids=...). Identical behaviour to Storyblok — SDKs handle it automatically.
json
{
"stories": [...],
"cv": 1714140000,
"rels": [],
"rel_uuids": [
"c3c7e0f3-...",
"b8df1c82-...",
"e71a..."
],
"links": {}
}