auto_awesome

AIContentWriter

API Documentation

Learn how to integrate Auto Content with any platform. Works with WordPress out of the box, or build your own compatible API.

rocket_launch How It Works

Auto Content uses the WordPress REST API format as the standard protocol. This means:

check_circle

WordPress Sites

Works immediately! Just add your site URL and Application Password.

code

Custom Platforms

Create WordPress-compatible endpoints on your server, then add it like a WordPress site.

Integration Flow:

1 Your platform has REST API
2 Add site to Auto Content
3 Auto Content posts via API

web WordPress Integration

1

Create Application Password in WordPress

WordPress 5.6+ supports Application Passwords natively. For older versions, install the "Application Passwords" plugin.

  1. Log in to your WordPress admin at yoursite.com/wp-admin
  2. Navigate to Users > Profile
  3. Scroll down to "Application Passwords" section
  4. Enter name: Auto Content
  5. Click "Add New Application Password"
  6. Copy the generated password immediately (spaces are OK, they're part of the password)

warning You will only see this password once! Copy it before closing the dialog.

2

Add Site to Auto Content

  1. Go to Dashboard > WordPress Manager
  2. Click "Add Site" button
  3. Fill in the form:
    • Site Name: Any name to identify your site
    • Site URL: https://yoursite.com (without /wp-admin)
    • Username: Your WordPress login username
    • App Password: The password you just created
  4. Click "Test Connection" to verify
  5. If successful, click "Save Site"
3

Create a Campaign

  1. In WordPress Manager, click "Create Campaign"
  2. Select your site and configure:
    • Source Categories: Topics to pull content from
    • Posts per Day: How many posts to publish daily
    • Post Status: Publish immediately or save as draft
    • Custom Prompt: (Optional) AI instructions for rewriting
  3. Click "Activate Campaign"
check_circle

You're All Set!

Auto Content will now automatically crawl content, rewrite it with AI, and publish to your WordPress site based on your schedule.

code Custom Platform Integration

Want to post to a custom CMS, Laravel app, Node.js backend, or any other platform? Create REST API endpoints that follow the WordPress API format, then add your site to Auto Content just like a WordPress site.

lightbulb Key Concept

Auto Content doesn't care if your site runs WordPress or not. It only cares that your API responds correctly to these endpoints:

Required Endpoints on Your Server:

POST
/wp-json/wp/v2/posts

Create new posts (Required)

GET
/wp-json/wp/v2/categories

List categories (Required for category mapping)

POST
/wp-json/wp/v2/media

Upload images (Optional - for featured images)

Step-by-Step for Custom Platforms:

  1. Create the API endpoints on your server (see Code Examples below)
  2. Implement Basic Auth - Your API should accept Authorization: Basic base64(user:pass)
  3. Return WordPress-compatible JSON - Especially id and link fields
  4. Add to Auto Content - Go to WordPress Manager > Add Site, enter your site URL and credentials
  5. Test Connection - Auto Content will call your /wp-json/wp/v2/categories endpoint to verify

info Important Notes

  • Your URL must use HTTPS (SSL required for security)
  • The path /wp-json/wp/v2/ must be exactly this format
  • Credentials you enter in Auto Content will be sent as Basic Auth headers
  • You handle storing posts in your own database - Auto Content just sends the data

description API Specification

POST /wp-json/wp/v2/posts

Creates a new post. This is the main endpoint Auto Content calls.

Request Headers

Authorization: Basic base64(username:password)
Content-Type: application/json

Request Body (JSON)

{
    "title": "Article Title",
    "content": "<p>Full HTML content...</p>",
    "excerpt": "Short description",
    "status": "publish",           // "publish" or "draft"
    "categories": [1, 5],          // Array of category IDs
    "tags": [10, 20],              // Array of tag IDs (optional)
    "featured_media": 123          // Media ID from /media endpoint (optional)
}

Success Response (201 Created)

{
    "id": 456,                              // Your database ID (required)
    "link": "https://yoursite.com/post/456", // URL to view post (required)
    "status": "publish",
    "title": { "rendered": "Article Title" }
}
GET /wp-json/wp/v2/categories

Returns list of categories. Used to map Auto Content categories to your site's categories.

Response (200 OK)

[
    { "id": 1, "name": "Technology", "slug": "technology" },
    { "id": 2, "name": "News", "slug": "news" },
    { "id": 3, "name": "Crypto", "slug": "crypto" }
]
POST /wp-json/wp/v2/media (Optional)

Uploads featured images. Auto Content downloads the source image and sends the binary data.

Request Headers

Authorization: Basic base64(username:password)
Content-Type: image/jpeg  // or image/png, image/webp
Content-Disposition: attachment; filename="image.jpg"

Request Body

Raw binary image data

Success Response (201 Created)

{
    "id": 789,
    "source_url": "https://yoursite.com/uploads/image.jpg"
}

api REST API Reference

Access all Auto Content features programmatically. Create campaigns, fetch articles with field selection, AI rewriting, and more through our comprehensive REST API.

key Authentication

All API requests require an API key. Include it in the header:

X-API-Key: sk_live_your_api_key_here
// OR
Authorization: Bearer sk_live_your_api_key_here

Get your API key from Dashboard > API Keys

Base URL

https://aicontentwriter.net/api/v1

article Articles API

Fetch articles with field selection - only get the data you need.

GET /api/v1/articles

List articles with optional field selection and filters.

Query Parameters
Parameter Type Description
fieldsstringComma-separated fields: title,content,sentiment
keywordstringSearch in title and content
categorystringFilter by category slug
sourcestringFilter by source ID
languagestringFilter by language code (en, vi)
sentimentstringpositive, negative, neutral
coinstringFilter by coin tickers (BTC,ETH)
fromdateStart date (YYYY-MM-DD)
todateEnd date (YYYY-MM-DD)
pageintPage number (default: 1)
limitintItems per page (max: 100)
sortstringSort by: published_at, fetched_at, title
orderstringasc or desc (default: desc)
include_duplicatesboolInclude duplicate articles (default: false)
Example Request
GET /api/v1/articles?fields=article_id,title,sentiment,coins&category=crypto&limit=10&sort=published_at&order=desc
GET /api/v1/articles/{id}

Get single article. Supports optional fields parameter.

Response Example
{
  "status": "success",
  "fields": ["article_id", "url", "title", ...],
  "article": {
    "article_id": "a1b2c3d4e5f6...",
    "url": "https://source.com/article",
    "title": "Bitcoin Reaches New All-Time High",
    "description": "Bitcoin price surged...",
    "content": "Full article content...",
    "content_html": "<article>...</article>",
    "rewritten_title": "BTC Hits Historic Peak",
    "rewritten_description": "Bitcoin achieves...",
    "image_url": "https://cdn.source.com/img.jpg",
    "images": {"img-1": "url1", "img-2": "url2"},
    "videos": {"vid-1": "url1"},
    "tweets": {"tweet-1": "embed_code"},
    "author": "John Doe",
    "language": "en",
    "published_at": "2026-01-21 10:30:00",
    "fetched_at": "2026-01-21 10:35:00",
    "sentiment": "positive",
    "sentiment_stats": {
      "positive": 85.5,
      "negative": 4.3,
      "neutral": 10.2
    },
    "keywords": ["bitcoin", "crypto", "price"],
    "ai_tags": ["cryptocurrency", "finance"],
    "coins": ["BTC", "ETH"],
    "ai_summary": "Bitcoin hits $100K...",
    "is_duplicate": false,
    "duplicate_of": null,
    "source": {
      "id": "coindesk",
      "name": "CoinDesk",
      "domain": "coindesk.com",
      "icon": "https://..."
    },
    "category": {
      "name": "Cryptocurrency",
      "slug": "crypto"
    },
    "country": "US"
  }
}
GET /api/v1/articles/export

Export articles with full content. Max 1000 articles per request.

Query Parameters

Same filters as /articles plus: format (json/csv), limit (max: 1000)

Example Request
GET /api/v1/articles/export?fields=title,content,sentiment&category=crypto&limit=500
POST /api/v1/articles/rewrite

AI rewrite article with custom prompt. AI processing is included with your plan.

Request Body
{
  "article_id": "a1b2c3d4...",
  "custom_prompt": "Rewrite in professional tone, focus on price impact",
  "target_language": "vi",
  "fields_to_rewrite": ["title", "description", "content"]
}
Response
{
  "status": "success",
  "article_id": "a1b2c3d4...",
  "original": {
    "title": "Bitcoin Reaches New All-Time High",
    "description": "Bitcoin price surged...",
    "content": "Full article content..."
  },
  "rewritten": {
    "title": "Bitcoin Đạt Đỉnh Cao Mới",
    "description": "Giá Bitcoin tăng vọt...",
    "content": "Nội dung bài viết..."
  },
  "message": "Article rewritten successfully"
}
GET /api/v1/articles/fields

List all available fields for field selection.

Available Fields (25 fields)
article_id url title description content content_html rewritten_title rewritten_description image_url images videos tweets author language published_at fetched_at sentiment sentiment_stats keywords ai_tags coins ai_summary is_duplicate duplicate_of source category country
Response Example
{
  "status": "success",
  "available_fields": ["article_id", "url", "title", ...],
  "default_fields": ["article_id", "url", "title", "description", ...],
  "field_descriptions": {
    "article_id": "Unique article identifier (MD5 hash)",
    "content": "Full article content (text)",
    "sentiment_stats": "Detailed sentiment scores",
    ...
  }
}

web WordPress & Campaign API

Manage WordPress sites and campaigns programmatically with full customization.

POST /api/v1/wordpress/campaigns

Create a new campaign with full customization including AI prompts.

Request Body (All Fields)
{
  // Required fields
  "wp_site_id": 1,
  "name": "Crypto News Campaign",
  "source_categories": [1, 2, 5],

  // Posting settings
  "posts_per_day": 10,
  "interval_minutes": 60,
  "batch_size": 5,
  "min_word_count": 200,

  // WordPress settings
  "wp_category_id": null,
  "wp_category_name": "",
  "auto_create_category": true,
  "wp_post_status": "publish",

  // AI Rewriting settings
  "use_custom_prompt": true,
  "custom_prompt": "Rewrite this article in Vietnamese, professional tone, focus on key insights. Keep the same structure but make it unique.",
  "target_language": "vi",

  // Field mapping (customize which fields to use)
  "field_mapping": {
    "title": "rewritten_title",
    "content": "rewritten_description",
    "excerpt": "description"
  },

  // Article filters
  "min_article_date": "2026-01-01",
  "article_order": "newest"
}
All Campaign Fields Explained
Field Type Description
wp_site_idintRequired. WordPress site ID
namestringRequired. Campaign name
source_categoriesarrayRequired. Array of source category IDs
posts_per_dayintMax posts per day (default: 10)
interval_minutesintMinutes between posts (default: 60)
batch_sizeintArticles per batch (default: 5)
min_word_countintMinimum words required (default: 200)
auto_create_categoryboolAuto-create category on WordPress
wp_category_idintFixed WordPress category ID
wp_category_namestringCategory name if auto_create is true
wp_post_statusstring"publish" or "draft"
use_custom_promptboolEnable AI rewriting
custom_promptstringCustom AI prompt for rewriting
target_languagestringTarget language code (en, vi, etc.)
field_mappingobjectMap article fields to WP fields
min_article_datedateOnly use articles after this date
article_orderstring"newest" or "oldest"
GET /wordpress/sites

List all WordPress sites

POST /wordpress/sites

Add new WordPress site

GET /wordpress/campaigns

List all campaigns

PUT /wordpress/campaigns/{id}

Update campaign settings

POST /wordpress/campaigns/{id}/toggle

Activate/deactivate campaign

POST /wordpress/publish

Manually publish an article

GET /wordpress/history

Get posting history

DEL /wordpress/campaigns/{id}

Delete a campaign

webhook Webhooks Management API

Create and manage webhooks programmatically. Integrate with n8n, Make, Zapier, or custom platforms.

GET /api/v1/webhooks

List all webhooks for authenticated user.

Response
{
  "status": "success",
  "webhooks": [
    {
      "id": 1,
      "name": "n8n Integration",
      "url": "https://n8n.example.com/webhook/xxx",
      "events": ["article.created", "wordpress.posted"],
      "is_active": true,
      "total_triggers": 150,
      "total_success": 148,
      "total_failures": 2,
      "last_triggered_at": "2026-01-22 10:30:00"
    }
  ],
  "available_events": {
    "article.created": "Triggered when a new article is crawled",
    "article.rewritten": "Triggered when an article is rewritten by AI",
    "wordpress.posted": "Triggered when an article is posted to WordPress",
    "wordpress.failed": "Triggered when a WordPress post fails",
    "campaign.completed": "Triggered when a campaign batch completes"
  }
}
POST /api/v1/webhooks

Create a new webhook (max 10 per user).

Request Body
{
  "name": "My n8n Webhook",
  "url": "https://n8n.example.com/webhook/abc123",
  "events": ["article.created", "wordpress.posted"],
  "secret": "optional_custom_secret"  // Auto-generated if not provided
}
Response
{
  "status": "success",
  "message": "Webhook created successfully",
  "webhook": {
    "id": 5,
    "name": "My n8n Webhook",
    "url": "https://n8n.example.com/webhook/abc123",
    "secret": "a1b2c3d4...",  // Save this for signature verification!
    "events": ["article.created", "wordpress.posted"]
  }
}
PUT /api/v1/webhooks/{id}

Update webhook settings.

Request Body (all fields optional)
{
  "name": "Updated Name",
  "url": "https://new-url.com/webhook",
  "events": ["wordpress.posted", "wordpress.failed"],
  "is_active": false  // Disable webhook temporarily
}
DEL /api/v1/webhooks/{id}

Delete a webhook permanently.

POST /api/v1/webhooks/{id}/test

Send a test payload to verify webhook is working.

Response
{
  "status": "success",
  "message": "Test webhook sent successfully",
  "response_code": 200,
  "duration_ms": 145
}
GET /api/v1/webhooks/{id}/logs

Get webhook delivery logs (last 50 by default).

Query Parameters

limit - Number of logs to return (default: 50)

Response
{
  "status": "success",
  "logs": [
    {
      "id": 1,
      "event_type": "wordpress.posted",
      "response_code": 200,
      "duration_ms": 234,
      "status": "success",
      "created_at": "2026-01-22 10:30:00"
    },
    {
      "id": 2,
      "event_type": "article.created",
      "response_code": 500,
      "duration_ms": 5000,
      "status": "failed",
      "error_message": "Connection timeout",
      "created_at": "2026-01-22 09:15:00"
    }
  ]
}

code Quick Examples

cURL - Get Articles with Field Selection
curl -X GET "https://aicontentwriter.net/api/v1/articles?fields=title,sentiment,coins&limit=5" \
  -H "X-API-Key: sk_live_your_api_key"
JavaScript - Create Campaign with AI Prompt
const response = await fetch('https://aicontentwriter.net/api/v1/wordpress/campaigns', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-API-Key': 'sk_live_your_api_key'
  },
  body: JSON.stringify({
    wp_site_id: 1,
    name: 'AI Crypto News',
    source_categories: [1, 2],
    posts_per_day: 10,
    use_custom_prompt: true,
    custom_prompt: 'Rewrite professionally in Vietnamese',
    target_language: 'vi'
  })
});
Python - AI Rewrite Article
import requests

