> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.getunleash.io/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.getunleash.io/_mcp/server.

# [BETA] Get all addons for a project

GET https://app.unleash-instance.example.com/api/admin/projects/{projectId}/addons

**[BETA]** This API is in beta state, which means it may change or be removed in the future.

Retrieve the addons that belong to this project, along with the providers that are available on this Unleash instance.

Reference: https://docs.getunleash.io/api/get-addons-for-project

## Authentication

- `Authorization` header (required) — API key needed to access this API
- `Authorization` header (bearer token, required) — API key needed to access this API, in Bearer token format

## Request

### Path parameters

- `projectId` (string, required)

## Response

### 200

addonsSchema

- `addons` (list of addonSchema, required) — All the addons that exist on this instance of Unleash.
- `providers` (list of addonTypeSchema, required) — A list of all available addon providers, along with their parameters and descriptions.

## Errors

### 401 Unauthorized Error

Authorization information is missing or invalid. Provide a valid API token as the `authorization` header, e.g. `authorization:*.*.my-admin-token`.

- `id` (string, optional) — The ID of the error instance
- `name` (string, optional) — The name of the error kind
- `message` (string, optional) — A description of what went wrong.

### 403 Forbidden Error

The provided user credentials are valid, but the user does not have the necessary permissions to perform this operation

- `id` (string, optional) — The ID of the error instance
- `name` (string, optional) — The name of the error kind
- `message` (string, optional) — A description of what went wrong.

### 404 Not Found Error

The requested resource was not found.

- `id` (string, optional) — The ID of the error instance
- `name` (string, optional) — The name of the error kind
- `message` (string, optional) — A description of what went wrong.

## Types

### addonSchema

