CreatorTool
Developer documentation

Build on CreatorTool with the same publishing model used in the app.

Use the API to list connected accounts, upload media, create campaigns, schedule posts, review targets, and monitor plan usage.

Base URL
https://creatortool.net/api
Authentication
Authorization: Bearer YOUR_API_KEY

API access is available only on plans where API access is enabled.

Fundamentals

Requests are plan-aware and return user-safe objects.

Responses expose IDs, labels, statuses, URLs, and fields needed for API workflows. Internal storage, ownership, and processing details are intentionally hidden.

Headers

Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

Pagination

List endpoints accept limit and offset. The maximum limit is 100.

Success format

{
  "success": true,
  "message": "OK",
  "data": {}
}

Error format

{
  "success": false,
  "message": "Validation failed.",
  "error_code": 422
}
Accounts

Read connected social destinations.

Use account IDs returned here when creating campaign targets.

GET /social/accounts

Returns the authenticated user's connected social destinations. Supports platform, status, health, limit, and offset filters.

Use id as social_account_id when creating campaigns. Only accounts owned by the API key user are returned.
Request
curl "https://creatortool.net/api/social/accounts?platform=instagram&health=healthy&limit=10" \
  -H "Authorization: Bearer YOUR_API_KEY"
Response
{
  "success": true,
  "message": "OK",
  "data": [
    {
      "id": 14,
      "platform": "instagram",
      "platform_label": "Instagram Pro",
      "account_name": "Brand Studio",
      "account_handle": "brandstudio",
      "avatar_url": "https://cdn.example.com/avatar.jpg",
      "status": "healthy",
      "status_label": "Connected",
      "capabilities": ["image", "video", "slideshow", "caption"]
    }
  ]
}
Media

List existing assets or upload new media programmatically.

Media upload can also return compatibility checks for selected accounts or platforms.

GET /social/media

Returns uploaded media assets for the authenticated user. Supports type, status, search, limit, and offset filters.

Request
curl "https://creatortool.net/api/social/media?type=video&status=ready&limit=25" \
  -H "Authorization: Bearer YOUR_API_KEY"
Response
{
  "success": true,
  "message": "OK",
  "data": [
    {
      "id": 42,
      "title": "Launch reel",
      "original_filename": "launch-reel.mp4",
      "media_type": "video",
      "mime_type": "video/mp4",
      "file_size": 73400320,
      "width": 1080,
      "height": 1920,
      "duration_seconds": 28.4,
      "processing_status": "ready",
      "status_label": "Ready",
      "access_url": "https://cdn.example.com/media/launch-reel.mp4"
    }
  ]
}
POST /social/media/upload

Uploads one media file to the user media library. Send multipart/form-data with media_file, or send media_url/file_url to import a public HTTPS file.

Use media_url or file_url instead of media_file when the media is already hosted at a public HTTPS URL. Optional compatibility fields: social_account_ids[], social_account_ids_json, platforms[], platforms_json. Plan storage limits are enforced.
Request
curl -X POST "https://creatortool.net/api/social/media/upload" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "title=Launch reel" \
  -F "[email protected]" \
  -F "social_account_ids[]=14"
Response
{
  "success": true,
  "message": "Media uploaded.",
  "data": {
    "media": {
      "id": 42,
      "title": "Launch reel",
      "media_type": "video",
      "processing_status": "queued"
    },
    "compatibility": [
      {
        "social_account_id": 14,
        "platform": "instagram",
        "compatible": true,
        "message": "Compatible."
      }
    ]
  }
}
Campaigns

Create, schedule, and inspect campaigns.

Campaign write endpoints use the same validation rules as the app, including plan limits and destination compatibility.

GET /social/campaigns

Returns campaigns for the authenticated user. Supports view, search, limit, and offset.

Request
curl "https://creatortool.net/api/social/campaigns?view=scheduled&limit=20" \
  -H "Authorization: Bearer YOUR_API_KEY"
Response
{
  "success": true,
  "message": "OK",
  "data": [
    {
      "id": 19,
      "title": "Launch week rollout",
      "master_title": "New collection now live",
      "media_asset_id": 42,
      "media_title": "Launch reel",
      "media_type": "video",
      "status": "scheduled",
      "status_label": "Scheduled",
      "publish_mode": "schedule",
      "scheduled_at": "2026-07-10 14:00:00",
      "target_count": 4
    }
  ]
}
POST /social/campaign/create

