Appmixer Apps API

Applications and connectors management

Operations 9

GET /apps Get Apps #
GET /bundles Get Bundles #
GET /apps/components Get App Components #
GET /components Get All Components #
POST /components Publish A Component/Module/Service #
GET /components/{selector} Download a Component/Module/Service #
DELETE /components/{selector} Delete a Component/Module/Service #
GET /components/uploader/{ticket} Check for Publishing Progress #
POST /component/{vendor}/{service}/{module}/{component} Call a Component Statically #

Documentation

Specifications

Schemas & Data

Other Resources

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/appmixer:appmixer-apps-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

appmixer-apps-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Appmixer REST Apps API
  version: 6.5.5
  summary: REST API of the Appmixer workflow automation and embedded iPaaS platform.
  description: 'Appmixer offers a REST API that mirrors the functionality available in its UI. Use it for

    advanced customizations, additional automations and scripting.


    **Base URL.** The base URL depends on your Appmixer tenant, for example `https://api-acme.appmixer.ai`

    (newer hosted tenants), `https://api.acme.appmixer.cloud` (older hosted tenants), or the API URL of

    your Self-Managed installation.


    **Authentication.** Most endpoints require a user access token sent as `Authorization: Bearer `.

    Get a token by signing in with `POST /user/auth`. Some endpoints also require the user to have

    the `admin` scope; this is noted in their descriptions.


    **Errors.** Errors are returned as JSON objects with `statusCode`, `error` and `message` properties.'
  contact:
    name: Appmixer
    url: https://www.appmixer.com
servers:
- url: '{tenantApiUrl}'
  description: Your Appmixer tenant API
  variables:
    tenantApiUrl:
      default: https://api-acme.appmixer.ai
      description: API URL of your Appmixer tenant, e.g. https://api-acme.appmixer.ai or https://api.acme.appmixer.cloud.
security:
- bearerAuth: []
tags:
- name: Apps
  description: Control the connectors (apps, components, bundles) that are installed in your Appmixer tenant. You can also publish new and uninstall existing connectors, and call components statically.
