How to bulk create Users in Jira

This article discusses how you can leverage Create user (/rest/userRest API endpoint to create bulk users in Jira. This approach is targeted for all the Jira versions, where the /rest/api/2/user endpoint is supported.

Prior to the script execution, the CSV file with the user information or supported payload(emailAddress, displayName, name, password) is to be prepared.

Option 1: Using Bash command line

Prepare and create the script as below(by replacing Jira base URL, API username, password and path to CSV file):

# cat

while read i ;
do emailAddress=$(echo $i | cut -d "," -f3);
name=$(echo $i | cut -d "," -f1);
displayName=$(echo $i | cut -d "," -f2);
password=$(echo $i | cut -d "," -f4);
data='{"emailAddress": "'${emailAddress}'","displayName": "'${displayName}'","name": "'${name}'","password": "'${password}'"}';
echo $data;
curl -X POST --url '<JIRA_BASE_URL>/rest/api/2/user' --user '<username:password>' --header 'Accept: application/json' --header 'Content-Type: application/json' --data "${data}" ;
echo $command;
done < <PATH_TO_CSV_FILE>/test.csv

Now, create the CSV file with user information:

# cat test.csv
test1,Test User 1,,Passw0rd1
test2,Test User 2,,Passw0rd2
test3,Test User 3,,Passw0rd3
test4,Test User 4,,Passw0rd4
test5,Test User 5,,Passw0rd5
Then, execute the bash script (sh to create users in bulk.
Option 2 Using Python script
Prepare the script as in the following example:
import sys
import csv
import os
from optparse import OptionParser
import requests
from requests.auth import HTTPBasicAuth
import json
parser = OptionParser()
parser.add_option("--username", dest="username", help="API username")
parser.add_option("--password", dest="password", help="API password")
parser.add_option("--url", dest="weburl", help="Endpoint hostname")
parser.add_option("--input-file", dest="INPUT_FILE", help="CSV values of emailAddress name displayName")
parser.add_option("--csv-delimiter", dest="dlimit", help="CSV seperator used")
(options, args) = parser.parse_args()

if not options.INPUT_FILE:
        parser.error("INPUT_FILE must be specified")
if not options.username or not options.weburl or not options.password or not options.dlimit :
        parser.error("--username <username> --password <password> --url <endpoint uri> --input-file <input csv file with header emailAddress name displayName> --csv-delimiter <; or ,>")

url = "https://"+options.weburl+"/rest/api/2/user"
auth = HTTPBasicAuth(options.username, options.password)
headers = {"Accept": "application/json", "Content-Type": "application/json"}
with open(options.INPUT_FILE) as csvfile:
    reader = csv.DictReader(csvfile, delimiter=options.dlimit)
    for row in reader:
        emailAddress = row['emailAddress']
        displayName = row['displayName']
        name = row['name']
        password = row['password']
        payload = json.dumps( {"emailAddress": emailAddress, "displayName": displayName, "name": name, "password": password } )
        response = requests.request("POST", url, data=payload, headers=headers, auth=auth)
        print(json.dumps(json.loads(response.text), sort_keys=True, indent=4, separators=(",", ": ")))
Now,Create a CSV file as in the following example, separated with ",":
# cat
test31,Test User 31,,Passw0rd1
test32,Test User 32,,Passw0rd2
test33,Test User 33,,Passw0rd3
test34,Test User 34,,Passw0rd4
test35,Test User 35,,Passw0rd5
Then, execute the script as below to create users in bulk(--url should be just hostname and without https):
python --username admin --password admin --url --input-file ./test.csv --csv-delimiter ,

1 comment

Shilpa Sanil October 31, 2022

While using bash script am getting the error:


<div class="aui-message aui-message-warning warning">
<p>Encountered a <code>&quot;401 - Unauthorized&quot;</code> error while loading this page.</p>
<p>Basic Authentication Failure - Reason : AUTHENTICATED_FAILED</p>
<p><a href="/secure/MyJiraHome.jspa">Go to Jira home</a></p>
</section><!-- .aui-page-panel-content -->
</div><!-- .aui-page-panel-inner --></div><!-- .aui-page-panel -->


Can anybody please help me with this?


Thanks in advance



Log in or Sign up to comment
AUG Leaders

Atlassian Community Events