response = requests.post(
    'https://aicontentwriter.net/api/v1/articles/rewrite',
    headers={'X-API-Key': 'sk_live_your_api_key'},
    json={
        'article_id': 'a1b2c3d4...',
        'custom_prompt': 'Rewrite as a Twitter thread',
        'target_language': 'en',
        'fields': ['title', 'description']
    }
)
print(response.json())

speed Rate Limits

Plan Requests/Month Rate Limit
Free200/day1 req/sec
Starter10,0005 req/sec
Pro50,00010 req/sec
Ultra200,00030 req/sec

AI Rewriting endpoints consume additional quota based on content length.

webhook Webhooks & Integrations

Connect Auto Content with n8n, make.com, Zapier, or any automation platform using webhooks.

How Webhooks Work

When events occur in Auto Content (like new articles or WordPress posts), we send a POST request to your configured webhook URL with event data. This allows you to:

  • check Trigger n8n workflows when new content is available
  • check Create make.com scenarios for content distribution
  • check Connect to Zapier for additional integrations
  • check Build custom integrations with your own systems

Supported Events

Event Description Use Case
article.created New article crawled from content sources Send to content review queue
article.rewritten Article processed by AI rewriting Publish to multiple platforms
wordpress.posted Article successfully posted to WordPress Notify team, update CRM
wordpress.failed WordPress post failed Alert for manual intervention
campaign.completed Campaign batch finished processing Send daily summary report

