Giant Context
Giant ContextAsk for early access

Website

Manage website content, pages, posts, and public rendering.


POST

Ask the search engines to recrawl a page, post, article or doc now

/organizations/{organizationId}/projects/{projectId}/content/search-index
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
BodyRequired
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.website.submitContentToSearchEngines({  organizationId: orgs[0].id,  projectId: projects[0].id,  data: {}});
GET

Get the one seeded blog archive page; no create call exists

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/blog-page
Parameters
draftId
query · string
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});
const { page } = await gc.website.getWebsiteBlogPage({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
PATCH

Update the blog archive page's name and SEO fields; cannot publish or edit content

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/blog-page
Parameters
draftId
query · string
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
path · string
BodyRequired
seo
object
name
stringInternal use only
footerId
unionThe footer this renders with. Discover ids with listWebsiteFooters. Null unbinds and falls back to the app default.
headerId
unionThe header this renders with. Discover ids with listWebsiteHeaders. Null unbinds and falls back to the app default.
layoutId
unionThe layout this renders inside. Discover ids with listWebsiteLayouts. Null unbinds and falls back to the app default.
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});
const result = await gc.website.updateWebsiteBlogPageMeta({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,  data: {},});
GET

Get one dialog with its full block tree, max width and close control

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/dialogs/{dialogId}
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
path · string
dialogIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});const { dialogs } = await gc.website.listWebsiteDialogs({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
const dialog = await gc.website.getWebsiteDialog({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,  dialogId: dialogs[0].id,});
DELETE

Delete dialog

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/dialogs/{dialogId}
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
path · string
dialogIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});const { dialogs } = await gc.website.listWebsiteDialogs({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
const result = await gc.website.deleteWebsiteDialog({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,  dialogId: dialogs[0].id,});
GET

List popup dialogs (modals, banners, slide-ins) in a site, newest first

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/dialogs
Parameters
page
query · number
pageSize
query · number
lite
query · string
sort
query · string
search
query · string
name
query · string
maxWidth
query · string
includeClose
query · string
createdAt
query · string
updatedAt
query · string
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});
const { dialogs } = await gc.website.listWebsiteDialogs({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
POST

Create a popup dialog; nothing shows it until a button links dialog:{id}

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/dialogs
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
path · string
BodyRequired
nameRequired
string
content
array
maxWidth
union
includeClose
boolean
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});
const dialog = await gc.website.createWebsiteDialog({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,  data: {},});
GET

Get one domain with its verification token, verified state and primary flag

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/domains/{domainId}
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
path · string
domainIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});const { domains } = await gc.website.listWebsiteCustomDomains({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
const { domain } = await gc.website.getWebsiteCustomDomain({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,  domainId: domains[0].id,});
GET

List a site's custom domains, primary first, with verified state and verification token

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/domains
Parameters
page
query · number
pageSize
query · number
lite
query · string
sort
query · string
search
query · string
isPrimary
query · string
isVerified
query · string
isGenerated
query · string
createdAt
query · string
updatedAt
query · string
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});
const { customDomains } = await gc.website.listWebsiteCustomDomains({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
GET

Get one footer with its full block tree, which lite listings omit

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/footers/{footerId}
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
path · string
footerIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});const { footers } = await gc.website.listWebsiteFooters({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
const footer = await gc.website.getWebsiteFooter({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,  footerId: footers[0].id,});
DELETE

Delete website footer

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/footers/{footerId}
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
path · string
footerIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});const { footers } = await gc.website.listWebsiteFooters({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
const result = await gc.website.deleteWebsiteFooter({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,  footerId: footers[0].id,});
GET

List a site's footers newest first, each with its block tree unless lite

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/footers
Parameters
page
query · number
pageSize
query · number
lite
query · string
sort
query · string
search
query · string
name
query · string
createdAt
query · string
updatedAt
query · string
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});
const { footers } = await gc.website.listWebsiteFooters({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
POST

Create a reusable footer shell; pages attach it by id, content optional

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/footers
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
path · string
BodyRequired
nameRequired
string
content
array
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});
const { footer } = await gc.website.createWebsiteFooter({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,  data: {}});
GET

Get one header with its full block tree, which lite listings omit

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/headers/{headerId}
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
path · string
headerIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});const { headers } = await gc.website.listWebsiteHeaders({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
const header = await gc.website.getWebsiteHeader({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,  headerId: headers[0].id,});
DELETE

Delete website header

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/headers/{headerId}
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
path · string
headerIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});const { headers } = await gc.website.listWebsiteHeaders({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
const result = await gc.website.deleteWebsiteHeader({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,  headerId: headers[0].id,});
GET

List a site's headers newest first, each with its block tree unless lite

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/headers
Parameters
page
query · number
pageSize
query · number
lite
query · string
sort
query · string
search
query · string
name
query · string
createdAt
query · string
updatedAt
query · string
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});
const { headers } = await gc.website.listWebsiteHeaders({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
POST

Create a reusable header shell; pages attach it by id, content optional

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/headers
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
path · string
BodyRequired
nameRequired
string
content
array
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});
const { header } = await gc.website.createWebsiteHeader({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,  data: {},});
GET

