▶ DEVELOPER PLATFORM v1

Ship in-app content without shipping the app.

Integrate the SDK once. Define content blocks in code or the dashboard, then target, publish, translate, and roll back live, no store review, no redeploy. Built for React Native, iOS, Android, and Web.

~/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
ONE SDK, EVERY SCREEN ★ DEFINE BLOCKS IN CODE ★ TARGET + PUBLISH + ROLL BACK LIVE ★ LOCALIZE IN ANY LANGUAGE ★ NO STORE REVIEW ★ REST API + WEBHOOKS ★   
The Toolkit

Four ways to build with ContentFlow

S

SDK

Drop-in clients for React Native, iOS, Android, and Web. One key resolves your tenant, syncs live blocks, and renders them natively. SDK docs →

A

REST API

Everything the dashboard does, over HTTP at /api/v1. Sync blocks, push strings, fire campaigns, read analytics. API reference →

C

CLI

Cards-as-code. Define block types in your repo, version them in git, and ship them with a single cf push. CLI docs →

W

Webhooks

Subscribe to content.published, campaign.sent, and more. Keep your systems in lockstep with what's live. Webhook docs →

Why ContentFlow

Not just another content API

Blocks, not fields

Model real UI, banners, cards, tiles, carousels, popups, as typed blocks. Render them natively, not as raw JSON you have to babysit.

Live + reversible

Publish and roll back any block instantly. If a launch goes sideways, revert without a redeploy or a store review.

Target anyone

Ship a block to a segment, a locale, or a single user. Push, WhatsApp, SMS, popup, in-app, all from one place.

Localization built in

Extract strings, auto-translate, review, and deliver, gated so nothing half-translated ever reaches production.

Code or dashboard

Define block types in code with the CLI, or let non-devs manage instances in the dashboard. Same source of truth.

Idempotent sync

Seed existing content as instances with a stable externalId. Re-run sync safely, no duplicates, ever.

Ready?

Your first block is live in five minutes.