Giant Context
Giant ContextGet Early Access

Drafts

Generate, edit, preview, and publish content drafts.


POST

Unarchive a draft back into the default list; already-unarchived is a no-op

/organizations/{organizationId}/projects/{projectId}/mind/drafts/{draftId}/unarchive

Restores a previously archived draft to the default list.

Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
draftIdRequired
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 result = await gc.drafts.unarchiveDraft({  organizationId: org.id,  projectId: projects[0].id,  draftId: "your-draft-id",});
POST

Archive an accepted draft to hide it from the default list without deleting

/organizations/{organizationId}/projects/{projectId}/mind/drafts/{draftId}/archive

Hides an accepted draft from the default list without deleting it. Archived drafts are preserved as a paper trail and for AI training data. Only accepted or partially_accepted drafts can be archived.

Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
draftIdRequired
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 result = await gc.drafts.archiveDraft({  organizationId: org.id,  projectId: projects[0].id,  draftId: "draft-123",});
POST

Generate AI edits to existing content; async, returns a pending draftId to poll

/organizations/{organizationId}/projects/{projectId}/drafts/generate/edit

Generates a reviewable edit draft for an EXISTING resource. The AI analyzes the current content, determines what to keep/modify/add/remove, and stages the edited version as a copy — the live content only changes when the draft is accepted. For brand-new content, use generateNewDraft.

Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
BodyRequired
appId
string
promptRequired
string
packageId
string
resourceIdRequired
string
contentType
string
dependencies
array
draftPackage
object
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 draft = await gc.drafts.generateEditDraft({  organizationId: org.id,  projectId: projects[0].id,  data: { content: "Updated draft content" }});
GET

Get one draft with its prompt, generated content and status; poll while pending

/organizations/{organizationId}/projects/{projectId}/mind/drafts/{draftId}

Retrieves the full details of a single AI-generated content draft including the prompt, generated content, tool calls, and sources. Pass lite=true while polling to get status, qualityScore and errorMessage without the content tree, tool calls or sources.

Parameters
lite
query · stringWhen 'true', return only the record's own scalar fields — no nested structure. Use it while polling, and fetch once in full when you need the content.
organizationIdRequired
path · string
projectIdRequired
path · string
draftIdRequired
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 draft = await gc.drafts.getDraft({  organizationId: org.id,  projectId: projects[0].id,  draftId: "draft-id",});
DELETE

Delete a rejected, failed or cancelled draft permanently; other statuses return 409

/organizations/{organizationId}/projects/{projectId}/mind/drafts/{draftId}

Permanently deletes a draft. Only rejected, failed, or cancelled drafts can be deleted. Returns 409 if the draft is in any other status (pending, ready, accepted).

Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
draftIdRequired
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 result = await gc.drafts.deleteDraft({  organizationId: org.id,  projectId: projects[0].id,  draftId: "draft-123",});
POST

Generate new content from a prompt; async, takes 5-15 minutes, nothing publishes yet

/organizations/{organizationId}/projects/{projectId}/drafts/generate/new

Generates NEW content as a reviewable draft from a natural language prompt. The draft is a proposal — nothing publishes until it is accepted. For changes to existing content, use generateEditDraft.

Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
BodyRequired
appId
string
promptRequired
string
packageId
string
resourceId
any
contentType
string
dependencies
array
draftPackage
object
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 draft = await gc.drafts.generateNewDraft({  organizationId: org.id,  projectId: projects[0].id,  data: { title: "New Draft" }});
POST

Create a copy-on-write draft of existing content for manual editing, no AI

/organizations/{organizationId}/projects/{projectId}/drafts/edit

Creates a draft copy of existing content for non-destructive editing. The original stays untouched until the draft is accepted. On accept, the copy's content replaces the original. On reject, the copy is deleted.

Parameters
organizationIdRequired
path · string
projectIdRequired
path · string
BodyRequired
prompt
string
resourceIdRequired
string
contentTypeRequired
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 draft = await gc.drafts.createEditDraft({  organizationId: org.id,  projectId: projects[0].id,  data: {},});
GET

List a project's drafts newest first; archived hidden unless includeArchived

/organizations/{organizationId}/projects/{projectId}/mind/drafts

Returns a paginated list of AI-generated content drafts for the specified project. By default archived drafts are hidden — pass includeArchived=true to include them.

Parameters
page
query · numberPage number to return, 1-indexed. Defaults to 1.
pageSize
query · numberItems per page (1-100). Defaults to 10.
lite
query · stringWhen 'true', return only essential fields (id, slug, title/name) to reduce payload size. Useful for context fetching and link resolution.
sort
query · stringSort specifier as 'field:direction'. Sortable fields: status, name, createdAt, updatedAt. Direction is 'asc' or 'desc' and defaults to 'asc'.
search
query · stringFree-text search. Matched against: name, prompt.
status
query · stringFilter by status. Operators: status=value (equals), status_ne, status_gt, status_gte, status_lt, status_lte, status_like (contains), status_isnull=true|false, status_has=value (jsonb array contains), status[]=a&status[]=b (in).
name
query · stringFilter by name. Operators: name=value (equals), name_ne, name_gt, name_gte, name_lt, name_lte, name_like (contains), name_isnull=true|false, name_has=value (jsonb array contains), name[]=a&name[]=b (in).
prompt
query · stringFilter by prompt. Operators: prompt=value (equals), prompt_ne, prompt_gt, prompt_gte, prompt_lt, prompt_lte, prompt_like (contains), prompt_isnull=true|false, prompt_has=value (jsonb array contains), prompt[]=a&prompt[]=b (in).
contentType
query · stringFilter by contentType. Operators: contentType=value (equals), contentType_ne, contentType_gt, contentType_gte, contentType_lt, contentType_lte, contentType_like (contains), contentType_isnull=true|false, contentType_has=value (jsonb array contains), contentType[]=a&contentType[]=b (in).
createdAt
query · stringFilter by createdAt. Operators: createdAt=value (equals), createdAt_ne, createdAt_gt, createdAt_gte, createdAt_lt, createdAt_lte, createdAt_like (contains), createdAt_isnull=true|false, createdAt_has=value (jsonb array contains), createdAt[]=a&createdAt[]=b (in).
updatedAt
query · stringFilter by updatedAt. Operators: updatedAt=value (equals), updatedAt_ne, updatedAt_gt, updatedAt_gte, updatedAt_lt, updatedAt_lte, updatedAt_like (contains), updatedAt_isnull=true|false, updatedAt_has=value (jsonb array contains), updatedAt[]=a&updatedAt[]=b (in).
includeArchived
query · unionWhen true, archived drafts are included. Default: false.
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-slug" });const { projects } = await gc.projects.listProjects({ organizationId: org.id });
const { drafts } = await gc.drafts.listDrafts({  organizationId: org.id,  projectId: projects[0].id,});

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.
Product
  • How It Works
  • Mind
  • Create
  • Capture
  • Nurture
  • Optimize
  • Publishing
  • Pricing
  • Use Cases

© 2026 Giant Context
Privacy PolicyTermsCookie Policy
Powered by
Drafts | Giant Context