Comments
Retrieve comments from social media posts, send private replies (DMs) to commenters, or post public replies visible under the original comment.
Get Post Comments
Retrieve all comments on a specific post. Accepts either a numeric media ID or a full post URL.
Endpoint
GET /api/uploadposts/comments
Headers
| Name | Value | Description |
|---|---|---|
| Authorization | Apikey your-api-key-here | Your API key for authentication |
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| platform | String | Yes | The platform to retrieve comments from (e.g., "instagram"). |
| user | String | Yes | Profile username (as configured in Upload-Post). |
| post_id | String | Yes* | Numeric media ID. Use post_id or post_url (one is required). |
| post_url | String | Yes* | Full post URL (e.g., https://www.instagram.com/p/ABC123/). Alternative to post_id. |
| limit | Integer | No | Comments per page, between 1 and 50 (Meta's hard cap for this edge). If omitted, Instagram's default applies (~25). |
| after | String | No | Cursor returned by Meta in the previous page (pagination.next_cursor). Use it to fetch the next page. |
Ordering: Meta returns comments newest-first (reverse-chronological) on Graph API v3.2 and later. There is no query parameter to change this — the order is fixed by Meta.
Example Requests
Single page (default):
curl 'https://api.upload-post.com/api/uploadposts/comments?platform=instagram&user=my-profile&post_url=https://www.instagram.com/p/ABC123/' \
-H 'Authorization: Apikey your-api-key-here'
Paginate through all comments (50 per page):
# First page
curl 'https://api.upload-post.com/api/uploadposts/comments?platform=instagram&user=my-profile&post_id=17890455123456789&limit=50' \
-H 'Authorization: Apikey your-api-key-here'
# Next page — pass back the next_cursor from the previous response
curl 'https://api.upload-post.com/api/uploadposts/comments?platform=instagram&user=my-profile&post_id=17890455123456789&limit=50&after=QVFIUm...' \
-H 'Authorization: Apikey your-api-key-here'
Loop while pagination.has_next is true, passing pagination.next_cursor as after each time.
Responses
- 200 OK
{
"success": true,
"comments": [
{
"id": "17858893269123456",
"text": "Great post!",
"timestamp": "2025-06-15T10:30:00+0000",
"user": {
"id": "17841400123456789",
"username": "commenter_user"
}
},
{
"id": "17858893269789012",
"text": "Love this content",
"timestamp": "2025-06-15T11:00:00+0000",
"user": {
"id": "17841400987654321",
"username": "another_user"
}
}
],
"pagination": {
"next_cursor": "QVFIUm9TbGd...",
"has_next": true
}
}
When the last page is reached, pagination is {"next_cursor": null, "has_next": false}.
- 400 Bad Request
{
"success": false,
"error": "Missing required query parameters: platform, user, and either post_id or post_url"
}
- 400 Bad Request (invalid
limit)
{
"success": false,
"error": "Query parameter 'limit' must be between 1 and 50 (Meta's cap for this edge)."
}
- 400 Bad Request (invalid post URL)
{
"success": false,
"error": "Could not find media ID for the provided URL. Make sure the post belongs to the authenticated account."
}
- 500 Internal Server Error
{
"success": false,
"error": "An internal server error occurred."
}
Note: When using a post URL, the API automatically resolves the shortcode to a media ID by scanning the account's recent posts. The resolved IDs are cached for subsequent requests. The post must belong to the authenticated account.
Rate limiting: Calls to this endpoint are subject to your account's global API rate limits, which scale with your plan. There is no per-post throttle, so you can walk all pages of a viral post without artificial waits.
Reply to Comment (Private Reply)
Send a private reply (DM) to the author of a comment on your post. This sends a direct message to the commenter.
Endpoint
POST /api/uploadposts/comments/reply
Headers
| Name | Value | Description |
|---|---|---|
| Authorization | Apikey your-api-key-here | Your API key for authentication |
Body Parameters (JSON)
| Name | Type | Required | Description |
|---|---|---|---|
| platform | String | Yes | The platform (e.g., "instagram"). |
| user | String | Yes | Profile username (as configured in Upload-Post). |
| comment_id | String | Yes | The ID of the comment to reply to (from Get Post Comments). |
| message | String | Yes | The private reply message text. |
Example Request
curl -X POST https://api.upload-post.com/api/uploadposts/comments/reply \
-H 'Authorization: Apikey your-api-key-here' \
-H 'Content-Type: application/json' \
-d '{
"platform": "instagram",
"user": "my-profile",
"comment_id": "17858893269123456",
"message": "Thanks for your comment! Check your DMs for more info."
}'
Responses
- 200 OK (reply sent successfully)
{
"success": true,
"recipient_id": "17841400123456789",
"message_id": "aWdGM...",
"message": "Private reply sent successfully"
}
- 400 Bad Request (missing fields)
{
"success": false,
"error": "Missing required fields: platform, user, comment_id, message"
}
- 429 Too Many Requests (daily DM limit exceeded)
{
"success": false,
"error": "Daily DM limit exceeded."
}
- 500 Internal Server Error
{
"success": false,
"error": "An internal server error occurred."
}
Reply to Comment (Public Reply)
Post a public reply to a comment on your Instagram post. The reply appears as a visible comment under the original comment.
Endpoint
POST /api/uploadposts/comments/public-reply
Headers
| Name | Value | Description |
|---|---|---|
| Authorization | Apikey your-api-key-here | Your API key for authentication |
Body Parameters (JSON)
| Name | Type | Required | Description |
|---|---|---|---|
| platform | String | Yes | The platform (e.g., "instagram"). |
| user | String | Yes | Profile username (as configured in Upload-Post). |
| comment_id | String | Yes | The ID of the comment to reply to (from Get Post Comments). |
| message | String | Yes | The public reply message text. |
Example Request
curl -X POST https://api.upload-post.com/api/uploadposts/comments/public-reply \
-H 'Authorization: Apikey your-api-key-here' \
-H 'Content-Type: application/json' \
-d '{
"platform": "instagram",
"user": "my-profile",
"comment_id": "17858893269123456",
"message": "Thank you! Glad you liked it."
}'
Responses
- 200 OK (reply posted successfully)
{
"success": true,
"id": "17858893269654321",
"message": "Instagram public reply posted successfully"
}
- 400 Bad Request (missing fields)
{
"success": false,
"error": "Missing required fields: platform, user, comment_id, message"
}
- 429 Too Many Requests (daily limit exceeded)
{
"success": false,
"error": "Daily DM limit exceeded."
}
- 500 Internal Server Error
{
"success": false,
"error": "An internal server error occurred."
}
Important Notes
-
7-day window for private replies: Some platforms only allow private replies to recent comments (e.g., Instagram requires comments less than 7 days old). Public replies do not have this restriction.
-
Comment must be on your post: You can only reply to comments on posts owned by the authenticated account.
-
Daily limits: Upload-Post enforces a configurable daily limit per user. Both private and public replies count toward this limit. When exceeded, the API returns a
429status code. -
Public vs. private replies: Use
/comments/replyto send a private DM to the comment author. Use/comments/public-replyto post a visible reply under the original comment. Both require thecomment_idfrom the Get Post Comments endpoint. -
Using comment data for DMs: Each comment includes the commenter's user ID. You can use this ID with the Direct Messages endpoint to send follow-up DMs directly.