Get the one seeded page at the site root; no create call exists

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/landing
Parameters
draftId
query · string
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});
const { landing } = await gc.website.getWebsiteLanding({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
PATCH

Update the landing page's name and SEO fields; cannot publish or edit content

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/landing
Parameters
draftId
query · string
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
path · string
BodyRequired
seo
object
name
stringInternal use only
footerId
unionThe footer this renders with. Discover ids with listWebsiteFooters. Null unbinds and falls back to the app default.
headerId
unionThe header this renders with. Discover ids with listWebsiteHeaders. Null unbinds and falls back to the app default.
layoutId
unionThe layout this renders inside. Discover ids with listWebsiteLayouts. Null unbinds and falls back to the app default.
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});
const result = await gc.website.updateWebsiteLandingMeta({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,  data: {},});
GET

Get one layout with its full block tree, which lite listings omit

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/layouts/{layoutId}
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
path · string
layoutIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});const { layouts } = await gc.website.listWebsiteLayouts({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
const { layout } = await gc.website.getWebsiteLayout({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,  layoutId: layouts[0].id,});
DELETE

Delete website layout

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/layouts/{layoutId}
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
path · string
layoutIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});const { layouts } = await gc.website.listWebsiteLayouts({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
const result = await gc.website.deleteWebsiteLayout({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,  layoutId: layouts[0].id,});
GET

List page layouts you can apply when creating a page, newest first

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/layouts
Parameters
page
query · number
pageSize
query · number
lite
query · string
sort
query · string
search
query · string
name
query · string
createdAt
query · string
updatedAt
query · string
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});
const { layouts } = await gc.website.listWebsiteLayouts({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
POST

Create a layout shell; pages set layoutId to share its block tree

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/layouts
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
path · string
BodyRequired
nameRequired
string
content
array
description
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});
const { layout } = await gc.website.createWebsiteLayout({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,  data: {},});
GET

Get the one seeded not found page; no create call exists

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/not-found-page
Parameters
draftId
query · string
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});
const { page } = await gc.website.getWebsiteNotFoundPage({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
PATCH

Update the not found page's name and SEO fields; cannot publish or edit content

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/not-found-page
Parameters
draftId
query · string
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
path · string
BodyRequired
seo
object
name
stringInternal use only
footerId
unionThe footer this renders with. Discover ids with listWebsiteFooters. Null unbinds and falls back to the app default.
headerId
unionThe header this renders with. Discover ids with listWebsiteHeaders. Null unbinds and falls back to the app default.
layoutId
unionThe layout this renders inside. Discover ids with listWebsiteLayouts. Null unbinds and falls back to the app default.
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});
const result = await gc.website.updateWebsiteNotFoundPageMeta({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,  data: { title: "Page Not Found" },});
GET

Get one page with its full block tree, SEO, status and layout ids

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/pages/{pageId}
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
path · string
pageIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});const { pages } = await gc.website.listWebsitePages({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
const { page } = await gc.website.getWebsitePage({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,  pageId: pages[0].id,});
DELETE

Delete website page

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/pages/{pageId}
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
path · string
pageIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});const { pages } = await gc.website.listWebsitePages({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
const result = await gc.website.deleteWebsitePage({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,  pageId: pages[0].id,});
PATCH

Update a page's name, title, slug, SEO fields, featured image and tags; cannot publish or edit content

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/pages/{pageId}
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
path · string
pageIdRequired
path · string
BodyRequired
seo
object
name
stringInternal use only
slug
stringThe URL segment. Changing this MOVES the public URL: a redirect from the old path to the new one is recorded automatically, so existing links keep working, but anything quoting the old URL verbatim (a printed link, an external citation) now travels one hop. Must be unique within the app — a collision is a 409, not a silent rename.
tags
array
title
unionWhat a reader sees, per locale. Send a locale map like {"en": "..."} on a multilingual project; check the project's enabledLocales with getProject first. Falls back to name where unset.
footerId
unionThe footer this renders with. Discover ids with listWebsiteFooters. Null unbinds and falls back to the app default.
headerId
unionThe header this renders with. Discover ids with listWebsiteHeaders. Null unbinds and falls back to the app default.
layoutId
unionThe layout this renders inside. Discover ids with listWebsiteLayouts. Null unbinds and falls back to the app default.
featuredImageUrl
unionFeatured image, stored as a file reference (file:{uuid}) and resolved to a serving URL at render. Set it to a project file's reference, not a resolved URL — a URL is not recorded as in-use in core.file_references and could be deleted out from under the page.
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});const { pages } = await gc.website.listWebsitePages({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
const result = await gc.website.updateWebsitePageMeta({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,  pageId: pages[0].id,  data: { title: "Updated Page Title" },});
GET

List a site's pages with slug, live URL and publish status, newest first

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/pages
Parameters
page
query · number
pageSize
query · number
lite
query · string
sort
query · string
search
query · string
status
query · string
slug
query · string
isListed
query · string
layoutId
query · string
headerId
query · string
footerId
query · string
createdAt
query · string
updatedAt
query · string
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});
const { pages } = await gc.website.listWebsitePages({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
POST

Create a page shell; content optional and status defaults to published, live immediately

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/pages
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
path · string
BodyRequired
seo
object
nameRequired
string
slugRequired
string
tags
array
title
unionWhat a reader sees, per locale. `name` is the internal handle and is never translated; this is the copy that appears on the page, in links, in NextPost and in the sitemap. Falls back to name where unset.
status
union
content
array
footerId
union
headerId
union
layoutId
union
featuredImageUrl
unionFeatured image, stored as a file reference (file:{uuid}) and resolved to a serving URL at render. Set it to a project file's reference, not a resolved URL — a URL is not recorded as in-use in core.file_references and could be deleted out from under the page.
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});
const { data: page } = await gc.website.createWebsitePage({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,  data: {    name: "My New Page",    path: "/my-new-page"  }});
GET

