Giant Context
Giant ContextAsk for early access

Builder

Generate and manage website builder content.


GET

Get every content type and the blocks allowed in it

/builder/content-types
SDK
import { createGiantContext } from "@giantcontext/sdk-typescript";
const gc = createGiantContext({ apiKey: process.env.GIANTCONTEXT_API_KEY! });
const { data: contentTypes } = await gc.builder.getContentTypes();
GET

Get the styles schema shared by every block

/builder/styles
SDK
import { createGiantContext } from "@giantcontext/sdk-typescript";
const gc = createGiantContext({ apiKey: process.env.GIANTCONTEXT_API_KEY! });
const blockStyles = await gc.builder.getBlockStyles();
GET

Get one block type's own fields and hints; shared styles come from getBlockStyles

/builder/blocks/{blockType}
Parameters
contentTypeRequired
query · string
blockTypeRequired
path · string
SDK
import { createGiantContext } from "@giantcontext/sdk-typescript";
const gc = createGiantContext({ apiKey: process.env.GIANTCONTEXT_API_KEY! });
const { data: block } = await gc.builder.getBlock({  blockType: "hero",  contentType: "text/html"});
POST

Delete a section and every block inside it; recoverable from version history

/organizations/{organizationId}/projects/{projectId}/content/sections/delete
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
BodyRequired
contentIdRequired
stringThe entity being edited.
sectionIdRequired
string
contentTypeRequired
stringEntity discriminator: website_page, website_post, website_landing, etc.
SDK
import { createGiantContext } from "@giantcontext/sdk-typescript";
const gc = createGiantContext({ apiKey: process.env.GIANTCONTEXT_API_KEY! });
const { organizations: orgs } = await gc.me.listMyOrganizations();const { projects } = await gc.projects.listProjects({ organizationId: orgs[0].id });
const result = await gc.builder.deleteSection({  organizationId: orgs[0].id,  projectId: projects[0].id,  data: { id: "section-id" }});
POST

Insert a section into a content tree

/organizations/{organizationId}/projects/{projectId}/content/sections/insert
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
BodyRequired
section
object
contentIdRequired
stringThe entity being edited.
contentTypeRequired
stringEntity discriminator: website_page, website_post, website_landing, etc.
afterSectionId
string
beforeSectionId
string
SDK
import { createGiantContext } from "@giantcontext/sdk-typescript";
const gc = createGiantContext({ apiKey: process.env.GIANTCONTEXT_API_KEY! });
const { organizations: orgs } = await gc.me.listMyOrganizations();const { projects } = await gc.projects.listProjects({ organizationId: orgs[0].id });
const result = await gc.builder.insertSection({  organizationId: orgs[0].id,  projectId: projects[0].id,  data: {}});
POST

Update a section's own properties; blocks stay untouched and columns cannot be patched

/organizations/{organizationId}/projects/{projectId}/content/sections/update
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
BodyRequired
patchRequired
object
contentIdRequired
stringThe entity being edited.
sectionIdRequired
string
contentTypeRequired
stringEntity discriminator: website_page, website_post, website_landing, etc.
SDK
import { createGiantContext } from "@giantcontext/sdk-typescript";
const gc = createGiantContext({ apiKey: process.env.GIANTCONTEXT_API_KEY! });
const { organizations: orgs } = await gc.me.listMyOrganizations();const { projects } = await gc.projects.listProjects({ organizationId: orgs[0].id });
const result = await gc.builder.updateSection({  organizationId: orgs[0].id,  projectId: projects[0].id,  data: {}});
POST

Delete a block, returning it; the prior tree stays in version history

/organizations/{organizationId}/projects/{projectId}/content/blocks/delete
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
BodyRequired
blockIdRequired
string
contentIdRequired
stringThe entity being edited.
contentTypeRequired
stringEntity discriminator: website_page, website_post, website_landing, etc.
SDK
import { createGiantContext } from "@giantcontext/sdk-typescript";
const gc = createGiantContext({ apiKey: process.env.GIANTCONTEXT_API_KEY! });
const { organizations: orgs } = await gc.me.listMyOrganizations();const { projects } = await gc.projects.listProjects({ organizationId: orgs[0].id });
const result = await gc.builder.deleteBlock({  organizationId: orgs[0].id,  projectId: projects[0].id,  data: { id: "block-id" }});
POST