Creates a draft, publish-now, or scheduled campaign. You can reference existing media IDs, upload multipart media, or import media from public HTTPS URLs.

Common fields: title, master_title, master_caption, media_asset_id, slideshow_media_asset_ids, publish_mode, scheduled_at, social_account_ids, targets. targets may be supplied with social_account_ids to add destination-specific title_override, caption_override, privacy_setting, and extra_payload values. TikTok direct publishing requires an allowed privacy_setting plus explicit tiktok_music_usage_confirmed and tiktok_upload_consent_confirmed values in that target's extra_payload. Single media sources: media_asset_id, multipart media_file, or media_url/file_url. Slideshow sources: slideshow_media_asset_ids, multipart slideshow_media_files[], or slideshow_media_urls[].
Request
curl -X POST "https://creatortool.net/api/social/campaign/create" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Launch week rollout",
    "master_title": "New collection now live",
    "master_caption": "Master caption here",
    "media_asset_id": 42,
    "publish_mode": "publish_now",
    "social_account_ids": [14, 18],
    "targets": [
      {
        "social_account_id": 18,
        "privacy_setting": "PUBLIC_TO_EVERYONE",
        "extra_payload": {
          "tiktok_music_usage_confirmed": true,
          "tiktok_upload_consent_confirmed": true
        }
      }
    ]
  }'
Response
{
  "success": true,
  "message": "Campaign saved.",
  "data": {
    "campaign_id": 19
  }
}
POST /social/campaign/schedule

Creates a scheduled campaign. This route sets publish_mode to schedule and requires scheduled_at in the future.

Request
curl -X POST "https://creatortool.net/api/social/campaign/schedule" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Friday reel push",
    "master_title": "Weekend drop",
    "master_caption": "Short master caption",
    "media_asset_id": 42,
    "scheduled_at": "2026-07-12 14:00:00",
    "targets": [
      {
        "social_account_id": 14,
        "caption_override": "Instagram version",
        "privacy_setting": "public"
      }
    ]
  }'
Response
{
  "success": true,
  "message": "Campaign saved.",
  "data": {
    "campaign_id": 20
  }
}
GET /social/campaign/{id}

Returns one campaign owned by the authenticated user.

Request
curl "https://creatortool.net/api/social/campaign/19" \
  -H "Authorization: Bearer YOUR_API_KEY"
Response
{
  "success": true,
  "message": "OK",
  "data": {
    "id": 19,
    "title": "Launch week rollout",
    "status": "scheduled",
    "publish_mode": "schedule",
      "scheduled_at": "2026-07-10 14:00:00",
    "target_count": 4
  }
}
GET /social/campaign/{id}/targets

Returns destination-level targets for a campaign.

Request
curl "https://creatortool.net/api/social/campaign/19/targets" \
  -H "Authorization: Bearer YOUR_API_KEY"
Response
{
  "success": true,
  "message": "OK",
  "data": [
    {
      "id": 77,
      "campaign_id": 19,
      "social_account_id": 14,
      "platform": "instagram",
      "platform_label": "Instagram Pro",
      "account_name": "Brand Studio",
      "target_status": "processing",
      "status_label": "Publishing",
      "scheduled_for": "2026-07-10 14:00:00",
      "last_error": ""
    }
  ]
}
Usage

Read billing-period usage and normalized limits.

Use this endpoint before creating large batches of scheduled posts.

GET /social/usage

Returns current billing-period usage and plan limits.

Request
curl "https://creatortool.net/api/social/usage" \
  -H "Authorization: Bearer YOUR_API_KEY"
Response
{
  "success": true,
  "message": "OK",
  "data": {
    "usage": {
      "period_type": "billing_period",
      "period_label": "Current billing period",
      "connected_accounts_count": 4,
      "scheduled_posts_count": 17,
      "published_posts_count": 9,
      "api_requests_count": 152,
      "storage_bytes": 104857600
    },
    "limits": {
      "max_social_accounts": 10,
      "period_scheduled_posts_limit": 200,
      "period_published_posts_limit": 200,
      "api_access": true,
      "storage_bytes": 2147483648
    }
  }
}
Errors

Common API responses.

Use the HTTP status and message together. Business-rule failures are returned as readable messages.

401

Missing, invalid, or disabled API key.

403

Plan restriction, disabled API access, or unauthorized object access.

422

Validation failure, incompatible media, quota limit, or missing required field.

503

API disabled or publishing state temporarily unavailable.