Postqued API

PostQued social media scheduling API integration. Use when performing API calls to PostQued for content upload, publishing to TikTok (and other platforms), managing platform accounts, or querying publish status. Triggers on tasks involving social media posting, content scheduling, TikTok draft posting, or any PostQued API operations.

Audits

Pass

Install

openclaw skills install postqued-api

PostQued API Skill

Setup

Add your PostQued API key to your workspace .env file:

POSTQUED_API_KEY=pq_your_api_key_here

API keys are created in the PostQued dashboard at https://postqued.com/console. Keys start with pq_ prefix.

Authentication

All API requests require authentication via Bearer token:

Authorization: Bearer $POSTQUED_API_KEY

Base URL

https://api.postqued.com

API Documentation

OpenAPI spec: https://api.postqued.com/v1/docs/openapi.json

Core Workflow: Upload and Publish Content

Step 1: Upload Content

For videos (presigned URL upload):

# Start upload session
curl -X POST https://api.postqued.com/v1/content/upload \
  -H "Authorization: Bearer $POSTQUED_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "filename": "video.mp4",
    "contentType": "video/mp4",
    "fileSize": 52428800
  }'
# Response: { "contentId": "uuid", "upload": { "url": "presigned-url", "method": "PUT", "headers": {...} } }

# Upload file to presigned URL
curl -X PUT "PRESIGNED_URL" \
  -H "Content-Type: video/mp4" \
  --data-binary @video.mp4

# Confirm upload
curl -X POST https://api.postqued.com/v1/content/upload/complete \
  -H "Authorization: Bearer $POSTQUED_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contentId": "uuid-from-step-1",
    "key": "content/user-id/content-id.mp4",
    "filename": "video.mp4",
    "contentType": "video/mp4",
    "size": 52428800,
    "width": 1920,
    "height": 1080,
    "durationMs": 30000
  }'

For images (direct upload):

curl -X POST https://api.postqued.com/v1/content/upload-image \
  -H "Authorization: Bearer $POSTQUED_API_KEY" \
  -H "Content-Type: multipart/form-data" \
  -F "file=@image.jpg"

Step 2: Get Platform Account ID

curl https://api.postqued.com/v1/platform-accounts?platform=tiktok \
  -H "Authorization: Bearer $POSTQUED_API_KEY"
# Response: { "accounts": [{ "id": "account-uuid", "username": "@user", ... }] }

Step 3: Publish Content

Important: Always include a unique Idempotency-Key header (valid 24h).

curl -X POST https://api.postqued.com/v1/content/publish \
  -H "Authorization: Bearer $POSTQUED_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: unique-uuid-per-request" \
  -d '{
    "contentIds": ["content-uuid"],
    "targets": [{
      "platform": "tiktok",
      "accountId": "account-uuid",
      "intent": "draft",
      "caption": "Check this out! #fyp",
      "dispatchAt": null,
      "options": {
        "privacyLevel": "SELF_ONLY",
        "disableDuet": false,
        "disableStitch": false,
        "disableComment": false
      }
    }]
  }'
# Response: { "publishId": "uuid", "status": "pending", "targets": [...] }

Step 4: Check Publish Status

curl https://api.postqued.com/v1/content/publish/PUBLISH_ID \
  -H "Authorization: Bearer $POSTQUED_API_KEY"

API Reference

See references/api.md for complete endpoint documentation.

TikTok-Specific Options

OptionTypeDescription
privacyLevelstringPUBLIC_TO_EVERYONE, MUTUAL_FOLLOW_FRIENDS, FOLLOWER_OF_CREATOR, SELF_ONLY
disableDuetbooleanDisable duet
disableStitchbooleanDisable stitch
disableCommentbooleanDisable comments
videoCoverTimestampMsintegerCover frame timestamp (videos)
autoAddMusicbooleanAuto-add music (photos)
brandContentTogglebooleanPaid partnership disclosure
brandOrganicTogglebooleanPromotional content disclosure

Intent Values

  • draft - Send to TikTok inbox as draft (user publishes manually)
  • publish - Direct publish to user's TikTok profile

Status Values

Publish Request: pending | processing | completed | partial_failed | failed | canceled

Target: queued | scheduled | processing | sent | published | failed | canceled

Scheduling

Set dispatchAt to a future UTC ISO timestamp:

{
  "dispatchAt": "2026-02-20T15:00:00Z"
}

Set to null for immediate dispatch.

Rate Limits

OperationLimit
Upload20/min
Read30/min
Publish10/min
Delete20/min

Error Handling

Errors return:

{
  "error": "Message",
  "code": "ERROR_CODE"
}

Common codes: MISSING_IDEMPOTENCY_KEY, IDEMPOTENCY_CONFLICT, SUBSCRIPTION_REQUIRED