Giant Context
Giant ContextObtenez un accès anticipé

Builder

Generate and manage website builder content.


GET

Get every content type and the blocks allowed in it

/builder/content-types

Lists every content type you can create or edit — website pages, posts, landings, headers, footers, sidebars, dialogs and layouts; kb articles and landings; developer docs and landings; forms; emails and their headers and footers — with the builder context each belongs to and the exact block types allowed inside it. Use it to answer 'what can I put in this?' before building. The reverse lookup, 'where can I use this block?', is the contexts field on listBuilderBlocks.

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

Get the styles schema shared by every block

/builder/styles

Returns the one styles object every block, column and section accepts — margin, padding, width, background, border, box shadow, position, per-breakpoint visibility, entrance animation and cssId/cssClasses. It is identical for every block type, so call this once and reuse it. getBlock omits styles and refers here rather than repeating them on every block. The schema carries its own value-format guidance: which fields take per-breakpoint objects, when a bare number means a theme spacing multiple rather than pixels, and exactly which colour tokens resolve.

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

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

/builder/blocks/{blockType}

Returns the JSON schema for a single block type plus its per-field authoring hints, scoped to (and validated against) the content type's palette. The styles object is identical for every block and is served by getBlockStyles instead of being repeated here. Follow this exactly when building block data for insertBlock/updateBlock.

Parameters
contentTypeRequired
query · stringEntity discriminator: website_page, website_post, website_landing, etc.
blockTypeRequired
path · stringBlock type, e.g. heading.
SDK
import { createGiantContext } from "@giantcontext/sdk-typescript";
const gc = createGiantContext({ apiKey: process.env.GIANTCONTEXT_API_KEY! });
const { data: block } = await gc.builder.getBlock({  blockType: "example-block-type",  contentType: "example-content-type",});
POST

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

/organizations/{organizationId}/projects/{projectId}/content/sections/delete

Removes a section (and its blocks) from a content tree and records a version. Returns the removed section. The prior state is recoverable via restoreContentVersion.

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 org = await gc.organizations.getOrganizationBySlug({ slug: "my-org" });const { projects } = await gc.projects.listProjects({ organizationId: org.id });
const result = await gc.builder.deleteSection({  organizationId: org.id,  projectId: projects[0].id,  data: { id: "section-id" }});
POST

Insert a section into a content tree

/organizations/{organizationId}/projects/{projectId}/content/sections/insert

