Contentful SDK Guide
Comprehensive guide for Contentful SDKs in TypeScript/JavaScript.
Which SDK Do You Need?
- Management SDK (CMA): Creating/updating content, managing content types, assets, environments → Start at references/management/overview.md
- Delivery SDK (CDA): Fetching published content for production apps → Start at references/delivery/overview.md
- App Framework: Building Contentful Apps that extend the UI → Start at references/app-framework/overview.md
Management SDK (CMA)
For creating, updating, and managing content, content types, assets, and environments.
Start here: references/management/overview.md
Topics:
- content-types.md - Define and update content models with field types and validations
- entries.md - Create, update, query, and publish entries with version locking
- assets.md - Upload, process, and publish media files
- environments.md - Create, clone, and manage environments and aliases
- error-handling.md - Handle rate limits, version conflicts, and validation errors
- bulk-operations.md - Pagination, batch processing, and concurrency control
Delivery SDK (CDA)
For fetching published content in production applications.
Start here: references/delivery/overview.md
Topics:
- querying.md - Query parameters, filters, search operators, and pagination
- includes-links.md - Link resolution, includes parameter, and handling references
- localization.md - Locale handling, fallbacks, and multi-language content
- rich-text.md - Rendering rich text fields with embedded entries and assets
App Framework SDK
For building apps that extend the Contentful UI.
Start here: references/app-framework/overview.md
Topics:
- locations.md - All app locations: field, sidebar, dialog, entry editor, page, config
- sdk-apis.md - Navigator, dialogs, notifier, access, and window APIs
- parameters.md - Installation, instance, and invocation parameters
Quick Reference
Version Locking (Management SDK)
Always pass sys when updating to prevent conflicts:
const entry = await client.entry.get({ spaceId, environmentId, entryId })
await client.entry.update({ spaceId, environmentId, entryId }, {
sys: entry.sys, // Required for version locking
fields: { ... }
})
TypeScript Entry Skeletons (Delivery SDK)
Define type-safe content structures:
type BlogPostSkeleton = {
contentTypeId: 'blogPost'
fields: {
title: EntryFieldTypes.Text
slug: EntryFieldTypes.Symbol
body: EntryFieldTypes.RichText
}
}
const entry = await client.getEntry<BlogPostSkeleton>('entry-id')
CMA Integration in Apps (App Framework)
Use SDK adapter to avoid exposing tokens:
import contentful from 'contentful-management'
const cma = contentful.createClient(
{ apiAdapter: sdk.cmaAdapter },
{
type: 'plain',
defaults: {
spaceId: sdk.ids.space,
environmentId: sdk.ids.environmentAlias ?? sdk.ids.environment
}
}
)
1---2name: contentful-sdk3description: Comprehensive Contentful SDK guide for TypeScript/JavaScript. Covers Management SDK (CMA) for content/schema management, Delivery SDK (CDA) for fetching content, and App Framework SDK for building Contentful apps. Use for any Contentful API integration work.4---5
6# Contentful SDK Guide
7
8Comprehensive guide for Contentful SDKs in TypeScript/JavaScript.
9
10## Which SDK Do You Need?
11
12- **Management SDK (CMA)**: Creating/updating content, managing content types, assets, environments → Start at [references/management/overview.md](references/management/overview.md)
13- **Delivery SDK (CDA)**: Fetching published content for production apps → Start at [references/delivery/overview.md](references/delivery/overview.md)
14- **App Framework**: Building Contentful Apps that extend the UI → Start at [references/app-framework/overview.md](references/app-framework/overview.md)
15
16## Management SDK (CMA)
17
18For creating, updating, and managing content, content types, assets, and environments.
19
20**Start here**: [references/management/overview.md](references/management/overview.md)
21
22**Topics**:
23- [**content-types.md**](references/management/content-types.md) - Define and update content models with field types and validations
24- [**entries.md**](references/management/entries.md) - Create, update, query, and publish entries with version locking
25- [**assets.md**](references/management/assets.md) - Upload, process, and publish media files
26- [**environments.md**](references/management/environments.md) - Create, clone, and manage environments and aliases
27- [**error-handling.md**](references/management/error-handling.md) - Handle rate limits, version conflicts, and validation errors
28- [**bulk-operations.md**](references/management/bulk-operations.md) - Pagination, batch processing, and concurrency control
29
30## Delivery SDK (CDA)
31
32For fetching published content in production applications.
33
34**Start here**: [references/delivery/overview.md](references/delivery/overview.md)
35
36**Topics**:
37- [**querying.md**](references/delivery/querying.md) - Query parameters, filters, search operators, and pagination
38- [**includes-links.md**](references/delivery/includes-links.md) - Link resolution, includes parameter, and handling references
39- [**localization.md**](references/delivery/localization.md) - Locale handling, fallbacks, and multi-language content
40- [**rich-text.md**](references/delivery/rich-text.md) - Rendering rich text fields with embedded entries and assets
41
42## App Framework SDK
43
44For building apps that extend the Contentful UI.
45
46**Start here**: [references/app-framework/overview.md](references/app-framework/overview.md)
47
48**Topics**:
49- [**locations.md**](references/app-framework/locations.md) - All app locations: field, sidebar, dialog, entry editor, page, config
50- [**sdk-apis.md**](references/app-framework/sdk-apis.md) - Navigator, dialogs, notifier, access, and window APIs
51- [**parameters.md**](references/app-framework/parameters.md) - Installation, instance, and invocation parameters
52
53## Quick Reference
54
55### Version Locking (Management SDK)
56Always pass `sys` when updating to prevent conflicts:
57```typescript
58const entry = await client.entry.get({ spaceId, environmentId, entryId })
59await client.entry.update({ spaceId, environmentId, entryId }, {
60 sys: entry.sys, // Required for version locking
61 fields: { ... }
62})
63```
64
65### TypeScript Entry Skeletons (Delivery SDK)
66Define type-safe content structures:
67```typescript
68type BlogPostSkeleton = {
69 contentTypeId: 'blogPost'
70 fields: {
71 title: EntryFieldTypes.Text
72 slug: EntryFieldTypes.Symbol
73 body: EntryFieldTypes.RichText
74 }
75}
76const entry = await client.getEntry<BlogPostSkeleton>('entry-id')
77```
78
79### CMA Integration in Apps (App Framework)
80Use SDK adapter to avoid exposing tokens:
81```typescript
82import contentful from 'contentful-management'
83
84const cma = contentful.createClient(
85 { apiAdapter: sdk.cmaAdapter },
86 {
87 type: 'plain',
88 defaults: {
89 spaceId: sdk.ids.space,
90 environmentId: sdk.ids.environmentAlias ?? sdk.ids.environment
91 }
92 }
93)
94```