Appearance
Connect API — Users
Users Overview
The Canva Connect APIs for user information.
The users endpoints let you get information about the current user, including their user ID, team ID, and display name.
For more information about Canva users, see Canva concepts.
Users APIs
- Get details of the current user: Get details about the current user without requiring a scope.
- Get profile of the current user: Get the profile information about the current user. This endpoint is being actively developed to return more information.
- Get user capabilities: Gets the API capabilities for the user account.
Get Current User
Returns the User ID and Team ID of the user account associated with the provided access token.
HTTP method and URL path
GET https://api.canva.com/rest/v1/users/me
This operation is rate limited to 10 requests per minute for each user of your integration.
Authentication and authorization
This endpoint requires a valid access token and requires no specific scopes.
Header parameters
<Prop.List> <Prop name="Authorization" type="string" required> Provides credentials to authenticate the request, in the form of a Bearer token.
For example: `Authorization: Bearer {token}`
</Prop> </Prop.List>
Example request
Examples for using the /v1/users/me endpoint:
<Tabs storageKey="example.language" disableContentTransition> <Tab name="cURL"> sh curl --request GET 'https://api.canva.com/rest/v1/users/me' \ --header 'Authorization: Bearer {token}' </Tab>
<Tab name="Node.js"> ```js const fetch = require("node-fetch");
fetch("https://api.canva.com/rest/v1/users/me", {
method: "GET",
headers: {
"Authorization": "Bearer {token}",
},
})
.then(async (response) => {
const data = await response.json();
console.log(data);
})
.catch(err => console.error(err));
```
</Tab>
<Tab name="Java"> ```java import java.io.IOException; import java.net.URI; import java.net.http.*;
public class ApiExample {
public static void main(String[] args) throws IOException, InterruptedException {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.canva.com/rest/v1/users/me"))
.header("Authorization", "Bearer {token}")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request,
HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
```
</Tab>
<Tab name="Python"> ```py import requests
headers = {
"Authorization": "Bearer {token}"
}
response = requests.get("https://api.canva.com/rest/v1/users/me",
headers=headers
)
print(response.json())
```
</Tab>
<Tab name="C#"> ```csharp using System.Net.Http;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://api.canva.com/rest/v1/users/me"),
Headers =
{
{ "Authorization", "Bearer {token}" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
};
```
</Tab>
<Tab name="Go"> ```go package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://api.canva.com/rest/v1/users/me"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer {token}")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}
```
</Tab>
<Tab name="PHP"> ```php $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://api.canva.com/rest/v1/users/me", CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => array( 'Authorization: Bearer {token}', ), ));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if (empty($err)) {
echo $response;
} else {
echo "Error: " . $err;
}
```
</Tab>
<Tab name="Ruby"> ```ruby require 'net/http' require 'uri'
url = URI('https://api.canva.com/rest/v1/users/me')
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request['Authorization'] = 'Bearer {token}'
response = http.request(request)
puts response.read_body
```
</Tab> </Tabs>
Success response
If successful, the endpoint returns a 200 response with a JSON body with the following parameters:
<Prop.List> <Prop name="team_user" type="TeamUserSummary" required mode="output"> Metadata for the user, consisting of the User ID and Team ID.
<PillAccordion title={<>Properties of <strong>team_user</strong></>} defaultExpanded={true}>
<Prop.List>
<Prop name="user_id" type="string" required mode="output">
The ID of the user.
</Prop>
<Prop name="team_id" type="string" required mode="output">
The ID of the user's Canva Team.
</Prop>
</Prop.List>
</PillAccordion>
</Prop> </Prop.List>
Example response
json
{
"team_user": {
"user_id": "auDAbliZ2rQNNOsUl5OLu",
"team_id": "Oi2RJILTrKk0KRhRUZozX"
}
}Get User Profile
Currently, this returns the display name of the user account associated with the provided access token. More user information is expected to be included in the future.
HTTP method and URL path
GET https://api.canva.com/rest/v1/users/me/profile
This operation is rate limited to 10 requests per minute for each user of your integration.
Authentication and authorization
This endpoint requires a valid access token that acts on behalf of a user.
Scopes
The access token must have all the following scopes (permissions):
profile:read
Header parameters
<Prop.List> <Prop name="Authorization" type="string" required> Provides credentials to authenticate the request, in the form of a Bearer token.
For example: `Authorization: Bearer {token}`
</Prop> </Prop.List>
Example request
Examples for using the /v1/users/me/profile endpoint:
<Tabs storageKey="example.language" disableContentTransition> <Tab name="cURL"> sh curl --request GET 'https://api.canva.com/rest/v1/users/me/profile' \ --header 'Authorization: Bearer {token}' </Tab>
<Tab name="Node.js"> ```js const fetch = require("node-fetch");
fetch("https://api.canva.com/rest/v1/users/me/profile", {
method: "GET",
headers: {
"Authorization": "Bearer {token}",
},
})
.then(async (response) => {
const data = await response.json();
console.log(data);
})
.catch(err => console.error(err));
```
</Tab>
<Tab name="Java"> ```java import java.io.IOException; import java.net.URI; import java.net.http.*;
public class ApiExample {
public static void main(String[] args) throws IOException, InterruptedException {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.canva.com/rest/v1/users/me/profile"))
.header("Authorization", "Bearer {token}")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request,
HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
```
</Tab>
<Tab name="Python"> ```py import requests
headers = {
"Authorization": "Bearer {token}"
}
response = requests.get("https://api.canva.com/rest/v1/users/me/profile",
headers=headers
)
print(response.json())
```
</Tab>
<Tab name="C#"> ```csharp using System.Net.Http;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://api.canva.com/rest/v1/users/me/profile"),
Headers =
{
{ "Authorization", "Bearer {token}" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
};
```
</Tab>
<Tab name="Go"> ```go package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://api.canva.com/rest/v1/users/me/profile"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer {token}")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}
```
</Tab>
<Tab name="PHP"> ```php $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://api.canva.com/rest/v1/users/me/profile", CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => array( 'Authorization: Bearer {token}', ), ));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if (empty($err)) {
echo $response;
} else {
echo "Error: " . $err;
}
```
</Tab>
<Tab name="Ruby"> ```ruby require 'net/http' require 'uri'
url = URI('https://api.canva.com/rest/v1/users/me/profile')
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request['Authorization'] = 'Bearer {token}'
response = http.request(request)
puts response.read_body
```
</Tab> </Tabs>
Success response
If successful, the endpoint returns a 200 response with a JSON body with the following parameters:
<Prop.List> <Prop name="profile" type="UserProfile" required mode="output"> Profile for the user, consisting of the display name and other attributes.
<PillAccordion title={<>Properties of <strong>profile</strong></>} defaultExpanded={true}>
<Prop.List>
<Prop name="display_name" type="string" mode="output">
The name of the user as shown in the Canva UI.
</Prop>
</Prop.List>
</PillAccordion>
</Prop> </Prop.List>
Example response
json
{
"profile": {
"display_name": "Jane Doe"
}
}Get User Capabilities
Lists the API capabilities for the user account associated with the provided access token. For more information, see Capabilities.
HTTP method and URL path
GET https://api.canva.com/rest/v1/users/me/capabilities
This operation is rate limited to 10 requests per minute for each user of your integration.
Authentication and authorization
This endpoint requires a valid access token that acts on behalf of a user.
Scopes
The access token must have all the following scopes (permissions):
profile:read
Header parameters
<Prop.List> <Prop name="Authorization" type="string" required> Provides credentials to authenticate the request, in the form of a Bearer token.
For example: `Authorization: Bearer {token}`
</Prop> </Prop.List>
Example request
Examples for using the /v1/users/me/capabilities endpoint:
<Tabs storageKey="example.language" disableContentTransition> <Tab name="cURL"> sh curl --request GET 'https://api.canva.com/rest/v1/users/me/capabilities' \ --header 'Authorization: Bearer {token}' </Tab>
<Tab name="Node.js"> ```js const fetch = require("node-fetch");
fetch("https://api.canva.com/rest/v1/users/me/capabilities", {
method: "GET",
headers: {
"Authorization": "Bearer {token}",
},
})
.then(async (response) => {
const data = await response.json();
console.log(data);
})
.catch(err => console.error(err));
```
</Tab>
<Tab name="Java"> ```java import java.io.IOException; import java.net.URI; import java.net.http.*;
public class ApiExample {
public static void main(String[] args) throws IOException, InterruptedException {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.canva.com/rest/v1/users/me/capabilities"))
.header("Authorization", "Bearer {token}")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request,
HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
```
</Tab>
<Tab name="Python"> ```py import requests
headers = {
"Authorization": "Bearer {token}"
}
response = requests.get("https://api.canva.com/rest/v1/users/me/capabilities",
headers=headers
)
print(response.json())
```
</Tab>
<Tab name="C#"> ```csharp using System.Net.Http;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://api.canva.com/rest/v1/users/me/capabilities"),
Headers =
{
{ "Authorization", "Bearer {token}" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
};
```
</Tab>
<Tab name="Go"> ```go package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://api.canva.com/rest/v1/users/me/capabilities"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer {token}")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}
```
</Tab>
<Tab name="PHP"> ```php $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://api.canva.com/rest/v1/users/me/capabilities", CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => array( 'Authorization: Bearer {token}', ), ));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if (empty($err)) {
echo $response;
} else {
echo "Error: " . $err;
}
```
</Tab>
<Tab name="Ruby"> ```ruby require 'net/http' require 'uri'
url = URI('https://api.canva.com/rest/v1/users/me/capabilities')
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request['Authorization'] = 'Bearer {token}'
response = http.request(request)
puts response.read_body
```
</Tab> </Tabs>
Success response
If successful, the endpoint returns a 200 response with a JSON body with the following parameters:
<Prop.List> <Prop name="capabilities" type="string[]" mode="output"> Some APIs are annotated with required capabilities. These endpoints require the user to possess the required capabilities in order to be called successfully.
<Prop.Extras>
**Available values:**
* `autofill`: Capability required to call autofill APIs Users that are members of a Canva Enterprise organization have this capability.
* `brand_template`: Capability required to use brand template APIs. Users that are members of a Canva Enterprise organization have this capability.
* `resize`: Capability required to create design resize jobs. Users on a Canva plan with premium features (such as Canva Pro) have this capability.
* `team_restricted_app`: Capability required to create a team-restricted app. Users that are members of the Canva Enterprise or the Canva for Education organization have this capability.
</Prop.Extras>
</Prop> </Prop.List>
Example response
json
{
"capabilities": [
"autofill"
]
}