Webhook Payload Format

All webhooks send JSON payloads with the following structure:

{
    "event": "wordpress.posted",
    "timestamp": "2026-01-21T10:30:00+00:00",
    "data": {
        "article_id": 123,
        "title": "AI Revolution in 2026",
        "url": "https://yoursite.com/ai-revolution-2026",
        "wp_post_id": 456,
        "wp_post_url": "https://yoursite.com/?p=456",
        "campaign_id": 1,
        "campaign_name": "Tech News Daily"
    }
}

Security & Verification

Each webhook request includes security headers for verification:

Header Description
X-Webhook-Event Event type (e.g., "wordpress.posted")
X-Webhook-Signature HMAC-SHA256 signature: sha256=<hash>
X-Webhook-Timestamp Unix timestamp when webhook was sent

Verify signature in PHP:

$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'] ?? '';
$expected = 'sha256=' . hash_hmac('sha256', $payload, $yourWebhookSecret);

if (hash_equals($expected, $signature)) {
    // Signature valid - process webhook
    $data = json_decode($payload, true);
} else {
    // Invalid signature - reject
    http_response_code(401);
}

n8n n8n Integration Example

  1. In n8n, add a Webhook node as trigger
  2. Set HTTP Method to POST
  3. Copy the webhook URL from n8n
  4. In Auto Content Dashboard → Webhooks → Add Webhook
  5. Paste the n8n URL and select events to trigger
  6. Click "Test" to verify connection
  7. Add processing nodes in n8n (e.g., Slack notification, Google Sheets)

