Smokeball Plugins API

The Plugins API from Smokeball — 5 operation(s) for plugins.

Operations 10

GET /plugins/{pluginId} Get a plugin #
PUT /plugins/{pluginId} Update existing plugin #
DELETE /plugins/{pluginId} Delete existing plugin #
GET /plugins Get plugins #
POST /plugins Create a new plugin #
POST /plugins/{pluginId}/url Request plugin URL #
GET /plugins/{pluginId}/subscriptions/{id} Get a plugin subscription #
DELETE /plugins/{pluginId}/subscriptions/{id} Unsubscribes account from plugin #
GET /plugins/{pluginId}/subscriptions Get plugin subscriptions #
POST /plugins/{pluginId}/subscriptions Subscribe account to plugin #

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/smokeball-plugins-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

smokeball-plugins-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Smokeball Activity Codes Plugins API
  version: '1.0'
  description: REST API for integrating with Smokeball legal practice management software. Supports matters, contacts, documents, time entries, billing, trust accounting, staff, webhooks, and law firm workflows across US, AU, and UK regions. Uses OAuth 2.0 (client credentials) authentication.
  contact:
    name: Smokeball Developer Support
    url: https://docs.smokeball.com/docs/api-docs/1e13a13124aee-introduction
  x-api-id: smokeball
  x-audience: external-public
servers:
- url: https://api.smokeball.com
- url: https://api.smokeball.com.au
- url: https://api.smokeball.co.uk
- url: https://stagingapi.smokeball.com
- url: https://stagingapi.smokeball.com.au
- url: https://stagingapi.smokeball.co.uk
security:
- api-key: []
  token: []
