Aha! integration


Supported authentication methods

Basic authentication

No custom configuration required in Aha! for this type of authentication.

Select "Basic authentication" in the first step of integration wizard. Click "Next".

Select basic authentication

Provide valid host (URL to your Aha!), username and password.

Provide authentication info

Personal token

To proceed with this authentication type you need to obtain API token from Aha!. Steps below will instruct you how to do that.

Go to Personal page of your Aha! settings.

Open personal page

Then in left pane switch to Developer section.

Switch to Developer section

Now switch to API keys tab and click Generate API Key button.

Generate key

Give it some unique name and click Generate API Key button within that dialog.

Give key a name

Click Generate API key to create new token. Don't forget to copy it.

Now, when you've obtained a token, lets configure integration in Bugsee.

Start Bugsee integration wizard and select "Personal token" authentication type. Click "Next".

Select personal token

Provide valid host (URL to your Aha!) and paste generated token.

Paste personal token


Select "OAuth" in the first step of integration wizard. Click Next.

Select OAuth

You will be presented with dialog asking you to authorize Bugsee. Click Authorize to allow Bugsee access your Aha!

OAuth Grant


There are no any specific configuration steps for Aha!. Refer to configuration section for description about generic steps.

Custom recipes

Bugsee can accommodate all these customizations with the help of custom recipes. This section provides a few examples of using custom recipes specifically with Aha!. For basic introduction, refer to custom recipe documentation.

Setting tags field

By default Bugsee creates and updates Aha! ideas with Bugsee issue labels as Aha! tags. But labels list can be overridden inside your custom recipe. For example you can add some new label (Aha! tag) to existing ones:

function create(context) {
    // ....

    return {
        // ...
        labels: [...issue.labels, "My awesome tag"]

function update(context, changes) {
    const result = {};
    // ...

    if (changes.labels) {
        result.labels = [...changes.labels.to, "My awesome tag"];

    return {
        issue: {
            custom: {}
        changes: result