Elastic Stack (ELK Stack) Extensions API

The Extensions API from Elastic Stack (ELK Stack) — 2 operation(s) for extensions.

GitHub OpenAPI

Operations 6

Each operation below carries the questions people ask an LLM about it and the instructions they give an agent to run it. Generated by API Evangelist overlay

GET /deployments/extensions List available deployment extensions · List Extensions #
Ask an LLM
“Which plugins and bundles have been registered as extensions for my deployments?”
“What extensions are available to add to an Elastic Cloud deployment?”
Tell an agent
List all the deployment extensions available to me.
Show every registered plugin and bundle extension.
POST /deployments/extensions Register a new deployment extension · Create an extension #
Ask an LLM
“How do I register a custom plugin or bundle for my Elasticsearch deployments?”
“Can I point a new extension at a download URL instead of uploading a file?”
Tell an agent
Create a {extension_type} extension named {name} for Elasticsearch version {version}.
Register extension {name} ({extension_type}, version {version}) downloaded from {download_url}.
GET /deployments/extensions/{extension_id} Get a deployment extension · Get Extension #
Ask an LLM
“How do I see the details of one extension I registered?”
“Can I find out which deployments are using a particular extension?”
Tell an agent
Get extension {extension_id}.
Show extension {extension_id} and, with include_deployments set to {include_deployments}, the deployments using it.
POST /deployments/extensions/{extension_id} Update an extension's details · Update Extension #
Ask an LLM
“Can I change the name, description or download URL of an existing extension?”
“How do I bump the Elasticsearch version an extension targets?”
Tell an agent
Update extension {extension_id} to name {name}, type {extension_type}, version {version}.
Change the download URL of extension {extension_id} to {download_url}, keeping name {name}, type {extension_type} and version {version}.
PUT /deployments/extensions/{extension_id} Upload the archive for an extension · Uploads the Extension #
Ask an LLM
“How do I upload the zip file for an extension I already created?”
“What file format does an extension archive upload expect?”
Tell an agent
Upload the zip {file} as the archive for extension {extension_id}.
Attach archive {file} to extension {extension_id}.
DELETE /deployments/extensions/{extension_id} Delete a deployment extension · Delete Extension #
Ask an LLM
“How do I remove an extension I no longer need?”
“Can I delete a custom plugin extension from Elastic Cloud?”
Tell an agent destructive · confirm first
Delete extension {extension_id}.
Remove the custom extension {extension_id} permanently.

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/elk-stack:elk-stack-extensions-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

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

elk-stack-extensions-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  version: '1'
  title: Elastic Cloud Enterprise Extensions API
  termsOfService: ''