paths:
  /apps:
    get:
      tags:
      - Apps
      summary: Get Apps
      operationId: getApps
      description: 'Returns all applications available to the authenticated user.


        An "app" is either a **module** (e.g. `appmixer.google.gmail`) or a **service** that does not

        declare any modules (e.g. `appmixer.calendly`). When a service contains at least one module, the

        modules are returned as the apps and the service itself is omitted. The result is keyed by the app

        name and respects the user''s ACL (private apps the user cannot see are filtered out).


        By default the `icon` of each app is replaced by a URL pointing to the icon; set

        `compressIcons=false` to get the original inline data URI.


        The access token is optional: without it the request is served as the anonymous public user.'
      security:
      - bearerAuth: []
      - {}
      parameters:
      - $ref: '#/components/parameters/AppIgnoreACLQuery'
      - $ref: '#/components/parameters/AppCompressIconsQuery'
      responses:
        '200':
          description: Apps successfully retrieved, keyed by app name.
          content:
            application/json:
              schema:
                type: object
                additionalProperties:
                  $ref: '#/components/schemas/App'
              example:
                appmixer.asana:
                  name: appmixer.asana
                  label: Asana
                  category: applications
                  description: Asana is a collaborative information manager for workspace. It helps you organize people and tasks effectively.
                  icon: data:image/png;base64,iVBORw0KGgoA....kJggg==
                appmixer.calendly:
                  name: appmixer.calendly
                  label: Calendly
                  category: applications
                  description: Calendly helps you schedule meetings without the back-and-forth emails. It does not work with the free Basic account. It works with Premium or Pro account.
                  icon: data:image/png;base64,iVBORw0KGgoA....kJggg==
                appmixer.dropbox:
                  name: appmixer.dropbox
                  label: Dropbox
                  category: applications
                  description: Dropbox is a home for all your photos, documents, videos, and other files. Dropbox lets you access your stuff from anywhere and makes it easy to share with others.
                  icon: data:image/svg+xml;base64,PHN2Z....3N2Zz4=
        '400':
          description: '`ignoreACL=true` was used by a non-admin user.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /bundles:
    get:
      tags:
      - Apps
      summary: Get Bundles
      operationId: getBundles
      description: 'Returns the installed bundle versions. Each connector is packaged as a bundle (defined by its

        `bundle.json`); this endpoint reports the currently installed `version` of every bundle, keyed by

        the bundle name. It is useful for checking which connector versions are deployed in your tenant.


        The access token is optional: without it the request is served as the anonymous public user.'
      security:
      - bearerAuth: []
      - {}
      responses:
        '200':
          description: Installed bundle versions keyed by bundle name.
          content:
            application/json:
              schema:
                type: object
                additionalProperties:
                  $ref: '#/components/schemas/AppBundle'
              example:
                appmixer.asana:
                  version: 1.2.0
                appmixer.calendly:
                  version: 2.0.1
                appmixer.dropbox:
                  version: 1.5.3
        '401':
          $ref: '#/components/responses/Unauthorized'
  /apps/components:
    get:
      tags:
      - Apps
      summary: Get App Components
      operationId: getAppComponents
      description: 'Returns all components of a single app including their manifest files. Only components the user

        is allowed to use (ACL) are returned.


        The access token is optional: without it the request is served as the anonymous public user.'
      security:
      - bearerAuth: []
      - {}
      parameters:
      - name: app
        in: query
        required: true
        description: ID of an app as defined in `service.json` or `module.json` (e.g. `appmixer.dropbox` or `appmixer.google.gmail`).
        schema:
          type: string
        example: appmixer.twilio
      responses:
        '200':
          description: Component manifests of the app.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ComponentManifest'
              example:
              - name: appmixer.twilio.sms.SendSMS
                author: David Durman <david@client.io>
                icon: data:image/png;base64,iVBORw...gg==
                description: Send SMS text message through Twilio.
                auth:
                  service: appmixer:twilio
                inPorts:
                - name: message
                  schema:
                    type: object
                    properties:
                      body:
                        type: string
                      to:
                        type: string
                    required:
                    - to
                  inspector:
                    inputs:
                      body:
                        type: text
                        label: Text message
                        tooltip: Text message that should be sent.
                        index: 1
                      to:
                        type: text
                        label: To number
                        tooltip: The destination phone number in E.164 format.
                        index: 2
                properties:
                  schema:
                    properties:
                      fromNumber:
                        type: string
                    required:
                    - fromNumber
                  inspector:
                    inputs:
                      fromNumber:
                        type: select
                        label: From number
                        tooltip: Select Twilio phone number.
                        index: 1
                        source:
                          url: /component/appmixer/twilio/sms/ListFromNumbers?outPort=numbers
                          data:
                            transform: ./transformers#fromNumbersToSelectArray
              - name: appmixer.twilio.calls.NewCall
                author: David Durman <david@client.io>
                icon: data:image/png;base64,iVBORw...gg==
                description: Receive a call through Twilio.
                auth:
                  service: appmixer:twilio
                webhook: true
                webhookAsync: true
                outPorts:
                - name: call
                  options: []
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /components:
    get:
      tags:
      - Apps
      summary: Get All Components
      operationId: getComponents
      description: 'Get all available components (including custom ones) that the user is allowed to use.


        By default the endpoint returns the **full manifest** of every component. To retrieve only the

        list of component type names, set `manifest=no`. When full manifests are returned, the `icon`

        field is, by default, replaced by a URL pointing to the icon (instead of an inline base64 data

        URI) to keep the payload small; set `compressIcons=false` to keep the original inline icons.


        The access token is optional: without it the request is served as the anonymous public user.'
      security:
      - bearerAuth: []
      - {}
      parameters:
      - name: manifest
        in: query
        description: When set to `no`, the endpoint returns only an array of component type names. Otherwise (default) it returns the full manifest of each component.
        schema:
          type: string
          examples:
          - 'no'
      - name: selector
        in: query
        description: Restrict the result to a subset of components. A `[vendor].[service].[module].[component]` selector (e.g. `appmixer.google` or `appmixer.google.gmail`).
        schema:
          type: string
      - name: selectors[]
        in: query
        description: Request multiple component patterns in a single call (OR logic), e.g. `?selectors[]=appmixer.google.gmail&selectors[]=appmixer.slack.list.SendChannelMessage`. Useful for progressively loading only the manifests a client needs. `selectors` (without brackets) is accepted as well.
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      - $ref: '#/components/parameters/AppCompressIconsQuery'
      - $ref: '#/components/parameters/AppIgnoreACLQuery'
      responses:
        '200':
          description: Array of component manifests, or of component type names when `manifest=no`.
          content:
            application/json:
              schema:
                oneOf:
                - type: array
                  items:
                    $ref: '#/components/schemas/ComponentManifest'
                - type: array
                  items:
                    type: string
              examples:
                manifestNo:
                  summary: manifest=no
                  value:
                  - appmixer.asana.projects.CreateProject
                  - appmixer.asana.projects.NewProject
                  - appmixer.asana.tasks.CreateStory
                  - appmixer.calendly.events.InviteeCanceled
                  - appmixer.calendly.events.InviteeCreated
                  - appmixer.clearbit.enrichment.FindCompany
                  - appmixer.clearbit.enrichment.FindPerson
                fullManifests:
                  summary: Default (full manifests)
                  value:
                  - name: appmixer.asana.tasks.CreateStory
                    author: David Durman <david@client.io>
                    description: Create a story (comment) on a task.
                    icon: https://api.appmixer.com/icons/appmixer.asana.tasks.CreateStory
                    auth:
                      service: appmixer:asana
                    inPorts: []
                    outPorts: []
                    properties: {}
        '400':
          description: Query validation failed, or `ignoreACL=true` was used by a non-admin user.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      tags:
      - Apps
      summary: Publish A Component/Module/Service
      operationId: publishComponent
      description: 'Publish a new component, new module or an entire service or update an existing

        component/module/service. The uploaded entity must be zipped and must have a proper

        directory/file structure inside (see Basic Component Structure for more details). You can use the

        Appmixer CLI tool to pack your component/service/module to a zip archive (`appmixer pack`

        command). Alternatively, you can use a regular zip command line utility but you should omit the

        `node_modules/` directories before archiving and the root directory of the zip archive must match

        the vendor name. The directory hierarchy must be `[vendor]/[service]/[module]/[component]`.


        The size limit of the zip archive is configured per tenant (10MB by default).


        Publishing can take more time than the lifespan of a single HTTP request. Therefore, the result is

        a JSON object with a `ticket` property. Use the ticket to check the progress of the publish with

        `GET /components/uploader/{ticket}`.


        Admin users can publish any vendor; other users must have a vendor assigned.'
      parameters:
      - name: replaceAll
        in: query
        description: When `true`, existing files of the published service/module/component that are not present in the uploaded archive are removed (full replace).
        schema:
          type: boolean
      requestBody:
        required: true
        content:
          application/octet-stream:
            schema:
              type: string
              format: binary
              description: Zip archive with the component/module/service.
      responses:
        '200':
          description: Upload accepted; use the ticket to poll for progress.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ComponentUploadTicket'
              example:
                ticket: a194d145-3768-4a8a-84a4-4f1e4e08c4ad
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '413':
          description: The zip archive exceeds the configured size limit.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '415':
          description: The request content type is not `application/octet-stream`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /components/{selector}:
    get:
      tags:
      - Apps
      summary: Download a Component/Module/Service
      operationId: downloadComponent
      description: 'Download the source files of a component, module or an entire service as a zip archive

        (`application/octet-stream`). Compiled code and internal `node_modules.zip` files are excluded

        from the archive. The user must own the selected component(s): admin users can download

        anything, other users only components of their own vendor(s).


        The selector can also target an individual file

        (`appmixer.myservice.mymodule.MyComponent/MyComponent.js`); the `/` must then be URL-encoded

        (`%2F`).'
      responses:
        '200':
          description: Zip archive with the source files.
          content:
            application/octet-stream:
              schema:
                type: string
                format: binary
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          description: Nothing corresponds to the selector.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                statusCode: 404
                error: Not Found
                message: There is nothing that corresponds to appmixer.myservice.
      parameters:
      - name: selector
        in: path
        required: true
        description: A selector of the form `[vendor].[service].[module].[component]`, e.g. `appmixer.google.calendar.CreateEvent` (one component), `appmixer.google.calendar` (the calendar module) or `appmixer.google` (the entire Google service).
        schema:
          type: string
        example: appmixer.myservice
    delete:
      tags:
      - Apps
      summary: Delete a Component/Module/Service
      operationId: deleteComponent
      description: 'Delete a component/module or an entire service. Admin users can delete anything, other users only

        components of their own vendor(s).'
      parameters:
      - name: selector
        in: path
        required: true
        description: A selector of the form `[vendor].[service].[module].[component]`, e.g. `appmixer.google.calendar.CreateEvent` (one component), `appmixer.google.calendar` (the calendar module) or `appmixer.google` (the entire Google service).
        schema:
          type: string
        example: appmixer.myservice
      - name: doNotRemoveCollections
        in: query
        description: When `true`, the database collections associated with the deleted component(s) are preserved instead of being dropped.
        schema:
          type: boolean
      responses:
        '200':
          description: Empty object. Note that errors during deletion are only recorded in the audit log; the response is always `{}`.
          content:
            application/json:
              schema:
                type: object
              example: {}
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /components/uploader/{ticket}:
    get:
      tags:
      - Apps
      summary: Check for Publishing Progress
      operationId: getComponentUploadStatus
      description: Check for progress of publishing a component.
      parameters:
      - name: ticket
        in: path
        required: true
        description: Ticket that you got from the `POST /components` request.
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: Upload status.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ComponentUploadStatus'
              examples:
                success:
                  summary: Successful upload, no errors
                  value:
                    finished: 2020-02-28 15:57:34.549000+00:00
                failure:
                  summary: Upload finished with errors
                  value:
                    finished: 2020-02-28 15:25:39.515000+00:00
                    err: Invalid schema for appmixer/utils/service.json
                    data:
                    - keyword: required
                      dataPath: ''
                      schemaPath: '#/required'
                      params:
                        missingProperty: label
                      message: should have required property 'label'
                    - keyword: required
                      dataPath: ''
                      schemaPath: '#/required'
                      params:
                        missingProperty: description
                      message: should have required property 'description'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: There is no upload under the ticket.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                statusCode: 404
                error: Not Found
                message: There's no upload under ticket 2e9dd726-2b7f-46f7-bea4-8db7f7175aa8
  /component/{vendor}/{service}/{module}/{component}:
    post:
      tags:
      - Apps
      summary: Call a Component Statically
      operationId: callComponentStatic
      description: 'Execute a single component outside of a running flow ("static call"). This is the mechanism used

        internally to resolve dynamic dropdown options in the Inspector, and by the AI Agent to invoke its

        tools. Either `componentId` or `callerId` is required; the user must own the flow that contains

        that component instance.'
      parameters:
      - name: vendor
        in: path
        required: true
        schema:
          type: string
        example: appmixer
      - name: service
        in: path
        required: true
        schema:
          type: string
        example: twilio
      - name: module
        in: path
        required: true
        schema:
          type: string
        example: sms
      - name: component
        in: path
        required: true
        schema:
          type: string
        example: ListFromNumbers
      - name: outPort
        in: query
        description: The output port whose result should be returned.
        schema:
          type: string
        example: numbers
      - name: ignoreAuth
        in: query
        description: When `true`, skip authentication (account resolution) for the component.
        schema:
          type: string
          enum:
          - 'true'
          - 'false'
      - name: silentAuth
        in: query
        description: When `true`, try to authenticate but do not fail when no token is found.
        schema:
          type: string
          enum:
          - 'true'
          - 'false'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ComponentStaticCallRequest'
            example:
              componentId: e25dc901-f92a-46a2-8d29-2573d4ad65e5
      responses:
        '200':
          description: The output of the component on the requested output port. The shape depends on the component.
          content:
            application/json:
              schema: {}
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  parameters:
    AppCompressIconsQuery:
      name: compressIcons
      in: query
      description: Default `true`. When `true`, the `icon` field is returned as a URL; set to `false` to return the original inline base64 icon.
      schema:
        type: boolean
        default: true
    AppIgnoreACLQuery:
      name: ignoreACL
      in: query
      description: Admin only. When `true`, returns every item regardless of ACL. Non-admin users receive a `400` error.
      schema:
        type: boolean
  responses:
    Unauthorized:
      description: The access token is missing, invalid or expired.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: The requested resource does not exist.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Forbidden:
      description: The user does not have the permission (or scope) required for this operation.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    BadRequest:
      description: The request is invalid, for example it failed payload or query validation.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    ComponentManifest:
      type: object
      description: Component manifest (`component.json`). See the component manifest documentation for all fields.
      properties:
        name:
          type: string
          examples:
          - appmixer.twilio.sms.SendSMS
        label:
          type: string
        author:
          type: string
        description:
          type: string
        icon:
          type: string
        auth:
          type: object
          additionalProperties: true
        webhook:
          type: boolean
        webhookAsync:
          type: boolean
        private:
          type: boolean
        inPorts:
          type: array
          items:
            type: object
            additionalProperties: true
        outPorts:
          type: array
          items:
            type: object
            additionalProperties: true
        properties:
          type: object
          additionalProperties: true
      additionalProperties: true
    ComponentUploadTicket:
      type: object
      properties:
        ticket:
          type: string
          format: uuid
      required:
      - ticket
    Error:
      type: object
      description: Error response.
      properties:
        statusCode:
          type: integer
          example: 404
        error:
          type: string
          example: Not Found
        message:
          type: string
          example: Flow not found.
      required:
      - statusCode
      - error
    ComponentStaticCallRequest:
      type: object
      description: Either `componentId` or `callerId` is required.
      properties:
        componentId:
          type: string
          description: ID of a component instance (used to resolve the connected account).
        callerId:
          type: string
          description: ID of the calling component instance.
        properties:
          type: object
          additionalProperties: true
          description: Component properties.
        messages:
          type: object
          additionalProperties: true
          description: Input messages keyed by input port.
        log:
          type: boolean
          default: false
          description: 'When `true`, the call is recorded in the execution logs (marked with `staticCall: true`) and surfaces in the Logs API and the Insights UI. Primarily used for AI Agent tools observability.'
        correlationId:
          type: string
          description: Optional correlation ID stored in the log record when `log` is `true`.
        testRunId:
          type: string
          description: Marks the log records as produced by a flow test run.
      additionalProperties: true
    AppBundle:
      type: object
      properties:
        version:
          type: string
          examples:
          - 1.2.0
    App:
      type: object
      description: An app (module, or service without modules) as defined in its `module.json`/`service.json`.
      properties:
        name:
          type: string
          examples:
          - appmixer.asana
        label:
          type: string
        category:
          type: string
        description:
          type: string
        icon:
          type: string
          description: Icon URL (default) or inline data URI (with `compressIcons=false`).
      additionalProperties: true
    ComponentUploadStatus:
      type: object
      properties:
        finished:
          type: string
          format: date-time
          description: Present when the upload finished.
        err:
          type: string
          description: Error message when the upload failed.
        data:
          description: Error details, e.g. schema validation errors.
      additionalProperties: true
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: User access token obtained from `POST /user/auth`.
externalDocs:
  description: Appmixer documentation
  url: https://docs.appmixer.com
x-provenance:
  method: harvested
  publisher: Appmixer
  source: https://4113719406-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzU8KYStPfR8N1iZXsgad%2Fuploads%2Fgit-blob-6433572bd8011e652aa91642ad387d4ab08bc48b%2Fappmixer-openapi.yaml?alt=media
  note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
    stamped by stamp-openapi-provenance.py (roadmap#793)