See Agility CMS in action. Watch a product demo
Integration Patterns
This guide covers integration patterns for Agility CMS, including frontend frameworks, third-party services, and custom integrations.
Frontend Framework Integration
Next.js Integration
SDK: @agility/nextjs
Features:
- React Server Components support
- Automatic caching
- Preview mode support
- TypeScript support
Pattern:
import { getContentItem } from "@/lib/cms/getContentItem"
const { fields } = await getContentItem<IPost>({
contentID: 204,
languageCode: "en-us"
})
Other Framework Integrations
Gatsby:
- Static site generation
- GraphQL support
- Plugin-based architecture
Nuxt:
- Vue.js support
- Server-side rendering
- Module-based integration
Eleventy:
- Static site generation
- Template-based rendering
- Simple integration
API Integration Patterns
RESTful API
Pattern:
- Standard HTTP methods
- JSON responses
- Query parameters for filtering
Example:
GET /{instance-guid}/fetch/{locale}/list/posts?take=10&skip=0
GraphQL API
Pattern:
- GraphQL queries
- Type-safe queries
- Flexible data fetching
Example:
query {
contentList(referenceName: "posts") {
items {
contentID
fields {
heading
slug
}
}
}
}
SDK Integration
Pattern:
- TypeScript SDK for type safety
- Automatic caching
- Preview mode support
Example:
const sdk = await getAgilitySDK()
const items = await sdk.getContentList({ referenceName: "posts" })
Third-Party Integrations
Analytics Integration
PostHog:
- Feature flags
- Analytics tracking
- A/B testing
Google Analytics:
- Page view tracking
- Event tracking
- Custom dimensions
Search Integration
Algolia:
- Full-text search
- Faceted search
- Search analytics
Custom Search:
- Build custom search
- Integrate with AI services
- Custom ranking
AI Integration
Azure OpenAI:
- AI-powered search
- Content generation
- Chat interfaces
Custom AI:
- Integrate custom AI services
- Build AI features
- Custom prompts
Webhook Integration
Webhook Pattern
Setup:
- Configure the webhook in Agility CMS (Settings → Webhooks)
- Create your webhook endpoint
- Enable secure delivery and verify the signature on every request
- Process the event idempotently and return a 2xx quickly
Event categories:
- Content Publish Events — content or a page is published or unpublished
- Content Save Events — content or a page is saved or deleted
- Content Workflow Events — content is requested for approval, approved, or declined
Delivery guarantees:
- Success is any 2xx; redirects count as failures and are not followed
- The delivery timeout is 30 seconds — acknowledge fast, work in the background
- Delivery is at-least-once; use the
webhook-idheader as an idempotency key - Retries are opt-in per webhook (1–8 attempts, fast / standard / slow backoff)
⚠️ There is no webhook "security key."
AGILITY_SECURITY_KEYis the preview key and is never sent with a webhook, and custom headers cannot be configured. Secure delivery signs each request instead — Agility implements the open Standard Webhooks spec, so you verify with an off-the-shelf library. See Verifying Signed Webhooks.
Webhook Handler
import { Webhook } from 'standard-webhooks'
export async function POST(request: Request) {
// Read the RAW body - re-serializing the JSON breaks verification
const raw = await request.text()
const wh = new Webhook(process.env.AGILITY_WEBHOOK_SIGNING_SECRET!)
try {
wh.verify(raw, {
"webhook-id": request.headers.get("webhook-id")!,
"webhook-timestamp": request.headers.get("webhook-timestamp")!,
"webhook-signature": request.headers.get("webhook-signature")!,
})
} catch {
return Response.json({ error: "Invalid signature" }, { status: 401 })
}
const event = JSON.parse(raw)
// Process event (idempotently - key off the webhook-id header)
// Revalidate cache
return Response.json({ ok: true })
}
Use each webhook's History view in Settings → Webhooks to see delivery attempts, response codes and errors when debugging an integration.
Custom Integration Patterns
Custom API Routes
Create custom API routes for:
- Custom business logic
- Third-party integrations
- Data transformations
- Custom workflows
Middleware Integration
Use middleware for:
- Preview mode handling
- Redirect management
- Locale routing
- Authentication
Best Practices
- Use SDKs: Prefer SDKs over direct API calls
- Type Safety: Use TypeScript for type safety
- Error Handling: Handle errors gracefully
- Caching: Leverage built-in caching
- Security: Secure all integrations
- Monitoring: Monitor integration health
- Documentation: Document integration patterns