# API Endpoints

### Content Management
- `GET /admin/content/new?collection=id` - Create new content form
- `GET /admin/content/:id/edit` - Edit content form
- `POST /admin/content/` - Create content
- `PUT /admin/content/:id` - Update content with versioning
- `DELETE /admin/content/:id` - Delete content

### Advanced Features
- `POST /admin/content/preview` - Preview before publishing
- `POST /admin/content/duplicate` - Duplicate content
- `GET /admin/content/:id/versions` - Version history
- `POST /admin/content/:id/restore/:version` - Restore version

### Public API
- `GET /api/content` - Get published content (paginated)
- `GET /api/collections/:collection/content` - Get content by collection
- `GET /api/collections` - List all collections

### GraphQL API

Opt-in plugin — add `graphqlPlugin()` to `plugins.register`:

```typescript
import { graphqlPlugin, createSonicJSApp } from '@sonicjs-cms/core'

export default createSonicJSApp({
  plugins: { register: [graphqlPlugin()] },
})
```

- `GET /graphql` — GraphiQL playground (interactive browser IDE)
- `POST /graphql` — Execute queries and mutations (Bearer API key auth)

```graphql
# Query published documents
query {
  documents(typeId: "blog_posts", status: "published", limit: 10) {
    items { id title slug status publishedAt data }
    cursor
  }
}

# Create a document (requires API key)
mutation {
  createDocument(typeId: "blog_posts", title: "Hello", data: {}) {
    id rootId isCurrentDraft
  }
}
```

Supports: `documents`, `document(id)` queries · `createDocument`, `updateDocument`, `publishDocument`, `unpublishDocument`, `deleteDocument` mutations · `JSON` scalar · keyset pagination.