Giant Context
Giant ContextGet Early Access

Project Apps

Create, configure, restore, and delete project apps.


GET

Get a project app by slug

/organizations/{organizationId}/projects/{projectId}/apps/by-slug/{appSlug}

Retrieves the full details of a single app by its URL-friendly slug within the specified project. This is an alternative to looking up an app by ID when you have the human-readable slug instead. Returns the same complete app object as the get-by-ID endpoint including name, slug, app type, configuration, and timestamps.

Parameters
organizationIdRequired
path · stringOrganization ID
projectIdRequired
path · stringProject ID
appSlugRequired
path · stringApp slug
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 app = await gc.projectApps.getProjectAppBySlug({  organizationId: org.id,  projectId: projects[0].id,  appSlug: "my-app",});
GET

Read one app's settings, whatever kind of app it is

/organizations/{organizationId}/projects/{projectId}/apps/{appId}/settings

Returns the app's settings object together with the schema describing what that app accepts, so a caller can discover the shape without knowing the app type in advance. The shape comes from the app's own declaration, not from a list maintained here. Answers 404 with NO_APP_SETTINGS for an app type that has no settings, and names the ones that do.

Parameters
organizationIdRequired
path · stringOrganization ID
projectIdRequired
path · stringProject ID
appIdRequired
path · stringApp ID
SDKcURL
curl -X GET "https://api.giantcontext.com/organizations/organizationId_uuid/projects/projectId_uuid/apps/appId_uuid/settings" \  -H "Authorization: Bearer $API_KEY"
PATCH

Change one app's settings, merging into what is already there

/organizations/{organizationId}/projects/{projectId}/apps/{appId}/settings

Merges the given keys into the app's settings, validating them against the app's own declared schema — an unknown key or a wrong type is a 400 naming the offending key, not a silent write. Only the keys sent are changed; omitted keys keep their value. Send a key as null to clear it.

Parameters
organizationIdRequired
path · stringOrganization ID
projectIdRequired
path · stringProject ID
appIdRequired
path · stringApp ID
BodyRequired
settingsRequired
objectOnly the keys being changed. Omitted keys keep their value; send a key as null to clear it. Validated against the app's declared schema.
SDKcURL
curl -X PATCH "https://api.giantcontext.com/organizations/organizationId_uuid/projects/projectId_uuid/apps/appId_uuid/settings" \  -H "Authorization: Bearer $API_KEY" \  -H "Content-Type: application/json" \  -d '{  "settings": "settings_value"}'
GET

Get a project app by ID

/organizations/{organizationId}/projects/{projectId}/apps/{appId}

Retrieves the full details of a single app by its unique ID within the specified project. Returns the app's name, slug, app type, configuration settings, and timestamps. The app must belong to the specified project or a 404 error is returned.

Parameters
organizationIdRequired
path · stringOrganization ID
projectIdRequired
path · stringProject ID
appIdRequired
path · stringApp ID
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 app = await gc.projectApps.getProjectApp({  organizationId: org.id,  projectId: projects[0].id,  appId: "your-app-id",});
GET

List soft-deleted apps in a project's trash, restorable or permanently deletable

/organizations/{organizationId}/projects/{projectId}/apps/trash

Returns a list of all soft-deleted (trashed) apps within the specified project. These are apps that have been deleted but not yet permanently removed. Each app includes its full details including name, slug, app type, and deletion timestamp. Trashed apps can be restored using the restore endpoint or permanently deleted using the permanent delete endpoint.

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: name, slug, appType, isActive, isPublished, deletedAt, createdAt, updatedAt. Direction is 'asc' or 'desc' and defaults to 'asc'.
search
query · stringFree-text search. Matched against: name, slug.
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).
slug
query · stringFilter by slug. Operators: slug=value (equals), slug_ne, slug_gt, slug_gte, slug_lt, slug_lte, slug_like (contains), slug_isnull=true|false, slug_has=value (jsonb array contains), slug[]=a&slug[]=b (in).
appType
query · stringFilter by appType. Operators: appType=value (equals), appType_ne, appType_gt, appType_gte, appType_lt, appType_lte, appType_like (contains), appType_isnull=true|false, appType_has=value (jsonb array contains), appType[]=a&appType[]=b (in).
isActive
query · stringFilter by isActive. Operators: isActive=value (equals), isActive_ne, isActive_gt, isActive_gte, isActive_lt, isActive_lte, isActive_like (contains), isActive_isnull=true|false, isActive_has=value (jsonb array contains), isActive[]=a&isActive[]=b (in).
organizationIdRequired
path · stringOrganization ID
projectIdRequired
path · stringProject ID
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 { apps } = await gc.projectApps.listDeletedProjectApps({  organizationId: org.id,  projectId: projects[0].id,});
GET

List a project's active apps and their types to obtain the appId

/organizations/{organizationId}/projects/{projectId}/apps

Returns a paginated list of all active (non-deleted) apps configured within the specified project. Apps represent individual applications such as websites, email, forms, knowledge bases, chat widgets, CRM instances, developer docs, or socials. Each app includes its unique ID, name, slug, app type, configuration, and timestamps. Supports pagination and search filtering.

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: name, slug, appType, isActive, isPublished, createdAt, updatedAt. Direction is 'asc' or 'desc' and defaults to 'asc'.
search
query · stringFree-text search. Matched against: name, slug.
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).
slug
query · stringFilter by slug. Operators: slug=value (equals), slug_ne, slug_gt, slug_gte, slug_lt, slug_lte, slug_like (contains), slug_isnull=true|false, slug_has=value (jsonb array contains), slug[]=a&slug[]=b (in).
appType
query · stringFilter by appType. Operators: appType=value (equals), appType_ne, appType_gt, appType_gte, appType_lt, appType_lte, appType_like (contains), appType_isnull=true|false, appType_has=value (jsonb array contains), appType[]=a&appType[]=b (in).
isActive
query · stringFilter by isActive. Operators: isActive=value (equals), isActive_ne, isActive_gt, isActive_gte, isActive_lt, isActive_lte, isActive_like (contains), isActive_isnull=true|false, isActive_has=value (jsonb array contains), isActive[]=a&isActive[]=b (in).
organizationIdRequired
path · stringOrganization ID
projectIdRequired
path · stringProject ID
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 { apps } = await gc.projectApps.listProjectApps({  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
Project Apps | Giant Context