421 lines
8.6 KiB
Markdown
421 lines
8.6 KiB
Markdown
|
|
# 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!** 🎉
|