make.com make.com Integration Example

  1. Create a new Scenario in make.com
  2. Add a Webhooks module (Custom webhook)
  3. Copy the webhook URL from make.com
  4. In Auto Content Dashboard → Webhooks → Add Webhook
  5. Paste the make.com URL and select events
  6. Click "Test" - make.com will detect the data structure
  7. Add modules like Twitter, Facebook, or Email to complete your scenario

download Ready-to-Use Workflow Templates

Import these templates directly into n8n or make.com - no coding required!

n8n n8n Workflow Templates

Template 1: Slack Notification

Get notified on Slack when new articles are posted

{
  "name": "Auto Content - Slack Notification",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "autocontent-webhook",
        "responseMode": "onReceived",
        "responseData": "allEntries"
      },
      "id": "webhook-1",
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 1,
      "position": [250, 300]
    },
    {
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{ $json.event }}",
              "operation": "equals",
              "value2": "wordpress.posted"
            }
          ]
        }
      },
      "id": "filter-1",
      "name": "Filter Posted Events",
      "type": "n8n-nodes-base.if",
      "typeVersion": 1,
      "position": [450, 300]
    },
    {
      "parameters": {
        "channel": "#content-updates",
        "text": ":newspaper: *New Article Published!*\n\n*Title:* {{ $json.data.title }}\n*URL:* {{ $json.data.wp_post_url }}\n*Campaign:* {{ $json.data.campaign_name }}",
        "otherOptions": {}
      },
      "id": "slack-1",
      "name": "Slack",
      "type": "n8n-nodes-base.slack",
      "typeVersion": 2,
      "position": [650, 250],
      "credentials": {
        "slackApi": {
          "id": "YOUR_SLACK_CREDENTIALS_ID",
          "name": "Slack account"
        }
      }
    }
  ],
  "connections": {
    "Webhook": {
      "main": [[{"node": "Filter Posted Events", "type": "main", "index": 0}]]
    },
    "Filter Posted Events": {
      "main": [[{"node": "Slack", "type": "main", "index": 0}], []]
    }
  }
}
Template 2: Google Sheets Logger