servers:
- url: https://{{hostname}}/api/v1
security:
- basicAuth: []
- apiKey: []
tags:
- name: Extensions
paths:
  /deployments/extensions:
    get:
      tags:
      - Extensions
      summary: List Extensions
      description: Retrieves all of the available extensions.
      operationId: list-extensions
      responses:
        '200':
          description: The extensions that are available
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Extensions'
      x-doc:
        tag: Deployments - Extensions
    post:
      tags:
      - Extensions
      summary: Create an extension
      description: 'Creates the extension.

        The extensions API supports two types of usage patterns.

        A). Specify a `download_url`, http or https URL, where the extension is currently hosted. This will result in extension being copied to elastic repository.

        B). Create only the extension metadata using the `POST` endpoint and then use `PUT` to upload the extension file. Leave the `download_url` unspecified in this case.'
      operationId: create-extension
      responses:
        '201':
          description: The extension that was just created.
          headers:
            x-cloud-resource-version:
              description: The resource version, which is used to avoid update conflicts with concurrent operations
              schema:
                type: string
            x-cloud-resource-created:
              description: The date-time when the resource was created (ISO format relative to UTC)
              schema:
                type: string
            x-cloud-resource-last-modified:
              description: The date-time when the resource was last modified (ISO format relative to UTC)
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Extension'
        '404':
          description: 'Your current session does not have a user id associated with it. (code: `extensions.no_user_id`)'
          headers:
            x-cloud-error-codes:
              description: The error codes associated with the response
              schema:
                type: string
                enum:
                - extensions.no_user_id
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicFailedReply'
        '400':
          description: 'Could not download the extension from the specified URL. (code: `extensions.request_execution_failed`)'
          headers:
            x-cloud-error-codes:
              description: The error codes associated with the response
              schema:
                type: string
                enum:
                - extensions.request_execution_failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicFailedReply'
        '409':
          description: 'An extension already exists with the generated id. Please try again. (code: `extensions.id_already_exists`)'
          headers:
            x-cloud-error-codes:
              description: The error codes associated with the response
              schema:
                type: string
                enum:
                - extensions.id_already_exists
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicFailedReply'
      x-doc:
        tag: Deployments - Extensions
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateExtensionRequest'
        description: the data that creates the extension
        required: true
  /deployments/extensions/{extension_id}:
    get:
      tags:
      - Extensions
      summary: Get Extension
      description: Retrieves an extension.
      operationId: get-extension
      parameters:
      - name: extension_id
        in: path
        description: Id of an extension
        required: true
        schema:
          type: string
      - name: include_deployments
        in: query
        description: Include deployments referencing this extension. Up to only 10000 deployments will be included.
        required: false
        schema:
          type: boolean
          default: false
      responses:
        '200':
          description: The Extension
          headers:
            x-cloud-resource-version:
              description: The resource version, which is used to avoid update conflicts with concurrent operations
              schema:
                type: string
            x-cloud-resource-created:
              description: The date-time when the resource was created (ISO format relative to UTC)
              schema:
                type: string
            x-cloud-resource-last-modified:
              description: The date-time when the resource was last modified (ISO format relative to UTC)
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Extension'
        '404':
          description: 'The extension requested does not exist. (code: `extensions.not_found`)'
          headers:
            x-cloud-error-codes:
              description: The error codes associated with the response
              schema:
                type: string
                enum:
                - extensions.not_found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicFailedReply'
      x-doc:
        tag: Deployments - Extensions
    post:
      tags:
      - Extensions
      summary: Update Extension
      description: Updates an extension.
      operationId: update-extension
      parameters:
      - name: extension_id
        in: path
        description: Id of an extension
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Extension updated successfully.
          headers:
            x-cloud-resource-version:
              description: The resource version, which is used to avoid update conflicts with concurrent operations
              schema:
                type: string
            x-cloud-resource-created:
              description: The date-time when the resource was created (ISO format relative to UTC)
              schema:
                type: string
            x-cloud-resource-last-modified:
              description: The date-time when the resource was last modified (ISO format relative to UTC)
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Extension'
        '401':
          description: '* The extension does not belong to you. (code: `extensions.unauthorised`)

            * Your current session does not have a user id associated with it. (code: `extensions.no_user_id`)'
          headers:
            x-cloud-error-codes:
              description: The error codes associated with the response
              schema:
                type: string
                enum:
                - extensions.unauthorised
                - extensions.no_user_id
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicFailedReply'
        '404':
          description: 'The extension you want does not exist. (code: `extensions.not_found`)'
          headers:
            x-cloud-error-codes:
              description: The error codes associated with the response
              schema:
                type: string
                enum:
                - extensions.not_found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicFailedReply'
        '400':
          description: 'Could not download the extension from the specified URL. (code: `extensions.request_execution_failed`)'
          headers:
            x-cloud-error-codes:
              description: The error codes associated with the response
              schema:
                type: string
                enum:
                - extensions.request_execution_failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicFailedReply'
        '409':
          description: 'The version you sent does not match the persisted version. (code: `extensions.version_conflict`)'
          headers:
            x-cloud-error-codes:
              description: The error codes associated with the response
              schema:
                type: string
                enum:
                - extensions.version_conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicFailedReply'
      x-doc:
        tag: Deployments - Extensions
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateExtensionRequest'
        description: The extension update data.
        required: true
    put:
      tags:
      - Extensions
      summary: Uploads the Extension
      description: Uploads archive for an extension.
      operationId: upload-extension
      parameters:
      - name: extension_id
        in: path
        description: Id of an extension
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Archive uploaded successfully.
          headers:
            x-cloud-resource-version:
              description: The resource version, which is used to avoid update conflicts with concurrent operations
              schema:
                type: string
            x-cloud-resource-created:
              description: The date-time when the resource was created (ISO format relative to UTC)
              schema:
                type: string
            x-cloud-resource-last-modified:
              description: The date-time when the resource was last modified (ISO format relative to UTC)
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Extension'
        '401':
          description: '* The extension does not belong to you. (code: `extensions.unauthorised`)

            * Your current session does not have a user id associated with it. (code: `extensions.no_user_id`)'
          headers:
            x-cloud-error-codes:
              description: The error codes associated with the response
              schema:
                type: string
                enum:
                - extensions.unauthorised
                - extensions.no_user_id
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicFailedReply'
        '404':
          description: 'The extension you want does not exist. (code: `extensions.not_found`)'
          headers:
            x-cloud-error-codes:
              description: The error codes associated with the response
              schema:
                type: string
                enum:
                - extensions.not_found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicFailedReply'
        '400':
          description: 'Could not accept the extensions file. (code: `extensions.request_execution_failed`)'
          headers:
            x-cloud-error-codes:
              description: The error codes associated with the response
              schema:
                type: string
                enum:
                - extensions.request_execution_failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicFailedReply'
      x-doc:
        tag: Deployments - Extensions
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  description: Zip file that contains the extension
                  format: binary
              required:
              - file
    delete:
      tags:
      - Extensions
      summary: Delete Extension
      description: Deletes a Extension.
      operationId: delete-extension
      parameters:
      - name: extension_id
        in: path
        description: Id of an extension
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Extension deleted successfully.
          headers:
            x-cloud-resource-version:
              description: The resource version, which is used to avoid update conflicts with concurrent operations
              schema:
                type: string
            x-cloud-resource-created:
              description: The date-time when the resource was created (ISO format relative to UTC)
              schema:
                type: string
            x-cloud-resource-last-modified:
              description: The date-time when the resource was last modified (ISO format relative to UTC)
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmptyResponse'
        '401':
          description: '* The extension does not belong to you. (code: `extensions.unauthorised`)

            * Your current session does not have a user id associated with it. (code: `extensions.no_user_id`)'
          headers:
            x-cloud-error-codes:
              description: The error codes associated with the response
              schema:
                type: string
                enum:
                - extensions.unauthorised
                - extensions.no_user_id
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicFailedReply'
        '404':
          description: 'The extension requested does not exist. (code: `extensions.not_found`)'
          headers:
            x-cloud-error-codes:
              description: The error codes associated with the response
              schema:
                type: string
                enum:
                - extensions.not_found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicFailedReply'
        '409':
          description: 'The version you sent does not match the persisted version. (code: `extensions.version_conflict`)'
          headers:
            x-cloud-error-codes:
              description: The error codes associated with the response
              schema:
                type: string
                enum:
                - extensions.version_conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicFailedReply'
      x-doc:
        tag: Deployments - Extensions