Get one blog post with its full content blocks, tags and SEO fields

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/posts/{postId}
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
path · string
postIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});const { posts } = await gc.website.listWebsitePosts({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
const { post } = await gc.website.getWebsitePost({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,  postId: posts[0].id,});
DELETE

Delete blog post

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/posts/{postId}
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
path · string
postIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});const { posts } = await gc.website.listWebsitePosts({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
const result = await gc.website.deleteWebsitePost({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,  postId: posts[0].id,});
PATCH

Update a post's name, title, slug, excerpt, author, publish date, tags and SEO, not its content

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/posts/{postId}
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
path · string
postIdRequired
path · string
BodyRequired
seo
object
name
stringInternal use only
slug
stringThe URL segment. Changing this MOVES the public URL: a redirect from the old path to the new one is recorded automatically, so existing links keep working, but anything quoting the old URL verbatim (a printed link, an external citation) now travels one hop. Must be unique within the app — a collision is a 409, not a silent rename.
tags
array
title
unionWhat a reader sees, per locale. Send a locale map like {"en": "..."} on a multilingual project; check the project's enabledLocales with getProject first. Falls back to name where unset.
excerpt
union
footerId
unionThe footer this renders with. Discover ids with listWebsiteFooters. Null unbinds and falls back to the app default.
headerId
unionThe header this renders with. Discover ids with listWebsiteHeaders. Null unbinds and falls back to the app default.
layoutId
unionThe layout this renders inside. Discover ids with listWebsiteLayouts. Null unbinds and falls back to the app default.
authorName
union
publishDate
union
featuredImageUrl
unionFeatured image, stored as a file reference (file:{uuid}) and resolved to a serving URL at render. Set it to a project file's reference, not a resolved URL — a URL is not recorded as in-use in core.file_references and could be deleted out from under the post.
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.website.updateWebsitePostMeta({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: "app-id",  postId: "post-id",  data: {},});
GET

List blog posts in a site, newest first, with author, tags and status

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/posts
Parameters
page
query · number
pageSize
query · number
lite
query · string
sort
query · string
search
query · string
status
query · string
slug
query · string
isListed
query · string
authorId
query · string
authorName
query · string
publishDate
query · string
createdAt
query · string
updatedAt
query · string
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});
const { posts } = await gc.website.listWebsitePosts({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
POST

Create a blog post; status defaults to draft, unlike createWebsitePage

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/posts
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
path · string
BodyRequired
seo
object
nameRequired
string
slugRequired
string
tags
array
title
unionWhat a reader sees, per locale. `name` is the internal handle and is never translated; this is the copy that appears on the page, in links, in NextPost and in the sitemap. Falls back to name where unset.
status
union
content
array
excerpt
union
footerId
union
headerId
union
layoutId
union
authorName
union
publishDate
union
featuredImageUrl
unionFeatured image, stored as a file reference (file:{uuid}) and resolved to a serving URL at render. Set it to a project file's reference, not a resolved URL — a URL is not recorded as in-use in core.file_references and could be deleted out from under the post.
scheduledPublishAt
unionWhen this item should go live. It stays a draft and stays invisible until then; a job publishes it within five minutes of that time. Null means not scheduled. Publishing or unpublishing by hand clears it.
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});
const { post } = await gc.website.createWebsitePost({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,  data: {},});
GET

