Create team member
Adds a user to a team. The user must be managed by the organization that owns the team.
HTTP method and URL path
https://api.canva.com /admin /v1 /teams/{teamId}/membersAuthentication and authorization
This endpoint requires a valid access token that was generated using client credentials.
Scopes
The access token must have all the following scopes (permissions):
admin:team:write
Header parameters
Content-TypestringIndicates the media type of the information sent in the request. This must be set to application/json.
For example: Content-Type: application/json
Path parameters
teamIdstringThe team ID.
Body parameters
user_idstringThe user ID.
rolestringThe role of the member in the team.
Available values:
admindesignermember
Example request
Examples for using the /v1/teams/{teamId}/members endpoint:
curl --request POST 'https://api.canva.com/admin/v1/teams/{teamId}/members' \--header 'Authorization: Bearer {token}' \--header 'Content-Type: application/json' \--data '{"user_id": "UAAAAAAAAA1","role": "admin"}'
const fetch = require("node-fetch");fetch("https://api.canva.com/admin/v1/teams/{teamId}/members", {method: "POST",headers: {"Authorization": "Bearer {token}","Content-Type": "application/json",},body: JSON.stringify({"user_id": "UAAAAAAAAA1","role": "admin"}),}).then(async (response) => {const data = await response.json();console.log(data);}).catch(err => console.error(err));
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/admin/v1/teams/{teamId}/members")).header("Authorization", "Bearer {token}").header("Content-Type", "application/json").method("POST", HttpRequest.BodyPublishers.ofString("{\"user_id\": \"UAAAAAAAAA1\", \"role\": \"admin\"}")).build();HttpResponse<String> response = HttpClient.newHttpClient().send(request,HttpResponse.BodyHandlers.ofString());System.out.println(response.body());}}
import requestsheaders = {"Authorization": "Bearer {token}","Content-Type": "application/json"}data = {"user_id": "UAAAAAAAAA1","role": "admin"}response = requests.post("https://api.canva.com/admin/v1/teams/{teamId}/members",headers=headers,json=data)print(response.json())
using System.Net.Http;var client = new HttpClient();var request = new HttpRequestMessage{Method = HttpMethod.Post,RequestUri = new Uri("https://api.canva.com/admin/v1/teams/{teamId}/members"),Headers ={{ "Authorization", "Bearer {token}" },},Content = new StringContent("{\"user_id\": \"UAAAAAAAAA1\", \"role\": \"admin\"}",Encoding.UTF8,"application/json"),};using (var response = await client.SendAsync(request)){response.EnsureSuccessStatusCode();var body = await response.Content.ReadAsStringAsync();Console.WriteLine(body);};
package mainimport ("fmt""io""net/http""strings")func main() {payload := strings.NewReader(`{"user_id": "UAAAAAAAAA1","role": "admin"}`)url := "https://api.canva.com/admin/v1/teams/{teamId}/members"req, _ := http.NewRequest("POST", url, payload)req.Header.Add("Authorization", "Bearer {token}")req.Header.Add("Content-Type", "application/json")res, _ := http.DefaultClient.Do(req)defer res.Body.Close()body, _ := io.ReadAll(res.Body)fmt.Println(string(body))}
$curl = curl_init();curl_setopt_array($curl, array(CURLOPT_URL => "https://api.canva.com/admin/v1/teams/{teamId}/members",CURLOPT_CUSTOMREQUEST => "POST",CURLOPT_RETURNTRANSFER => true,CURLOPT_HTTPHEADER => array('Authorization: Bearer {token}','Content-Type: application/json',),CURLOPT_POSTFIELDS => json_encode(["user_id" => "UAAAAAAAAA1","role" => "admin"])));$response = curl_exec($curl);$err = curl_error($curl);curl_close($curl);if (empty($err)) {echo $response;} else {echo "Error: " . $err;}
require 'net/http'require 'uri'url = URI('https://api.canva.com/admin/v1/teams/{teamId}/members')http = Net::HTTP.new(url.host, url.port)http.use_ssl = truerequest = Net::HTTP::Post.new(url)request['Authorization'] = 'Bearer {token}'request['Content-Type'] = 'application/json'request.body = <<REQUEST_BODY{"user_id": "UAAAAAAAAA1","role": "admin"}REQUEST_BODYresponse = http.request(request)puts response.read_body
Success response
If successful, the endpoint returns a 200 response with a JSON body with the following parameters:
team_memberTeamMemberA user in a team.
user_idstringThe user ID.
team_idstringThe team ID.
rolestringThe role of the member in the team.
Available values:
admindesignermember
Example response
{"team_member": {"user_id": "UAAAAAAAAA1","team_id": "BAAAAAAAAA1","role": "admin"}}
Error responses
400 Bad Request
codestringA short string indicating what failed. This field can be used to handle errors programmatically. For a complete list of error codes, see Error responses.
messagestringA human-readable description of what went wrong.
Example error response
The user is not managed by the organization
{"code": "user_not_managed","message": "User {userId} is not managed by the organization"}
404 Not Found
codestringA short string indicating what failed. This field can be used to handle errors programmatically. For a complete list of error codes, see Error responses.
messagestringA human-readable description of what went wrong.
Example error responses
The team was not found
{"code": "team_not_found","message": "Team {teamId} not found"}
The user was not found
{"code": "user_not_found","message": "User {userId} not found"}