# Integration Settings Discovery

The CLI now has a powerful feature to discover what settings are available for each integration!

## New Command: `integrations:settings`

Get the settings schema, validation rules, and maximum character limits for any integration.

## Usage

```bash
postiz integrations:settings <integration-id>
```

## What It Returns

```json
{
  "output": {
    "maxLength": 280,
    "settings": {
      "properties": {
        "who_can_reply_post": {
          "enum": ["everyone", "following", "mentionedUsers", "subscribers", "verified"],
          "description": "Who can reply to this post"
        },
        "community": {
          "pattern": "^(https://x.com/i/communities/\\d+)?$",
          "description": "X community URL"
        }
      },
      "required": ["who_can_reply_post"]
    }
  }
}
```

## Workflow

### 1. List Your Integrations

```bash
postiz integrations:list
```

Output:
```json
[
  {
    "id": "reddit-abc123",
    "name": "My Reddit Account",
    "identifier": "reddit",
    "provider": "reddit"
  },
  {
    "id": "youtube-def456",
    "name": "My YouTube Channel",
    "identifier": "youtube",
    "provider": "youtube"
  },
  {
    "id": "twitter-ghi789",
    "name": "@myhandle",
    "identifier": "x",
    "provider": "x"
  }
]
```

### 2. Get Settings for Specific Integration

```bash
postiz integrations:settings reddit-abc123
```

Output:
```json
{
  "output": {
    "maxLength": 40000,
    "settings": {
      "properties": {
        "subreddit": {
          "type": "array",
          "items": {
            "properties": {
              "value": {
                "properties": {
                  "subreddit": {
                    "type": "string",
                    "minLength": 2,
                    "description": "Subreddit name"
                  },
                  "title": {
                    "type": "string",
                    "minLength": 2,
                    "description": "Post title"
                  },
                  "type": {
                    "type": "string",
                    "description": "Post type (text or link)"
                  },
                  "url": {
                    "type": "string",
                    "description": "URL for link posts"
                  },
                  "is_flair_required": {
                    "type": "boolean",
                    "description": "Whether flair is required"
                  },
                  "flair": {
                    "properties": {
                      "id": "string",
                      "name": "string"
                    }
                  }
                },
                "required": ["subreddit", "title", "type", "is_flair_required"]
              }
            }
          }
        }
      },
      "required": ["subreddit"]
    }
  }
}
```

### 3. Use the Settings in Your Post

Now you know what settings are available and required!

```bash
postiz posts:create \
  -c "My post content" \
  -p reddit \
  --settings '{
    "subreddit": [{
      "value": {
        "subreddit": "programming",
        "title": "Check this out!",
        "type": "text",
        "url": "",
        "is_flair_required": false
      }
    }]
  }' \
  -i "reddit-abc123"
```

## Examples by Platform

### Reddit

```bash
postiz integrations:settings reddit-abc123
```

Returns:
- Max length: 40,000 characters
- Required settings: subreddit, title, type
- Optional: flair

### YouTube

```bash
postiz integrations:settings youtube-def456
```

Returns:
- Max length: 5,000 characters (description)
- Required settings: title, type (public/private/unlisted)
- Optional: tags, thumbnail, selfDeclaredMadeForKids

### X (Twitter)

```bash
postiz integrations:settings twitter-ghi789
```

Returns:
- Max length: 280 characters (or 4,000 for verified)
- Required settings: who_can_reply_post
- Optional: community

### LinkedIn

```bash
postiz integrations:settings linkedin-jkl012
```

Returns:
- Max length: 3,000 characters
- Optional settings: post_as_images_carousel, carousel_name

### TikTok

```bash
postiz integrations:settings tiktok-mno345
```

Returns:
- Max length: 150 characters (caption)
- Required settings: privacy_level, duet, stitch, comment, autoAddMusic, brand_content_toggle, brand_organic_toggle, content_posting_method
- Optional: title, video_made_with_ai

### Instagram

```bash
postiz integrations:settings instagram-pqr678
```

Returns:
- Max length: 2,200 characters
- Required settings: post_type (post or story)
- Optional: is_trial_reel, graduation_strategy, collaborators