Get one URL redirect by id

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/redirects/{redirectId}
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
path · string
redirectIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});const { redirects } = await gc.website.listWebsiteRedirects({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
const { redirect } = await gc.website.getWebsiteRedirect({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,  redirectId: redirects[0].id,});
GET

List a site's URL redirects, newest first, with from, to, status and source

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/redirects
Parameters
page
query · number
pageSize
query · number
lite
query · string
sort
query · string
search
query · string
source
query · string
status
query · string
createdAt
query · string
updatedAt
query · string
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});
const { redirects } = await gc.website.listWebsiteRedirects({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
GET

Get one sidebar with its full block tree, which lite listings omit

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/sidebars/{sidebarId}
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
path · string
sidebarIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});const { sidebars } = await gc.website.listWebsiteSidebars({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
const { sidebar } = await gc.website.getWebsiteSidebar({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,  sidebarId: sidebars[0].id,});
DELETE

Delete website sidebar

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/sidebars/{sidebarId}
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
path · string
sidebarIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});const { sidebars } = await gc.website.listWebsiteSidebars({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
const result = await gc.website.deleteWebsiteSidebar({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,  sidebarId: sidebars[0].id,});
GET

List a site's sidebars newest first, each with its block tree unless lite

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/sidebars
Parameters
page
query · number
pageSize
query · number
lite
query · string
sort
query · string
search
query · string
name
query · string
createdAt
query · string
updatedAt
query · string
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});
const { sidebars } = await gc.website.listWebsiteSidebars({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
POST

Create a reusable sidebar shell; a layoutSidebar block points at it by id

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/sidebars
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
path · string
BodyRequired
nameRequired
string
content
array
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});
const { sidebar } = await gc.website.createWebsiteSidebar({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,  data: {},});
GET

Get the one seeded sign-in page; no create call exists

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/sign-in-page
Parameters
draftId
query · string
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});
const { page } = await gc.website.getWebsiteSignInPage({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
PATCH

Update the sign-in page's name and SEO fields; cannot publish or edit content

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/sign-in-page
Parameters
draftId
query · string
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
path · string
BodyRequired
seo
object
name
stringInternal use only
footerId
unionThe footer this renders with. Discover ids with listWebsiteFooters. Null unbinds and falls back to the app default.
headerId
unionThe header this renders with. Discover ids with listWebsiteHeaders. Null unbinds and falls back to the app default.
layoutId
unionThe layout this renders inside. Discover ids with listWebsiteLayouts. Null unbinds and falls back to the app default.
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});
const result = await gc.website.updateWebsiteSignInPageMeta({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,  data: {},});
GET

List the tag names in use across a site's pages and posts

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/tags
Parameters
page
query · number
pageSize
query · number
lite
query · string
sort
query · string
search
query · string
tag
query · string
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});
const { tags } = await gc.website.listWebsiteTags({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
GET

Get the site's Google Tag Manager container ID, the only tracking setting

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/tracking
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});
const { settings } = await gc.website.getWebsiteTrackingSettings({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
GET

Get existing page slugs and each page's layout, to avoid duplicate slugs

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/urls
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});
const { urls } = await gc.website.getWebsiteUrls({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
GET

Whether this site's private pages have members, and which tenant

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/viewer-auth
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});
const auth = await gc.website.getWebsiteViewerAuth({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
GET

The identity providers this site's readers can sign in with

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/viewer-auth/sso
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
path · string
SDK

DELETE

Remove somebody's access to this website's gated content

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/viewers/{uid}
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
path · string
uidRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});const { viewers } = await gc.website.listWebsiteViewers({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
const result = await gc.website.removeWebsiteViewer({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,  uid: viewers[0].uid,});
GET

List the people who can read this website's gated content

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/viewers
Parameters
page
query · number
pageSize
query · number
lite
query · string
sort
query · string
search
query · string
signedInAt
query · string
invitedAt
query · string
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});
const { viewers } = await gc.website.listWebsiteViewers({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,});
POST

Invite somebody to read this website's gated content

/organizations/{organizationId}/projects/{projectId}/apps/website/{appId}/viewers
Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
appIdRequired
path · string
BodyRequired
emailRequired
stringWho to invite. Inviting somebody who already has an account sends them a fresh link rather than failing — that is how an expired invitation is repaired.
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 { apps } = await gc.projects.listProjectApps({  organizationId: orgs[0].id,  projectId: projects[0].id,});
const result = await gc.website.inviteWebsiteViewer({  organizationId: orgs[0].id,  projectId: projects[0].id,  appId: apps[0].id,  data: { email: "viewer@example.com" }});

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
Website | Giant Context