Log all published articles to a Google Sheet

{
  "name": "Auto Content - Google Sheets Logger",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "autocontent-sheets",
        "responseMode": "onReceived"
      },
      "id": "webhook-1",
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 1,
      "position": [250, 300]
    },
    {
      "parameters": {
        "operation": "appendOrUpdate",
        "documentId": {
          "__rl": true,
          "value": "YOUR_SPREADSHEET_ID",
          "mode": "id"
        },
        "sheetName": {
          "__rl": true,
          "value": "Sheet1",
          "mode": "name"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "Date": "={{ $now.format('yyyy-MM-dd HH:mm') }}",
            "Event": "={{ $json.event }}",
            "Title": "={{ $json.data.title }}",
            "URL": "={{ $json.data.wp_post_url || $json.data.url }}",
            "Campaign": "={{ $json.data.campaign_name }}",
            "Status": "={{ $json.data.status || 'posted' }}"
          }
        },
        "options": {}
      },
      "id": "sheets-1",
      "name": "Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4,
      "position": [450, 300],
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "YOUR_GOOGLE_CREDENTIALS_ID",
          "name": "Google account"
        }
      }
    }
  ],
  "connections": {
    "Webhook": {
      "main": [[{"node": "Google Sheets", "type": "main", "index": 0}]]
    }
  }
}
Template 3: Email Notification