## No Additional Settings Required

Some platforms don't require specific settings:

```bash
postiz integrations:settings threads-stu901
```

Returns:
```json
{
  "output": {
    "maxLength": 500,
    "settings": "No additional settings required"
  }
}
```

Platforms with no additional settings:
- Threads
- Mastodon
- Bluesky
- Telegram
- Nostr
- VK

## Use Cases

### 1. Discovery

Find out what settings are available before posting:

```bash
# What settings does YouTube support?
postiz integrations:settings youtube-123

# What settings does Reddit support?
postiz integrations:settings reddit-456
```

### 2. Validation

Check maximum character limits:

```bash
postiz integrations:settings twitter-789 | jq '.output.maxLength'
# Output: 280
```

### 3. AI Agent Integration

AI agents can call this endpoint to:
- Discover available settings dynamically
- Validate settings before posting
- Adapt to platform-specific requirements

```bash
# Get settings schema
INTEGRATION_ID="your-integration-id"
SETTINGS=$(postiz integrations:settings "$INTEGRATION_ID")

# Extract max length
MAX_LENGTH=$(echo "$SETTINGS" | jq '.output.maxLength')

# Check and truncate content if needed
CONTENT="Your post content"
if [ ${#CONTENT} -gt "$MAX_LENGTH" ]; then
  CONTENT="${CONTENT:0:$MAX_LENGTH}"
fi

# List required settings
echo "$SETTINGS" | jq '.output.settings.required // []'
```

### 4. Form Generation

Use the schema to generate UI forms:

```bash
# Inspect the settings schema for form generation
postiz integrations:settings reddit-123 | jq '.output.settings'

# Extract specific field properties
postiz integrations:settings reddit-123 \
  | jq '.output.settings.properties.subreddit.items.properties.value.properties'
# → subreddit (text, minLength: 2)
# → title (text, minLength: 2)
# → type (select: text/link)
# → etc.
```

## Combined Workflow

Complete workflow for posting with correct settings:

```bash
#!/bin/bash
export POSTIZ_API_KEY=your_key

# 1. List integrations
echo "📋 Available integrations:"
postiz integrations:list

# 2. Get settings for Reddit
echo ""
echo "⚙️  Reddit settings:"
SETTINGS=$(postiz integrations:settings reddit-123)
echo $SETTINGS | jq '.output.maxLength'
echo $SETTINGS | jq '.output.settings'

# 3. Create post with correct settings
echo ""
echo "📝 Creating post..."
postiz posts:create \
  -c "My post content" \
  -p reddit \
  --settings '{
    "subreddit": [{
      "value": {
        "subreddit": "programming",
        "title": "Interesting post",
        "type": "text",
        "url": "",
        "is_flair_required": false
      }
    }]
  }' \
  -i "reddit-123"
```

## API Endpoint

The command calls:
```
GET /public/v1/integration-settings/:id
```

Returns:
```typescript
{
  output: {
    maxLength: number;
    settings: ValidationSchema | "No additional settings required";
  }
}
```

## Error Handling

### Integration Not Found

```bash
postiz integrations:settings invalid-id
# ❌ Failed to get integration settings: Integration not found
```

### API Key Not Set

```bash
postiz integrations:settings reddit-123
# ❌ Error: POSTIZ_API_KEY environment variable is required
```

## Tips

1. **Always check settings first** before creating posts with custom settings
2. **Use the schema** to validate your settings object
3. **Check maxLength** to avoid exceeding character limits
4. **For AI agents**: Cache the settings to avoid repeated API calls
5. **Required fields** must be included in your settings object

## Comparison: Before vs After

### Before ❌

```bash
# Had to guess what settings are available
# Had to read documentation or source code
# Didn't know character limits
```

### After ✅

```bash
# Discover settings programmatically
postiz integrations:settings reddit-123

# See exactly what's required and optional
# Know the exact character limits
# Get validation schemas
```

## Summary

✅ **Discover settings for any integration**
✅ **Get character limits**
✅ **See validation schemas**
✅ **Know required vs optional fields**
✅ **Perfect for AI agents**
✅ **No more guesswork!**

**Now you can discover what settings each platform supports!** 🎉
