@canva/n8n-nodes-canva 0.1.8 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +151 -142
- package/dist/nodes/Canva/Canva.node.js +150 -148
- package/dist/nodes/Canva/Canva.node.js.map +1 -1
- package/dist/nodes/Canva/GenericFunctions.js +44 -4
- package/dist/nodes/Canva/GenericFunctions.js.map +1 -1
- package/dist/nodes/Canva/resources/asset/index.js +1 -1
- package/dist/nodes/Canva/resources/asset/index.js.map +1 -1
- package/dist/nodes/Canva/resources/design/index.js +2 -4
- package/dist/nodes/Canva/resources/design/index.js.map +1 -1
- package/dist/nodes/Canva/resources/designImport/createImageImport.js +43 -0
- package/dist/nodes/Canva/resources/designImport/createImageImport.js.map +1 -0
- package/dist/nodes/Canva/resources/designImport/createImageImportCreditsNotice.js +13 -0
- package/dist/nodes/Canva/resources/designImport/createImageImportCreditsNotice.js.map +1 -0
- package/dist/nodes/Canva/resources/designImport/createImageImportPreviewNotice.js +13 -0
- package/dist/nodes/Canva/resources/designImport/createImageImportPreviewNotice.js.map +1 -0
- package/dist/nodes/Canva/resources/designImport/index.js +12 -0
- package/dist/nodes/Canva/resources/designImport/index.js.map +1 -1
- package/dist/nodes/Canva/resources/export/export.js +1 -1
- package/dist/nodes/Canva/resources/export/export.js.map +1 -1
- package/dist/nodes/Canva/resources/generation/creditsNotice.js +13 -0
- package/dist/nodes/Canva/resources/generation/creditsNotice.js.map +1 -0
- package/dist/nodes/Canva/resources/generation/generateDesign.js +63 -0
- package/dist/nodes/Canva/resources/generation/generateDesign.js.map +1 -0
- package/dist/nodes/Canva/resources/generation/generateImage.js +95 -0
- package/dist/nodes/Canva/resources/generation/generateImage.js.map +1 -0
- package/dist/nodes/Canva/resources/generation/index.js +39 -0
- package/dist/nodes/Canva/resources/generation/index.js.map +1 -0
- package/dist/nodes/Canva/resources/generation/previewNotice.js +13 -0
- package/dist/nodes/Canva/resources/generation/previewNotice.js.map +1 -0
- package/dist/nodes/Canva/resources/imageTransformation/creditsNotice.js +13 -0
- package/dist/nodes/Canva/resources/imageTransformation/creditsNotice.js.map +1 -0
- package/dist/nodes/Canva/resources/imageTransformation/index.js +33 -0
- package/dist/nodes/Canva/resources/imageTransformation/index.js.map +1 -0
- package/dist/nodes/Canva/resources/imageTransformation/premiumNotice.js +13 -0
- package/dist/nodes/Canva/resources/imageTransformation/premiumNotice.js.map +1 -0
- package/dist/nodes/Canva/resources/imageTransformation/previewNotice.js +13 -0
- package/dist/nodes/Canva/resources/imageTransformation/previewNotice.js.map +1 -0
- package/dist/nodes/Canva/resources/imageTransformation/removeBackground.js +51 -0
- package/dist/nodes/Canva/resources/imageTransformation/removeBackground.js.map +1 -0
- package/dist/package.json +10 -2
- package/package.json +10 -2
- package/dist/nodes/Canva/resources/design/getDatasetPreviewNotice.js +0 -13
- package/dist/nodes/Canva/resources/design/getDatasetPreviewNotice.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
package/README.md
CHANGED
|
@@ -2,217 +2,226 @@
|
|
|
2
2
|
|
|
3
3
|

