Zernio
Zernio
PlatformsTwitter/XPosts & EditingReplies & QuotesMedia & VideoFields, Geo & PollsAnalytics & EngagementInboxLimits & Errors
Dashboard
llms.txtOpenAPI
OverviewPlatformsAPI ReferenceResources
Twitter/X

Fields, Geo & Polls

Platform-specific fields, geo-restriction, polls, and media URL requirements


Platform-Specific Fields

All fields go inside platformSpecificData on the Twitter platform entry.

FieldTypeDescription
replyToTweetIdstringID of an existing tweet to reply to. The published tweet will appear as a reply in that tweet's thread. For threads, only the first tweet replies to the target; subsequent tweets chain normally.
quoteTweetIdstringID (or full status URL) of an existing tweet to quote-repost. Mutually exclusive with media and poll. For threads, applies to the first tweet only.
replySettings"following" | "mentionedUsers" | "subscribers" | "verified"Controls who can reply to the tweet. Omit for default (everyone can reply). For threads, applies to the first tweet only. Cannot be combined with replyToTweetId.
threadItemsArray<{content, mediaItems?}>Complete sequence of tweets in a thread. The first item becomes the root tweet and must be provided as threadItems[0]. When threadItems is provided, top-level content is for display/search only and is NOT published.
pollobjectCreate a poll with this tweet. Mutually exclusive with media attachments and threads.
poll.optionsstring[]Poll options (2-4 choices, max 25 characters each).
poll.duration_minutesnumberPoll duration in minutes (5 min to 7 days).
longVideobooleanEnable long video uploads (over 140 seconds) using amplify_video. Requires X Premium; may require allowlisting.
geoRestrictionobjectRestrict media visibility to specific countries. Only applies when media is attached (ignored for text-only tweets). geoRestriction.countries: array of uppercase ISO 3166-1 alpha-2 codes, max 25. The media is hidden outside the listed countries; the tweet text remains visible globally.
paidPartnershipbooleanWhen true, label the post as a paid partnership / paid promotion. For threads, applies to the root tweet only. Field availability may depend on your X API access tier.
madeWithAibooleanWhen true, label the post as containing AI-generated media (not AI-written text). For threads, applies to the root tweet only.
sensitiveMediaobjectMarks attached media with a sensitive-content warning (requires media; ignored for text-only tweets). At least one flag must be true.
sensitiveMedia.adultContentbooleanContent contains adult material.
sensitiveMedia.graphicViolencebooleanContent depicts graphic violence.
sensitiveMedia.otherbooleanContent has other sensitive characteristics.

Geo-Restriction

Restrict who can see your tweet's media by country. This applies at the media level: the media is hidden for users outside the specified countries, but the tweet text remains visible globally. Requires media to be attached.

{
  "platforms": [{
    "platform": "twitter",
    "accountId": "YOUR_ACCOUNT_ID",
    "platformSpecificData": {
      "geoRestriction": {
        "countries": ["US", "ES"]
      }
    }
  }],
  "mediaItems": [{"type": "image", "url": "https://example.com/photo.jpg"}]
}

Paid partnership, AI labels, and sensitive media

Zernio supports additional X labels via platformSpecificData.

Note: paidPartnership and madeWithAi apply to the root tweet only (for threads).

Paid partnership label

Set platformSpecificData.paidPartnership: true to label the post as a paid partnership / paid promotion.

Note: Field availability may depend on your X API access tier.

curl -X POST https://zernio.com/api/v1/posts \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Sponsored: our new feature is live",
    "platforms": [{
      "platform": "twitter",
      "accountId": "YOUR_ACCOUNT_ID",
      "platformSpecificData": {
        "paidPartnership": true
      }
    }],
    "publishNow": true
  }'

AI-generated media label

Set platformSpecificData.madeWithAi: true to label the post as containing AI-generated media.

Note: Per X, this label is for AI-generated media, not AI-written text.

curl -X POST https://zernio.com/api/v1/posts \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "AI-generated image (labeled)",
    "mediaItems": [
      {"type": "image", "url": "https://cdn.example.com/ai-image.jpg"}
    ],
    "platforms": [{
      "platform": "twitter",
      "accountId": "YOUR_ACCOUNT_ID",
      "platformSpecificData": {
        "madeWithAi": true
      }
    }],
    "publishNow": true
  }'

Sensitive media warning

Use platformSpecificData.sensitiveMedia to mark attached media with a sensitive-content warning.

Note: Requires media (ignored for text-only tweets). At least one flag must be true.

curl -X POST https://zernio.com/api/v1/posts \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Sensitive media example",
    "mediaItems": [
      {"type": "image", "url": "https://cdn.example.com/photo.jpg"}
    ],
    "platforms": [{
      "platform": "twitter",
      "accountId": "YOUR_ACCOUNT_ID",
      "platformSpecificData": {
        "sensitiveMedia": {
          "adultContent": true,
          "graphicViolence": false,
          "other": false
        }
      }
    }],
    "publishNow": true
  }'

Polls

Create an X (Twitter) poll by providing platformSpecificData.poll.

Note: Polls are mutually exclusive with mediaItems and platformSpecificData.threadItems.

curl -X POST https://zernio.com/api/v1/posts \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Which feature should we ship next?",
    "platforms": [{
      "platform": "twitter",
      "accountId": "YOUR_ACCOUNT_ID",
      "platformSpecificData": {
        "poll": {
          "options": ["Dark mode", "New analytics", "More integrations"],
          "duration_minutes": 1440
        }
      }
    }],
    "publishNow": true
  }'

Media URL Requirements

These do not work as media URLs:

  • Google Drive -- returns an HTML download page, not the file
  • Dropbox -- returns an HTML preview page
  • OneDrive / SharePoint -- returns HTML
  • iCloud -- returns HTML

Test your URL in an incognito browser window. If you see a webpage instead of the raw image or video, it will not work.

Media URLs must be:

  • Publicly accessible (no authentication required)
  • Returning actual media bytes with the correct Content-Type header
  • Not behind redirects that resolve to HTML pages
  • Hosted on a fast, reliable CDN

Supabase URLs: Zernio auto-proxies Supabase storage URLs, so they work without additional configuration.

Was this page helpful?

Media & Video

Media requirements and long video uploads (Premium)

Analytics & Engagement

Tweet analytics and engagement actions

On this page

Platform-Specific FieldsGeo-RestrictionPaid partnership, AI labels, and sensitive mediaPaid partnership labelAI-generated media labelSensitive media warningPollsMedia URL Requirements