AI Agent Integration
PageGun's API is designed to be consumed by AI agents and automation tools. This guide covers how to integrate PageGun into your AI-powered workflows.
Overview
AI agents (like OpenClaw, LangChain agents, or custom GPT actions) can use the PageGun API to:
- Auto-publish documentation from code or markdown files
- Batch-create pages from structured data
- Sync content between your codebase and live site
- Deploy to CDN with a single API call
Use Cases
Auto-Publishing Documentation
An agent monitors your repository and publishes updated docs whenever files change:
Git push → Agent detects changes → Creates/updates pages → Publishes to CDNBatch Page Creation
Generate dozens of pages from structured data (e.g., API specs, changelog entries):
const pages = [
{ slug: 'getting-started', title: 'Getting Started', content: '...' },
{ slug: 'authentication', title: 'Authentication', content: '...' },
// ...
]
for (const page of pages) {
await createOrUpdate(page)
await publish(page.id)
}Content Sync
Keep your PageGun site in sync with markdown files in your repo.
Agent Skill Configuration
If your AI agent supports skill/tool definitions, here's a reference configuration:
name: pagegun
description: Manage website content via PageGun API
base_url: https://api.pagegun.com/v1
auth:
type: bearer
token: ${PAGEGUN_API_KEY}
actions:
- name: create_page
method: POST
path: /pages
params: [page_name, slug, subroute, type, project_id, markdown_content]
- name: update_page
method: PUT
path: /pages/{pageId}
params: [markdown_content, page_name]
- name: publish_page
method: POST
path: /pages/publish
params: [pageId]
- name: list_pages
method: GET
path: /pages?project_id={projectId}Complete Workflow
Here's the full workflow from project creation to content consumption:
Step 1: Create a Project
curl -X POST https://api.pagegun.com/v1/projects \
-H "Authorization: Bearer pgk_live_xxx" \
-H "Content-Type: application/json" \
-d '{"name": "my-docs", "slug": "my-docs"}'Step 2: Enable Data Mode (Optional)
curl -X PUT https://api.pagegun.com/v1/projects/PROJECT_ID/settings \
-H "Authorization: Bearer pgk_live_xxx" \
-H "Content-Type: application/json" \
-d '{"data_mode": {"enabled": true}}'Step 3: Create Pages
curl -X POST https://api.pagegun.com/v1/pages \
-H "Authorization: Bearer pgk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"page_name": "Quick Start",
"slug": "quick-start",
"subroute": "docs",
"type": "docs",
"project_id": "PROJECT_ID",
"markdown_content": "# Quick Start\n\nGet up and running in 5 minutes."
}'Step 4: Publish
curl -X POST https://api.pagegun.com/v1/pages/publish \
-H "Authorization: Bearer pgk_live_xxx" \
-H "Content-Type: application/json" \
-d '{"pageId": "PAGE_ID"}'Step 5: Consume (Data Mode)
curl https://content.pagegun.com/PROJECT_ID/pages/docs/quick-start/en.enc \
-o page.enc
# Decrypt with your content key (see Data Mode Guide)Best Practices
Idempotency
Design your automation to be idempotent — running it twice should produce the same result:
- Try
POST /pagesto create. - If the slug already exists, find the page via
GET /pages?project_id=xxx. - Update it with
PUT /pages/{id}.
Batch Operations
When creating many pages, add a small delay between requests to stay within rate limits:
for (const page of pages) {
await createOrUpdate(page)
await new Promise(r => setTimeout(r, 500)) // 500ms delay
}Error Handling
Always check the success field in API responses:
const result = await api('POST', '/pages', payload)
if (!result.success) {
console.error(`Failed: ${result.error?.message}`)
// Retry or fall back to update
}