GenieOS · Pages for developers

Compose, then publish.

Two calls, on purpose. compose_page returns a draft your agent can read back, diff against the live page and hold for as long as the decision takes. publish_page makes it real. The seam between them is exactly where a checkpoint belongs, and it is yours to shape.

compose.tsts
// step one returns a draft, never a live pageconst draft = await compose_page({  brief: "Landing page: your health data finally has a home",  campaign: "the-directory",}); // draft.sections: structure your agent can read and diff
The surface
  • compose_pagea draft you can read and diff, not a live page
  • publish_pagethe irreversible one, deliberately separate
  • list_pageseverything published, as data
  • read_pagethe live page, for diffing against a draft
  • create_short_linka branded short link and QR code, with its own analytics
checkpoint.tsts
const draft = await compose_page({  brief: "Landing page: your health data finally has a home",}); // diff the draft against what is live before anything changesconst live = await read_page({ slug: "the-directory" }); // gate the irreversible call however you like:// an approval policy, a review in the app, a human's yesawait publish_page({ page: draft.id });

The seam between the calls is the checkpoint.

compose_page does not touch production. It returns a draft: a structure your agent can read, compare against the page that is live and park until someone says go. publish_page is the only irreversible verb on this surface, and keeping it a separate call is the design, not an inconvenience.

Gate the publish behind an approval policy, behind a review in the app, or behind nothing at all for pages that carry no risk. The API will not collapse the two steps into one, so the choice stays deliberate every single time.

IN-APP · JUDGEThe agent drafted it. You look at it.
LANDING PAGEYour health data finally has a home — PageShowcaseLaunch
Draft · /the-directory
fueld.ai/the-directory

NEW RELEASE

Finally

Open in Landing page Genie ↗

Part of: Your health data finally has a home

Your landing page is ready to polish — tell me what to tweak and I'll fine-tune it.

⏎ to send

A page is judged at full width.

The draft object tells you the sections, the copy and the palette. It cannot tell you whether the hero holds at full width, whether the fold lands where the argument does, or whether the imagery carries the claim. Those are questions for eyes.

So the composed page opens in the app looking exactly as it will ship, on palette because it was built from the brand memory rather than prompted towards it. Read it the way a visitor will, then go back to the terminal and publish.

When this happens
  • WhenYou tag a release v*

    ThenA changelog email to everyone still on the previous version

    • compose_template
    • enroll_in_sequence
  • WhenA new docs page merges

    ThenA social post, and a line in the next newsletter

    • create_social_post

The irreversible step is yours.