Inbox

Reply to a conversation

Changed on

Sends a reply in an existing conversation (DM, comment, or mention) on Instagram, Facebook, LinkedIn, TikTok (comments only), YouTube (comments only), X (DM-only), or Threads (replies and mentions; needs a Threads connection with the reply permission, else 401 reauth_required). You can only reply to conversations that already exist in your inbox. The API cannot start new conversations (Instagram requires the user to message first, and cold outreach violates Meta policy). Direct-message replies must be within the platform's messaging window (24 hours since the user's last message); replies outside the window are rejected. TikTok replies are text-only, capped at 150 characters (400 validation_error beyond that), and can take a few minutes to appear on TikTok while they pass spam review. Each workspace can send up to 1,000 replies per rolling 24 hours (429 reply_limit_reached beyond that). Contact robert@omnisocials.com if you need a higher limit. X DM replies debit 2 credits from the company balance before the send (auto-refunded if the send fails) and can return 402 insufficient_credits or 402 x_inbox_suspended. Requires the inbox:write scope (API keys) or the access_social_inbox permission (OAuth/MCP).

post/inbox/conversations/{conversationId}/reply

Request

  • Base URL
    https://api.omnisocials.com/v1
  • URL
    https://api.omnisocials.com/v1/inbox/conversations/{conversationId}/reply
  • Auth
    HTTP bearer

Path parameters

conversationIdstring required
Example:instagram_comment_17912345678901234

Request body

textstring

Reply body (max 2000 characters; Instagram DMs max 1000; TikTok comments max 150). Optional when attachment_url is set: an attachment-only DM is allowed.

attachment_urlstring

Optional media URL to send (Facebook and Instagram DMs only)

attachment_type'image' | 'video' | 'audio' | 'file'

Required if attachment_url is set

message_idstring

For comment and mention threads: the inbox id of the specific incoming comment being answered (message.id from GET /inbox/next, or a message id from GET /inbox/conversations/{id}/messages). Every comment on a post shares one conversation, so without it the reply is posted under the newest comment on the post, which may be a different person than the one you drafted for. Always pass it when replying to an item served by the queue. Ignored for DMs (a DM reply goes to the conversation). 404 not_found when it is not an incoming message of this conversation.

include_nextboolean

When true, the response also carries next: the next conversation that needs an answer (same shape as GET /inbox/next, with its default queue order and filters), and remaining. Saves the extra call when working through the inbox.

Example request

{
  "text": "It comes in S, M and L. Which size do you need?",
  "attachment_url": "https://example.com/size-chart.jpg",
  "message_id": "88231"
}

Response

Reply sent

remaininginteger

Only when include_next was set: unanswered items still waiting after next (capped at 500).

Example response

{
  "data": {
    "id": "88231",
    "conversation_id": "instagram_comment_17912345678901234",
    "platform": "instagram",
    "type": "comment",
    "text": "What size is this?",
    "timestamp": "2026-10-21T09:00:00.000Z",
    "attachment": {
      "url": "https://example.com/photo.jpg"
    },
    "sender": {
      "name": "Jamie Rivera",
      "username": "jamierivera",
      "profile_picture": "https://example.com/avatar.jpg"
    },
    "post": {
      "id": "17912345678901234",
      "caption": "Our autumn menu is here. #autumnmenu",
      "thumbnail": "https://example.com/photo.jpg",
      "url": "https://www.instagram.com/p/Cxyz123ABC/",
      "media_type": "IMAGE"
    }
  },
  "next": {
    "conversation": {
      "conversation_id": "instagram_comment_17912345678901234",
      "type": "comment",
      "participant": {
        "name": "Jamie Rivera",
        "username": "jamierivera",
        "profile_picture": "https://example.com/avatar.jpg"
      },
      "unread_count": 1,
      "last_message": {
        "id": "88231",
        "text": "What size is this?",
        "timestamp": "2026-10-21T09:00:00.000Z"
      },
      "post": {
        "id": "17912345678901234",
        "caption": "Our autumn menu is here. #autumnmenu",
        "thumbnail": "https://example.com/photo.jpg",
        "url": "https://www.instagram.com/p/Cxyz123ABC/",
        "media_type": "IMAGE"
      }
    },
    "message": {
      "id": "88231",
      "conversation_id": "instagram_comment_17912345678901234",
      "platform": "instagram",
      "type": "comment",
      "text": "What size is this?",
      "timestamp": "2026-10-21T09:00:00.000Z",
      "attachment": {
        "url": "https://example.com/photo.jpg"
      },
      "sender": {
        "name": "Jamie Rivera",
        "username": "jamierivera",
        "profile_picture": "https://example.com/avatar.jpg"
      },
      "post": {
        "id": "17912345678901234",
        "caption": "Our autumn menu is here. #autumnmenu",
        "thumbnail": "https://example.com/photo.jpg",
        "url": "https://www.instagram.com/p/Cxyz123ABC/",
        "media_type": "IMAGE"
      }
    },
    "messages": [
      {
        "id": "88231",
        "conversation_id": "instagram_comment_17912345678901234",
        "platform": "instagram",
        "type": "comment",
        "text": "What size is this?",
        "timestamp": "2026-10-21T09:00:00.000Z",
        "attachment": {
          "url": "https://example.com/photo.jpg"
        },
        "sender": {
          "name": "Jamie Rivera",
          "username": "jamierivera",
          "profile_picture": "https://example.com/avatar.jpg"
        },
        "post": {
          "id": "17912345678901234",
          "caption": "Our autumn menu is here. #autumnmenu",
          "thumbnail": "https://example.com/photo.jpg",
          "url": "https://www.instagram.com/p/Cxyz123ABC/",
          "media_type": "IMAGE"
        }
      }
    ],
    "reply_window": {
      "open": true,
      "closes_at": "2026-10-22T09:00:00.000Z"
    }
  },
  "remaining": 4
}

Changes

    • info

      added the optional property / to the response with the status

    • info

      added the optional property ////////// to the response with the status

    • info

      added the optional property /////// to the response with the status

    • info

      added the new optional request property

    • info

      added the optional property ///// to the response with the status