Send email when posts fail (for error monitoring)

{
  "name": "Auto Content - Error Alert Email",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "autocontent-errors",
        "responseMode": "onReceived"
      },
      "id": "webhook-1",
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 1,
      "position": [250, 300]
    },
    {
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{ $json.event }}",
              "operation": "equals",
              "value2": "wordpress.failed"
            }
          ]
        }
      },
      "id": "filter-1",
      "name": "Filter Failed Events",
      "type": "n8n-nodes-base.if",
      "typeVersion": 1,
      "position": [450, 300]
    },
    {
      "parameters": {
        "fromEmail": "[email protected]",
        "toEmail": "[email protected]",
        "subject": "[Auto Content] Post Failed - {{ $json.data.title }}",
        "emailType": "html",
        "html": "<h2>WordPress Post Failed</h2><p><strong>Title:</strong> {{ $json.data.title }}</p><p><strong>Campaign:</strong> {{ $json.data.campaign_name }}</p><p><strong>Error:</strong> {{ $json.data.error_message }}</p><p><strong>Time:</strong> {{ $json.timestamp }}</p>",
        "options": {}
      },
      "id": "email-1",
      "name": "Send Email",
      "type": "n8n-nodes-base.emailSend",
      "typeVersion": 2,
      "position": [650, 250],
      "credentials": {
        "smtp": {
          "id": "YOUR_SMTP_CREDENTIALS_ID",
          "name": "SMTP account"
        }
      }
    }
  ],
  "connections": {
    "Webhook": {
      "main": [[{"node": "Filter Failed Events", "type": "main", "index": 0}]]
    },
    "Filter Failed Events": {
      "main": [[{"node": "Send Email", "type": "main", "index": 0}], []]
    }
  }
}
help How to Import in n8n
  1. Copy the JSON template above
  2. In n8n, click + Add Workflow
  3. Click the ... menu (top right) → Import from JSON
  4. Paste the JSON and click Import
  5. Update credentials (Slack, Google, SMTP) with your own
  6. Copy the Webhook URL and add it to Auto Content Dashboard

make.com make.com Scenario Templates

Template 1: Discord Notification

Post updates to a Discord channel

