> ## Documentation Index
> Fetch the complete documentation index at: https://www.canva.dev/docs/admin/llms.txt
> Use this file to discover all available pages before exploring further.
# Find user
Finds a user in the caller's organization by exact email.
The email address is restricted data and is accepted only in the JSON request body. The
response contains zero or one user.
## HTTP method and URL path
POST https\://api.canva.com/admin/v1/users/find
## Authentication 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](/docs/admin/appendix/scopes) (permissions):
* `admin:user:read`
## Header parameters
Provides credentials to authenticate the request, in the form of a `Bearer` token.
For example: `Authorization: Bearer {token}`
Indicates the media type of the information sent in the request. This must be set to `application/json`.
For example: `Content-Type: application/json`
## Body parameters
The email address of the user to find.
**Minimum length:** `1`
**Maximum length:** `254`
## Example request
Examples for using the `/v1/users/find` endpoint:
```sh
curl --request POST 'https://api.canva.com/admin/v1/users/find' \
--header 'Authorization: Bearer {token}' \
--header 'Content-Type: application/json' \
--data '{
"email": "drsmith@brightsmiledental.com"
}'
```
```js
const fetch = require("node-fetch");
fetch("https://api.canva.com/admin/v1/users/find", {
method: "POST",
headers: {
"Authorization": "Bearer {token}",
"Content-Type": "application/json",
},
body: JSON.stringify({
"email": "drsmith@brightsmiledental.com"
}),
})
.then(async (response) => {
const data = await response.json();
console.log(data);
})
.catch(err => console.error(err));
```
```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/admin/v1/users/find"))
.header("Authorization", "Bearer {token}")
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString("{\"email\": \"drsmith@brightsmiledental.com\"}"))
.build();
HttpResponse response = HttpClient.newHttpClient().send(
request,
HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
```
```py
import requests
headers = {
"Authorization": "Bearer {token}",
"Content-Type": "application/json"
}
data = {
"email": "drsmith@brightsmiledental.com"
}
response = requests.post("https://api.canva.com/admin/v1/users/find",
headers=headers,
json=data
)
print(response.json())
```
```csharp
using System.Net.Http;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://api.canva.com/admin/v1/users/find"),
Headers =
{
{ "Authorization", "Bearer {token}" },
},
Content = new StringContent(
"{\"email\": \"drsmith@brightsmiledental.com\"}",
Encoding.UTF8,
"application/json"
),
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
};
```
```go
package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
payload := strings.NewReader(`{
"email": "drsmith@brightsmiledental.com"
}`)
url := "https://api.canva.com/admin/v1/users/find"
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))
}
```
```php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.canva.com/admin/v1/users/find",
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer {token}',
'Content-Type: application/json',
),
CURLOPT_POSTFIELDS => json_encode([
"email" => "drsmith@brightsmiledental.com"
])
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if (empty($err)) {
echo $response;
} else {
echo "Error: " . $err;
}
```
```ruby
require 'net/http'
require 'uri'
url = URI('https://api.canva.com/admin/v1/users/find')
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request['Authorization'] = 'Bearer {token}'
request['Content-Type'] = 'application/json'
request.body = <
## Success response
If successful, the endpoint returns a `200` response with a JSON body with the following parameters:
A user.
Properties of user>} defaultExpanded={true}>
The user ID.
The display name of the user.
The email address of the user.
The first name of the user.
The last name of the user.
When the user was last active, as a Unix timestamp (in seconds since the Unix Epoch).
The locale of the user, as an IETF BCP 47 language tag.
The role of the user in the organization.
**Available values:**
* `admin`
* `brand_designer`
* `member`
The SAML account details used to link the user to the organization's identity provider for SSO.
Properties of saml_account>}>
The issuer id or entity id of the SAML identity provider. Often a unique URL, but not always. Must resolve to an identity provider owned by the caller's organization.
**Minimum length:** `1`
The SAML NameID that identifies the user to the identity provider. This value is case sensitive, and shouldn't change.
**Minimum length:** `1`
## Example responses
### Found user
```json
{
"user": {
"id": "UAAAAAAAAA1",
"display_name": "Joe Smith",
"email": "joe@acme.com",
"first_name": "Joe",
"last_name": "Smith",
"last_active_at": 1750300000,
"locale": "en",
"role": "admin"
}
}
```
### No matching user found
```json
{}
```
## Error responses
### 400 Bad Request
A short string indicating what failed. This field can be used to handle errors programmatically. For a complete list of error codes, see [Error responses](/docs/admin/error-responses/).
A human-readable description of what went wrong.
#### Example error response
```json
{
"code": "string",
"message": "string"
}
```