- product:messaging - language:python ## Overview This script will let you assign numbers to your campaign all in one go requiring only some simple Python, our Campaign Registry APIs, and a CSV of your numbers! If you need help getting a CSV of the numbers you want to add, you could try [listing your account numbers to csv](/guides/list-numbers-to-csv) or [purchasing new numbers in bulk](/guides/how-to-purchase-numbers-in-bulk). Full code example: Assigning Numbers to a Campaign in Bulk python import requests from requests.auth import HTTPBasicAuth import csv # define your variables here to reuse throughout code SpaceURL = .signalwire.com projectID = authToken = campaignSID = PathToCSV = UnregisteredNumbers.csv results = [] # Open CSV file with unregistered numbers with open(PathToCSV, r, encoding=utf-8-sig) as csvfile: reader = csv.reader(csvfile) next(reader, None) # Change to E164 format if its not already in that format for row in reader: if + not in row[0]: results.append(+ + row[0]) else: results.append(row[0]) for result in results: try: response = requests.post(fhttps://{SpaceURL}/api/relay/rest/registry/beta/campaigns/{campaignSID}/orders, json={phone_numbers: [result]}, headers={ Accept: application/json, Content-Type: application/json}, auth=HTTPBasicAuth(projectID, authToken)) if response.ok: print(f{result} added to campaign) else: print(f{response.status_code} {response.text}. {result} not added to campaign.) except Exception as e: print(fError: {str(e)}) Required Resources This script does not require any additional packages except for those native to Python! However, you will need the campaignSID of the campaign that will contain the numbers you are assigning. You can find your campaign SID by going to the Messaging Campaigns section of your SignalWire Space and clicking the specific campaign whose numbers you need. The SID is the long alphanumeric string at the top as shown here: ** How to get API Credentials ** The API also requires that you authenticate yourself using your Project ID, API Token, and Space URL. If you do not know where to find these values, check out our guide to [Navigating your SignalWire Space](/guides/navigating-your-space#api)! How to Run the Snippet - If you copy the code and save it to a file named assignNumbers.py, for example, to run it you will need to run: MacOS/Linux - python3 assignNumbers.py Windows - py assignNumbers.py Step by Step Code Walkthrough -- This snippet essentially consists of only three parts - we import our required libraries and define our variables, we read in our CSV, and we rotate through each number in the CSV making an HTTP request to assign it to our campaign. Thats all there is to it! ### Import Required Libraries and Define Variables Here we will import csv, requests, and HTTPBasicAuth from requests. These tools make it easier to manage our CSV file and make HTTP requests to SignalWire. Make sure that PathToCSV is correct for both your OS and your file structure! If your UnregisteredNumbers.csv file is in a different folder, you will need to adjust the value given to make sure that you point to the correct path. python import requests from requests.auth import HTTPBasicAuth import csv # define your variables here to reuse throughout code SpaceURL = .signalwire.com projectID = authToken = campaignSID = PathToCSV = UnregisteredNumbers.csv results = [] ### Open CSV File with Numbers to Register In this step, we will use csv to open our file containing the numbers to be registered. We will use next(reader, None) to skip the header, but if your CSV doesnt have a header, you can comment this line out! We will check each number to make sure that it is in E164 format and then add it to our results list. python # Open CSV file with unregistered numbers with open(PathToCSV, r, encoding=utf-8-sig) as csvfile: reader = csv.reader(csvfile) # skip column header next(reader, None) # Change to E164 format if its not already in that format for row in reader: if + not in row[0]: results.append(+ + row[0]) else: results.append(row[0]) ### Assign Numbers to Campaign Now that we have that all done, we can just loop through our results list and use the [assign phone number to campaign endpoint](/rest/signalwire-rest/endpoints/space/create-order) to assign each to the campaign. If the HTTP request is successful, we will print that +1xxxyyyzzzz added to the campaign. If not, we will print that the number wasnt added and include the status code/reason why. python for result in results: try: response = requests.post(fhttps://{SpaceURL}/api/relay/rest/registry/beta/campaigns/{campaignSID}/orders, json={phone_numbers: [result]}, headers={ Accept: application/json, Content-Type: application/json}, auth=HTTPBasicAuth(projectID, authToken)) if response.ok: print(f{result} added to campaign) else: print(f{response.status_code} {response.text}. {result} not added to campaign.) except Exception as e: print(fError: {str(e)}) Wrap up - By utilizing SignalWires [Campaign Registry APIs](../../../getting-started/campaign-registry/campaign-registry-all-you-need-to-know.mdx), you can easily build a system that automates all of your campaign management in any of your favorite languages! Resources - [Create a Phone Number Assignment API Endpoint](/rest/signalwire-rest/endpoints/space/create-order) - [Purchase a number, assign a webhook, and assign it to a campaign](/guides/how-to-purchase-a-number-assign-a-webhook-and-assign-it-to-a-campaign) - [List Numbers to CSV](/guides/list-numbers-to-csv) - [Purchase Numbers in Bulk](/guides/how-to-purchase-numbers-in-bulk) Sign Up Here If you would like to test this example out, you can [create a SignalWire account and Space](https://m.signalwire.com/signups/new?s=1). Please feel free to reach out to us on our [Community Slack](https://signalwire.community/) or create a Support ticket from your SignalWire Space if you need guidance!