Uplika Replies and insights API
The Replies and insights API from Uplika — 8 operation(s) for replies and insights.
The Replies and insights API from Uplika — 8 operation(s) for replies and insights.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/uplika-com:uplika-com-replies-and-insights-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: uplika Replies and insights API
version: 1.0.0
description: Publish to social channels from your own code. If you would rather have an AI agent do it, connect over MCP instead and skip API keys entirely.
contact:
url: https://uplika.com/en/docs
servers:
- url: https://api.uplika.com
security:
- apiKey: []
tags:
- name: Replies and insights
paths:
/v1/posts/{id}/replies:
get:
summary: The reply thread under a published post
tags:
- Replies and insights
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
default:
description: See the error codes table in the docs.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
operationId: getV1PostsByIdReplies
x-operation-id-source: derived
post:
summary: Reply to the post, or to a reply under it
tags:
- Replies and insights
parameters:
- name: id
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
content:
type: string
description: Reply text.
replyTo:
type: string
description: A reply id from the thread, or a link to that comment. Omit to answer the post itself.
wait:
type: boolean
description: Hold the response until the reply is out, up to 10 seconds. Answers 200 with the post when it settles, otherwise 202 with next.
required:
- content
responses:
default:
description: See the error codes table in the docs.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
operationId: postV1PostsByIdReplies
x-operation-id-source: derived
/v1/engagement/like:
post:
summary: Like a post, or a reply under it. Idempotent; there is no unlike
tags:
- Replies and insights
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
postId:
type: string
description: Your own publish. Or pass ownerHandle and externalId instead.
ownerHandle:
type: string
description: 'Who owns the post. Naver Blog: the blog id.'
externalId:
type: string
description: 'The post''s id on the channel. Naver Blog: the logNo from the link.'
replyId:
type: string
description: A reply id from the thread to like that reply instead of the post.
accountId:
type: string
description: Which connected account acts. Only needed with more than one account on that channel.
responses:
default:
description: See the error codes table in the docs.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
operationId: postV1EngagementLike
x-operation-id-source: derived
/v1/engagement/reply:
post:
summary: Reply to a post that is not yours (Naver Blog). No publish record is created
tags:
- Replies and insights
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
ownerHandle:
type: string
description: Who owns the post.
externalId:
type: string
description: The post's id on the channel.
content:
type: string
description: Reply text.
replyId:
type: string
description: Reply under this reply instead of under the post.
secret:
type: boolean
description: 'Naver Blog: a secret comment only the blog owner can read.'
required:
- ownerHandle
- externalId
- content
responses:
default:
description: See the error codes table in the docs.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
operationId: postV1EngagementReply
x-operation-id-source: derived
/v1/engagement/follow:
post:
summary: 'Follow an account (Naver Blog: add as neighbor).'
tags:
- Replies and insights
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
ownerHandle:
type: string
description: 'The account to follow. Naver Blog: the blog id.'
mutual:
type: boolean
description: 'Naver Blog: send a mutual-neighbor request instead. Comes back pending until accepted.'
message:
type: string
description: Sent with a mutual request. Up to 500 characters.
accountId:
type: string
description: Which connected account acts.
required:
- ownerHandle
responses:
default:
description: See the error codes table in the docs.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
operationId: postV1EngagementFollow
x-operation-id-source: derived
/v1/naver/neighbors/candidates:
get:
summary: Blogs that recently posted on a topic, with the ones this account is already…
tags:
- Replies and insights
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
query:
type: string
description: The topic, 1 to 100 characters. The server searches Naver's blog search for the newest posts on it and groups them by blog.
mutual:
type: boolean
description: The kind of request you will send with follow. true leaves out mutual neighbors, requests already sent and refusals, and keeps one-way neighbors; false keeps only blogs not linked at all.
days:
type: number
description: Keep blogs with a post on the topic within this many days, counted back from today. 1 to 30, default 30.
accountId:
type: string
description: Which connected Naver Blog to check against. Only needed with more than one.
required:
- query
- mutual
responses:
default:
description: See the error codes table in the docs.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
operationId: getV1NaverNeighborsCandidates
x-operation-id-source: derived
/v1/replies/{replyId}/hide:
post:
summary: Hide a reply on the channel, or show it again
tags:
- Replies and insights
parameters:
- name: replyId
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
postId:
type: string
description: The publish the reply sits under.
hide:
type: boolean
description: true hides it, false shows it again. Default true.
required:
- postId
responses:
default:
description: See the error codes table in the docs.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
operationId: postV1RepliesByReplyIdHide
x-operation-id-source: derived
/v1/replies/{replyId}:
delete:
summary: Delete a comment for good.
tags:
- Replies and insights
parameters:
- name: replyId
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
postId:
type: string
description: The publish the reply sits under.
required:
- postId
responses:
default:
description: See the error codes table in the docs.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
operationId: deleteV1RepliesByReplyId
x-operation-id-source: derived
/v1/posts/{id}/insights:
get:
summary: Views, likes, replies, reposts, quotes and shares
tags:
- Replies and insights
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
default:
description: See the error codes table in the docs.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
operationId: getV1PostsByIdInsights
x-operation-id-source: derived
components:
schemas:
Error:
type: object
required:
- error
properties:
error:
type: object
required:
- code
- message
properties:
code:
type: string
enum:
- verification_required
- next_post_taken
- past_comments_not_supported
- past_comments_no_trigger
- automation_not_live
- past_comments_no_post
- past_comments_running
- scheduled_at_invalid
- scheduled_at_range
- draft_and_schedule
- batch_id_invalid
- naver_source_required
- naver_keep_unknown
- post_not_editable
- live_post_no_schedule
- live_post_accounts_fixed
- nothing_to_change
- target_required
- thread_piece
- naver_draft_not_found
- account_required
- invalid_api_key
- forbidden_scope
- no_accounts
- empty_content
- account_not_connected
- account_expired
- platform_not_available
- content_too_long
- media_required
- media_mixed
- media_too_many
- media_too_large
- media_aspect_ratio
- media_dimensions
- media_type_not_supported
- media_too_long
- media_url_invalid
- media_url_blocked
- media_url_unreachable
- media_unreachable
- workspace_required
- workspace_mismatch
- workspace_limit
- platform_already_connected
- quota_exceeded
- workspaces_invalid
- billing_not_configured
- full_access_open
- checkout_failed
- no_subscription
- portal_failed
- media_not_uploaded
- media_expired
- image_unreadable
- media_not_publishable
- media_in_use
- media_delete_failed
- media_store_failed
- upload_bytes_missing
- api_unreachable
- naver_media_kind_mismatch
- naver_media_over_limit
- naver_media_ref_unattached
- media_ref_unknown
- media_ref_not_supported
- media_ref_mixed_channels
- ghost_title_required
- ghost_title_too_long
- ghost_tag_invalid
- ghost_directive_not_supported
- media_not_configured
- post_not_found
- media_not_found
- key_not_found
- grant_not_found
- nothing_to_retry
- not_published
- delete_window_expired
- platform_error
- duplicate_post
- unauthenticated
- platform_rejected_content
- platform_auth_error
- topic_tag_invalid
- youtube_video_not_replaceable
- topic_tag_not_supported
- api_key_revoked
- api_key_expired
- idempotency_key_reused
- publish_in_flight
- extension_outdated
- thread_and_content
- thread_empty
- container_expired
- permission_denied
- invalid_json
- body_too_large
- internal_error
- system_error
- rate_limited
- account_not_found
- account_has_pending_posts
- account_disconnected
- post_unavailable
- post_deleted
- account_busy_publishing
- empty_reply
- cannot_hide_own_reply
- media_fields_required
- not_our_post
- key_name_required
- key_scope_required
- invalid_locale
- url_required
- reference_invalid
- reference_not_naver
- reference_not_public
- reference_not_readable
- reference_too_large
- reference_timeout
- reference_unreachable
- reference_not_read
- bad_post_ref
- post_not_owned
- post_not_in_recent
- upload_session_not_found
- upload_session_full
- media_url_invalid
- media_url_blocked
- media_url_unreachable
- workspace_required
- workspace_mismatch
- workspace_limit
- platform_already_connected
- quota_exceeded
- workspaces_invalid
- billing_not_configured
- full_access_open
- checkout_failed
- no_subscription
- portal_failed
- youtube_title_required
- youtube_title_too_long
- youtube_angle_brackets
- youtube_video_required
- youtube_tags_too_long
- youtube_schedule_needs_private
- youtube_schedule_invalid
- youtube_thumbnail_type
- youtube_thumbnail_too_large
- youtube_short_no_thumbnail
- youtube_no_threads
- instagram_reel_video_required
- instagram_reel_duration
- instagram_story_single_media
- instagram_story_no_extras
- instagram_story_duration
- instagram_cover_reel_only
- instagram_cover_type
- instagram_cover_too_large
- instagram_too_many_collaborators
- instagram_user_tag_position
- instagram_username_invalid
- instagram_audio_invalid
- instagram_audio_reel_only
- instagram_audio_needs_facebook_login
- instagram_audio_unavailable
- facebook_link_with_media
- facebook_link_invalid
- facebook_reel_video_required
- facebook_reel_duration
- facebook_story_single_media
- facebook_story_no_extras
- facebook_story_no_caption
- facebook_schedule_feed_only
- facebook_schedule_invalid
- facebook_schedule_range
- facebook_targeting_text_only
- facebook_targeting_not_editable
- facebook_schedule_no_first_comment
- threads_not_supported
- beta_access_required
- naver_title_required
- naver_title_too_long
- naver_category_required
- pinterest_board_required
- pinterest_board_not_found
- pinterest_link_invalid
- pinterest_link_too_long
- pinterest_title_too_long
- pinterest_alt_text_too_long
- pinterest_video_too_short
- discord_username_invalid
- discord_field_not_editable
- discord_forum_channel
- naver_markdown_unknown
- naver_category_unknown
- naver_category_ambiguous
- naver_form_unknown
- naver_form_required
- content_required
- help_not_found
- invalid_locale
- invalid_category
- invalid_topic
- naver_wrong_blog
- naver_wrong_login
- naver_session_permission
- naver_rate_limited
- naver_not_allowed
- naver_follow_blocked
- naver_engagement_limited
- naver_comment_gone
- upload_stalled
- platform_timeout
- naver_draft_unpublished
- naver_stats_unavailable
- naver_stats_permission
- naver_stats_unreachable
- naver_comments_closed
- naver_post_unavailable
- naver_card_unavailable
- naver_card_not_inserted
- naver_tab_lost
- naver_draft_unknown
- naver_reply_unknown
- naver_publish_unconfirmed
- comments_closed
- refresh_unsupported
- invalid_params
- quota_exceeded
- naver_seo_unavailable
- naver_api_error
- invalid_blog_id
- blog_not_found
- naver_rss_unreachable
- naver_autocomplete_unavailable
- naver_autocomplete_paused
- naver_autocomplete_busy
- research_tool_disabled
- research_tool_not_toggleable
- research_quota_exceeded
- youtube_quota_exhausted
- youtube_search_unavailable
- naver_search_busy
- naver_search_blocked
- naver_search_permission
- naver_seo_busy
- refresh_timeout
- refresh_failed
- naver_reply_media_not_supported
- naver_too_many_tags
- naver_tag_too_long
- naver_tag_has_space
- naver_scheduled_at_conflict
- naver_scheduled_at_mixed
- naver_draft_and_schedule
- naver_font_size_out_of_range
- naver_ui_changed
- naver_not_logged_in
- naver_upload_failed
- naver_publish_failed
- naver_verify_failed
- bridge_unsupported
- bridge_lost
- bridge_stalled
- bridge_timeout
- naver_category_missing
- naver_grammar_rejected
- platform_activity_blocked
- facebook_identity_required
- instagram_collaborator_unavailable
- instagram_upload_failed
- reply_parent_unavailable
- youtube_daily_cap
- thread_broken
- bridge_offline
- bridge_no_window
- naver_clip_video_required
- naver_clip_category_required
- naver_clip_category_unknown
- naver_clip_category_ambiguous
- naver_clip_tag_invalid
- naver_clip_too_many_tags
- naver_clip_visibility_invalid
- clip_no_profile
- clip_profile_mismatch
- clip_upload_failed
- clip_rejected
- clip_unconfirmed
- account_required
- not_supported
- reconsent_required
- feature_in_review
- tiktok_privacy_required
- tiktok_privacy_invalid
- tiktok_branded_private
- tiktok_interaction_disabled
- tiktok_title_required
- tiktok_title_too_long
- tiktok_title_not_supported
- tiktok_cannot_post
- ghost_plan_limit
- ghost_no_permission
- ghost_update_collision
- tiktok_reply_not_supported
message:
type: string
additionalProperties: true
securitySchemes:
apiKey:
type: http
scheme: bearer
description: An API key from the dashboard.
externalDocs:
url: https://uplika.com/en/docs
description: Reference, error codes and per-channel limits.