Lifecycle States

Content: Lifecycle States

User Intent

"What do content states mean? When should I use each state?"

Operation

  • SDK Method: updateContent() with state parameter

  • GraphQL Field: content.state (EntityState enum)

  • Entity Type: Content

  • Common Use Cases: Content management, soft delete, archival, workflow states

Content States Overview

Content progresses through states during its lifecycle. Understanding states is critical for content management and querying.

TypeScript (Canonical)

import { Graphlit } from 'graphlit-client';
import { EntityState } from 'graphlit-client/dist/generated/graphql-types';

const graphlit = new Graphlit();

// Check content state
const content = await graphlit.getContent('content-id');
console.log(`State: ${content.content.state}`);

// Update content state
await graphlit.updateContent({
  id: 'content-id',
  state: EntityState.Disabled  // Hide from queries
});

// Query only enabled content
const activeContent = await graphlit.queryContents({
  filter: {
    states: [EntityState.Enabled]
  }
});

// Query disabled content (hidden)
const hiddenContent = await graphlit.queryContents({
  filter: {
    states: [EntityState.Disabled]
  }
});

// Query all states (including disabled)
const allContent = await graphlit.queryContents({
  filter: {
    states: [
      EntityState.Enabled,
      EntityState.Disabled,
      EntityState.Created
    ]
  }
});

Entity States

CREATED

  • When: Immediately after ingestion

  • Duration: Brief (during workflow processing)

  • Searchable: No (processing not complete)

  • Use Case: Content is being prepared/extracted

Example:

ENABLED

  • When: After successful workflow processing

  • Searchable: Yes (default state for queries)

  • Use Case: Active, searchable content

Example:

DISABLED

  • When: Manually disabled by user

  • Searchable: No (unless explicitly queried)

  • Use Case: Soft delete, hide temporarily, compliance hold

Example:

DELETED

  • When: Permanently deleted via deleteContent()

  • Searchable: No (content is gone)

  • Use Case: Permanent removal

Example:

ARCHIVED

  • When: Manually archived by user

  • Searchable: No (unless explicitly queried)

  • Use Case: Long-term retention, compliance, not actively used

Example:

State Transitions

Valid Transitions:

  • CREATEDENABLED (automatic after processing)

  • ENABLEDDISABLED (soft delete)

  • DISABLEDENABLED (restore)

  • ENABLEDARCHIVED (archive)

  • ARCHIVEDENABLED (restore from archive)

  • Any → DELETED (permanent delete)

Check state

content = await graphlit.getContent('content-id') print(f"State: {content.content.state}")

Update state (snake_case)

await graphlit.updateContent( id='content-id', state=EntityState.DISABLED )

Query by state

results = await graphlit.queryContents( filter=ContentFilterInput( states=[EntityState.ENABLED] ) )

Developer Hints

Default Query Behavior

Soft Delete vs Hard Delete

Querying Multiple States

Variations

1. Soft Delete Content

2. Restore Soft-Deleted Content

3. Archive Old Content

4. Query Only Active Content

5. View Disabled Content (Admin View)

6. Bulk State Changes

7. Compliance Archival

Common Issues & Solutions

Issue: Content not appearing in queries Solution: Check if content is disabled or archived

Issue: Accidentally deleted content Solution: Use soft delete (DISABLED) instead

Issue: Archived content still appearing Solution: Default queries only return ENABLED

Issue: Content stuck in CREATED state Solution: Check workflow processing status

Production Example

Last updated

Was this helpful?