Inserts a new section (validated against the section schema, including any blocks it carries) and records a version. Every field on the supplied section is kept; only id and type are server-owned. Ids are generated for the section and for any columns/blocks that omit one. Omit an anchor to append at the end.

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 org = await gc.organizations.getOrganizationBySlug({ slug: "my-org" });const { projects } = await gc.projects.listProjects({ organizationId: org.id });
const section = await gc.builder.insertSection({  organizationId: org.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

Patches a section's own properties and records a version. Any section field may be patched; id, type and columns are refused with an error rather than ignored. Does not touch its blocks — use the block tools for those.

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 org = await gc.organizations.getOrganizationBySlug({ slug: "default-org" });const { projects } = await gc.projects.listProjects({ organizationId: org.id });
const result = await gc.builder.updateSection({  organizationId: org.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

Removes a block from a content tree and records a version. Returns the removed block, plus columnRemoved or sectionRemoved when deleting the block emptied its container: an empty column is pruned (it renders a gap) and, when that empties the whole section, the section is pruned too (it paints an orphan background band). Non-destructive at the history level — the prior state is recoverable via restoreContentVersion.

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 org = await gc.organizations.getOrganizationBySlug({ slug: "my-org" });const { projects } = await gc.projects.listProjects({ organizationId: org.id });
const result = await gc.builder.deleteBlock({  organizationId: org.id,  projectId: projects[0].id,  data: { id: "block-123" }});
POST

Insert a block into a content tree

/organizations/{organizationId}/projects/{projectId}/content/blocks/insert

Inserts a new block into a content entity's tree and records a version. The block's data is validated against its type's schema and the content's block palette. Returns the created block (with its generated id).

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 org = await gc.organizations.getOrganizationBySlug({ slug: "my-org" });const { projects } = await gc.projects.listProjects({ organizationId: org.id });
const block = await gc.builder.insertBlock({  organizationId: org.id,  projectId: projects[0].id,  data: { type: "text", content: "Hello World" }});
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

Merges the supplied fields into a block's data and/or its styles and records a version. Send data, styles, or both; fields you omit keep their current value; send null to clear one. Styles cover padding, margins, borders, background, alignment and hideOnMobile — previously settable only at insertBlock, now editable here. Locale maps merge per locale, so writing one language leaves the others intact. Validated against the block type's schema.

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 org = await gc.organizations.getOrganizationBySlug({ slug: "my-org" });const { projects } = await gc.projects.listProjects({ organizationId: org.id });
const result = await gc.builder.updateBlock({  organizationId: org.id,  projectId: projects[0].id,  data: { content: "Updated block content" }});
POST

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

/organizations/{organizationId}/projects/{projectId}/content/sections/move

Reorders a section to a new position (relative to a sibling, or appended) and records a version. Returns the moved section.

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 org = await gc.organizations.getOrganizationBySlug({ slug: "my-org" });const { projects } = await gc.projects.listProjects({ organizationId: org.id });
const result = await gc.builder.moveSection({  organizationId: org.id,  projectId: projects[0].id,  data: { sectionId: "sec_123", index: 1 }});
POST

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

/organizations/{organizationId}/projects/{projectId}/content/blocks/move

Relocates a block to a new anchor (next to a sibling, or into a section) and records a version. Returns the moved block.

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 org = await gc.organizations.getOrganizationBySlug({ slug: "my-org" });const { projects } = await gc.projects.listProjects({ organizationId: org.id });
const result = await gc.builder.moveBlock({  organizationId: org.id,  projectId: projects[0].id,  data: { blockId: "block-123", targetIndex: 2 }});
POST

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

/organizations/{organizationId}/projects/{projectId}/content/unpublish

Sets a content item's status back to draft, taking it off the public site while leaving its content, slug and metadata intact so it can be published again unchanged. The first-published date is kept, not cleared. Unpublishing tells the search engines the URL is gone and purges the public cache, so a page removed this way stops being served rather than lingering in a cache or an index.

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 org = await gc.organizations.getOrganizationBySlug({ slug: "my-org" });const { projects } = await gc.projects.listProjects({ organizationId: org.id });
const result = await gc.builder.unpublishContent({  organizationId: org.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

Sets a content item's status to published and leaves everything else untouched: not its content, slug, layout or metadata. Works for every content type that has a draft/published lifecycle — website pages and posts, KB articles, developer docs and emails. Structural pieces (headers, footers, layouts, landings, forms) are always live and are refused by name. Publishing re-indexes the item for AI search, signals the search engines, and purges the public cache. Re-publishing something already published is not an error; the response says alreadyInState. Pass publishAt with a future timestamp to schedule instead of publishing: the item stays a draft until a job takes it live, and the response returns scheduledPublishAt with status still draft.

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 org = await gc.organizations.getOrganizationBySlug({ slug: "my-org" });const { projects } = await gc.projects.listProjects({ organizationId: org.id });
const result = await gc.builder.publishContent({  organizationId: org.id,  projectId: projects[0].id,  data: { content: "example" }});
GET

Get a content tree for editing

/organizations/{organizationId}/projects/{projectId}/content

Returns the full Section[] content tree (with every section/column/block id) for a content entity — pages, posts, landings, etc. Fetch this before granular edits so you have the ids to target.

Parameters
contentTypeRequired
query · stringEntity discriminator: website_page, website_post, website_landing, etc.
contentIdRequired
query · stringThe entity being edited.
organizationIdRequired
path · string
projectIdRequired
path · string
SDK
import { createGiantContext } from "@giantcontext/sdk-typescript";
const gc = createGiantContext({ apiKey: process.env.GIANTCONTEXT_API_KEY! });
const org = await gc.organizations.getOrganizationBySlug({ slug: "my-org" });const { projects } = await gc.projects.listProjects({ organizationId: org.id });
const content = await gc.builder.getContent({  organizationId: org.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 Jesse accepted and published.
[0]
Produit
  • Comment ça marche
  • Mind
  • Créer
  • Capturer
  • Cultiver
  • Optimiser
  • Publication
  • Tarifs
  • Cas d'usage

© 2026 Giant Context
Politique de confidentialitéConditions d'utilisationPolitique relative aux cookies
Powered by
Builder | Giant Context