Skip to main content

Aha!

Aha! is a product development platform for roadmapping, strategic planning, and idea management. The Aha! REST API exposes products, releases, features, epics, goals, initiatives, custom fields, custom table records, teams, and users, enabling integrations to read roadmap and planning data into downstream systems and to programmatically create and update records such as features, epics, goals, and initiatives.

Aha! icon

Power end-to-end data operations for your Aha! API with Nexla. Our bi-directional Aha! connector is purpose-built for Aha!, making it simple to ingest data, sync it across systems, and deliver it anywhere — all with no coding required. Nexla turns API-sourced data into ready-to-use, reusable data products and makes it easy to send data to Aha! or any other destination. With comprehensive monitoring, lineage tracking, and access controls, Nexla keeps your Aha! workflows fast, secure, and fully governed.

Features

Type: API

SourceDestination

  • Seamless API Integration: Connect to any endpoint as source or destination without coding, with automatic data product creation
  • Visual Composition & Chaining: Build complex integrations using visual templates, chain API calls, and compose workflows with data validation and filtering
  • API Proxy: Expose curated slices of your data securely with a secure and customizable API proxy that validates and transforms data on the fly
  • Request optimization with intelligent batching, retry, and caching to minimize API calls and costs

Prerequisites

The Aha! REST API supports two authentication methods, and the credentials required depend on which method best fits the integration scenario. Both methods require your Aha! account domain — the subdomain portion of your Aha! URL (for example, mycompany for https://mycompany.aha.io). Review the prerequisites for the relevant method below before creating a credential in Nexla.

Aha! recommends OAuth 2.0 when an application acts on behalf of an interactive user, because it avoids sharing account credentials with an external application. An API key is the best approach for service-to-service integrations that call Aha! outside the context of a user interaction — which is the typical pattern for a Nexla data flow.

API Key (Bearer Token)

An Aha! API key is tied to a specific user and account, and it grants access using that user's permissions. Multiple keys can be generated and revoked independently.

  1. Sign in to your Aha! account at https://<your-subdomain>.aha.io.

  2. Click your account settings, and select Personal to open your personal settings.

  3. In the personal settings menu, click Developer.

  4. On the Developer screen, click Generate API key.

  5. Enter a descriptive name for the key (for example, "Nexla Integration"), and click Generate API key.

  6. Copy the generated API key value, and store it securely. This value grants access to your Aha! account data using your permissions, so it should be treated like a password.

    Aha! displays the full API key value at generation time. Copy it immediately and store it in a secure secret manager — you will need to generate a new key if the value is lost. Keys can be revoked at any time from the same Developer screen.

For complete information about API key access, see the Aha! REST API documentation.

OAuth 2.0 (3-Legged)

OAuth 2.0 uses the standard authorization code (three-legged) flow, in which the authorizing Aha! user grants your registered application delegated access to their account. This method is recommended for applications that connect on behalf of interactive users.

  1. Sign in to your Aha! account, and navigate to Personal settings, then click Developer.

  2. On the Developer screen, switch to the OAuth applications tab, and click Register OAuth application.

  3. Enter the requested application details, including the application name and the redirect URI.

    • Redirect URI: Set this to the Nexla OAuth callback URL shown in the Nexla credential overlay. The redirect URI registered with Aha! must exactly match the one used during the authorization and token-exchange steps.
  4. After registering the application, copy the Client ID (Application ID) and Client Secret values, and store them securely. The Client Secret is shown only at registration time.

For complete information about the OAuth 2.0 flow and application registration, see the Aha! OAuth2 documentation.

Important

The API Key and Client Secret values grant access to Aha! account data. Store them in a secure secret manager, never commit them to source control, and rotate them immediately if you suspect they have been exposed.

Authenticate

Create a credential in Nexla

  1. After selecting the data source/destination type, click the Add Credential tile to open the Add New Credential overlay.

  2. Enter a name for the credential in the Credential Name field and a short, meaningful description in the Credential Description field.

  3. Select the authentication method that matches your Aha! setup, and complete the corresponding fields. Both methods require your Aha! Account Domain — the subdomain of your Aha! URL (for example, mycompany for https://mycompany.aha.io).

Aha! Authentication Methods

Authenticate using an Aha! API key passed as a Bearer token. Best suited for service-to-service integrations that call Aha! outside the context of an interactive user, which is the typical pattern for a Nexla data flow.

  1. Enter your Aha! **Account Domain** in the **Account Domain** field. This is the subdomain of your Aha! URL — for example, enter `mycompany` for `https://mycompany.aha.io`.
  2. Enter your Aha! **API Key** value in the **API Key Value** field. This value is generated from **Personal** settings > **Developer** > **Generate API key** in Aha! and is treated as a secret.
  1. Click the Save button at the bottom of the overlay. The newly added credential will now appear in a tile on the Authenticate screen during data source/destination creation.

Use as a data source

To create a new data flow, navigate to the Integrate section, and click the New Data Flow button. Select the Aha! connector tile, then select the credential that will be used to connect to the Aha! instance, and click Next; or, create a new Aha! credential for use in this flow.

Endpoint templates

Nexla provides pre-built templates that can be used to rapidly configure data sources to ingest data from common Aha! endpoints. Select the endpoint from which this source will fetch data from the Endpoint pulldown menu. Available endpoint templates are listed in the expandable boxes below.

List products in the account

This endpoint returns the products in your account. In Aha!, a product is a top-level organizational unit that contains releases, features, and other planning records. Use this endpoint to sync your product catalog into a warehouse or to obtain product IDs for use with other endpoints.

  • Both parameters on this endpoint are optional. Set the Include Teams field to true to include team information in each product record, or leave it as false to omit it.
  • Set the Include Idea Portals field to true to include idea portal information in each product record, or leave it as false to omit it.

This endpoint is paginated, and Nexla automatically advances through pages to retrieve all available products. Product IDs returned here are used to configure the product-scoped endpoints below, such as List features in a product and List records in a custom table for a product.

Get a specific product

This endpoint retrieves the full details of a single product by ID. Use it to enrich an existing dataset of product IDs with the latest product details.

  • Enter the product ID in the Product ID field. This field is required. Product IDs can be obtained from the List products in the account endpoint or from upstream Nexla data flows.

List features

This endpoint returns all features across all products and releases in the account. In Aha!, a feature is an individual work item, typically scheduled within a release. Use this endpoint to sync your complete feature backlog into a warehouse or reporting system.

  • No configuration is required for this endpoint beyond selecting it. Nexla automatically paginates through all available features.

List features in a product

This endpoint returns all features that belong to a specific product. Use it to sync the feature set for a single product without retrieving the entire account backlog.

  • Enter the product ID in the Product ID field. This field is required. Product IDs can be obtained from the List products in the account endpoint.

List features in a release

This endpoint returns all features scheduled within a specific release. In Aha!, a release structures the planned delivery timeline for a set of features. Use this endpoint to track the scope of an individual release.

  • Enter the release ID in the Release ID field. This field is required. Release IDs can be obtained from the Get a specific release or List roll up releases in a product endpoints.

List features in an epic

This endpoint returns all features associated with a specific epic. In Aha!, an epic groups related features at a larger scale. Use this endpoint to analyze the features that make up a single epic.

  • Enter the epic ID in the Epic ID field. This field is required. Epic IDs can be obtained from the List epics or Get a specific epic endpoints.

List features associated with a goal

This endpoint returns the features linked to a specific goal. In Aha!, a goal defines a strategic objective that aligns work. Use this endpoint to report on the work contributing to a particular goal.

  • Enter the goal ID in the Goal ID field. This field is required. Goal IDs can be obtained from the Get a specific goal endpoint.

Get a specific feature

This endpoint retrieves the full details of a single feature by ID. Use it to enrich an existing dataset of feature IDs with the latest feature details.

  • Enter the feature ID in the Feature ID field. This field is required. Feature IDs can be obtained from any of the feature-list endpoints or from upstream Nexla data flows.

List epics

This endpoint returns all epics in the account. Use it to sync the complete set of epics into a warehouse or to obtain epic IDs for use with other endpoints.

  • No configuration is required for this endpoint beyond selecting it. Nexla automatically paginates through all available epics.

Get a specific epic

This endpoint retrieves the full details of a single epic by ID. Use it to enrich an existing dataset of epic IDs with the latest epic details.

  • Enter the epic ID in the Epic ID field. This field is required. Epic IDs can be obtained from the List epics endpoint or from upstream Nexla data flows.

Get a specific release

This endpoint retrieves the full details of a single release by ID. Use it to enrich an existing dataset of release IDs with the latest release details, such as dates and status.

  • Enter the release ID in the Release ID field. This field is required. Release IDs can be obtained from the List roll up releases in a product endpoint or from upstream Nexla data flows.

List roll up releases in a product

This endpoint returns the roll-up releases for a specific product. Roll-up releases in Aha! group multiple individual releases to coordinate delivery across products. Use this endpoint to track cross-product delivery timelines.

  • Enter the product ID in the Product ID field. This field is required. Product IDs can be obtained from the List products in the account endpoint.

Get a specific goal

This endpoint retrieves the full details of a single goal by ID. Use it to enrich an existing dataset of goal IDs with the latest goal details.

  • Enter the goal ID in the Goal ID field. This field is required. Goal IDs can be obtained from upstream Nexla data flows or from records returned by other Aha! endpoints.

List all custom fields

This endpoint returns all custom field definitions configured in the account. Custom fields extend standard Aha! records with organization-specific data. Use this endpoint to obtain field keys and definitions needed to interpret custom field values on other records.

  • No configuration is required for this endpoint beyond selecting it. Nexla automatically paginates through all available custom field definitions.

List creative briefs in a product

This endpoint returns the creative briefs associated with a specific product. Use it to sync creative brief data into downstream marketing or reporting systems.

  • Enter the product ID in the Product ID field. This field is required. Product IDs can be obtained from the List products in the account endpoint.

List records in a custom table for a product

This endpoint returns the records stored in a custom table (custom object) for a specific product. Custom tables let teams model organization-specific data alongside standard Aha! records. Use this endpoint to ingest that custom data into Nexla.

  • Enter the product ID in the Product ID field. This field is required. Product IDs can be obtained from the List products in the account endpoint.
  • Enter the custom table key in the Custom Table Key field. This field is required and identifies the specific custom table within the product. The key is configured when the custom table is created in Aha!.

Get a specific custom table record

This endpoint retrieves the full details of a single custom table record by ID. Use it to enrich an existing dataset of record IDs with the latest custom table data.

  • Enter the record ID in the Record ID field. This field is required. Record IDs can be obtained from the List records in a custom table for a product endpoint or from upstream Nexla data flows.

List teams

This endpoint returns the teams in the account. In Aha!, teams organize users for collaborative work. Use this endpoint to sync your team structure into a warehouse or downstream system.

  • The Fields parameter is optional. Enter a comma-separated list of field names to limit the response to only those fields, or leave it blank to return the default set of fields for each team.

List users

This endpoint returns the users in the account. Each user represents an account member with role-based permissions. Use this endpoint to sync user records into a warehouse, an identity system, or a reporting tool.

  • No configuration is required for this endpoint beyond selecting it. Nexla automatically paginates through all available users.

Once the selected endpoint template has been configured, click the Test button to the right of the endpoint selection menu to retrieve a sample of the data that will be fetched. Sample data will be displayed in the Endpoint Test Result panel on the right, allowing you to verify that the source is configured correctly before saving.

Manual configuration

Aha! data sources can also be manually configured to ingest data from any valid Aha! API endpoint, including endpoints not covered by the pre-built templates, chained API calls, or custom request parameters. Select the Advanced tab at the top of the configuration screen, and follow the instructions in Connect to Any API to configure the API method, endpoint URL, date/time and lookup macros, path to data, metadata, and request headers.

Aha! API endpoints follow the format https://<account-domain>.aha.io/api/v1/<resource> — for example, https://mycompany.aha.io/api/v1/features. Date/time macros are useful for Aha! endpoints that accept date filters, such as updated_since, to ingest only recently changed records, and lookup-based macros can drive record-level endpoints — for example, referencing a list of product IDs to fetch features for each one.

Aha! list responses wrap the records in a named array alongside a pagination metadata object. For the /features endpoint, which returns a top-level array named features, the path to data would be entered as $.features[*]. The Aha! Authorization header is handled automatically by Nexla based on your credential configuration and does not need to be added as a request header.

Once all of the relevant settings have been configured, click the Create button in the upper right corner of the screen to save and create the new Aha! data source. Nexla will now begin ingesting data from the configured endpoint and will organize any data that it finds into one or more Nexsets.

Use as a destination

Click the + icon on the Nexset that will be sent to the Aha! destination, and select the Send to Destination option from the menu. Select the Aha! connector from the list of available destination connectors, then select the credential that will be used to connect to the Aha! account, and click Next; or, create a new Aha! credential for use in this flow.

Endpoint templates

Nexla provides pre-built templates that can be used to rapidly configure destinations to send data to common Aha! endpoints. Select the endpoint to which data will be sent from the Endpoint pulldown menu. Then, click on the template in the list below to expand it, and follow the instructions to configure additional endpoint settings.

Create a feature

This endpoint creates a new feature within a specific release. Use it to programmatically push work items into Aha! from an upstream system — for example, turning intake requests or backlog items from another tool into Aha! features.

  • Enter the release ID in the Release ID field. This field is required and identifies the release that the new feature will be created in. Release IDs can be obtained from the Aha! data source endpoints.
  • Each upstream record is sent as the JSON body of the POST call. Use the Nexla transform layer to shape upstream attributes into the field names expected by Aha!, such as name and the feature details.

For the full set of supported feature attributes, see the Aha! features API reference.

Create an epic

This endpoint creates a new epic within a specific release. Use it to group related features under a larger body of work as records flow in from upstream systems.

  • Enter the release ID in the Release ID field. This field is required and identifies the release that the new epic will be created in.
  • Each upstream record is sent as the JSON body of the POST call. Map upstream attributes to the epic field names expected by Aha!, such as name.

For the full set of supported epic attributes, see the Aha! epics API reference.

Create an epic in the default release

This endpoint creates a new epic in the default release of a specific product. Use it when you want to add epics to a product without targeting a particular release.

  • Enter the product ID in the Product ID field. This field is required and identifies the product whose default release will receive the new epic.
  • Each upstream record is sent as the JSON body of the POST call. Map upstream attributes to the epic field names expected by Aha!.

Update an epic

This endpoint updates an existing epic. Use it to sync changes from a downstream system of record back into Aha! — for example, status, name, or custom field updates.

  • Enter the epic ID in the Epic ID field. This field is required and identifies the epic to update. To drive the destination from an upstream source, map the upstream record's epic identifier into this field.
  • The body of each PUT call is the upstream record (as JSON). Include only the fields that should be changed; omitted fields are left untouched.

Delete an epic

This endpoint deletes an epic by ID. The deletion is permanent, so validate upstream data carefully before activating this destination.

  • Enter the epic ID in the Epic ID field. This field is required and identifies the epic to delete.

Because deletion is irreversible, consider routing through a Nexla transform that filters to only the epics that should genuinely be deleted before activating this destination.

Create a goal

This endpoint creates a new goal under a specific product. In Aha!, a goal defines a strategic objective that aligns work. Use this endpoint to push goals into Aha! from upstream planning systems.

  • Enter the product ID in the Product ID field. This field is required and identifies the product that the new goal will be created in.
  • Each upstream record is sent as the JSON body of the POST call. Map upstream attributes to the goal field names expected by Aha!, such as name.

For the full set of supported goal attributes, see the Aha! goals API reference.

Update a goal

This endpoint updates an existing goal within a product. Use it to keep Aha! goals in sync with a downstream system of record.

  • Enter the product ID in the Product ID field. This field is required and identifies the product that contains the goal.
  • Enter the goal ID in the Goal ID field. This field is required and identifies the goal to update.
  • The body of each PUT call is the upstream record (as JSON). Include only the fields that should be changed; omitted fields are left untouched.

Create an initiative

This endpoint creates a new initiative under a specific product. In Aha!, an initiative represents a strategic project that can span multiple releases. Use this endpoint to push initiatives into Aha! from upstream systems.

  • Enter the product ID in the Product ID field. This field is required and identifies the product that the new initiative will be created in.
  • Each upstream record is sent as the JSON body of the POST call. Map upstream attributes to the initiative field names expected by Aha!, such as name.

For the full set of supported initiative attributes, see the Aha! initiatives API reference.

Update an initiative

This endpoint updates an existing initiative within a product. Use it to keep Aha! initiatives in sync with a downstream system of record.

  • Enter the product ID in the Product ID field. This field is required and identifies the product that contains the initiative.
  • Enter the initiative ID in the Initiative ID field. This field is required and identifies the initiative to update.
  • The body of each PUT call is the upstream record (as JSON). Include only the fields that should be changed; omitted fields are left untouched.

Create a custom table record

This endpoint creates a new record in a custom table for a specific product. Custom tables let teams model organization-specific data alongside standard Aha! records. Use this endpoint to write that custom data into Aha! from upstream systems.

  • Enter the product ID in the Product ID field. This field is required and identifies the product that contains the custom table.
  • Enter the custom table key in the Custom Table Key field. This field is required and identifies the specific custom table within the product.
  • Each upstream record is sent as the JSON body of the POST call. Map upstream attributes to the custom field keys defined for the table.

Create a team

This endpoint creates a new team in the account. In Aha!, teams organize users for collaborative work. Use this endpoint to provision teams in Aha! from an upstream HR or identity system.

  • No endpoint-specific parameters are required. Each upstream record is sent as the JSON body of the POST call. Map upstream attributes to the team field names expected by Aha!, such as name.

For the full set of supported team attributes, see the Aha! teams API reference.

Manual configuration

Aha! destinations can also be manually configured to send data to any valid Aha! API endpoint. Select the Advanced tab at the top of the configuration screen, and follow the instructions in Connect to Any API to configure the API method, data format, endpoint URL, request headers, attribute exclusions, record batching, and response webhooks.

The Aha! API expects application/json, so JSON is the appropriate format for most operations. Aha! API endpoints follow the format https://<account-domain>.aha.io/api/v1/<resource> — for example, https://mycompany.aha.io/api/v1/releases/<release-id>/features. For update operations, include the ID of the object to be updated at the end of the URL. The Aha! Authorization header is handled automatically by Nexla based on your credential configuration and does not need to be added as a request header.

Most Aha! write endpoints create or update a single record per call. Record batching is best suited to custom endpoints that accept multiple records in one request — confirm the target endpoint supports batched payloads before enabling this option. Enabling the response webhook option lets you capture the response from each call — for example, the ID and URL that Aha! assigns to a newly created feature or epic.

Save & activate

Once all endpoint settings have been configured, click the Done button in the upper right corner of the screen to save and create the destination. To begin sending data to Aha!, open the destination resource menu, and select Activate.

The Nexset data will not be sent to Aha! until the destination is activated. Destinations can be activated immediately or at a later time, providing full control over data movement.