{
  "name": "Auto Content - Discord Notification",
  "flow": [
    {
      "id": 1,
      "module": "gateway:CustomWebHook",
      "version": 1,
      "parameters": {
        "hook": "YOUR_WEBHOOK_ID",
        "maxResults": 1
      },
      "mapper": {},
      "metadata": {
        "designer": {"x": 0, "y": 0},
        "restore": {},
        "expect": [
          {"name": "event", "type": "text"},
          {"name": "timestamp", "type": "date"},
          {
            "name": "data",
            "type": "collection",
            "spec": [
              {"name": "article_id", "type": "number"},
              {"name": "title", "type": "text"},
              {"name": "url", "type": "url"},
              {"name": "wp_post_url", "type": "url"},
              {"name": "campaign_name", "type": "text"}
            ]
          }
        ]
      }
    },
    {
      "id": 2,
      "module": "builtin:BasicRouter",
      "version": 1,
      "parameters": {},
      "routes": [
        {
          "flow": [
            {
              "id": 3,
              "module": "discord:SendMessageToChannel",
              "version": 2,
              "parameters": {
                "channelId": "YOUR_CHANNEL_ID",
                "content": ":newspaper: **New Article Published!**\n\n**Title:** {{1.data.title}}\n**URL:** {{1.data.wp_post_url}}\n**Campaign:** {{1.data.campaign_name}}"
              }
            }
          ],
          "filters": [
            {
              "condition": "{{1.event}} = wordpress.posted"
            }
          ]
        }
      ]
    }
  ]
}
Template 2: Airtable Content Database

Save all content to Airtable for tracking

{
  "name": "Auto Content - Airtable Logger",
  "flow": [
    {
      "id": 1,
      "module": "gateway:CustomWebHook",
      "version": 1,
      "parameters": {
        "hook": "YOUR_WEBHOOK_ID",
        "maxResults": 1
      }
    },
    {
      "id": 2,
      "module": "airtable:ActionCreateRecord",
      "version": 3,
      "parameters": {
        "base": "YOUR_BASE_ID",
        "table": "Content Log",
        "record": {
          "Date": "{{formatDate(1.timestamp; 'YYYY-MM-DD HH:mm')}}",
          "Event Type": "{{1.event}}",
          "Title": "{{1.data.title}}",
          "URL": "{{1.data.wp_post_url}}",
          "Campaign": "{{1.data.campaign_name}}",
          "Status": "Published"
        }
      }
    }
  ],
  "metadata": {
    "instant": true,
    "designer": {
      "version": 2
    }
  }
}
Template 3: Telegram Bot Alert

Get instant alerts via Telegram

{
  "name": "Auto Content - Telegram Alert",
  "flow": [
    {
      "id": 1,
      "module": "gateway:CustomWebHook",
      "version": 1,
      "parameters": {
        "hook": "YOUR_WEBHOOK_ID",
        "maxResults": 1
      }
    },
    {
      "id": 2,
      "module": "builtin:BasicRouter",
      "version": 1,
      "routes": [
        {
          "flow": [
            {
              "id": 3,
              "module": "telegram:SendMessage",
              "version": 3,
              "parameters": {
                "chatId": "YOUR_CHAT_ID",
                "text": "📰 *New Article Published!*\n\n*Title:* {{1.data.title}}\n\n*Campaign:* {{1.data.campaign_name}}\n\n🔗 [Read Article]({{1.data.wp_post_url}})",
                "parseMode": "Markdown",
                "disableWebPagePreview": false
              }
            }
          ],
          "filters": [{"condition": "{{1.event}} = wordpress.posted"}]
        },
        {
          "flow": [
            {
              "id": 4,
              "module": "telegram:SendMessage",
              "version": 3,
              "parameters": {
                "chatId": "YOUR_CHAT_ID",
                "text": "⚠️ *Post Failed!*\n\n*Title:* {{1.data.title}}\n*Error:* {{1.data.error_message}}\n*Campaign:* {{1.data.campaign_name}}",
                "parseMode": "Markdown"
              }
            }
          ],
          "filters": [{"condition": "{{1.event}} = wordpress.failed"}]
        }
      ]
    }
  ]
}
help How to Import in make.com
  1. In make.com, click Create a new scenario
  2. Click the ... menu (bottom) → Import Blueprint
  3. Paste the JSON template and click Save
  4. Click on the Webhooks module → Create a webhook
  5. Copy the generated URL to Auto Content Dashboard → Webhooks
  6. Configure other modules (Discord bot token, Airtable API key, etc.)
  7. Turn ON the scenario scheduling