Insert a block into a content tree

/organizations/{organizationId}/projects/{projectId}/content/blocks/insert
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
BodyRequired
dataRequired
object
typeRequired
stringBlock type, e.g. heading, text, image.
styles
object
columnId
string
contentIdRequired
stringThe entity being edited.
contentTypeRequired
stringEntity discriminator: website_page, website_post, website_landing, etc.
afterBlockId
string
beforeBlockId
string
intoSectionId
string
SDK
import { createGiantContext } from "@giantcontext/sdk-typescript";
const gc = createGiantContext({ apiKey: process.env.GIANTCONTEXT_API_KEY! });
const { organizations: orgs } = await gc.me.listMyOrganizations();const { projects } = await gc.projects.listProjects({ organizationId: orgs[0].id });
const result = await gc.builder.insertBlock({  organizationId: orgs[0].id,  projectId: projects[0].id,  data: {},});
POST

Update a block's data and/or styles by merging only the fields you send; null clears a field

/organizations/{organizationId}/projects/{projectId}/content/blocks/update
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
BodyRequired
data
object
styles
object
blockIdRequired
string
contentIdRequired
stringThe entity being edited.
contentTypeRequired
stringEntity discriminator: website_page, website_post, website_landing, etc.
SDK
import { createGiantContext } from "@giantcontext/sdk-typescript";
const gc = createGiantContext({ apiKey: process.env.GIANTCONTEXT_API_KEY! });
const { organizations: orgs } = await gc.me.listMyOrganizations();const { projects } = await gc.projects.listProjects({ organizationId: orgs[0].id });
const result = await gc.builder.updateBlock({  organizationId: orgs[0].id,  projectId: projects[0].id,  data: {}});
POST

Move a section before or after a sibling, or append it at the end

/organizations/{organizationId}/projects/{projectId}/content/sections/move
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
BodyRequired
contentIdRequired
stringThe entity being edited.
sectionIdRequired
string
contentTypeRequired
stringEntity discriminator: website_page, website_post, website_landing, etc.
afterSectionId
string
beforeSectionId
string
SDK
import { createGiantContext } from "@giantcontext/sdk-typescript";
const gc = createGiantContext({ apiKey: process.env.GIANTCONTEXT_API_KEY! });
const { organizations: orgs } = await gc.me.listMyOrganizations();const { projects } = await gc.projects.listProjects({ organizationId: orgs[0].id });
const result = await gc.builder.moveSection({  organizationId: orgs[0].id,  projectId: projects[0].id,  data: {},});
POST

Move a block beside a sibling or into a section, leaving its data unchanged

/organizations/{organizationId}/projects/{projectId}/content/blocks/move
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
BodyRequired
blockIdRequired
string
columnId
string
contentIdRequired
stringThe entity being edited.
contentTypeRequired
stringEntity discriminator: website_page, website_post, website_landing, etc.
afterBlockId
string
beforeBlockId
string
intoSectionId
string
SDK
import { createGiantContext } from "@giantcontext/sdk-typescript";
const gc = createGiantContext({ apiKey: process.env.GIANTCONTEXT_API_KEY! });
const { organizations: orgs } = await gc.me.listMyOrganizations();const { projects } = await gc.projects.listProjects({ organizationId: orgs[0].id });
const result = await gc.builder.moveBlock({  organizationId: orgs[0].id,  projectId: projects[0].id,  data: {}});
POST

Set whether content is listed and whether it requires a signed-in reader

