Set Root Attributes During User Import

This guide will show you how to set root attributes for a user during import using Auth0's Management API. This allows you to minimize the number of API calls required to set root attributes when importing users. To see which attributes you can import, visit Normalized User Profile Structure.

Make a POST call to the Create Job to Import Users endpoint. Be sure to replace MGMT_API_ACCESS_TOKEN, CONNECTION_ID, and JSON_USER_FILE_PATH placeholder values with your Management API Access Token, connection ID, and users filename, respectively.


curl --request POST \
  --url 'https://YOUR_DOMAIN/api/v2/jobs/usersimports' \
  --header 'authorization: Bearer MGMT_API_ACCESS_TOKEN' \
  --header 'content-type: multipart/form-data ' \
  --data '{ "connection_id": "CONNECTION_ID", "users": "JSON_USER_FILE_PATH" }'
var client = new RestClient("https://YOUR_DOMAIN/api/v2/jobs/usersimports");
var request = new RestRequest(Method.POST);
request.AddHeader("content-type", "multipart/form-data ");
request.AddHeader("authorization", "Bearer MGMT_API_ACCESS_TOKEN");
request.AddParameter("multipart/form-data ", "{ \"connection_id\": \"CONNECTION_ID\", \"users\": \"JSON_USER_FILE_PATH\" }", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io/ioutil"
)

func main() {

	url := "https://YOUR_DOMAIN/api/v2/jobs/usersimports"

	payload := strings.NewReader("{ \"connection_id\": \"CONNECTION_ID\", \"users\": \"JSON_USER_FILE_PATH\" }")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("content-type", "multipart/form-data ")
	req.Header.Add("authorization", "Bearer MGMT_API_ACCESS_TOKEN")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := ioutil.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.post("https://YOUR_DOMAIN/api/v2/jobs/usersimports")
  .header("content-type", "multipart/form-data ")
  .header("authorization", "Bearer MGMT_API_ACCESS_TOKEN")
  .body("{ \"connection_id\": \"CONNECTION_ID\", \"users\": \"JSON_USER_FILE_PATH\" }")
  .asString();
var axios = require("axios").default;

var options = {
  method: 'POST',
  url: 'https://YOUR_DOMAIN/api/v2/jobs/usersimports',
  headers: {
    'content-type': 'multipart/form-data ',
    authorization: 'Bearer MGMT_API_ACCESS_TOKEN'
  },
  data: '{ "connection_id": "CONNECTION_ID", "users": "JSON_USER_FILE_PATH" }'
};

axios.request(options).then(function (response) {
  console.log(response.data);
}).catch(function (error) {
  console.error(error);
});
#import <Foundation/Foundation.h>

NSDictionary *headers = @{ @"content-type": @"multipart/form-data ",
                           @"authorization": @"Bearer MGMT_API_ACCESS_TOKEN" };

NSData *postData = [[NSData alloc] initWithData:[@"{ "connection_id": "CONNECTION_ID", "users": "JSON_USER_FILE_PATH" }" dataUsingEncoding:NSUTF8StringEncoding]];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://YOUR_DOMAIN/api/v2/jobs/usersimports"]
                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                   timeoutInterval:10.0];
[request setHTTPMethod:@"POST"];
[request setAllHTTPHeaderFields:headers];
[request setHTTPBody:postData];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
                                            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                                                if (error) {
                                                    NSLog(@"%@", error);
                                                } else {
                                                    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
                                                    NSLog(@"%@", httpResponse);
                                                }
                                            }];
[dataTask resume];
$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://YOUR_DOMAIN/api/v2/jobs/usersimports",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "{ \"connection_id\": \"CONNECTION_ID\", \"users\": \"JSON_USER_FILE_PATH\" }",
  CURLOPT_HTTPHEADER => [
    "authorization: Bearer MGMT_API_ACCESS_TOKEN",
    "content-type: multipart/form-data "
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
import http.client

conn = http.client.HTTPSConnection("")

payload = "{ \"connection_id\": \"CONNECTION_ID\", \"users\": \"JSON_USER_FILE_PATH\" }"

headers = {
    'content-type': "multipart/form-data ",
    'authorization': "Bearer MGMT_API_ACCESS_TOKEN"
    }

conn.request("POST", "/YOUR_DOMAIN/api/v2/jobs/usersimports", payload, headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://YOUR_DOMAIN/api/v2/jobs/usersimports")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Post.new(url)
request["content-type"] = 'multipart/form-data '
request["authorization"] = 'Bearer MGMT_API_ACCESS_TOKEN'
request.body = "{ \"connection_id\": \"CONNECTION_ID\", \"users\": \"JSON_USER_FILE_PATH\" }"

response = http.request(request)
puts response.read_body
import Foundation

let headers = [
  "content-type": "multipart/form-data ",
  "authorization": "Bearer MGMT_API_ACCESS_TOKEN"
]

let postData = NSData(data: "{ "connection_id": "CONNECTION_ID", "users": "JSON_USER_FILE_PATH" }".data(using: String.Encoding.utf8)!)

let request = NSMutableURLRequest(url: NSURL(string: "https://YOUR_DOMAIN/api/v2/jobs/usersimports")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()

Value Description
MGMT_API_ACCESS_TOKEN Access Token for the Management API with the scope create:users.
CONNECTION_ID ID of the connection to which the users will be inserted. You can retrieve this info using the Get All Connections endpoint.
JSON_USER_FILE_PATH Filename of the file that contains the users to be imported. File should be in JSON format and include root attributes for users. For a list of available attributes, see User Profile Attributes. For an example of the file format, see Bulk User Import Database Schema and Examples.

Learn more