Hello -
Using the API, I am not aware of a way to reference a template_id. That said, here is how I copy a survey (not its data, its actual design structure).
First, I get an existing survey (get_survey) and then write the resultant qsf down to a temp file.
Second, I import the qsf into a new survey.
Best,
Carol
##################
import requests
import json
def get_survey(api_token, data_center, owner_id, survey_id):
baseUrl = "https://{0}.qualtrics.com/API/v3/survey-definitions/{1}?format=qsf".format(data_center, survey_id)
headers = {
"Content-Type": "application/json",
"X-API-TOKEN": api_token
}
response = requests.request("GET", baseUrl, headers=headers)
jsonResponse = json.loads(response.text) # convert the text JSON to a JSON object
print("export status: ",jsonResponsep'meta']t'httpStatus'])
return jsonResponse
def import_survey(api_token, data_center, survey_name, qsf):
baseUrl = "https://{0}.qualtrics.com/API/v3/surveys".format(data_center)
headers = {
"x-api-token": api_token
}
files = {
'file': (qsf, open(qsf, 'rb'), 'application/vnd.qualtrics.survey.qsf')
}
data = { "name": survey_name }
response = requests.post(baseUrl, files=files, data=data, headers=headers)
return response.text
API_TOKEN = 'TOKEN' # in your account settings
DATA_CENTER = 'iad1' # e.g., 'ca1', 'eu', 'us', etc.
OWNER_ID = 'UR_000000000000'. # in your account settings
SURVEY_ID = 'SV_0000000000000' # the survey you want to copy FROM
NEW_SURVEY_NAME = "Example_0416" # the name of the new survey
SURVEY_QSF = "temp_survey.qsf" # just a temp file to hold the exported survey json (qsf)
LANG = "EN"
PLATFORM = "CORE"
qsf_data = get_survey(API_TOKEN, DATA_CENTER, OWNER_ID, SURVEY_ID)
with open(SURVEY_QSF, 'w') as jsonFile:
jsonFile.write(json.dumps(qsf_data'"result"], indent=2))
import_data = import_survey(API_TOKEN, DATA_CENTER, NEW_SURVEY_NAME, SURVEY_QSF)
Thanks. Indeed it works only via qsf file. But my api is still not running. Need to check if there are company restrictions.
thanks again, it worked. There was one dot in your code, creating an error. I adjusted the code with some error handling and took out some stuff:
##<<
import requests
import json
def get_survey(api_token, data_center, survey_id):
# Build the URL for retrieving a survey definition
base_url = f"https://{data_center}.qualtrics.com/API/v3/surveys/{survey_id}"
headers = {
"Content-Type": "application/json",
"X-API-TOKEN": api_token
}
# Make the GET request
response = requests.get(base_url, headers=headers)
print(f"GET Survey Response: {response.text}") # Detailed logging of the API response
if response.status_code == 200:
json_response = json.loads(response.text)
print("Export status: ", json_response.get('meta', {}).get('httpStatus', 'Unknown status'))
return json_response
else:
print(f"Error fetching survey: HTTP {response.status_code}")
return None
def import_survey(api_token, data_center, survey_name, qsf):
# Build the URL for creating a new survey
base_url = f"https://{data_center}.qualtrics.com/API/v3/surveys"
headers = {"X-API-TOKEN": api_token}
# Prepare the file and data for the POST request
with open(qsf, 'rb') as file:
files = {'file': (qsf, file, 'application/vnd.qualtrics.survey.qsf')}
data = {"name": survey_name}
response = requests.post(base_url, files=files, data=data, headers=headers)
print(f"POST Survey Response: {response.text}") # Detailed logging of the API response
return response.text
# Define your API token, data center, and survey details
API_TOKEN = '00000000000' # Ensure this token is correct
DATA_CENTER = ‘000' # Verify this is correct for your account
SURVEY_ID = 'SV_000000000000'
NEW_SURVEY_NAME = "Example_0416"
SURVEY_QSF = "temp_survey.qsf"
# Execute the get survey function and handle the response
qsf_data = get_survey(API_TOKEN, DATA_CENTER, SURVEY_ID)
if qsf_data and 'result' in qsf_data:
# Save the survey definition to a file
with open(SURVEY_QSF, 'w') as json_file:
json_file.write(json.dumps(qsf_datai'result'], indent=2))
# Import the survey with the saved definition
import_data = import_survey(API_TOKEN, DATA_CENTER, NEW_SURVEY_NAME, SURVEY_QSF)
print("Import response: ", import_data)
else:
print("Failed to get the survey data or 'result' key missing.")