Uplika Inbox and contacts API

The Inbox and contacts API from Uplika — 19 operation(s) for inbox and contacts.

Operations 22

GET /v1/conversations Conversations, latest message first. #
GET /v1/conversations/{id} One conversation with its contact and messages #
POST /v1/conversations/{id}/messages Reply as the account: a DM in DM conversations, a public reply in mention and… #
POST /v1/conversations/{id}/drafts/{messageId} Send a draft an automation prepared for approval, optionally with edited text #
DELETE /v1/conversations/{id}/drafts/{messageId} Throw a draft away without sending it #
POST /v1/inbox/sync Import recent conversations from the channel for one account #
POST /v1/conversations/{id}/read Mark it read #
POST /v1/conversations/{id}/open Reopen a closed conversation #
POST /v1/conversations/{id}/close Close it. It moves out of the open list #
POST /v1/conversations/{id}/star Star it #
POST /v1/conversations/{id}/unstar Remove the star #
POST /v1/conversations/{id}/assign Assign it to a person (userId, defaults to you) #
POST /v1/conversations/{id}/unassign Clear the assignment #
GET /v1/contacts People who wrote to your accounts, with tags, fields, opt-out and whether they… #
GET /v1/contacts/{id} One contact and their conversations #
PATCH /v1/contacts/{id} Set tags, custom fields or opt-out #
DELETE /v1/contacts/{id} Delete the contact and its conversations and messages on our side. #
POST /v1/contacts/{id}/refresh Read the profile again from the channel #
GET /v1/accounts/{id}/audience Follower totals, and on Threads a demographic breakdown. #
GET /v1/messaging/violations Messages an automation did not send because a channel rule stopped it, newest… #
GET /v1/threads/pending-replies Replies held for approval on a Threads account #
POST /v1/threads/pending-replies/{replyId} Approve or ignore one held reply #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/uplika-com:uplika-com-inbox-and-contacts-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

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 Specification

