ParrotPosterParrotPoster
Getting started
Accounts
Posts
Automation
API
Site
  • English
  • Русский
Getting started
Accounts
Posts
Automation
API
Site
  • English
  • Русский
  • Introduction
  • Quick start
  • API methods

    • Authentication
    • Social accounts
    • Posts

      • Posts
      • Post object
      • Getting posts
      • Creating a post
      • Updating a post
      • Deleting a post
  • Errors

Creating a post

The createPost mutation creates a post: it is published immediately, on a schedule, or saved as a draft. It requires a token with write access (not read-only) and an active plan.

mutation {
  createPost(
    post: {
      fields: { ... }
      networks: { accounts: ["account_id"] }
    }
  ) {
    id
    status
  }
}

post parameters (PostCreate)

FieldTypeRequiredDescription
fieldsPostFieldsInput!YesPost content
networksPostNetworksInput!YesWhere to publish
publishAtDateTimeNoExact publishing time
publishDelayMinutesIntNoPublish N minutes from now
draftBooleanNotrue — save as a draft without publishing. Default false
draftParamsDraftParamsInputNoDraft schedule (when to publish after the draft is moved to publishing)
fieldOverridesPostFieldOverridesInputNoCustom text, link, tags, files for a single social network or a single account

fields — content (PostFieldsInput)

All fields are optional, but the post must contain text or images/files, otherwise the server returns a required-fields error.

FieldTypeDescription
textStringPost text
linkStringLink to attach to the post
tagsStringTags as a single string
imageUrls[String!]Image URLs: the service downloads and processes them itself
fileUrls[String!]File URLs (for example, video): the service downloads them by link
imageIds[ID!]IDs of already uploaded images
fileIds[ID!]IDs of already uploaded files
needUtmBooleanAdd UTM tags to the link
utmParamsUtmParamsInputUTM tags: source, medium, campaign, content, term (all strings)
extraPostFieldsExtraInputExtra parameters for individual social networks (see below)

Media links must be reachable by the ParrotPoster server over HTTP(S). If an image behind a link cannot be downloaded, the request fails with an error.

fields.extra — social network settings (PostFieldsExtraInput)

VKontakte:

FieldTypeDescription
vkFromGroupBooleantrue — publish on behalf of the group, otherwise on behalf of the user
vkSignedBooleanSign the post with its author (works with vkFromGroup: true)
vkCloseCommentsBooleanDisable comments on the post
vkFirstCommentStringText of the first comment added after publishing
vkMarkAsAdsBooleanMark the post as advertising
vkMuteNotificationsBooleanDo not notify subscribers about the post
vkPrimaryAttachmentsModeStringHow attachments are shown: carousel (default) or grid

Facebook:

FieldTypeDescription
fbCtaEnabledBooleanAdd a call-to-action button for posts that contain only a link
fbCtaTypeStringButton type (for example, LEARN_MORE, SHOP_NOW)
fbFirstCommentStringText of the first comment after publishing to the page

The fields bxIblockId, bxId, bxTemplateId, wpPostId, wpSiteDomain are filled in by the 1C-Bitrix and WordPress plugins; you do not need them in your own integrations.

networks — where to publish (PostNetworksInput)

FieldTypeDescription
accounts[ID!]Account IDs from listSocialAccounts. At least one account is required

Publishing time: publishAt and publishDelayMinutes

These are mutually exclusive: you cannot specify both — the server returns an error.

  • Neither specified — publish as soon as possible.
  • publishAt — date and time in RFC 3339 format. A time in the past is treated as "now".
  • publishDelayMinutes — number of minutes from now, from 0 to 525,600 (about 365 days).

Time is always UTC: "2026-01-12T04:00:19.123Z". Different precision is allowed: "2026-01-12T04:00:19Z", "2026-01-12T04:00Z".

Interval between posts

The actual send time may be shifted if other posts are already scheduled nearby: the interval between publications from Settings → Posts applies (default 60 seconds, allowed 1 to 3600). You can create posts through the API at any rate. This interval does not apply to automation.

Drafts: draft and draftParams

A draft is saved without publishing and is visible in the web app (Drafts and calendar).

mutation {
  createPost(
    post: {
      draft: true
      fields: { text: "Draft" }
      networks: { accounts: ["account_id"] }
      draftParams: { schedule: { kind: DELAY, delayMinutes: 60 } }
    }
  ) {
    id
    draft
    draftParams {
      schedule {
        kind
        at
        delayMinutes
      }
    }
  }
}

schedule.kind is one of NOW, DELAY (with delayMinutes), AT (with at). If draft: true and draftParams is not specified, the schedule is taken from publishAt/publishDelayMinutes (or "immediately"). When a draft is moved to publishing (updatePost with draft: false), the schedule is resolved into publishAt.

fieldOverrides — different texts for different networks

Lets you change text, link, tags, fileIds, and linkPreview (title, caption, imageUrl) for a whole network (bySocialType) or for a specific account (byAccount):

mutation {
  createPost(
    post: {
      fields: { text: "Common text" }
      networks: { accounts: ["account_vk", "account_tg"] }
      fieldOverrides: {
        bySocialType: [{ socialType: TG, partial: { text: "Text for Telegram" } }]
        byAccount: [{ accountId: "account_vk", partial: { tags: "#news" } }]
      }
    }
  ) {
    id
    hasFieldOverrides
  }
}

Examples

Text post to one account, published immediately:

mutation {
  createPost(
    post: {
      fields: { text: "Hello, world! This is my first post via the API" }
      networks: { accounts: ["account_id"] }
    }
  ) {
    id
    status
  }
}

Link and images to several networks, on behalf of a VK group:

mutation {
  createPost(
    post: {
      fields: {
        text: "New article on our site"
        link: "https://example.com/article"
        imageUrls: [
          "https://example.com/images/preview1.jpg"
          "https://example.com/images/preview2.jpg"
        ]
        needUtm: true
        utmParams: { source: "parrotposter", medium: "social", campaign: "spring" }
        extra: { vkFromGroup: true, vkSigned: false }
      }
      networks: { accounts: ["account_vk", "account_tg"] }
    }
  ) {
    id
  }
}

Scheduled post for a specific time (UTC):

mutation {
  createPost(
    post: {
      fields: { text: "This post goes out on January 13 at noon UTC" }
      networks: { accounts: ["account_id"] }
      publishAt: "2026-01-13T12:00:00Z"
    }
  ) {
    id
    status
    publishAt
  }
}

Post in 30 minutes:

mutation {
  createPost(
    post: {
      fields: { text: "Will be published in half an hour" }
      networks: { accounts: ["account_id"] }
      publishDelayMinutes: 30
    }
  ) {
    id
    publishAt
  }
}

Response

The mutation returns a Post object: request the fields you need. Publishing is asynchronous: right after creation the post is not yet published, and per-account results appear later in the results field (getting a post).

Social network requirements

Each social network has its own requirements for a post. For example, Instagram needs at least one image. A violation does not make the mutation itself fail: the reason appears in results[].errorMsg of that account. See Errors.

Edit on GitHub
Last updated: 10/10/26, 2:44 AM
Prev
Getting posts
Next
Updating a post