tags:
- name: Plugins
paths:
  /plugins/{pluginId}:
    get:
      tags:
      - Plugins
      summary: Get a plugin
      description: Returns the plugin.
      operationId: GetPlugin
      parameters:
      - name: pluginId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: When request is successful. Returns a 'Plugin' object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Plugin'
        '404':
          description: When plugin with specified id does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
    put:
      tags:
      - Plugins
      summary: Update existing plugin
      description: Updates a plugin with the specified plugin details.
      operationId: UpdatePluginAsync
      parameters:
      - name: pluginId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json-patch+json:
            schema:
              allOf:
              - $ref: '#/components/schemas/PluginDto'
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/PluginDto'
          application/*+json:
            schema:
              allOf:
              - $ref: '#/components/schemas/PluginDto'
      responses:
        '202':
          description: When request is accepted. Returns a 'Link' object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Link'
        '400':
          description: When an unsupported request is made.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '403':
          description: When the authenticated account does not have access to update plugins.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '404':
          description: When plugin with specified id does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
    delete:
      tags:
      - Plugins
      summary: Delete existing plugin
      description: Deletes an existing plugin by id.
      operationId: DeletePluginAsync
      parameters:
      - name: pluginId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '202':
          description: When request is accepted. Returns a 'Link' object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Link'
        '400':
          description: When an unsupported request is made.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '403':
          description: When the authenticated account does not have access to delete plugins.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '404':
          description: When plugin with specified id does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
  /plugins:
    get:
      tags:
      - Plugins
      summary: Get plugins
      description: Returns existing plugins.
      operationId: GetPlugins
      parameters:
      - name: Offset
        in: query
        schema:
          maximum: 2147483647
          minimum: 0
          type: integer
          format: int32
      - name: Limit
        in: query
        schema:
          maximum: 500
          minimum: 1
          type: integer
          format: int32
      responses:
        '200':
          description: When request is successful. Returns a paged collection of 'Plugin' objects.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PluginPagedCollection'
    post:
      tags:
      - Plugins
      summary: Create a new plugin
      description: Creates a new plugin with the specified plugin details.
      operationId: CreatePluginAsync
      requestBody:
        content:
          application/json-patch+json:
            schema:
              allOf:
              - $ref: '#/components/schemas/PluginDto'
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/PluginDto'
          application/*+json:
            schema:
              allOf:
              - $ref: '#/components/schemas/PluginDto'
      responses:
        '202':
          description: When request is accepted. Returns a 'Link' object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Link'
        '400':
          description: When an unsupported request is made.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '403':
          description: When the authenticated account does not have access to create plugins.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '404':
          description: When required resources are not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
  /plugins/{pluginId}/url:
    post:
      tags:
      - Plugins
      summary: Request plugin URL
      description: 'Requests a secure URL from the plugin''s endpoint for invoking the plugin.

        Accepts additional key/value pairs to pass to the plugin endpoint.

        Reserved keys (AccountId, UserId, UserEmail, MatterId, AppId, EmbedToken) cannot be included in AdditionalData.'
      operationId: RequestPluginUrlAsync
      parameters:
      - name: pluginId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json-patch+json:
            schema:
              allOf:
              - $ref: '#/components/schemas/PluginUrlRequestDto'
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/PluginUrlRequestDto'
          application/*+json:
            schema:
              allOf:
              - $ref: '#/components/schemas/PluginUrlRequestDto'
      responses:
        '200':
          description: When request is successful. Returns the plugin URL.
          content:
            application/json:
              schema:
                type: string
        '400':
          description: When plugin does not return a valid URL or reserved keys are used.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '401':
          description: When request is not authenticated with client credentials.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '404':
          description: When plugin with specified id does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
  /plugins/{pluginId}/subscriptions/{id}:
    get:
      tags:
      - Plugins
      summary: Get a plugin subscription
      description: Returns the plugin subscription.
      operationId: GetPluginSubscription
      parameters:
      - name: pluginId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: When request is successful. Returns a 'PluginSubscription' object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PluginSubscription'
        '400':
          description: When an unsupported request is made.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '403':
          description: When the authenticated account does not have access to the plugin subscription.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '404':
          description: When plugin subscription with specified id does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
    delete:
      tags:
      - Plugins
      summary: Unsubscribes account from plugin
      description: Unsubscribes an account from the specified plugin.
      operationId: DeletePluginSubscriptionAsync
      parameters:
      - name: pluginId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '202':
          description: When request is accepted. Returns a 'Link' object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Link'
        '400':
          description: When an unsupported request is made.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '403':
          description: When the authenticated account does not have access to unsubscribe from plugins.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '404':
          description: When plugin subscription with specified id does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
  /plugins/{pluginId}/subscriptions:
    get:
      tags:
      - Plugins
      summary: Get plugin subscriptions
      description: Returns plugin subscriptions for the account.
      operationId: GetPluginSubscriptions
      parameters:
      - name: pluginId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      - name: Offset
        in: query
        schema:
          maximum: 2147483647
          minimum: 0
          type: integer
          format: int32
      - name: Limit
        in: query
        schema:
          maximum: 500
          minimum: 1
          type: integer
          format: int32
      responses:
        '200':
          description: When request is successful. Returns a paged collection of 'PluginSubscription' objects.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PluginSubscriptionPagedCollection'
        '400':
          description: When an unsupported request is made.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '403':
          description: When the authenticated account does not have access to plugin subscriptions.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '404':
          description: When required resources are not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
    post:
      tags:
      - Plugins
      summary: Subscribe account to plugin
      description: Subscribes an account with the specified plugin.
      operationId: CreatePluginSubscriptionAsync
      parameters:
      - name: pluginId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '202':
          description: When request is accepted. Returns a 'Link' object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Link'
        '400':
          description: When an unsupported request is made.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '403':
          description: When the authenticated account does not have access to subscribe to plugins.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '404':
          description: When plugin with specified id does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
components:
  schemas:
    PluginAttributes:
      type: object
      properties:
        text:
          type:
          - string
          - 'null'
          description: The text to be rendered on the plugin component (where applicable).
        icon:
          type:
          - string
          - 'null'
          description: 'The Icon to be rendered on the plugin component (where applicable).

            Refer to documentation for a full list of icons.'
        color:
          type:
          - string
          - 'null'
          description: The hex color code to be rendered on the plugin component (where applicable).
        tooltip:
          type:
          - string
          - 'null'
          description: 'Optional: The tooltip to display on component hover (where applicable).'
        page:
          allOf:
          - $ref: '#/components/schemas/PluginPage'
          description: Page attributes for the plugin (where applicable).
      additionalProperties: false
    PluginApplication:
      enum:
      - Native
      - Web
      - Archie
      type: string
      description: The application that the plugin should be rendered in.
    PluginVersion:
      type: object
      properties:
        id:
          type:
          - string
          - 'null'
          description: Unique identifier of the plugin version.
        pluginId:
          type:
          - string
          - 'null'
          description: The plugin id this version is associated to.
        versionNumber:
          type: integer
          description: The associated version number.
          format: int32
        name:
          type:
          - string
          - 'null'
          description: The name of the plugin.
        description:
          type:
          - string
          - 'null'
          description: A description of the plugin.
        placement:
          type:
          - string
          - 'null'
          description: 'A placement key representing where the plugin should be rendered in the UI.

            Placement key must correspond to the type of the plugin.

            Refer to documentation for valid placement keys.'
        requestEndpointUrl:
          type:
          - string
          - 'null'
          description: 'The url that is called to request the plugin endpoint.


            When a user views a plugin, we request the url to view securely through your backend.


            Matter and user information is passed to the endpoint through POST body, and the endpoint is expected to return a JSON object containing a url field.

            The plugin will then load the URL and display it to the user.'
        attributes:
          allOf:
          - $ref: '#/components/schemas/PluginAttributes'
          description: Visual attributes associated to this plugin.
        availability:
          allOf:
          - $ref: '#/components/schemas/PluginAvailability'
          description: 'Optional: Settings for determining the availability of a plugin.'
        createdDate:
          type: string
          description: Plugin version created date in UTC
          format: date-time
          example: '2020-02-15T00:00:00Z'
        lastUpdatedDate:
          type: string
          description: Plugin version last updated date in UTC
          format: date-time
          example: '2020-02-15T00:00:00Z'
      additionalProperties: false
    PluginDto:
      type: object
      properties:
        externalId:
          type:
          - string
          - 'null'
          description: Optional id provided by the external system that owns this plugin.
        application:
          allOf:
          - $ref: '#/components/schemas/PluginApplication'
          description: The application that the plugin should be rendered in.
        type:
          allOf:
          - $ref: '#/components/schemas/PluginType'
          description: The type of component the plugin should represent.
        version:
          allOf:
          - $ref: '#/components/schemas/PluginVersionDto'
          description: Current version of the plugin.
        key:
          type:
          - string
          - 'null'
          description: 'Signing key of the plugin to verify integrity of requesting secure URLs.

            Only available to set on Plugin creation.'
        additionalData:
          type:
          - object
          - 'null'
          additionalProperties: {}
          description: Collection of KeyValuePair(string, object) to update Plugin meta data.
      additionalProperties: false
    PluginType:
      enum:
      - Button
      - Tab
      type: string
      description: The type of component the plugin should represent.
    PluginUrlRequestDto:
      type: object
      properties:
        matterId:
          type:
          - string
          - 'null'
          description: The matter id associated with the request, if applicable.
          example: 0c5a2296-9e02-4c58-bd14-b7467d4c9bcb
        additionalData:
          type:
          - object
          - 'null'
          additionalProperties: {}
          description: 'Additional key/value pairs to pass to the plugin endpoint.

            Reserved keys (AccountId, UserId, UserEmail, MatterId) will be rejected.'
      additionalProperties: false
    PluginPagedCollection:
      type: object
      properties:
        id:
          type:
          - string
          - 'null'
        href:
          type:
          - string
          - 'null'
        relation:
          type:
          - string
          - 'null'
        method:
          type:
          - string
          - 'null'
          default: GET
        self:
          allOf:
          - $ref: '#/components/schemas/Link'
        value:
          type:
          - array
          - 'null'
          items:
            $ref: '#/components/schemas/Plugin'
        offset:
          type:
          - integer
          - 'null'
          format: int32
        limit:
          type:
          - integer
          - 'null'
          format: int32
        size:
          type: integer
          format: int64
        first:
          allOf:
          - $ref: '#/components/schemas/Link'
        previous:
          allOf:
          - $ref: '#/components/schemas/Link'
        next:
          allOf:
          - $ref: '#/components/schemas/Link'
        last:
          allOf:
          - $ref: '#/components/schemas/Link'
      additionalProperties: false
    Link:
      type: object
      properties:
        id:
          type:
          - string
          - 'null'
        href:
          type:
          - string
          - 'null'
        relation:
          type:
          - string
          - 'null'
        method:
          type:
          - string
          - 'null'
          default: GET
      additionalProperties: false
    PluginVersionDto:
      type: object
      properties:
        name:
          type:
          - string
          - 'null'
          description: The name of the plugin.
        description:
          type:
          - string
          - 'null'
          description: A description of the plugin.
        placement:
          type:
          - string
          - 'null'
          description: 'A placement key representing where the plugin should be rendered in the UI.


            Placement key must correspond to the type of the plugin.


            Refer to documentation for valid placement keys.'
        requestEndpointUrl:
          type:
          - string
          - 'null'
          description: 'The url that is called to request the plugin endpoint.


            When a user views a plugin, we request the url to view securely through your backend.


            Matter and user information is passed to the endpoint through POST body, and the endpoint is expected to return a JSON object containing a url field.

            The plugin will then load the URL and display it to the user.'
        attributes:
          allOf:
          - $ref: '#/components/schemas/PluginAttributes'
          description: Visual attributes associated to this plugin.
        availability:
          allOf:
          - $ref: '#/components/schemas/PluginAvailability'
          description: Optional settings for determining the availability of a plugin.
      additionalProperties: false
    PluginSubscriptionPagedCollection:
      type: object
      properties:
        id:
          type:
          - string
          - 'null'
        href:
          type:
          - string
          - 'null'
        relation:
          type:
          - string
          - 'null'
        method:
          type:
          - string
          - 'null'
          default: GET
        self:
          allOf:
          - $ref: '#/components/schemas/Link'
        value:
          type:
          - array
          - 'null'
          items:
            $ref: '#/components/schemas/PluginSubscription'
        offset:
          type:
          - integer
          - 'null'
          format: int32
        limit:
          type:
          - integer
          - 'null'
          format: int32
        size:
          type: integer
          format: int64
        first:
          allOf:
          - $ref: '#/components/schemas/Link'
        previous:
          allOf:
          - $ref: '#/components/schemas/Link'
        next:
          allOf:
          - $ref: '#/components/schemas/Link'
        last:
          allOf:
          - $ref: '#/components/schemas/Link'
      additionalProperties: false
    Plugin:
      type: object
      properties:
        id:
          type:
          - string
          - 'null'
        href:
          type:
          - string
          - 'null'
        relation:
          type:
          - string
          - 'null'
        method:
          type:
          - string
          - 'null'
          default: GET
        self:
          allOf:
          - $ref: '#/components/schemas/Link'
        externalId:
          type:
          - string
          - 'null'
          description: Optional id provided by the external system that owns this plugin.
        application:
          allOf:
          - $ref: '#/components/schemas/PluginApplication'
          description: The application that the plugin should be rendered in.
        type:
          allOf:
          - $ref: '#/components/schemas/PluginType'
          description: The type of component the plugin should represent.
        version:
          allOf:
          - $ref: '#/components/schemas/PluginVersion'
          description: Current version of the plugin.
        lastUpdated:
          type: integer
          description: Last updated timestamp.
          format: int64
          example: 637847425252027400
        createdDate:
          type: string
          description: Plugin created date in UTC.
          format: date-time
          example: '2020-02-15T00:00:00Z'
        lastUpdatedDate:
          type: string
          description: Plugin last updated date in UTC.
          format: date-time
          example: '2020-02-15T00:00:00Z'
        key:
          type:
          - string
          - 'null'
          description: Signing key of the plugin to verify integrity of requesting secure URLs.
        additionalData:
          type:
          - object
          - 'null'
          additionalProperties: {}
          description: Collection of plugin meta data as KeyValuePair(string, object).
      additionalProperties: false
    PluginAvailability:
      type: object
      properties:
        matterTypeIds:
          type:
          - array
          - 'null'
          items:
            type: string
          description: 'Optional matter types applicable for the plugin.


            Plugin is applicable for all matter types if this is left empty.'
      additionalProperties: false
    ProblemDetails:
      type: object
      properties:
        type:
          type:
          - string
          - 'null'
        title:
          type:
          - string
          - 'null'
        status:
          type:
          - integer
          - 'null'
          format: int32
        detail:
          type:
          - string
          - 'null'
        instance:
          type:
          - string
          - 'null'
      additionalProperties: {}
    PluginSubscription:
      type: object
      properties:
        href:
          type:
          - string
          - 'null'
        relation:
          type:
          - string
          - 'null'
        method:
          type:
          - string
          - 'null'
          default: GET
        self:
          allOf:
          - $ref: '#/components/schemas/Link'
        id:
          type:
          - string
          - 'null'
          description: Unique identifier of the subscription.
          example: b471682e-fa17-4e46-b7fe-9b2b8fdcb3c2
        pluginId:
          type:
          - string
          - 'null'
          description: Unique identifier of the plugin.
          example: b471682e-fa17-4e46-b7fe-9b2b8fdcb3c2
        pluginVersionId:
          type:
          - string
          - 'null'
          description: Unique identifier of the plugin version. Can be null.
          example: b471682e-fa17-4e46-b7fe-9b2b8fdcb3c2
        createdDate:
          type: string
          description: Plugin subscription created date in UTC.
          format: date-time
          example: '2020-02-15T00:00:00Z'
        lastUpdatedDate:
          type: string
          description: Plugin subscription last updated date in UTC.
          format: date-time
          example: '2020-02-15T00:00:00Z'
        isDisabled:
          type: boolean
          description: True when the subscription is disabled (the plugin will not function for the user).
      additionalProperties: false
    PluginPage:
      type: object
      properties:
        title:
          type:
          - string
          - 'null'
          description: 'Optional: The title of the page rendered by the plugin (where applicable).

            If not specified, the name of the plugin will be used.'
        width:
          type: integer
          description: 'Optional: The width of the page rendered by the plugin (where applicable).

            If not specified, a default width will be used.'
          format: int32
        height:
          type: integer
          description: 'Optional: The height of the page rendered by the plugin (where applicable).

            If not specified, a default width will be used.'
          format: int32
        useDefaultBrowser:
          type: boolean
          description: 'Optional: Override browser behavior.

            When true, loads the endpoint in the internal browser (where applicable).'
      additionalProperties: false
  securitySchemes:
    api-key:
      type: apiKey
      name: x-api-key
      in: header
    token:
      type: apiKey
      name: Authorization
      in: header
      x-amazon-apigateway-authtype: cognito_user_pools