|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Use Canva in your n8n workflows. Create, autofill, and export designs, manage your assets and folders, and use Canva's AI to generate designs and images, remove backgrounds, or turn flat images into editable designs.
|
|
6
|
+
|
|
7
|
+
This node uses the [Canva REST APIs](https://www.canva.dev/docs/apps/rest-apis/) (formerly the Connect API).
|
|
6
8
|
|
|
7
9
|
- [Installation](#installation)
|
|
8
|
-
- [Running n8n locally](#running-n8n-locally)
|
|
9
10
|
- [Credentials](#credentials)
|
|
10
11
|
- [Operations](#operations)
|
|
11
|
-
- [
|
|
12
|
+
- [Good to know](#good-to-know)
|
|
13
|
+
- [Run it locally](#run-it-locally)
|
|
12
14
|
- [Resources](#resources)
|
|
13
15
|
|
|
14
16
|
## Installation
|
|
15
17
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation.
|
|
19
|
-
|
|
20
|
-
## Running n8n locally
|
|
21
|
-
|
|
22
|
-
> This section is for developers who want to run and test this node locally.
|
|
23
|
-
|
|
24
|
-
**Prerequisites:** Node.js 24+, npm.
|
|
25
|
-
|
|
26
|
-
1. Install dependencies and start n8n in dev mode:
|
|
27
|
-
|
|
28
|
-
```bash
|
|
29
|
-
npm install
|
|
30
|
-
npm run dev
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
This builds the node, links it to a local n8n instance, and starts n8n at [http://127.0.0.1:5678](http://127.0.0.1:5678) with hot reload enabled. The **Canva** node will appear in the node picker under _Community Nodes_.
|
|
34
|
-
|
|
35
|
-
2. Follow the [Credentials](#credentials) section below to connect your Canva account.
|
|
36
|
-
|
|
37
|
-
> **Note:** When running locally, use `http://127.0.0.1:5678/rest/oauth2-credential/callback` as the redirect URI in the Canva Developer Portal. Canva does not accept `localhost` — you must use the IP address.
|
|
38
|
-
|
|
39
|
-
### Troubleshooting
|
|
40
|
-
|
|
41
|
-
#### `npm run dev` fails with `EACCES: permission denied, rename ...` inside `~/.npm/_cacache`
|
|
42
|
-
|
|
43
|
-
`npm run dev` starts n8n via `npx n8n@latest`, which downloads n8n through your machine's shared npm cache (`~/.npm`). If that cache contains files owned by another user — usually root, left behind by running npm with `sudo` at some point — the download fails with `EACCES`/`EEXIST` rename errors. Reclaim ownership of the cache and retry:
|
|
44
|
-
|
|
45
|
-
```bash
|
|
46
|
-
sudo chown -R $(id -u):$(id -g) ~/.npm
|
|
47
|
-
npm run dev
|
|
48
|
-
```
|
|
18
|
+
Follow n8n's guide to [installing community nodes](https://docs.n8n.io/integrations/community-nodes/installation-and-management), using the package name `@canva/n8n-nodes-canva`.
|
|
49
19
|
|
|
50
20
|
## Credentials
|
|
51
21
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
### 1. Create a Canva integration
|
|
22
|
+
To connect n8n to Canva, you create an app in the Canva Developer Portal, then paste its details into n8n. It takes about five minutes.
|
|
55
23
|
|
|
56
|
-
|
|
24
|
+
### 1. Create an app in the Canva Developer Portal
|
|
57
25
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
26
|
+
1. Go to [**Your apps**](https://www.canva.com/developers/apps) in the Canva Developer Portal and create a new app. Choose **Private** if your team is on Canva Enterprise (the app stays inside your team), or **Public** otherwise. You can't change this later.
|
|
27
|
+
2. Open **Outside Canva** and click **Start integrating**.
|
|
28
|
+
3. On **Outside Canva → Configuration**:
|
|
29
|
+
- Turn on **Canva REST APIs**.
|
|
30
|
+
- Under **Credentials**, copy the **Client ID**, then click **Generate secret** and copy the secret too. Canva only shows the secret once, so keep it somewhere safe.
|
|
31
|
+
- Under **Scopes**, turn on all of these:
|
|
32
|
+
- `asset`: Read and Write
|
|
33
|
+
- `brandtemplate:content`: Read and Write
|
|
34
|
+
- `brandtemplate:meta`: Read
|
|
35
|
+
- `comment`: Read and Write
|
|
36
|
+
- `design:content`: Read and Write
|
|
37
|
+
- `design:meta`: Read
|
|
38
|
+
- `folder`: Read and Write
|
|
39
|
+
- `profile`: Read
|
|
64
40
|
|
|
65
|
-
|
|
41
|
+
The node asks for all of them when you connect, and Canva refuses the connection if any are missing.
|
|
66
42
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
| `comment:read` / `comment:write` | Comment resource (Preview) |
|
|
72
|
-
| `design:content:read` / `design:content:write` / `design:meta:read` | Design, Autofill, Export, Merge, Resize resources |
|
|
73
|
-
| `folder:read` / `folder:write` | Folder resource |
|
|
74
|
-
| `profile:read` | User resource |
|
|
43
|
+
4. On **Outside Canva → Redirect URLs**, paste n8n's redirect URL into **URL 1**. You'll find it in the n8n credential screen (step 2 below). It usually looks like this:
|
|
44
|
+
- **n8n Cloud:** `https://oauth.n8n.cloud/oauth2/callback`
|
|
45
|
+
- **Self-hosted n8n:** `https://your-n8n-instance.com/rest/oauth2-credential/callback`
|
|
46
|
+
- **n8n on your computer:** `http://127.0.0.1:5678/rest/oauth2-credential/callback` (Canva doesn't accept `localhost`, so use `127.0.0.1`)
|
|
75
47
|
|
|
76
|
-
|
|
48
|
+
### 2. Connect it in n8n
|
|
77
49
|
|
|
78
|
-
|
|
79
|
-
|
|
50
|
+
1. In n8n, go to **Credentials → New** and pick **Canva OAuth2 API**.
|
|
51
|
+
2. Paste the **Client ID** and **Client secret** from step 1.
|
|
52
|
+
3. Click **Connect my account** and approve access in Canva.
|
|
80
53
|
|
|
81
|
-
|
|
54
|
+
## Operations
|
|
82
55
|
|
|
83
|
-
|
|
84
|
-
2. Enter the **Client ID** and **Client secret** that you saved earlier.
|
|
85
|
-
3. Click **Connect my account** and complete the OAuth flow.
|
|
56
|
+
A few labels you'll see below:
|
|
86
57
|
|
|
87
|
-
|
|
58
|
+
- _(Preview)_: uses one of Canva's preview APIs. See [Preview APIs](#preview-apis).
|
|
59
|
+
- 💎: needs a paid Canva plan, such as Canva Pro.
|
|
60
|
+
- ✨: uses the Canva user's AI credits. See [AI credits](#ai-credits).
|
|
88
61
|
|
|
89
62
|
### Asset
|
|
90
63
|
|
|
91
|
-
| Operation |
|
|
92
|
-
| --------------------------- |
|
|
93
|
-
| Delete | Delete an asset
|
|
94
|
-
| Get | Get
|
|
95
|
-
| Update |
|
|
96
|
-
| Upload From URL _(Preview)_ | Upload an
|
|
64
|
+
| Operation | What it does |
|
|
65
|
+
| --------------------------- | ------------------------------------------ |
|
|
66
|
+
| Delete | Delete an asset |
|
|
67
|
+
| Get | Get an asset's details |
|
|
68
|
+
| Update | Rename an asset or change its tags |
|
|
69
|
+
| Upload From URL _(Preview)_ | Upload an image or video from a public URL |
|
|
97
70
|
|
|
98
71
|
### Autofill
|
|
99
72
|
|
|
100
|
-
> 💎
|
|
73
|
+
> 💎 Needs a Canva Pro plan or above.
|
|
101
74
|
|
|
102
|
-
| Operation |
|
|
103
|
-
| --------- |
|
|
104
|
-
| Create |
|
|
75
|
+
| Operation | What it does |
|
|
76
|
+
| --------- | --------------------------------------------------------- |
|
|
77
|
+
| Create | Fill a brand template with your data to make a new design |
|
|
105
78
|
|
|
106
79
|
### Brand Template
|
|
107
80
|
|
|
108
|
-
> 💎
|
|
81
|
+
> 💎 Needs a Canva plan with premium features, such as Canva Pro.
|
|
109
82
|
|
|
110
|
-
| Operation |
|
|
111
|
-
| ------------------- |
|
|
112
|
-
| Get | Get
|
|
113
|
-
| Get Dataset | Get the autofill
|
|
114
|
-
| Get Many |
|
|
115
|
-
| Publish _(Preview)_ | Publish a design as a brand template
|
|
83
|
+
| Operation | What it does |
|
|
84
|
+
| ------------------- | --------------------------------------------------- |
|
|
85
|
+
| Get | Get a brand template's details |
|
|
86
|
+
| Get Dataset | Get the fields you can autofill in a brand template |
|
|
87
|
+
| Get Many | List the brand templates you can use |
|
|
88
|
+
| Publish _(Preview)_ | Publish a design as a brand template |
|
|
116
89
|
|
|
117
90
|
### Comment _(Preview API)_
|
|
118
91
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
|
122
|
-
|
|
|
123
|
-
|
|
|
124
|
-
|
|
|
125
|
-
|
|
|
126
|
-
| Get Thread | Get metadata for a comment thread |
|
|
127
|
-
| List Replies | List all replies in a comment thread |
|
|
92
|
+
| Operation | What it does |
|
|
93
|
+
| ------------- | ---------------------------------- |
|
|
94
|
+
| Create Reply | Reply to a comment thread |
|
|
95
|
+
| Create Thread | Start a comment thread on a design |
|
|
96
|
+
| Get Reply | Get one reply from a thread |
|
|
97
|
+
| Get Thread | Get a comment thread |
|
|
98
|
+
| List Replies | List the replies in a thread |
|
|
128
99
|
|
|
129
100
|
### Design
|
|
130
101
|
|
|
131
|
-
| Operation
|
|
132
|
-
|
|
|
133
|
-
| Create
|
|
134
|
-
| Get
|
|
135
|
-
| Get Dataset
|
|
136
|
-
| Get Export Formats
|
|
137
|
-
| Get Many
|
|
138
|
-
| Get Pages _(Preview)_
|
|
102
|
+
| Operation | What it does |
|
|
103
|
+
| --------------------- | ----------------------------------------------------- |
|
|
104
|
+
| Create | Create a blank design, optionally with an image in it |
|
|
105
|
+
| Get | Get a design's details |
|
|
106
|
+
| Get Dataset | Get the fields you can autofill in a design |
|
|
107
|
+
| Get Export Formats | See which file formats a design can be exported to |
|
|
108
|
+
| Get Many | List your designs |
|
|
109
|
+
| Get Pages _(Preview)_ | Get details about each page in a design |
|
|
139
110
|
|
|
140
111
|
### Design Import
|
|
141
112
|
|
|
142
|
-
| Operation
|
|
143
|
-
|
|
|
144
|
-
| Import From
|
|
113
|
+
| Operation | What it does |
|
|
114
|
+
| ----------------------------- | ------------------------------------------------------------------- |
|
|
115
|
+
| Import From Image _(Preview)_ | ✨ Turn a flat image into an editable design with Magic Layers |
|
|
116
|
+
| Import From URL | Import a file from a public URL, such as a PPTX or PDF, as a design |
|
|
145
117
|
|
|
146
118
|
### Export
|
|
147
119
|
|
|
148
|
-
| Operation |
|
|
149
|
-
| ------------- |
|
|
150
|
-
| Export Design | Export a design
|
|
120
|
+
| Operation | What it does |
|
|
121
|
+
| ------------- | ------------------------------------------------------------------------------------ |
|
|
122
|
+
| Export Design | Export a design as a PDF, PNG, JPG, GIF, MP4, PPTX, and more, and get download links |
|
|
151
123
|
|
|
152
124
|
### Folder
|
|
153
125
|
|
|
154
|
-
| Operation |
|
|
155
|
-
| ---------- |
|
|
156
|
-
| Create | Create a
|
|
157
|
-
| Delete | Delete a folder
|
|
158
|
-
| Get | Get
|
|
159
|
-
| List Items | List
|
|
160
|
-
| Move Item | Move a design,
|
|
161
|
-
| Update | Rename a folder
|
|
126
|
+
| Operation | What it does |
|
|
127
|
+
| ---------- | ------------------------------------------------- |
|
|
128
|
+
| Create | Create a folder |
|
|
129
|
+
| Delete | Delete a folder |
|
|
130
|
+
| Get | Get a folder's details |
|
|
131
|
+
| List Items | List what's in a folder |
|
|
132
|
+
| Move Item | Move a design, image, or folder to another folder |
|
|
133
|
+
| Update | Rename a folder |
|
|
162
134
|
|
|
163
|
-
###
|
|
135
|
+
### Generation _(Preview API)_
|
|
136
|
+
|
|
137
|
+
| Operation | What it does |
|
|
138
|
+
| --------------- | ---------------------------------------------------------- |
|
|
139
|
+
| Generate Design | ✨ Create a presentation or Canva doc from a written brief |
|
|
140
|
+
| Generate Image | ✨ Create an image from a text prompt |
|
|
164
141
|
|
|
165
|
-
|
|
142
|
+
### Image Transformation _(Preview API)_
|
|
166
143
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
|
144
|
+
> 💎 Needs a Canva plan with premium features, such as Canva Pro.
|
|
145
|
+
|
|
146
|
+
| Operation | What it does |
|
|
147
|
+
| ----------------- | ----------------------------------------------------------------- |
|
|
148
|
+
| Remove Background | ✨ Remove the background from an image and save it as a new image |
|
|
149
|
+
|
|
150
|
+
### Merge _(Preview API)_
|
|
151
|
+
|
|
152
|
+
| Operation | What it does |
|
|
153
|
+
| ---------------- | -------------------------------------------------------------------------------- |
|
|
154
|
+
| Create Merge Job | Combine pages from other designs into a new one, or rearrange an existing design |
|
|
170
155
|
|
|
171
156
|
### Resize
|
|
172
157
|
|
|
173
|
-
> 💎
|
|
158
|
+
> 💎 Needs a Canva plan with premium features, such as Canva Pro. Canva Free users get a limited trial.
|
|
174
159
|
|
|
175
|
-
| Operation |
|
|
176
|
-
| ----------------- |
|
|
177
|
-
| Create Resize Job |
|
|
160
|
+
| Operation | What it does |
|
|
161
|
+
| ----------------- | ------------------------------------- |
|
|
162
|
+
| Create Resize Job | Make a copy of a design in a new size |
|
|
178
163
|
|
|
179
164
|
### User
|
|
180
165
|
|
|
181
|
-
| Operation |
|
|
182
|
-
| ---------------- |
|
|
183
|
-
| Get Capabilities |
|
|
184
|
-
| Get Me | Get the
|
|
185
|
-
| Get Profile | Get the display name
|
|
166
|
+
| Operation | What it does |
|
|
167
|
+
| ---------------- | --------------------------------------------------- |
|
|
168
|
+
| Get Capabilities | See which Canva features the connected user can use |
|
|
169
|
+
| Get Me | Get the connected user's ID and team ID |
|
|
170
|
+
| Get Profile | Get the connected user's display name |
|
|
186
171
|
|
|
187
|
-
##
|
|
172
|
+
## Good to know
|
|
188
173
|
|
|
189
|
-
###
|
|
174
|
+
### Waiting for Canva to finish
|
|
190
175
|
|
|
191
|
-
|
|
176
|
+
Some operations start a job in Canva and wait for it to finish: Upload From URL, Autofill, both imports, Export, Merge, Resize, and all the AI features. While it waits, the node checks every few seconds (**Poll Interval**) and gives up after a while (**Max Wait**, 60 to 300 seconds by default, depending on the operation). Big jobs, like long presentations, can take a couple of minutes.
|
|
192
177
|
|
|
193
|
-
|
|
178
|
+
If a job fails, the error tells you Canva's reason, such as a prompt that didn't pass Canva's safety checks.
|
|
194
179
|
|
|
195
|
-
|
|
196
|
-
- **Max Wait** (default 60 s, or 120 s for Design Import) — maximum time to wait before throwing a timeout error
|
|
180
|
+
### When Canva is busy, or a quota runs out
|
|
197
181
|
|
|
198
|
-
If
|
|
182
|
+
If Canva says it's getting too many requests, the node waits and tries again, up to three times. If the user has run out of AI credits, or used up their free autofill or resize trial, waiting won't help, so the node stops straight away and says so.
|
|
199
183
|
|
|
200
184
|
### Preview APIs
|
|
201
185
|
|
|
202
|
-
Operations marked _(Preview)_ use
|
|
186
|
+
Operations marked _(Preview)_ use Canva APIs that are still in preview. They can change without notice, and apps that use them can't be submitted for Canva's public review. They're great for internal workflows and experiments.
|
|
187
|
+
|
|
188
|
+
### AI credits
|
|
189
|
+
|
|
190
|
+
**Import From Image**, **Generate Design**, **Generate Image**, and **Remove Background** use the Canva user's AI credits every time they run. Checking on a running job is free.
|
|
191
|
+
|
|
192
|
+
Not every account can use every AI feature. **User → Get Capabilities** lists what the connected user can do, for example `image_to_design_imports` (Magic Layers), `background_removal`, and `design_generation`.
|
|
193
|
+
|
|
194
|
+
### Tips
|
|
203
195
|
|
|
204
|
-
|
|
196
|
+
- **Autofill:** run **Brand Template → Get Dataset** first. Your data's field names need to match the template's fields.
|
|
197
|
+
- **Import From Image (Magic Layers):** works best on flat graphics like posters, flyers, and social posts. Upload the image first with **Asset → Upload From URL**, then use its ID: `{{ $json.job.asset.id }}`. Magic Layers must be allowed in your team's Canva settings.
|
|
198
|
+
- **Remove Background:** saves the result as a new image and leaves the original as it is. The new image's ID is at `job.result.asset.id`.
|
|
199
|
+
- **Generate Design:** the more your brief says about the topic, audience, wording, tone, and look, the better the result. For presentations, you can also plan the slides with **Outline**, using Canva's format: `{"sections": [{"title": "…", "description": "…", "points": ["…"]}]}` (up to 100 slides). Leave `sections` empty to let Canva decide. If an earlier node gives you just a list of slides, use `{{ { "sections": $json.slides } }}`. Open the new design from `job.result.design.urls.edit_url` (the link works for 30 days).
|
|
200
|
+
- **Generate Image:** leave **Model** on **Auto** unless you need a specific one. Images are saved to the user's Uploads by default, so you can use `job.result.image.asset.id` in **Design → Create** or **Autofill**. The download link at `job.result.image.url` works for 24 hours. To pass the file to another node, download it with an **HTTP Request** node.
|
|
201
|
+
- **Move Item:** use `root` as the **To Folder ID** to move something to the top level of your Projects.
|
|
205
202
|
|
|
206
|
-
|
|
203
|
+
## Run it locally
|
|
207
204
|
|
|
208
|
-
|
|
205
|
+
For developers who want to work on this node.
|
|
209
206
|
|
|
210
|
-
|
|
207
|
+
You'll need Node.js 24.15 or later and npm. Then run:
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
npm install
|
|
211
|
+
npm run dev
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
This builds the node and starts n8n at [http://127.0.0.1:5678](http://127.0.0.1:5678) with the Canva node loaded and hot reload turned on. When you set up your Canva app, use `http://127.0.0.1:5678/rest/oauth2-credential/callback` as the redirect URL.
|
|
215
|
+
|
|
216
|
+
**If `npm run dev` fails with `EACCES: permission denied, rename ...` in `~/.npm/_cacache`:** your npm cache has files owned by another user, usually left behind by running npm with `sudo`. Take ownership of the cache, then try again:
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
sudo chown -R $(id -u):$(id -g) ~/.npm
|
|
220
|
+
```
|
|
211
221
|
|
|
212
222
|
## Resources
|
|
213
223
|
|
|
214
|
-
- [
|
|
215
|
-
- [
|
|
216
|
-
- [Canva
|
|
217
|
-
- [
|
|
218
|
-
- [Canva Developer Documentation](https://www.canva.dev/)
|
|
224
|
+
- [Example workflows](./examples/), ready to import
|
|
225
|
+
- [Canva REST APIs](https://www.canva.dev/docs/apps/rest-apis/) and the [REST API reference](https://www.canva.dev/docs/apps/reference/)
|
|
226
|
+
- [Canva Developer Portal](https://www.canva.com/developers/apps)
|
|
227
|
+
- [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes)
|