components:
  schemas:
    CreateExtensionRequest:
      type: object
      required:
      - extension_type
      - name
      - version
      properties:
        name:
          type: string
          description: The extension name. Only ASCII alphanumeric and [_.-] characters allowed
        description:
          type: string
          description: The extension description.
        download_url:
          type: string
          description: The URL to download the extension archive.
        extension_type:
          type: string
          description: The extension type.
          enum:
          - plugin
          - bundle
        version:
          type: string
          description: The Elasticsearch version.
      description: The body of a request to create a new extension
    BasicFailedReplyElement:
      type: object
      required:
      - code
      - message
      properties:
        code:
          type: string
          description: A structured code representing the error type that occurred
        message:
          type: string
          description: A human readable message describing the error that occurred
        fields:
          type: array
          description: If the error can be tied to a specific field or fields in the user request, this lists those fields
          items:
            type: string
    ExtensionFileMetadata:
      type: object
      properties:
        last_modified_date:
          type: string
          format: date-time
          description: The date and time the extension was last modified.
        size:
          type: integer
          format: int64
          description: The extension file size in bytes.
        url:
          type: string
          format: uri
          description: The temporary URL to download the extension file. Usable for verification.
    Extension:
      type: object
      required:
      - extension_type
      - id
      - name
      - url
      - version
      properties:
        id:
          type: string
          description: The extension ID
        name:
          type: string
          description: The extension name.
        description:
          type: string
          description: The extension description.
        url:
          type: string
          description: The extension URL to be used in the plan.
        download_url:
          type: string
          description: The download URL specified during extension creation.
        extension_type:
          type: string
          description: The extension type.
          enum:
          - plugin
          - bundle
        version:
          type: string
          description: The Elasticsearch version.
        deployments:
          type: array
          description: List of deployments using this extension. Up to only 10000 deployments will be included in the list.
          items:
            type: string
        file_metadata:
          description: The extension file metadata.
          $ref: '#/components/schemas/ExtensionFileMetadata'
      description: An API extension. It represents clusters' plugins and bundles
    UpdateExtensionRequest:
      type: object
      required:
      - extension_type
      - name
      - version
      properties:
        name:
          type: string
          description: The extension name.
        description:
          type: string
          description: The extension description.
        download_url:
          type: string
          description: The URL to download the extension archive.
        extension_type:
          type: string
          description: The extension type.
          enum:
          - plugin
          - bundle
        version:
          type: string
          description: The Elasticsearch version.
      description: The body of a request to update an extension
    BasicFailedReply:
      type: object
      required:
      - errors
      properties:
        errors:
          type: array
          description: A list of errors that occurred in the failing request
          items:
            $ref: '#/components/schemas/BasicFailedReplyElement'
    EmptyResponse:
      type: object
    Extensions:
      type: object
      required:
      - extensions
      properties:
        extensions:
          type: array
          description: The list of extensions.
          items:
            $ref: '#/components/schemas/Extension'
      description: A collection of extensions
  securitySchemes:
    apiKey:
      type: apiKey
      name: Authorization
      in: header
    basicAuth:
      type: http
      scheme: basic
x-elastic:
  curl:
    auth: '-H "Authorization: ApiKey $ECE_API_KEY"'