An [addon](https://docs.getunleash.io/integrate) instance description. Contains data about what kind of provider it uses, whether it's enabled or not, what events it listens for, and more.

- `id` (integer, required) — The addon's unique identifier.
- `provider` (string, required) — The addon provider, such as "webhook" or "slack".
- `description` (string, required, nullable) — A description of the addon. `null` if no description exists.
- `enabled` (boolean, required) — Whether the addon is enabled or not.
- `parameters` (map from string to any, required) — Parameters for the addon provider. This object has different required and optional properties depending on the provider you choose.
- `events` (list of string, required) — The event types that trigger this specific addon.
- `projects` (list of string, optional) — The projects that this addon listens to events from. An empty list means it listens to events from **all** projects.
- `environments` (list of string, optional) — The list of environments that this addon listens to events from. An empty list means it listens to events from **all** environments.

### addonTypeSchema

An addon provider. Defines a specific addon type and what the end user must configure when creating a new addon of that type.

- `name` (string, required) — The name of the addon type. When creating new addons, this goes in the payload's `type` field.
- `displayName` (string, required) — The addon type's name as it should be displayed in the admin UI.
- `documentationUrl` (string, required) — A URL to where you can find more information about using this addon type.
- `description` (string, required) — A description of the addon type.
- `howTo` (string, optional) — A long description of how to use this addon type. This will be displayed on the top of configuration page. Can contain markdown.
- `tagTypes` (list of tagTypeSchema, optional) — A list of [Unleash tag types](https://docs.getunleash.io/concepts/feature-flags#tags) that this addon uses. These tags will be added to the Unleash instance when an addon of this type is created.
- `parameters` (list of addonParameterSchema, optional) — The addon provider's parameters. Use these to configure an addon of this provider type. Items with `required: true` must be provided.
- `events` (list of string, optional) — All the [event types](https://docs.getunleash.io/concepts/events#event-types) that are available for this addon provider.
- `installation` (AddonTypeSchemaInstallation, optional) — The installation configuration for this addon type.
- `alerts` (list of AddonTypeSchemaAlertsItems, optional) — A list of alerts to display to the user when installing addons of this type.
- `deprecated` (string, optional) — This should be used to inform the user that this addon type is deprecated and should not be used. Deprecated addons will show a badge with this information on the UI.

### tagTypeSchema

A tag type.

- `name` (string, required) — The name of the tag type.
- `description` (string, optional) — The description of the tag type.
- `icon` (string, optional, nullable) — The icon of the tag type.
- `color` (string, optional, nullable) — The hexadecimal color code for the tag type.

### addonParameterSchema

An addon parameter definition.

- `name` (string, required) — The name of the parameter as it is used in code. References to this parameter should use this value.
- `displayName` (string, required) — The name of the parameter as it is shown to the end user in the Admin UI.
- `type` (string, required) — The type of the parameter. Corresponds roughly to [HTML `input` field types](https://developer.mozilla.org/docs/Web/HTML/Element/Input#input_types). Multi-line input fields are indicated as `textfield` (equivalent to the HTML `textarea` tag). Collections of user-defined key-value pairs are indicated as `keyvaluepairs`.
- `required` (boolean, required) — Whether this parameter is required or not. If a parameter is required, you must give it a value when you create the addon. If it is not required it can be left out. It may receive a default value in those cases. Parameters of type `keyvaluepairs` ignore this attribute.
- `sensitive` (boolean, required) — Indicates whether this parameter is **sensitive** or not. Unleash will not return sensitive parameters to API requests. It will instead use a number of asterisks to indicate that a value is set, e.g. "******". The number of asterisks does not correlate to the parameter's value. Parameters of type `keyvaluepairs` ignore this attribute.
- `description` (string, optional) — A description of the parameter. This should explain to the end user what the parameter is used for.
- `placeholder` (string, optional) — The default value for this parameter. This value is used if no other value is provided.

### AddonTypeSchemaInstallation

The installation configuration for this addon type.

- `url` (string, required) — A URL to where the addon configuration should redirect to install addons of this type.
- `title` (string, optional) — The title of the installation configuration. This will be displayed to the user when installing addons of this type.
- `helpText` (string, optional) — The help text of the installation configuration. This will be displayed to the user when installing addons of this type.

### AddonTypeSchemaAlertsItems

- `type` (enum, required) — The type of alert. This determines the color of the alert.
  - Allowed values: `success`, `info`, `warning`, `error`
- `text` (string, required) — The text of the alert. This is what will be displayed to the user.
- `link` (AddonTypeSchemaAlertsItemsLink, optional) — An optional link to display at the end of the alert text.

### AddonTypeSchemaAlertsItemsLink

An optional link to display at the end of the alert text.

- `url` (string, required) — The URL of the link.
- `title` (string, optional, nullable) — The display title of the link.

## Examples

**Response**

```json
{
  "addons": [
    {
      "id": 27,
      "provider": "webhook",
      "description": "This addon posts updates to our internal feature tracking system whenever a feature is created or updated.",
      "enabled": true,
      "parameters": {
        "url": "http://localhost:4242/webhook"
      },
      "events": [
        "feature-created",
        "feature-updated"
      ],
      "projects": [
        "new-landing-project",
        "signups-v2"
      ],
      "environments": [
        "development",
        "production"
      ]
    }
  ],
  "providers": [
    {
      "name": "webhook",
      "displayName": "Webhook",
      "documentationUrl": "https://docs.getunleash.io/integrate/webhook",
      "description": "A Webhook is a generic way to post messages from Unleash to third party services.",
      "parameters": [
        {
          "name": "url",
          "displayName": "Webhook URL",
          "type": "url",
          "required": true,
          "sensitive": true,
          "description": "(Required) Unleash will perform a HTTP Post to the specified URL (one retry if first attempt fails)"
        },
        {
          "name": "contentType",
          "displayName": "Content-Type",
          "type": "text",
          "required": false,
          "sensitive": false,
          "description": "(Optional) The Content-Type header to use. Defaults to \"application/json\".",
          "placeholder": "application/json"
        },
        {
          "name": "authorization",
          "displayName": "Authorization",
          "type": "text",
          "required": false,
          "sensitive": true,
          "description": "(Optional) The Authorization header to use. Not used if left blank.",
          "placeholder": ""
        },
        {
          "name": "bodyTemplate",
          "displayName": "Body template",
          "type": "textfield",
          "required": false,
          "sensitive": false,
          "description": "(Optional) You may format the body using a mustache template. If you don't specify anything, the format will be similar to the events format (https://docs.getunleash.io/concepts/events)",
          "placeholder": "{\n  \"event\": \"{{event.type}}\",\n  \"createdBy\": \"{{event.createdBy}}\",\n  \"featureToggle\": \"{{event.data.name}}\",\n  \"timestamp\": \"{{event.data.createdAt}}\"\n}"
        }
      ],
      "events": [
        "feature-created",
        "feature-updated",
        "feature-archived",
        "feature-revived",
        "feature-stale-on",
        "feature-stale-off",
        "feature-environment-enabled",
        "feature-environment-disabled",
        "feature-strategy-remove",
        "feature-strategy-update",
        "feature-strategy-add",
        "feature-metadata-updated",
        "feature-variants-updated",
        "feature-project-change",
        "feature-tagged",
        "feature-untagged",
        "change-request-created",
        "change-request-discarded",
        "change-added",
        "change-discarded",
        "change-request-approved",
        "change-request-approval-added",
        "change-request-cancelled",
        "change-request-sent-to-review",
        "change-request-applied"
      ]
    },
    {
      "name": "new-app",
      "displayName": "Addon Name",
      "documentationUrl": "https://docs.getunleash.io/integrate/",
      "description": "The App for X that can be combined with Unleash.",
      "tagTypes": [
        {
          "name": "tag-name",
          "description": "A tag used by the X-addon to specify a configuration.",
          "icon": "S"
        }
      ],
      "parameters": [
        {
          "name": "accessToken",
          "displayName": "Access token",
          "type": "text",
          "required": true,
          "sensitive": true,
          "description": "(Required)"
        },
        {
          "name": "defaultChannels",
          "displayName": "Channels",
          "type": "text",
          "required": false,
          "sensitive": false,
          "description": "A comma-separated list of channels to post the configured events to. These channels are always notified, regardless of the event type or the presence of a addon tag."
        }
      ],
      "events": [
        "addon-config-created",
        "feature-created"
      ]
    },
    {
      "name": "teams-workflow",
      "displayName": "Microsoft Teams Workflow",
      "documentationUrl": "https://docs.getunleash.io/integrate/teams-workflow",
      "description": "Allows Unleash to post updates to Microsoft Teams through a predefined Workflow",
      "parameters": [
        {
          "name": "url",
          "displayName": "Microsoft Teams Workflow webhook URL",
          "type": "url",
          "required": true,
          "sensitive": true,
          "description": "(Required)"
        }
      ],
      "events": [
        "feature-created",
        "feature-updated",
        "feature-archived",
        "feature-revived",
        "feature-stale-on",
        "feature-stale-off",
        "feature-environment-enabled",
        "feature-environment-disabled",
        "feature-strategy-remove",
        "feature-strategy-update",
        "feature-strategy-add",
        "feature-metadata-updated",
        "feature-variants-updated",
        "feature-project-change",
        "feature-potentially-stale-on",
        "change-added",
        "change-discarded",
        "change-edited",
        "change-request-applied",
        "change-request-approval-added",
        "change-request-approved",
        "change-request-cancelled",
        "change-request-created",
        "change-request-discarded",
        "change-request-rejected",
        "change-request-sent-to-review",
        "change-request-scheduled",
        "change-request-scheduled-application-success",
        "change-request-scheduled-application-failure",
        "change-request-schedule-suspended",
        "release-plan-progressions-paused",
        "release-plan-progressions-resumed"
      ]
    },
    {
      "name": "teams",
      "displayName": "Microsoft Teams",
      "documentationUrl": "https://docs.getunleash.io/integrate/teams",
      "description": "Allows Unleash to post updates to Microsoft Teams.",
      "parameters": [
        {
          "name": "url",
          "displayName": "Microsoft Teams webhook URL",
          "type": "url",
          "required": true,
          "sensitive": true,
          "description": "(Required)"
        }
      ],
      "events": [
        "feature-created",
        "feature-updated",
        "feature-archived",
        "feature-revived",
        "feature-stale-on",
        "feature-stale-off",
        "feature-environment-enabled",
        "feature-environment-disabled",
        "feature-strategy-remove",
        "feature-strategy-update",
        "feature-strategy-add",
        "feature-metadata-updated",
        "feature-variants-updated",
        "feature-project-change"
      ],
      "deprecated": "This plugin is deprecated due to Microsoft no longer supporting direct incoming webhooks. Use teams-workflow instead"
    },
    {
      "name": "datadog",
      "displayName": "Datadog",
      "documentationUrl": "https://docs.getunleash.io/integrate/datadog",
      "description": "Allows Unleash to post updates to Datadog.",
      "tagTypes": [
        {
          "name": "datadog",
          "description": "All Datadog tags added to a specific feature are sent to datadog event stream.",
          "icon": "D"
        }
      ],
      "parameters": [
        {
          "name": "url",
          "displayName": "Datadog Events URL",
          "type": "url",
          "required": false,
          "sensitive": false,
          "description": "Default URL: https://api.datadoghq.com/api/v1/events. Needs to be changed if your're not using the US1 site."
        },
        {
          "name": "apiKey",
          "displayName": "Datadog API key",
          "type": "text",
          "required": true,
          "sensitive": true,
          "description": "(Required) API key to connect to Datadog",
          "placeholder": "j96c23b0f12a6b3434a8d710110bd862"
        }
      ],
      "events": [
        "feature-created",
        "feature-updated",
        "feature-archived",
        "feature-revived",
        "feature-stale-on",
        "feature-stale-off",
        "feature-environment-enabled",
        "feature-environment-disabled",
        "feature-strategy-remove",
        "feature-strategy-update",
        "feature-strategy-add",
        "feature-metadata-updated",
        "feature-project-change",
        "feature-variants-updated"
      ]
    }
  ]
}
```

**SDK Code**

```python
import requests

url = "https://app.unleash-instance.example.com/api/admin/projects/projectId/addons"

headers = {"Authorization": "<apiKey>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript
const url = 'https://app.unleash-instance.example.com/api/admin/projects/projectId/addons';
const options = {method: 'GET', headers: {Authorization: '<apiKey>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://app.unleash-instance.example.com/api/admin/projects/projectId/addons"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "<apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://app.unleash-instance.example.com/api/admin/projects/projectId/addons")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = '<apiKey>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://app.unleash-instance.example.com/api/admin/projects/projectId/addons")
  .header("Authorization", "<apiKey>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://app.unleash-instance.example.com/api/admin/projects/projectId/addons', [
  'headers' => [
    'Authorization' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://app.unleash-instance.example.com/api/admin/projects/projectId/addons");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "<apiKey>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Authorization": "<apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://app.unleash-instance.example.com/api/admin/projects/projectId/addons")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```