/organizations/{organizationId}/projects/{projectId}/content/visibility
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
BodyRequired
isListed
booleanWhether this appears anywhere that lists content: the sitemap, blog and category indexes, post grids, next-post navigation and site search. False is "anyone with the link" — the page stays live at its own URL and is simply not advertised. It is NOT a way to make something private; use requiresViewerAuth for that.
contentIdRequired
stringThe entity being edited.
contentTypeRequired
stringEntity discriminator: website_page, website_post, website_landing, etc.
requiresViewerAuth
booleanWhether a reader must be signed in to see the body. A gated page does not 404 for an anonymous visitor — it renders the site's own Sign In Page, so someone who followed a link learns that signing in would show it. Only website pages and posts can be gated, and only on a site that has viewer sign-in switched on; without a tenant to sign in to, a gated page is unreachable by everyone.
SDK
import { createGiantContext } from "@giantcontext/sdk-typescript";
const gc = createGiantContext({ apiKey: process.env.GIANTCONTEXT_API_KEY! });
const { organizations: orgs } = await gc.me.listMyOrganizations();const { projects } = await gc.projects.listProjects({ organizationId: orgs[0].id });
const result = await gc.builder.setContentVisibility({  organizationId: orgs[0].id,  projectId: projects[0].id,  data: {},});
POST

Return a published item to draft — status only, never the body

/organizations/{organizationId}/projects/{projectId}/content/unpublish
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
BodyRequired
contentIdRequired
stringThe entity being edited.
publishAt
unionWhen to publish. Omit to publish immediately. An ISO timestamp in the future schedules it instead: the item stays a draft, invisible to the public, until a job takes it live within five minutes of that time. Null cancels a schedule already set. A time in the past is rejected rather than published now — say what you mean by omitting this.
contentTypeRequired
stringEntity discriminator: website_page, website_post, website_landing, etc.
SDK
import { createGiantContext } from "@giantcontext/sdk-typescript";
const gc = createGiantContext({ apiKey: process.env.GIANTCONTEXT_API_KEY! });
const { organizations: orgs } = await gc.me.listMyOrganizations();const { projects } = await gc.projects.listProjects({ organizationId: orgs[0].id });
const result = await gc.builder.unpublishContent({  organizationId: orgs[0].id,  projectId: projects[0].id,  data: {}});
POST

Publish a page, post, article, doc or email — status only, never the body

/organizations/{organizationId}/projects/{projectId}/content/publish
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
BodyRequired
contentIdRequired
stringThe entity being edited.
publishAt
unionWhen to publish. Omit to publish immediately. An ISO timestamp in the future schedules it instead: the item stays a draft, invisible to the public, until a job takes it live within five minutes of that time. Null cancels a schedule already set. A time in the past is rejected rather than published now — say what you mean by omitting this.
contentTypeRequired
stringEntity discriminator: website_page, website_post, website_landing, etc.
SDK
import { createGiantContext } from "@giantcontext/sdk-typescript";
const gc = createGiantContext({ apiKey: process.env.GIANTCONTEXT_API_KEY! });
const { organizations: orgs } = await gc.me.listMyOrganizations();const { projects } = await gc.projects.listProjects({ organizationId: orgs[0].id });
const result = await gc.builder.publishContent({  organizationId: orgs[0].id,  projectId: projects[0].id,  data: { title: "New Content", body: "Hello world" }});
GET

Get a content tree for editing

/organizations/{organizationId}/projects/{projectId}/content
Parameters
contentTypeRequired
query · string
contentIdRequired
query · string
organizationIdRequired
path · string
projectIdRequired
path · string
SDK
import { createGiantContext } from "@giantcontext/sdk-typescript";
const gc = createGiantContext({ apiKey: process.env.GIANTCONTEXT_API_KEY! });
const { organizations: orgs } = await gc.me.listMyOrganizations();const { projects } = await gc.projects.listProjects({ organizationId: orgs[0].id });
const { content } = await gc.builder.getContent({  organizationId: orgs[0].id,  projectId: projects[0].id,  contentType: "page",  contentId: "content-123",});

BuiltAutonomously With AI
This content was built autonomously. Giant Context analyzed the site, determined what was missing, created and submitted an idea and draft, which Giant Context staff accepted and published.
Giant Context
Product
  • How It Works
  • Mind
  • Create
  • Capture
  • Nurture
  • Optimize
  • Publishing
  • Pricing
  • Use Cases

© 2026 Giant Context
Privacy PolicyTermsCookie PolicyAcceptable Use
Powered by
Builder | Giant Context