▶ DEVELOPER PLATFORM · API v1

Build on ContentFlow.

Server-driven content blocks for React Native, iOS, Android, and Web. Define block types in code, render them natively, then publish, localize, and roll back over the REST API, without an app release.

~/my-app — contentflow
# install the SDK + CLI
$ npm i @contentflow/sdk

# wire it up once
import { ContentFlow } from '@contentflow/sdk'

const cf = new ContentFlow({
  key: 'cf_live_xxx',   // key → tenant
})

await cf.sync()      // pull live blocks
cf.render('home_hero') ✓ live 
GET /sdk/sync ★ POST /cards/sync ★ GET /sdk/strings ★ POST /strings/sync ★ POST /campaigns/:id/dispatch ★ $ cf push ★ content.published ★ content.rolledback ★ string.approved ★ campaign.sent ★   
★ SYSTEM SPECS
0SDK PLATFORMS
0BLOCK TYPES
0DELIVERY CHANNELS
0WEBHOOK EVENTS
Interfaces

SDK, REST API, CLI, webhooks

S

SDK

Clients for React Native, iOS, Android, and Web. One key resolves your tenant, syncs live block instances, and renders them natively. Lifecycle: init → sync → render. SDK docs →

$ npm i @contentflow/sdk

await cf.sync()
cf.render('home_hero') 
A

REST API

JSON over HTTP at /api/v1, bearer-key auth. Sync blocks, seed instances, push strings, dispatch campaigns, read analytics. API reference →

C

CLI

Block types as code, versioned in git. cf init, cf push. CLI docs →

W

Webhooks

content.published, campaign.sent, and more. Webhook docs →

Documentation

Start here

Common tasks

Copy, paste, ship

render a block
await cf.sync()
const hero = cf.block('home_hero')
return <CFBlock block={hero} />
seed instances (idempotent)
$ curl -X POST .../api/v1/cards/sync \
  -H "Authorization: Bearer cf_live_xxx" \
  -d '{"instances":[{"externalId":"home_hero", ...}]}'
fetch approved strings
$ curl .../api/v1/sdk/strings?locale=ar \
  -H "Authorization: Bearer cf_live_xxx"
# only review-approved translations ship
push block types
$ npx contentflow push
 pushed 3 block types
# types live in your repo, reviewed in PRs