confluence-property · git:20260901.5d17d6a · 2026-09-01 · sha256 6842ac5cdeac20a0
confluence-property git:20260901.5d17d6aA
Immutable. This exact content is served forever at /api/v1/blob/6842ac5cdeac20a0.
---
name: confluence-property
description: Manage content properties (custom metadata) on Confluence pages and blog posts. ALWAYS use for custom metadata, key-value data, or application-specific fields.
triggers:
- property
- properties
- metadata
- custom data
- content property
- page property
- set property
- get property
- delete property
- list properties
origin:
type: upstream
upstream:
repository: grandcamel/Confluence-Assistant-Skills
path: skills/confluence-property
ref: 403eac8ad8a0812e6d41ed70cbc0fdf2ff4b7542
license: MIT
trust:
tier: reviewed
reviewed_at: '2026-08-26'
reviewed_by: ulises-jeremias
reviewed_provenance: sha256:b7806d6a7006b60c46ae6a17e3e689a09a700ae6d402e254934b3c56a58cd0c8
maintenance:
status: active
last_checked: '2026-08-26'
distribution:
mode: vendored
redistribution_allowed: true
attribution_file: LICENSE
security:
scripts: false
shell: false
network: true
mcp: false
hooks: false
---
# Confluence Property Skill
---
## ⚠️ PRIMARY USE CASE
**This skill manages custom metadata on pages.** Use for:
- Storing custom key-value data on pages
- Tracking workflow state (review status, approval)
- Integration metadata for external systems
- Structured data for automation
---
## When to Use / When NOT to Use
| Use This Skill | Use Instead |
|----------------|-------------|
| Get/set custom metadata | - |
| Store structured data | - |
| Edit page content | `confluence-page` |
| Add labels/tags | `confluence-label` |
| Set permissions | `confluence-permission` |
---
## Risk Levels
| Operation | Risk | Notes |
|-----------|------|-------|
| Get properties | - | Read-only |
| Set property | - | Can be overwritten |
| Delete property | ⚠️ | Data loss |
---
## Overview
Manages content properties on Confluence pages. Content properties are custom metadata stored as key-value pairs attached to a page. They are useful for storing application-specific data, configuration, or custom fields.
**Use Cases:**
- Store custom metadata on pages (e.g., review status, approval date)
- Implement custom workflows with property-based state tracking
- Store configuration data for external integrations
- Tag content with structured data for automated processing
## CLI Commands
All commands use the `confluence-as` binary. The global `-o/--output` flag placed before the subcommand (e.g. `confluence-as -o json property get 12345`) sets the default output format for all subcommands; an explicit subcommand-level `--output` wins.
### confluence-as property get
Retrieve content properties from a page.
**Usage:**
```bash
# Get all properties on a page
confluence-as property get 12345
# Get specific property by key
confluence-as property get 12345 --key my-property
# Get with expanded version info
confluence-as property get 12345 --expand version
# Output as JSON
confluence-as property get 12345 --output json
```
**Options:**
- `page_id` - Page ID (required)
- `--key, -k` - Specific property key to retrieve
- `--expand` - Comma-separated fields to expand (e.g., version)
- `--output, -o` - Output format: text or json
### confluence-as property set
Create or update a content property.
**Usage:**
```bash
# Set simple string value
confluence-as property set 12345 my-property --value "text value"
# Set from JSON file
confluence-as property set 12345 config --file config.json
# Set complex JSON value
confluence-as property set 12345 data --value '{"enabled": true, "count": 42}'
# Update existing property (auto-increments version)
confluence-as property set 12345 my-property --value "updated" --update
```
**Options:**
- `page_id` - Page ID (required)
- `key` - Property key (required)
- `--value, -v` - Property value (string or JSON)
- `--file, -f` - Read value from JSON file
- `--update` - Update existing property (fetches current version)
- `--version` - Explicit version number for update
- `--output, -o` - Output format: text or json
**Value Types:**
Properties can store:
- Simple strings: `"text"`
- Numbers: `42`
- Booleans: `true`/`false`
- Complex JSON objects: `{"key": "value", "array": [1, 2, 3]}`
### confluence-as property delete
Delete a content property.
**Usage:**
```bash
# Delete property (with confirmation prompt)
confluence-as property delete 12345 my-property
# Force delete without confirmation
confluence-as property delete 12345 my-property --force
```
**Options:**
- `page_id` - Page ID (required)
- `key` - Property key to delete (required)
- `--force` - Delete without confirmation
- `--output, -o` - Output format: text or json
### confluence-as property list
List and filter content properties.
**Usage:**
```bash
# List all properties
confluence-as property list 12345
# Filter by key prefix
confluence-as property list 12345 --prefix app.
# Filter by regex pattern
confluence-as property list 12345 --pattern "config.*"
# Sort by version
confluence-as property list 12345 --sort version
# Show detailed version info
confluence-as property list 12345 --expand version --verbose
# JSON output
confluence-as property list 12345 --output json
```
**Options:**
- `page_id` - Page ID (required)
- `--prefix` - Filter by key prefix
- `--pattern` - Filter by regex pattern
- `--sort` - Sort by: key or version (default: key)
- `--expand` - Comma-separated fields to expand
- `--verbose, -v` - Show detailed information
- `--output, -o` - Output format: text or json
**Note:** This command retrieves up to 100 properties maximum.
## API Reference
Uses Confluence REST API v2 page-property endpoints:
- **List/get properties**: `GET /api/v2/pages/{page_id}/properties`
- **Create property**: `POST /api/v2/pages/{page_id}/properties`
- **Update property**: `PUT /api/v2/pages/{page_id}/properties/{property_id}`
- **Delete property**: `DELETE /api/v2/pages/{page_id}/properties/{property_id}`
## Examples
### Store Review Status
```bash
# Set review status
confluence-as property set 98765 review-status --value '{"status": "approved", "date": "2024-01-15", "reviewer": "john@example.com"}'
# Get review status
confluence-as property get 98765 --key review-status
# Update review status
confluence-as property set 98765 review-status --value '{"status": "published", "date": "2024-01-20"}' --update
```
### Configuration Management
```bash
# Store config from file
confluence-as property set 12345 app-config --file config.json
# List all config properties
confluence-as property list 12345 --prefix app-
# Get specific config
confluence-as property get 12345 --key app-config
```
### Workflow State Tracking
```bash
# Initialize workflow state
confluence-as property set 12345 workflow --value '{"stage": "draft", "assignee": "alice@example.com"}'
# Update to next stage
confluence-as property set 12345 workflow --value '{"stage": "review", "assignee": "bob@example.com"}' --update
# List all workflow properties
confluence-as property list 12345 --pattern "workflow.*" --verbose
```
### Cleanup Old Properties
```bash
# List all properties
confluence-as property list 12345
# Delete specific property
confluence-as property delete 12345 old-property --force
# Delete with confirmation
confluence-as property delete 12345 temp-data
```
## Property Versioning
Properties support versioning for conflict detection:
1. **Create**: Initial version is 1
2. **Update**: Increment version number
3. **Conflict**: 409 error if version is out of sync
**Auto-version update:**
```bash
confluence-as property set 12345 my-prop --value "new value" --update
```
This automatically fetches the current version and increments it.
## Common Property Patterns
### Namespace Your Keys
Use prefixes to organize properties:
- `app.config.*` - Application configuration
- `workflow.*` - Workflow state
- `review.*` - Review metadata
- `integration.*` - External integration data
### Store Timestamps
```json
{
"created": "2024-01-15T10:30:00Z",
"modified": "2024-01-20T14:45:00Z",
"reviewed": "2024-01-18T16:20:00Z"
}
```
### Track Multi-Stage Workflows
```json
{
"stage": "review",
"stages": ["draft", "review", "approved", "published"],
"current_assignee": "reviewer@example.com",
"history": [
{"stage": "draft", "user": "author@example.com", "date": "2024-01-15"},
{"stage": "review", "user": "reviewer@example.com", "date": "2024-01-20"}
]
}
```
### Store Arrays and Complex Data
```json
{
"tags": ["important", "needs-update", "customer-facing"],
"approvers": [
{"name": "Alice", "email": "alice@example.com", "approved": true},
{"name": "Bob", "email": "bob@example.com", "approved": false}
],
"metrics": {
"views": 1234,
"likes": 56,
"shares": 12
}
}
```
## Error Handling
All commands handle common errors:
- **404 Not Found**: Content or property doesn't exist
- **403 Permission Denied**: Insufficient permissions
- **409 Conflict**: Version conflict on update
- **400 Validation Error**: Invalid input
Errors are printed to stderr with details and a troubleshooting hint; commands exit non-zero on failure.
## Integration Tips
### Use with Automation
```bash
# Get property value in scripts
VALUE=$(confluence-as property get 12345 --key status --output json | jq -r '.value.status')
# Conditional updates
if [ "$VALUE" == "draft" ]; then
confluence-as property set 12345 status --value '{"status": "review"}' --update
fi
```
### Bulk Operations
```bash
# Update properties on multiple pages
for PAGE_ID in 111 222 333; do
confluence-as property set $PAGE_ID deploy-status --value '{"deployed": true}' --update
done
```
### Property-Based Search
Properties are indexed and searchable via CQL:
```bash
# Find pages with specific property
confluence-as search cql "content.property[my-property].value = 'test'"
```
## Notes
- Properties are content-specific (not inherited by child pages)
- Property keys are case-sensitive
- Values can be any valid JSON data type
- Maximum property size depends on Confluence instance limits
- Properties are not included in page exports by default
- Use version numbers to prevent concurrent update conflicts