On September 25th, 2024, we released v2 of the Apps SDK. To learn what’s new and how to upgrade, see Migration FAQ and Migration guide.

Intents

Using intents to deeply integrate with Canva.

This API is in preview mode and may experience breaking changes. Apps that use this API will not pass the review process and can't be made available on the Apps Marketplace.

In the Apps SDK, an intent represents a contract that enables your app to be discovered and used throughout Canva. Each intent defines a specific set of actions your app must implement to integrate with Canva's workflows.

Think of intents like plug-and-play capabilities:

  1. The app implements the required actions.
  2. Canva handles when and where to present the app's functionality to users.

For example, with the Data Connector intent, your app implements just two actions: a UI for selecting data and a function to fetch that data. Canva then automatically handles presenting your app in data-related contexts.

Unlike traditional apps that only appear in the side panel of the Canva editor, intent-based apps can be surfaced contextually across Canva, wherever your app's capability is relevant to what the user is doing.

Supported intents

The Apps SDK supports various types of intents, each of which hooks into different parts of the Canva experience. To support deep integration with Canva, apps can implement any combination of these intents.

The available intents include:

Additional intents are planned for the future.

Default intent

The concept of intents was introduced to the Apps SDK in May, 2025.

To ensure backwards compatibility, apps that don't explicitly opt into an intent default to the Design Editor intent. This means that existing apps don't require any changes to their code or configuration.

Developing an intent

The exact implementation steps for an intent depend on the type of intent, but the overall process is the same.

Step 1: Enable the intent

Intents are opt-in and can be individually enabled via the Developer Portal.

To enable an intent:

  1. Navigate to an app via the Your apps(opens in a new tab or window) page.
  2. On the Configuration page, find the Intents section.
  3. Toggle one or more of the intents to the On position.

If all intents are disabled, it's equivalent to only the Design Editor intent being enabled. In this case though, the intent should not be explicitly registered.

Step 2: Register the intent

If an intent is enabled via the Developer Portal, it must be registered in the app's source code.

To register an intent:

  1. Install the @canva/intents package (if it's not already installed):

    npm install @canva/intents
    BASH
  2. Import the intent's registration method from the package:

    import { prepareDataConnector } from "@canva/intents/data";
    TSX

    The exact name of the registration method depends on the intent but always begins with prepare.

  3. Call the method as soon as the app loads:

    prepareDataConnector({
    // actions go here
    });
    TSX

Step 3: Define the intent's actions

An intent's registration method accepts an object with one or more actions. These actions execute the behavior of the intent, with each action having a unique set of parameters, constraints, and expected return values.

The following code sample demonstrates the actions for the Data Connector intent:

import { prepareDataConnector } from "@canva/intents/data";
prepareDataConnector({
fetchDataTable: async (params) => {
// Implementation for data fetching
},
renderSelectionUi: (params) => {
// Implementation for data selection UI
},
});
TS

Technical requirements

When an app supports intents, the following requirements apply:

  • Intents must be registered immediately when the app loads.
  • Intents must be registered synchronously.
  • The app must not immediately render UI.
  • The app must not create global state.