uplika-com-inbox-and-contacts-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: uplika Inbox and contacts 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: Inbox and contacts
paths:
  /v1/conversations:
    get:
      summary: Conversations, latest message first.
      tags:
      - Inbox and contacts
      parameters:
      - name: state
        in: query
        required: false
        description: open (default) or closed.
        schema:
          type: string
      - name: kind
        in: query
        required: false
        description: dm, mention or comment.
        schema:
          type: string
      - name: unread
        in: query
        required: false
        description: 1 for unread only.
        schema:
          type: string
      - name: starred
        in: query
        required: false
        description: 1 for starred only.
        schema:
          type: string
      - name: accountId
        in: query
        required: false
        description: One connected account.
        schema:
          type: string
      - name: platform
        in: query
        required: false
        description: One platform id, e.g. instagram.
        schema:
          type: string
      - name: search
        in: query
        required: false
        description: Matches the username, the name or the last message.
        schema:
          type: string
      - name: before
        in: query
        required: false
        description: A lastMessageAt from the previous page.
        schema:
          type: string
      - name: limit
        in: query
        required: false
        description: 1-200.
        schema:
          type: string
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                state:
                  type: string
                  description: open (default) or closed.
                kind:
                  type: string
                  description: dm, mention or comment.
                unread:
                  type: string
                  description: 1 for unread only.
                starred:
                  type: string
                  description: 1 for starred only.
                accountId:
                  type: string
                  description: One connected account.
                platform:
                  type: string
                  description: One platform id, e.g. instagram.
                search:
                  type: string
                  description: Matches the username, the name or the last message.
                before:
                  type: string
                  description: A lastMessageAt from the previous page.
                limit:
                  type: string
                  description: 1-200.
      responses:
        default:
          description: See the error codes table in the docs.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      operationId: getV1Conversations
      x-operation-id-source: derived
  /v1/conversations/{id}:
    get:
      summary: One conversation with its contact and messages
      tags:
      - Inbox and contacts
      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: getV1ConversationsById
      x-operation-id-source: derived
  /v1/conversations/{id}/messages:
    post:
      summary: 'Reply as the account: a DM in DM conversations, a public reply in mention and…'
      tags:
      - Inbox and contacts
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                text:
                  type: string
                  description: What to send.
                mediaId:
                  type: string
                  description: Attach one uploaded file to a DM.
              required:
              - text
      responses:
        default:
          description: See the error codes table in the docs.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      operationId: postV1ConversationsByIdMessages
      x-operation-id-source: derived
  /v1/conversations/{id}/drafts/{messageId}:
    post:
      summary: Send a draft an automation prepared for approval, optionally with edited text
      tags:
      - Inbox and contacts
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: messageId
        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: postV1ConversationsByIdDraftsByMessageId
      x-operation-id-source: derived
    delete:
      summary: Throw a draft away without sending it
      tags:
      - Inbox and contacts
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: messageId
        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: deleteV1ConversationsByIdDraftsByMessageId
      x-operation-id-source: derived
  /v1/inbox/sync:
    post:
      summary: Import recent conversations from the channel for one account
      tags:
      - Inbox and contacts
      responses:
        default:
          description: See the error codes table in the docs.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      operationId: postV1InboxSync
      x-operation-id-source: derived
  /v1/conversations/{id}/read:
    post:
      summary: Mark it read
      tags:
      - Inbox and contacts
      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: postV1ConversationsByIdRead
      x-operation-id-source: derived
  /v1/conversations/{id}/open:
    post:
      summary: Reopen a closed conversation
      tags:
      - Inbox and contacts
      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: postV1ConversationsByIdOpen
      x-operation-id-source: derived
  /v1/conversations/{id}/close:
    post:
      summary: Close it. It moves out of the open list
      tags:
      - Inbox and contacts
      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: postV1ConversationsByIdClose
      x-operation-id-source: derived
  /v1/conversations/{id}/star:
    post:
      summary: Star it
      tags:
      - Inbox and contacts
      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: postV1ConversationsByIdStar
      x-operation-id-source: derived
  /v1/conversations/{id}/unstar:
    post:
      summary: Remove the star
      tags:
      - Inbox and contacts
      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: postV1ConversationsByIdUnstar
      x-operation-id-source: derived
  /v1/conversations/{id}/assign:
    post:
      summary: Assign it to a person (userId, defaults to you)
      tags:
      - Inbox and contacts
      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: postV1ConversationsByIdAssign
      x-operation-id-source: derived
  /v1/conversations/{id}/unassign:
    post:
      summary: Clear the assignment
      tags:
      - Inbox and contacts
      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: postV1ConversationsByIdUnassign
      x-operation-id-source: derived
  /v1/contacts:
    get:
      summary: People who wrote to your accounts, with tags, fields, opt-out and whether they…
      tags:
      - Inbox and contacts
      parameters:
      - name: accountId
        in: query
        required: false
        description: One connected account.
        schema:
          type: string
      - name: tag
        in: query
        required: false
        description: Contacts with this tag.
        schema:
          type: string
      - name: optedOut
        in: query
        required: false
        description: 1 for people who opted out.
        schema:
          type: string
      - name: search
        in: query
        required: false
        description: Matches the username or the name.
        schema:
          type: string
      - name: limit
        in: query
        required: false
        description: 1-500, defaults to 100.
        schema:
          type: string
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                accountId:
                  type: string
                  description: One connected account.
                tag:
                  type: string
                  description: Contacts with this tag.
                optedOut:
                  type: string
                  description: 1 for people who opted out.
                search:
                  type: string
                  description: Matches the username or the name.
                limit:
                  type: string
                  description: 1-500, defaults to 100.
      responses:
        default:
          description: See the error codes table in the docs.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      operationId: getV1Contacts
      x-operation-id-source: derived
  /v1/contacts/{id}:
    get:
      summary: One contact and their conversations
      tags:
      - Inbox and contacts
      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: getV1ContactsById
      x-operation-id-source: derived
    patch:
      summary: Set tags, custom fields or opt-out
      tags:
      - Inbox and contacts
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                tags:
                  type: array
                  items:
                    type: string
                  description: Replaces the tags. Up to 50.
                fields:
                  type: object
                  description: Custom fields to set, merged into the existing ones.
                optedOut:
                  type: boolean
                  description: true stops every automated message to this person.
      responses:
        default:
          description: See the error codes table in the docs.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      operationId: patchV1ContactsById
      x-operation-id-source: derived
    delete:
      summary: Delete the contact and its conversations and messages on our side.
      tags:
      - Inbox and contacts
      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: deleteV1ContactsById
      x-operation-id-source: derived
  /v1/contacts/{id}/refresh:
    post:
      summary: Read the profile again from the channel
      tags:
      - Inbox and contacts
      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: postV1ContactsByIdRefresh
      x-operation-id-source: derived
  /v1/accounts/{id}/audience:
    get:
      summary: Follower totals, and on Threads a demographic breakdown.
      tags:
      - Inbox and contacts
      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: getV1AccountsByIdAudience
      x-operation-id-source: derived
  /v1/messaging/violations:
    get:
      summary: Messages an automation did not send because a channel rule stopped it, newest…
      tags:
      - Inbox and contacts
      responses:
        default:
          description: See the error codes table in the docs.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      operationId: getV1MessagingViolations
      x-operation-id-source: derived
  /v1/threads/pending-replies:
    get:
      summary: Replies held for approval on a Threads account
      tags:
      - Inbox and contacts
      parameters:
      - name: accountId
        in: query
        required: false
        description: A connected Threads account.
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                accountId:
                  type: string
                  description: A connected Threads account.
              required:
              - accountId
      responses:
        default:
          description: See the error codes table in the docs.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      operationId: getV1ThreadsPendingReplies
      x-operation-id-source: derived
  /v1/threads/pending-replies/{replyId}:
    post:
      summary: Approve or ignore one held reply
      tags:
      - Inbox and contacts
      parameters:
      - name: replyId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                accountId:
                  type: string
                  description: The Threads account that holds the reply.
                approve:
                  type: boolean
                  description: false ignores the reply. Defaults to true.
              required:
              - accountId
      responses:
        default:
          description: See the error codes table in the docs.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      operationId: postV1ThreadsPendingRepliesByReplyId
      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.