Uplika Automations API

The Automations API from Uplika — 14 operation(s) for automations.

Operations 20

GET /v1/automations/templates Every template: its id, channels, parameters (JSON Schema) and the reviewed… #
GET /v1/automations/capabilities Per channel: which triggers and steps a flow may use there #
POST /v1/automations/quick/{template} Create a flow from a template and its parameters. The usual way #
POST /v1/automations Create a flow from a full document #
GET /v1/automations Every flow in the workspace, newest first #
POST /v1/automations/validate Check a document without saving it. #
GET /v1/automations/{id} One flow with its document, version, run counts and the channel's capabilities #
PUT /v1/automations/{id} Replace the document. #
PATCH /v1/automations/{id} Rename, or turn on and off with enabled #
DELETE /v1/automations/{id} Delete the flow, its runs and its versions #
POST /v1/automations/{id}/enable Turn it on. From this moment messages go to real people #
POST /v1/automations/{id}/disable Turn it off. Runs that are waiting do not continue #
POST /v1/automations/{id}/duplicate Copy it as a new draft, with the same document and template parameters #
POST /v1/automations/{id}/past-comments/preview Count without sending: how many comments would get the flow, and why the others… #
POST /v1/automations/{id}/past-comments Start sending. Answers 202 with the job; one job per flow at a time #
GET /v1/automations/{id}/past-comments The most recent job: its status, how many were sent, and how many are queued. #
DELETE /v1/automations/{id}/past-comments Stop the running job. Comments already answered stay answered #
GET /v1/automations/{id}/runs What happened each time it fired: status, the reason it stopped, and a step log #
GET /v1/automations/{id}/versions Saved versions of the document, newest first #
GET /v1/automations/{id}/versions/{version} One saved version of the document #

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-automations-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-automations-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: uplika Automations 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: Automations
paths:
  /v1/automations/templates:
    get:
      summary: 'Every template: its id, channels, parameters (JSON Schema) and the reviewed…'
      tags:
      - Automations
      responses:
        default:
          description: See the error codes table in the docs.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      operationId: getV1AutomationsTemplates
      x-operation-id-source: derived
  /v1/automations/capabilities:
    get:
      summary: 'Per channel: which triggers and steps a flow may use there'
      tags:
      - Automations
      responses:
        default:
          description: See the error codes table in the docs.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      operationId: getV1AutomationsCapabilities
      x-operation-id-source: derived
  /v1/automations/quick/{template}:
    post:
      summary: Create a flow from a template and its parameters. The usual way
      tags:
      - Automations
      parameters:
      - name: template
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                template:
                  type: string
                  description: A template id from GET /v1/automations/templates, e.g. comment_to_dm, comment_public_reply, keyword_dm, default_reply.
                accountId:
                  type: string
                  description: The connected account the flow runs on.
                params:
                  type: object
                  description: The template's parameters. Their schema is in the template's params.
                enabled:
                  type: boolean
                  description: true to turn it on right away. Defaults to false (a draft).
                name:
                  type: string
                  description: Defaults to the template's title.
              required:
              - template
              - accountId
              - params
      responses:
        default:
          description: See the error codes table in the docs.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      operationId: postV1AutomationsQuickByTemplate
      x-operation-id-source: derived
  /v1/automations:
    post:
      summary: Create a flow from a full document
      tags:
      - Automations
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                accountId:
                  type: string
                  description: The connected account the flow runs on.
                doc:
                  type: object
                  description: 'The flow document: triggers and nodes. POST /v1/automations/validate checks it first.'
                name:
                  type: string
                  description: Defaults to Untitled automation.
                enabled:
                  type: boolean
                  description: Defaults to false.
                postId:
                  type: string
                  description: Ties the flow to one of your posts.
              required:
              - accountId
              - doc
      responses:
        default:
          description: See the error codes table in the docs.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      operationId: postV1Automations
      x-operation-id-source: derived
    get:
      summary: Every flow in the workspace, newest first
      tags:
      - Automations
      responses:
        default:
          description: See the error codes table in the docs.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      operationId: getV1Automations
      x-operation-id-source: derived
  /v1/automations/validate:
    post:
      summary: Check a document without saving it.
      tags:
      - Automations
      responses:
        default:
          description: See the error codes table in the docs.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      operationId: postV1AutomationsValidate
      x-operation-id-source: derived
  /v1/automations/{id}:
    get:
      summary: One flow with its document, version, run counts and the channel's capabilities
      tags:
      - Automations
      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: getV1AutomationsById
      x-operation-id-source: derived
    put:
      summary: Replace the document.
      tags:
      - Automations
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                version:
                  type: number
                  description: The version you read. A newer save answers 409 version_conflict with the current version.
                doc:
                  type: object
                  description: The new document. Or send template instead.
                template:
                  type: object
                  description: '{ id, params }: rebuild the document from a template, as the dashboard wizard does.'
                name:
                  type: string
                  description: A new name.
              required:
              - version
      responses:
        default:
          description: See the error codes table in the docs.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      operationId: putV1AutomationsById
      x-operation-id-source: derived
    patch:
      summary: Rename, or turn on and off with enabled
      tags:
      - Automations
      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: patchV1AutomationsById
      x-operation-id-source: derived
    delete:
      summary: Delete the flow, its runs and its versions
      tags:
      - Automations
      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: deleteV1AutomationsById
      x-operation-id-source: derived
  /v1/automations/{id}/enable:
    post:
      summary: Turn it on. From this moment messages go to real people
      tags:
      - Automations
      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: postV1AutomationsByIdEnable
      x-operation-id-source: derived
  /v1/automations/{id}/disable:
    post:
      summary: Turn it off. Runs that are waiting do not continue
      tags:
      - Automations
      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: postV1AutomationsByIdDisable
      x-operation-id-source: derived
  /v1/automations/{id}/duplicate:
    post:
      summary: Copy it as a new draft, with the same document and template parameters
      tags:
      - Automations
      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: postV1AutomationsByIdDuplicate
      x-operation-id-source: derived
  /v1/automations/{id}/past-comments/preview:
    post:
      summary: 'Count without sending: how many comments would get the flow, and why the others…'
      tags:
      - Automations
      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: postV1AutomationsByIdPastCommentsPreview
      x-operation-id-source: derived
  /v1/automations/{id}/past-comments:
    post:
      summary: Start sending. Answers 202 with the job; one job per flow at a time
      tags:
      - Automations
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                includeAnswered:
                  type: boolean
                  description: Also send to comments that already have a reply from the account. Defaults to false.
                publicReply:
                  type: boolean
                  description: Also post the trigger's public reply under each comment. Defaults to false.
                retryRefused:
                  type: boolean
                  description: Also send again to comments whose private reply Instagram refused (error 2534025), within 7 days of the comment, in the same run. Defaults to false.
      responses:
        default:
          description: See the error codes table in the docs.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      operationId: postV1AutomationsByIdPastComments
      x-operation-id-source: derived
    get:
      summary: 'The most recent job: its status, how many were sent, and how many are queued.'
      tags:
      - Automations
      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: getV1AutomationsByIdPastComments
      x-operation-id-source: derived
    delete:
      summary: Stop the running job. Comments already answered stay answered
      tags:
      - Automations
      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: deleteV1AutomationsByIdPastComments
      x-operation-id-source: derived
  /v1/automations/{id}/runs:
    get:
      summary: 'What happened each time it fired: status, the reason it stopped, and a step log'
      tags:
      - Automations
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: limit
        in: query
        required: false
        description: 1-200, defaults to 50.
        schema:
          type: string
      - name: before
        in: query
        required: false
        description: A run id from the previous page.
        schema:
          type: string
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                limit:
                  type: string
                  description: 1-200, defaults to 50.
                before:
                  type: string
                  description: A run id from the previous page.
      responses:
        default:
          description: See the error codes table in the docs.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      operationId: getV1AutomationsByIdRuns
      x-operation-id-source: derived
  /v1/automations/{id}/versions:
    get:
      summary: Saved versions of the document, newest first
      tags:
      - Automations
      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: getV1AutomationsByIdVersions
      x-operation-id-source: derived
  /v1/automations/{id}/versions/{version}:
    get:
      summary: One saved version of the document
      tags:
      - Automations
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: version
        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: getV1AutomationsByIdVersionsByVersion
      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.