Post Callbacks
Automate follow-up actions when you publish or schedule posts: auto-share to other accounts, post follow-up comments (or thread posts on some networks), or auto-delete/hide content after specified conditions are met.
Overview
Post callbacks are automation features you include per-account in the API request when creating posts. Callbacks are configured inside each accounts[] entry. The main callback types:
AutoShare — automatically share a published post to other social accounts
Follow-up Comments — schedule one or multiple comments (or threaded posts) tied to a post
Auto-Delete / Auto-Hide — automatically remove or hide posts after conditions are met
Conditions are represented with a structured conditions object (relation + clauses) and can combine Time (age), Reach and Engagements checks using AND/OR.
Endpoints
Schedule with callbacks:
POST /api/v1/posts/schedulePublish now with callbacks:
POST /api/v1/posts/schedule/publish
Callbacks live inside each account object in your request payload.
Request structure (top-level)
bulk
state (e.g., "scheduled")
posts[]:
networks: { <network_name>: { type, text, details, ... } }
accounts[]:
id
scheduled_at (optional)
share (optional)
comments (optional array)
delete (optional)
Conditions object
Use conditions to define when a callback should execute.
Structure:
conditions
relation: "AND" | "OR"
clauses:
age: { duration: number, unit: "Minute" | "Hour" | "Day" | "Week" }
engagements: { comparison: "gt" | "lt", value: number }
reach: { comparison: "gt" | "lt", value: number }
Notes:
agecorresponds to "Is older than".engagementsandreachusecomparisonwith "gt" (>) or "lt" (<).A
conditionsobject can include any subset of clauses; combine them usingrelation.
Auto-Sharing
Automatically share the link of the published post to the specified accounts.
Fields:
share.account_ids (string[]) — target account IDs to share to
share.text (string) — caption for the share (fallback: original post text where supported)
share.conditions (object) — when the share should run (see Conditions object)
share.account_ids order +
delaydetermine spacing between shares
Example:
"share": {
  "account_ids": ["A_ID_1", "A_ID_2"],
  "text": "Check out our latest blog post!",
  "conditions": {
    "relation": "AND",
    "clauses": {
      "age": { "duration": 1, "unit": "Hour" },
      "engagements": { "comparison": "gt", "value": 10 },
      "reach": { "comparison": "gt", "value": 100 }
    }
  },
  "delay": {
      "duration": 0,
      "unit": "Minute"
    },
}Supported networks: Facebook Pages→Groups (when posting as a Page to a Group), Twitter/X, LinkedIn, Pinterest, Mastodon, Threads, BlueSky, TikTok, Telegram, Google Business Profiles.
Note: Google Business Profiles require non-empty text to auto-share.
Follow-up Comments
Schedule comments on the published post (or create follow-up posts/threads on some networks).
Fields:
comments[]:
text (string) — comment body (text, hashtags, links, emoji)
language (string, optional)
media (object, optional):
media.id: id of the media
media.path: URL / path
media.caption (optional)
media.thumbnail (optional, videos)
conditions (object, optional) — when to post the comment (see Conditions object)
Notes and behavior:
On Twitter/X, Mastodon, BlueSky, and Threads the follow-up comment will be posted as a new post in the thread.
Supported: Twitter/X, LinkedIn, Facebook Pages, Mastodon, Threads, BlueSky.
Not supported (API limitations): Pinterest, TikTok, Facebook Personal Profiles, Google Business Profiles.
Recurring posts: Configure follow-up comments at scheduling time to have them included for each recurrence.
Performance-based conditions (reach/engagements) and time-based (age) commonly apply to the first comment; subsequent comments use time-based
ageonly.
Example:
"comments": [
  {
    "text": "First 100 customers get 10% off!",
    "conditions": {
      "relation": "AND",
      "clauses": {
        "age": { "duration": 2, "unit": "Hour" },
        "engagements": { "comparison": "gt", "value": 10 },
        "reach": { "comparison": "gt", "value": 10 }
      }
    }
  },
  {
    "text": "24 hours left—don’t miss out!",
    "conditions": {
      "relation": "AND",
      "clauses": {
        "age": { "duration": 1, "unit": "Day" }
      }
    },
    "media": {
      "id": "680fa5cc48487c4ccbf8c146",
      "path": ".../photos/680fa5cc48487c4ccbf8c146.jpg",
      "thumbnail": ".../photos/thumb_680fa5cc48487c4ccbf8c146.jpg",
      "caption": "Only one day left!"
    }
  }
]Auto-Delete / Auto-Hide
Automatically delete or hide a post when conditions are satisfied.
Fields:
delete.conditions (object) — conditions triggering deletion/hide (see Conditions object)
Use
conditions.clauses.ageto set minimum time before deletion
delete.hide (boolean) — true to request hide instead of delete (platform-dependent)
Example:
"delete": {
  "conditions": {
    "clauses": {
      "age": { "duration": 7, "unit": "Day" },
      "engagements": { "comparison": "lt", "value": 10 }
    }
  },
  "hide": false
}Supported / unsupported:
Auto-delete supported for most scheduled networks except:
Not available for Instagram API (auto-delete not supported)
Not available for TikTok accounts
Not available for posts published via reminders or some push/published types
Some types (e.g., Stories) cannot be auto-deleted
Auto-hide only works where supported (e.g., Facebook Page posts (not videos), YouTube)
Request Structure
{
  "bulk": {
    "state": "scheduled",
    "posts": [
      {
        "networks": {
          "facebook": {
            "type": "status",
            "text": "Your post content here"
          }
        },
        "accounts": [
          {
            "id": "ACCOUNT_ID",
            "scheduled_at": "2025-05-15T14:30:00Z", // Optional for immediate publishing
            "share":   { /* AutoShare config */ },
            "comments":[ /* Follow-up comments */ ],
            "delete":  { /* Auto-Delete config */ }
          }
        ]
      }
    ]
  }
}Full example
{
  "bulk": {
    "state": "scheduled",
    "posts": [
      {
        "networks": {
          "facebook": {
            "type": "status",
            "text": "Post with callbacks"
          }
        },
        "accounts": [
          {
            "id": "63c675b54e299e9cf2b667ea",
            "scheduled_at": "2025-10-31T10:23+01:00",
            "share": {
              "account_ids": [
                "63c675b54e299e9cf2b667e8"
              ],
              "conditions": {
                "relation": "AND",
                "clauses": {
                  "age": {
                    "duration": 10,
                    "unit": "Minute"
                  },
                  "engagements": {
                    "comparison": "gt",
                    "value": 10
                  },
                  "reach": {
                    "comparison": "gt",
                    "value": 100
                  }
                }
              },
              "text": "AUTO SHARE"
            },
            "comments": [
              {
                "text": "FOLLOW UP COMMENT",
                "conditions": {
                  "relation": "AND",
                  "clauses": {
                    "age": {
                      "duration": 10,
                      "unit": "Minute"
                    },
                    "engagements": {
                      "comparison": "gt",
                      "value": 10
                    },
                    "reach": {
                      "comparison": "gt",
                      "value": 100
                    }
                  }
                }
              },
              {
                "text": "OTHER COMMENT",
                "conditions": {
                  "relation": "AND",
                  "clauses": {
                    "age": {
                      "duration": 10,
                      "unit": "Minute"
                    }
                  }
                }
              }
            ],
            "delete": {
              "conditions": {
                "clauses": {
                  "age": {
                    "duration": 1,
                    "unit": "Hour"
                  }
                }
              },
              "hide": false
            }
          }
        ]
      }
    ]
  }
}Best practices
Use performance-based
conditionsto avoid premature callbacks (e.g., only share if the post reached a threshold).Respect audience time zones when scheduling shares and comments.
Space out repeated shares across accounts using
share.delayto avoid spam signals.Prefer hiding (when supported) to preserve analytics/history if you may need them later.
Test callback behavior on target networks (APIs and behavior differ per platform).
Recurring posts & Post Presets
Recurring posts: add callbacks during scheduling so each recurrence includes them automatically.
Post Presets: configure default follow-up comments, auto-share targets, and default auto-delete/hide rules in Post Presets inside Publer. Presets use the same
conditionsmodel.
Limitations & notes
Some networks convert comments into separate posts/threads (Twitter/X, Mastodon, BlueSky, Threads).
Follow-up comments are not supported by Pinterest, TikTok, Facebook Personal Profiles, and Google Business Profiles due to API limitations.
Auto-delete is not available for Instagram, TikTok, posts published via reminders, or some story formats.
Performance-based conditions depend on platform metrics; metrics may arrive with delay.
If you need an OpenAPI or JSON Schema snippet for these objects (or a machine-readable schema), tell me which format you prefer and I will provide it.
Related Topics
Content Types - Details on different content formats
Scheduled Posts - Information about scheduling posts
Immediate Publishing - How to publish content immediately
Last updated
Was this helpful?

