| name | Craft CMS Skills |
| description | Complete skill suite for managing Craft CMS content including sections, entry types, fields, entries, drafts, field layouts, and sites. |
Important: Use this plugin, Not YAML Files
CRITICAL: Always use this HTTP API to manage Craft CMS content. Never directly modify YAML configuration files in the config/project/ directory. The API ensures proper validation, maintains data integrity, and handles all necessary relationships automatically. Direct YAML edits can corrupt your Craft installation.
CRITICAL: The skills plugin must be installed to Craft. You can verify installation by running php craft plugin/list and install it with php craft plugin/install skills
Base URL Configuration
All API routes require a base URL and API prefix. The standard Craft CMS configuration uses the PRIMARY_SITE_URL environment variable and a configurable API prefix:
- Environment Variable: Check for
PRIMARY_SITE_URLin ENV or.envfile - If Not Set: Ask the user for the base URL to use
- API Prefix: Configurable prefix that defaults to
/api- Check Order:
- First check
config/skills.phpforapiPrefixin the PHP array - If not found, try the default
/api - If requests fail, ask the user for the configured API prefix
- First check
- Check Order:
- Route Format:
{PRIMARY_SITE_URL}/{apiPrefix}/{endpoint} - Default Example:
https://craft-site.com/api/sections - Custom Prefix Example:
https://craft-site.com/custom-api/sections
Request/Response Format
All API endpoints:
- Return JSON: All responses are in JSON format with structured data
- Accept Header: Include
Accept: application/jsonheader in requests to ensure errors are also formatted as JSON for better error handling and debugging - Content-Type: Use
Content-Type: application/jsonfor POST/PUT requests with JSON body data
Content
- create_entry -
POST /api/entries- Create entries with section/entry type IDs and field data - get_entry -
GET /api/entries/<id>- Retrieve entry by ID with all fields and metadata - update_entry -
PUT /api/entries/<id>- Update entry (prefers draft workflow) - delete_entry -
DELETE /api/entries/<id>- Delete entry (soft/permanent) - search_content -
GET /api/entries/search- Search/filter entries by section/status/query
Drafts
- create_draft -
POST /api/drafts- Create draft from scratch or existing entry - update_draft -
PUT /api/drafts/<id>- Update draft content/metadata (PATCH semantics) - apply_draft -
POST /api/drafts/<id>/apply- Publish draft to canonical entry
Sections
- create_section -
POST /api/sections- Create section with types/versioning/sites - get_sections -
GET /api/sections- List all or filter by IDs - update_section -
PUT /api/sections/<id>- Update properties/settings - delete_section -
DELETE /api/sections/<id>- Permanently delete (removes all entries)
Entry Types
- create_entry_type -
POST /api/entry-types- Create with handle/name/layout - get_entry_types -
GET /api/entry-types- List with fields/usage/URLs - update_entry_type -
PUT /api/entry-types/<id>- Update properties/layout - delete_entry_type -
DELETE /api/entry-types/<id>- Delete if not in use
Fields
- create_field -
POST /api/fields- Create with type and settings - get_fields -
GET /api/fields- List global or layout-specific - get_field_types -
GET /api/fields/types- List available types - update_field -
PUT /api/fields/<id>- Update properties/settings - delete_field -
DELETE /api/fields/<id>- Permanently delete (removes data)
Field Layouts
- create_field_layout -
POST /api/field-layouts- Create empty field layout for entry types - get_field_layout -
GET /api/field-layouts- Get field layout structure by entry type/layout/element ID - add_tab_to_field_layout -
POST /api/field-layouts/<id>/tabs- Add tab to field layout with flexible positioning (prepend/append/before/after) - add_field_to_field_layout -
POST /api/field-layouts/<id>/fields- Add custom field to tab with positioning, width, required, and display options - add_ui_element_to_field_layout -
POST /api/field-layouts/<id>/ui-elements- Add UI elements (heading, tip, horizontal rule, markdown, template) to layouts - move_element_in_field_layout -
PUT /api/field-layouts/<id>/elements- Move fields/UI elements within or between tabs with precise positioning - remove_element_from_field_layout -
DELETE /api/field-layouts/<id>/elements- Remove fields or UI elements from field layout
Sites
- get_sites -
GET /api/sites- List all sites with IDs/handles/URLs
Assets
- create_asset -
POST /api/assets- Upload file from local/remote URL to volume - update_asset -
PUT /api/assets/<id>- Update metadata or replace file - delete_asset -
DELETE /api/assets/<id>- Delete asset and file - get_volumes -
GET /api/volumes- List asset volumes with IDs/URLs
System
- health -
GET /api/health- Health check endpoint to verify plugin installation and API availability