lightbulb Common Automation Use Cases

Social Media Cross-Posting

When wordpress.posted fires:

  • → Share to Twitter/X automatically
  • → Post to Facebook Page
  • → Create LinkedIn post
  • → Pin to Pinterest board
Team Notifications

Keep your team updated:

  • → Slack channel notifications
  • → Discord server updates
  • → Microsoft Teams messages
  • → Email digest summaries
Content Analytics

Track all published content:

  • → Log to Google Sheets
  • → Save to Airtable database
  • → Update Notion database
  • → Send to custom analytics API
Error Monitoring

When wordpress.failed fires:

  • → Send urgent email alert
  • → Create Jira/Trello ticket
  • → Log to error tracking (Sentry)
  • → SMS notification via Twilio

terminal Code Examples

Complete endpoint implementations for your custom platform. Copy and adapt to your framework.

Quick test commands to verify your API endpoints. Replace credentials and URLs with your own.

# ========== TEST CONNECTION ==========
# Get categories (test if API is working)
curl -X GET "https://yoursite.com/wp-json/wp/v2/categories" \
  -u "username:app_password" \
  -H "Content-Type: application/json"

# Expected response:
# [{"id":1,"name":"Technology","slug":"technology"},...]

# ========== CREATE A POST ==========
curl -X POST "https://yoursite.com/wp-json/wp/v2/posts" \
  -u "username:app_password" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "My Automated Post",
    "content": "<p>This is the post content with <strong>HTML</strong> support.</p>",
    "excerpt": "A short description of the post",
    "status": "draft",
    "categories": [1, 2]
  }'

# Expected response:
# {"id":123,"link":"https://yoursite.com/posts/123","status":"draft",...}

# ========== CREATE POST AS PUBLISHED ==========
curl -X POST "https://yoursite.com/wp-json/wp/v2/posts" \
  -u "username:app_password" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Published Post",
    "content": "Content goes here",
    "status": "publish"
  }'

# ========== UPLOAD MEDIA (Optional) ==========
curl -X POST "https://yoursite.com/wp-json/wp/v2/media" \
  -u "username:app_password" \
  -H "Content-Type: image/jpeg" \
  -H "Content-Disposition: attachment; filename=featured.jpg" \
  --data-binary "@/path/to/image.jpg"

# Expected response:
# {"id":456,"source_url":"https://yoursite.com/uploads/featured.jpg"}

# ========== CREATE POST WITH FEATURED IMAGE ==========
# First upload the image, then use the returned media_id
curl -X POST "https://yoursite.com/wp-json/wp/v2/posts" \
  -u "username:app_password" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Post with Image",
    "content": "Content here",
    "status": "publish",
    "featured_media": 456
  }'

help Frequently Asked Questions

Do I need WordPress to use Auto Content?

No! WordPress is just the easiest option because it already has the required API. For other platforms, create the same API endpoints and Auto Content will work identically.

Why does the path have to be /wp-json/wp/v2/?

This is the WordPress REST API standard format. Auto Content uses this format for all requests, so your custom endpoints must match these paths exactly.

Can I use Auto Content with Shopify/Wix/Squarespace?

If you can create a server (even a simple one on Vercel/Netlify) that proxies our requests to their API, yes! Your proxy would translate our WordPress-format requests to their platform's format.

Is HTTPS required?

Yes. We send credentials via Basic Auth which must be encrypted. Free SSL is available from Let's Encrypt or Cloudflare.

What if my endpoint returns an error?

The post will be marked as failed in your campaign history. You can view the error message and retry. Common issues: wrong credentials, invalid JSON response, or 500 server errors.

How do I test my custom endpoint?

Use the "Test Connection" button when adding your site. It calls /wp-json/wp/v2/categories - if that works, your setup is correct!

Need Help?

Having trouble with integration? Our support team can help you set up.

mail Contact Support