Acronis Webservices API User Manual

Webservices API Manual
WebService Interface Description
1. Introduction
This reference explains possibilities for integrating BackupAgent with other IT and/or
administrative services. It contains technical documentation describing the public WebService
In this case BackupAgent uses the following specifications for their WebService:
Version 4: Native SOAP/XML interface based on Microsoft WSE 2.0 sp3 Version 5: Native SOAP/XML interface based on Microsoft WCF
The native interface is completely open and offers full BackupAgent Provider functionality.
This document only demonstrates functionality for:
User account management Storage group management
This document will explain both SOAP/ XML integration. Technical references will be provided
on the following subjects:
Interface access and function specifications Code samples Exception codes
2. SOAP/XML interface - Version 4
BackupAgent’s core technology is a WebService. For security and authentication control this
interface is protected using Microsoft WSE 2.0 sp3. All WebService functions are available for
integration.
1
2.1 Access
To access the interface, choose a programming language or software package that supports
client consumption of a WSDL which is protected by WSE 2.0. By default C# allows easy and
reliable access to BackupAgent WebServices. Following step-by-step instructions show how to
access BackupAgent WebServices.
1. Find the WSDL. In the normal case the WSDL is provided on an url like
https://yourdomain.com/CloudBackupService/BackupService.asmx?WSDL
2. Create a proxy class to represent the WebService. In C# this proxy class is called a ‘web
reference’.
3. Derive the proxy class from the Microsoft.Web.Services2.WebServicesClientProtocol
4. Attach a UsernameToken to object references based on the client proxy class using the
RequestSoapContext.Security.Tokens collection. Add a MessageSignature based on the
UsernameToken to the RequestSoapContext.Security.Elements collection.
5. Login for user/administrator access calling the CheckUserLogin function.
Important: Use the URL where the license is installed on. Otherwise you will receive a license
error.
The UsernameToken must be based on an existing username/password combination in the
BackupAgent Server system. For full access to administrative functions an administrator
UsernameToken must be provided.
2.2 Code sample for connecting to a BackupAgent WebService
Deriving the proxy class from WSE 2.0 WebServiceClientProtocol in class definition:
public class BAWebService2 :
Microsoft.Web.Services2.WebServicesClientProtocol{ … }
Creating an object reference to attach a token:
StorageXS.BAWebService2 server = new StorageXS.BAWebService2();
UsernameToken token = new UsernameToken(username,password,PasswordOption.SendPlainText);
2
server.RequestSoapContext.Security.Tokens.Clear();
server.RequestSoapContext.Security.Tokens.Add(token);
server.RequestSoapContext.Security.Elements.Add(new MessageSignature(token))
return server;
Login the user:
StorageXS.LoginInfo login = server.CheckUserLogin(username.Trim(),
password.Trim(), "clientname");
if(login.LoginStatus > 0) return true;
else return false;
Note: StorageXS is the local reference name used in the above example.
Note: In case you use the WSE 3.0 libraries, you need to manually set the encryption to be 128
bits:
ISecurityTokenManager stm3 =
Microsoft.Web.Services3.Security.Tokens.UsernameTokenManager.GetSecurityTokenManagerByToken
Type(WSTrust.TokenTypes.UsernameToken);
stm3.DefaultKeyAlgorithm = "AES128";
After logging in, this client can have full access to BackupAgent Server functions. Depending on
common use cases, BackupAgent can support and develop custom interfaces or support client-
side development of custom functionality. The working of the WebService is proprietary.
Therefore documentation is limited to this document and the WSDL.
2. SOAP/XML interface - Version 5
In Version 5, the API interface is a WCF interface. By default C# allows easy and reliable access
to BackupAgent WebServices. Following step-by-step instructions show how to access
BackupAgent WebServices.
2.1 Access
3
To access the interface, choose a programming language or software package that supports
client consumption of a WSDL
1. Find the WSDL. In the normal case the WSDL is provided on an url like
https://yourdomain.com/CloudBackupService/BackupService.svc
2. Add a Service Reference, which connects to the above Address.
3. Give the namespace a friendly name such as 'BackupService'
4. Add a valid administrator or group username and password to the Credentials.
5. Set the Authentication.CertificateValidationMode = X509CertificateValidationMode.None
6. Login for user/administrator access calling the CheckUserLogin function.
2.2 Code sample for connecting to a BackupAgent WebService using WCF
The following is a code sample which works using the .Net Framework v4:
Step 1 - include the ServiceModel libraries and the reference to the Service:
using System.ServiceModel;
using System.ServiceModel.Security;
using ConsoleApplicationWCF.BackupService;
Step 2 - add credentials
namespace ConsoleApplicationWCF
{
class Program
{
static void Main(string[] args)
{
EndpointAddress endpointAddress = new EndpointAddress(new
Uri("https://yourcompany/CloudBackupService/BackupService.svc"));
CloudBackupServiceClient client = new
CloudBackupServiceClient("BasicHttpBinding_ICloudBackupService", endpointAddress);
4
Function
Result
Required parameters
Explanation
GetUsersAdmin
An array of strings containing either usernames or a summary of user statistics
bool Totalbool Top10Recentstring ParentUserstring Criteria
The function returns either a set of usernames or a summary of total users given the criteria and parameters
GetOwnerInfo1
An array of OwnerInfo objects containing all information on storage groups
string Owner
The function returns all storage group info or info for a single storage group
GetAccountTypes
An array of AccountType objects
enum TypesToRetreiveenum DescriptionType
The function returns all account types based on the
client.ClientCredentials.UserName.UserName = "username";
client.ClientCredentials.UserName.Password = "password";
client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode =
System.ServiceModel.Security.X509CertificateValidationMode.None;
}
}
}
Step 3 - call the CheckUserLogin function:
LoginInfo login = client.CheckUserLogin_Ex("robbert.demo", "testtest");
3. Available functions
The following functions are available for integration purposes and will be described here in
further detail. Some functions will require public structures (objects or enumerations) as
parameters. The following table shows functions for retrieving server information:
5
enum parametersq GetUserInfoAdmin
An UserInfo object
string Username
Returns all user information of a user
GetAccountInfoAdmin
An AccountInfo object
string Username
Returns all account information of a user
GetChildAccountInfo
An array of UserAccountInfo objects
string ParentUser (group user)enum AccountDescriptionTypeboo l getAllAccountsenum RequestType
Returns a collection of user and account information objects of multiple users
GetUserBackupResults
An array of BackupReportInf o objects
string Usernamestring Language
Returns a collection of backup report objects
GetFullBackupReportInf o
A more detailed BackupReportInf o object
Int BackupReportID (DBID)
Returns a more detailed BackupReportInf o object including logs
GetResellers2
An array of strings containing all group names
bool TotalResellerCount (false)
Returns all groups in the systems
GetResellerInfo
A ResellerInfo object
string ResellerName
Returns all detailed information of a group
GetResellersUsageInfo
Array of ResellerUsageInf o objects
Returns usage info of all groups
1
A storage group is represented in the API as an ‘owner’
2
BackupAgent groups are represented as ‘resellers’ in the API
Next to functions to retrieve information the following functions allow an administrator to
integrate account management (create, change accounts):
6
Function
Result
Parameters
Explanation
CreateAccount
Creates a new user with an account in the BackupAgent Server and returns an integer
string ParentUserUserInfo userInfoAccountInfo accInfostring Usernamestring Passwordstring [Obsolete]string [Obsolete]bool SendEmail
The function creates an account. Return codes:
1: User Ok
-1: Unexpected error
-2: User exists
-5: Wrong Owner
ChangeUserInfoAdmin
Changes UserInfo for a user and returns an integer
string ChangedUserUserInfo newInfo
The function overwrites UserInfo based on the new UserInfo object. Returns 1 if Ok, else returns a negative integer
ChangeAccountInfoAdmin
Changes AccountInfo for a user and returns an integer
string ChangedUserAccountInfo newInfo
The function overwrites AccountInfo based on the new AccountInfo object. Returns 1 if Ok, else returns a negative integer
ActivateAccount
Activates a new or deactivated account and returns an integer
string Usernamestring Passwordbool Encrypted
The function activates an account. As administrator the account can be activated without Password
DeactivateAccount
Deactivates one or more accounts and returns an integer
string[] Usernames
The function deactivates all accounts in the string array
DeleteAccount
Deletes one or more accounts and returns an integer
string[] Usernames bool isReseller
The function deletes all accounts and removes all data in the accounts. Set 'isReseller' to true to indicate that the deleted users are resellers/groups
ResetPassword
Resets password and
string Username
The function resets the password for a user to ‘Backup01’
7
returns an integer
ChangePassword
Allows a user to change a password and returns an integer
string OldPasswordstring NewPassword
If the token of request is a normal user, this user can change his/her own password
CreateOwner
Creates a new storage group and returns an integer
OwnerInfo NewInfobool SetAsDefault
The function creates a new storage group Returns 1 if Ok, else returns a negative integer
ChangeOwner
Changes a storage group and returns an integer
OwnerInfo NewInfo
The function changes a storage group based on an existing OwnerID in the OwnerInfo object.
ChangeDefaultOwner
Sets a storage group as default group
string ResellerNamestring Ownername
The function sets a default group for an administrator/reseller
CreateReseller
Creates a group
UserInfo newInfoResellerInfo newInfostring ResellerNamestring Password
The function creates a (whitelabel) group in the BackupAgent system
ChangeResellerInfo_Ex
Changes settings of a group
String ResellerNameUserInfo newInfoResellerInfo newInfo
The function can change certain settings of a(whitelabel) group
Note: The used credentials for authentication and access (see 3.1.) will also determine
ownership and hierarchy of a group or user. You can overrule this for CreateAccount by setting
the ParentUser property and for CreateReseller by setting the ParentReseller property of the
UserInfo object.
4. Supportive structures
Some functions require objects that are based on public structures (classes or enumerations)
which are part of the WebService public interface.
8
4.1 Enumerations
AccountTypesToRetrieve:
All_AccountTypes Only_Active Only_NonActive
ChildAccountRequestType:
Normal Active New
AccountDescriptionTypes:
Normal_Account Trial_Account Free_Account Normal_And_Trial_Account
UserProfileTypes:
Professional = 1 (“Professional” is called in the user interface “Server”) Home = 2 (“Home” is called in the user interface “Workstation”)
LanguageType:
LanguageType_NL (Dutch) LanguageType_EN (English) LanguageType_FR (French) LanguageType_ES (Spanish) LanguageType_DE (German) LanguageType_IT (Italian) LanguageType_DK (Danish)
9
LanguageType_PL (Polish) LanguageType_HU (Hungarian) LanguageType_RO (Romanian) LanguageType_PT (Portuguese) LanguageType_RU (Russian) LanguageType_TR (Turkish) LanguageType_JA (Japanese)
BackupReportStatus:
Completed_Successfully Completed_Successfully_NonExistentResources Completed_Successfully_Skipped_NonExistentResources Completed_UnSuccessfully Completed_UnSuccessfully_Skipped Completed_UnSuccessfully_NonExistentResources Completed_UnSuccessfully_Skipped_NonExistentResources UserCancelled
4.2 Classes
The following descriptions show the required fields when creating or changing information:
UserInfo:
ID (int) - must be set to 0 when editing - Read-only ParentResellerID (int) - Read-only UserTypeID (int) - Read-only ActiveDirectoryGUID - Read-only ParentReseller (string) - Optional City (string) - Mandatory Company (string) - Mandatory CountryID (integer, 133 is Netherlands) - Mandatory StateID (integer) - Mandatory if country is US - Optional
10
Email (string) - Mandatory FirstName (string) - Mandatory LastName (string) - Mandatory Sex (character: ‘m’ or ‘f’) - Obsolete Occupation (string) - Obsolete Zipcode (string) - Mandatory TelephoneNr (string) - Mandatory DefaultEmailLanguage (LanguageType) - Mandatory
AccountInfo:
AccountInfoID (int) - must be set to 0 when editing - Read-only UserInfoID (int) - must be set to 0 when editing - Read-only Status (int) – must be set to 1 - Mandatory Active (boolean) - Read-only ChangedBy (string) - Read-only AccountTypeName (string) - Read-only AccountType (int) - Mandatory OwnerID (int) - Mandatory TrialUser (boolean) - Mandatory FreeAccount (boolean) - Mandatory MaxSize (int) - Read-only UsedSize (long) - must be set to 0 when editing - Read-only UserProfile (UserProfileType) - Mandatory StartDate (DateTime) - Mandatory EndDate (DateTime) - Mandatory MaxBandwidthUsage (int) - 0 is recommended value - Mandatory Period (int) – Mandatory in case of provisioning a trial account - Optional RestoreActive (boolean) – recommended to set to false - Mandatory HasDigiNotarKey (int) – must be set to 0 when editing - Read-only DigiNotarKeyIsStored (boolean) - Obsolete ObjDigiNotarKey (object) - Obsolete
11
HasEncryptionKey (boolean) – must be set to false - Mandatory MaxVersions (int) – must be set, value 10 is recommended - Obsolete
UserAccountInfo (return objects for GetChildAccountInfo function and is Read-
only):
parentUser (string) username (string) firstName (string) lastName (string) userAccountTypeName (string) isTrial (boolean) period (int) company (string) email (string) objUserStatus (StatusInfo) userProfileType (UserProfileType) accountStartDate (DateTime)
StatusInfo (Read-only object):
usageSizePercentage (double) isFull (boolean) inProgress (boolean) latestBackup (DateTime) backupClientVersionNr (string) backupStatusEnum (BackupReportStatus) latestRestore (DateTime) restoreClientVersionNr (string) restoreStatusEnum (BackupReportStatus)
OwnerInfo:
OwnerID (int) - Read-only
12
UserCount (int) - Read-only ResellerCount (int) - Read-only OwerName (string) - Mandatory StorageLocation (string, path to storage location) - Mandatory LoginName (string) - Obsolete LoginPassword (string) - Obsolete DomainName (string) - Obsolete UseDriveMapping (Boolean) – must be False - Obsolete ResellerName (string) - Optional
AccountType:
AccountTypeID (integer) - must be set to 0 when editing - Read-only TypeName (string) - Mandatory DescriptionType (string) - Mandatory IsActive (boolean) - Mandatory MaxSize (integer) – must be 0 in case of trial account - Mandatory
BackupReportInfo (Read-only object):
userName (string) completeText (string) isBackup (boolean) status (string) longDate (string) computer (string) clientVersionNr (string) operatingSystem (string) startDate (DateTime) endDate (DateTime) duration (string) totalFiles (int) totalSize (string)
13
restoreSizeDownloaded (string) restoreSkippedResources (string) restorePath (string) backupChangedFiles (int) backupSizeChangedFiles (string) backupSizeUploaded (string) backupSkippedResources (int) backupNonExistentResources (int) backupResources (array of strings) nonExistentResources (array of strings) NbNewFiles (int) NbNewFilesUploadedSize (long) NbPatches (int) NbPatchesUploadedSize (long) NbUnchangedFiles (int) DBID (int) ClientLogs (string) statusEnum (BackupReportStatus)
ResellerInfo:
ResellerConfigID (int) - Read-only ParentReseller (string) - Optional accountUpgrade (boolean) - Mandatory accountDowngrade (boolean) - Mandatory automaticDigiNotar (boolean) – must be False - Obsolete allowWhiteLabeling (boolean) - Mandatory allowResellerCreation (boolean) - Mandatory allowHighlighDataGridRow (boolean) – must be False - Mandatory defaultOwner (int) - Mandatory ResellerUserName (string) - Optional supportEMail (string) – we recommend to set this - Optional
14
supportURL (string) - Optional termsURL (string) - Optional registrationURL (string) - Optional logoURL (string) - Optional trialUpgradeURL (string) - Optional stylesheetURL (string) - Optional homepageURL (string) - Optional clientdownloadURL (string) - Optional serviceName (string) - Optional HTMLHeader (string) - Optional HTMLFooter (string) - Optional usagePercentageBeforeEmail (double) - Mandatory dataGridRowCount (int) - recommended setting is 10 - Mandatory ownerIDs (array of string) - Mandatory defaultRegistrationCountry (int) - Mandatory daysWithNoBackupBeforeWarning (int) - Mandatory maxHomeCALS (int) – set it to -1 for unlimited accounts - Mandatory maxProfessionalCALS (int) – set it to -1 for unlimited accounts - Mandatory maxStorageGB (int) – set it to -1 for unlimited accounts - Mandatory allowTrials (boolean) - Mandatory sendLogs (boolean) - Mandatory accountUpgradeByGroup (boolean) - Mandatory accountDowngradeByGroup (boolean) - Mandatory isAllowedRestore (boolean) – must be True - Mandatory AllowAccountDeletion (string) - Optional
ResellerUsageInfo (Read-only object):
ResellerUserName (string) maxHomeUsers (int) usedHomeUsers (int) maxProfessionalUsers (int)
15
usedProfessionalUsers (int)
Exception code
Exception subcode
Nature
999
999
Unknown exception
013
001
License is missing on server
013
002
Mismatch between license and requested URL
013
003
Mismatch for trial license IP address
014
Input sanitation exceptions
015
001
Wrong username
015
002
Wrong password
016
001
The credentials are not sufficient to delete a user
016
other
An exception occured while creating or updating a user
maxStorageGB (int) assignedStorageMB (int) usedStorage (long) assignedStorageLocation (array of int)
5. Public exceptions
This paragraph describes important public exception codes that can be thrown if functions are
called incorrectly or the server is not configured properly.
If an exception occurs within BackupAgent logic, the exception type will always be an inherited
SOAPException of type BAServiceException. The Exception message will contain a series of
numbers in the following format:
“BAWSxxx::xxx:: error message”. The first three digits (xxx) will represent the exception type and
is an indicator for the problem. These next three digits will be the specific exception code.
The following table shows all exception codes that can occur in the functions described in this
document:
16
017
001
Error occured creating an account. Most likely cause is that one of the strings in the UserInfo or AccountInfo object is too long to store in the database.
017
017
License does not allow for account creation through the API
017
other
An exception occured while creating or updating the account for a user. Most likely cause is that the token username is not an administrator or group user.
018
There was a problem sending a notification email, please check the email server settings.
004
Bitmap of missing arguments
Some arguments are missing calling the function
005
Bitmap of empty string arguments that are required
Some required string content is missing or empty
001
Can only happen if the WebService call is not a SOAP request
002
A problem occurred caching the user
003
Function indicator
A problem occurred creating a user session. This occurs if BackupAgent Management Service is not running
All the information on exceptions is limited to indicate the problem. This is for security reasons.
If the exception information is insufficient, please contact BackupAgent support.
Appendix A - Country codes:
ID CountryName CountryCode
1 Uruguay UY
2 Portugal PT
3 Bolivia BO
4 Fiji Islands FJ
5 Sri Lanka LK
6 Botswana BW
7 Cameroon CM
8 Senegal SN
17
9 Guadeloupe GP
10 Romania RO
11 Paraguay PY
12 Mauritius MU
13 Hungary HU
14 Iceland IS
15 Slovakia SK
16 Barbados BB
17 North Korea KP
18 Algeria DZ
19 Lithuania LT
20 Thailand TH
21 Guernsey GG
22 Spain ES
23 United Arab Emirates AE
24 Egypt EG
25 Togo TG
26 Isle of Man IM
27 Ghana GH
28 Peru PE
29 South Africa ZA
30 New Zealand NZ
31 Mali ML
32 Gambia, the GM
33 Central African Republic CF
34 Cocos (Keeling) Islands CC
35 Bahamas BS
36 Cyprus CY
37 Wallis and Futuna WF
38 Bulgaria BG
39 Turkmenistan TM
40 Russia RU
18
41 Puerto Rico PR
42 Germany DE
43 Guinea GN
44 Antarctica AQ
45 United Kingdom GB
46 Pitcairn Islands PN
47 Rwanda RW
48 Greece GR
49 Afghanistan AF
50 Morocco MA
51 Tristan da Cunha TA
52 Haiti HT
53 Maldives MV
54 Jordan JO
55 Slovenia SI
56 Greenland GL
57 Turkey TR
58 Estonia EE
59 Mauritania MR
60 Bermuda BM
61 Vanuatu VU
62 Venezuela VE
63 Tonga TO
64 Nigeria NG
65 Iran IR
66 Trinidad and Tobago TT
67 Cambodia KH
68 Georgia GE
69 St. Helena SH
70 Falkland Islands (Islas Malvinas) FK
71 El Salvador SV
72 Ireland IE
19
73 Guam GU
74 Cayman Islands KY
75 Palau PW
76 Norfolk Island NF
77 Bahrain BH
78 Grenada GD
79 Sierra Leone SL
80 Nicaragua NI
81 Brunei BN
82 Malaysia MY
83 Nauru NR
84 Ascension Island AC
85 Gibraltar GI
86 China CN
87 Jersey JE
88 Czech Republic CZ
89 Switzerland CH
90 Antigua and Barbuda AG
91 Argentina AR
92 Montserrat MS
93 Belgium BE
94 Ethiopia ET
95 Jamaica JM
96 St. Vincent and The Grenadines VC
97 Belize BZ
98 Myanmar MM
99 Chad TD
100 Mongolia MN
101 Madagascar MG
102 Tanzania TZ
103 Macedonia, former Yugoslav Republic of MK
104 Australia AU
20
105 Indonesia ID
106 San Marino SM
107 Luxembourg LU
108 Guatemala GT
109 Kyrgyzstan KG
110 Benin BJ
111 Liechtenstein LI
112 St. Kitts and Nevis KN
113 Heard Island and Mcdonald Islands HM
114 Dominica DM
115 Timor-leste TP
116 American Samoa AS
117 St. Lucia LC
118 Côte d'Ivoire CI
119 Denmark DK
120 British Indian Ocean Territory IO
121 Virgin Islands, British VG
122 Norway NO
123 Malawi MW
124 Reunion RE
125 Honduras HN
126 Japan JP
127 Tuvalu TV
128 Costa Rica CR
129 Qatar QA
130 Palestinian Authority PS
131 Samoa WS
132 Libya LY
133 Papua New Guinea PG
134 Equatorial Guinea GQ
135 Syria SY
136 Comoros KM
21
137 Nepal NP
138 French Southern and Antarctic Lands TF
139 Namibia NA
140 Malta MT
141 Bhutan BT
142 Philippines PH
143 Iraq IQ
144 French Polynesia PF
145 India IN
146 Northern Mariana Islands MP
147 Ecuador EC
148 Canada CA
149 Poland PL
150 Italy IT
151 St. Pierre and Miquelon PM
152 Taiwan TW
153 Kazakhstan KZ
154 Andorra AD
155 Liberia LR
156 Anguilla AI
157 Congo (drc) CD
158 Guyana GY
159 Bangladesh BD
160 Cook Islands CK
161 Djibouti DJ
162 São Tomé and Príncipe ST
163 Austria AT
164 Niue NU
165 Uganda UG
166 Bosnia and Herzegovina BA
167 Monaco MC
168 French Guiana GF
22
169 Bouvet Island BV
170 Cape Verde CV
171 Zambia ZM
172 South Georgia and The South Sandwich Islands GS
173 Sudan SD
174 Kuwait KW
175 United States Minor Outlying Islands UM
176 Guinea-Bissau GW
177 Christmas Island CX
178 Latvia LV
179 Belarus BY
180 Solomon Islands SB
181 Seychelles SC
182 Kiribati KI
183 Lebanon LB
184 Turks and Caicos Islands TC
185 Suriname SR
186 Finland FI
187 Uzbekistan UZ
188 Croatia HR
189 Lesotho LS
190 Albania AL
191 Virgin Islands, British VG
192 Congo CG
193 Yemen YE
194 France FR
195 Moldova MD
196 Laos LA
197 Panama PA
198 Vietnam VN
199 Mayotte YT
200 Mozambique MZ
23
201 Pakistan PK
202 Serbia and Montenegro YU
203 Netherlands Antilles AN
204 Eritrea ER
205 Burkina Faso BF
206 Cuba CU
207 Sweden SE
208 Tajikistan TJ
209 Brazil BR
210 Netherlands NL
211 Azerbaijan AZ
212 Svalbard and Jan Mayen SJ
213 Armenia AM
214 United States US
215 Israel IL
216 Gabon GA
217 Aruba AW
218 Singapore SG
219 Tokelau TK
220 Mexico MX
221 Vatican City VA
222 Faroe Islands FO
223 Swaziland SZ
224 Ukraine UA
225 Dominican Republic DO
226 Korea KR
227 Oman OM
228 Kenya KE
229 New Caledonia NC
230 Saudi Arabia SA
231 Somalia SO
232 Angola AO
24
233 Burundi BI
234 Tunisia TN
235 Zimbabwe ZW
236 Marshall Islands MH
237 Hong Kong Sar HK
238 Micronesia FM
239 Niger NE
240 Colombia CO
241 Chile CL
242 Martinique MQ
243 Macao Sar MO
244 So Tom and Prncipe ST
Appendix B - US State codes:
ID StateName
1 Alabama
2 Alaska
3 Arizona
4 Arkansas
5 California
6 Colorado
7 Connecticut
8 Delaware
9 Florida
10 Georgia
11 Hawaii
12 Idaho
13 Illinois
14 Indiana
15 Iowa
16 Kansas
25
17 Kentucky
18 Louisiana
19 Maine
20 Maryland
21 Massachusetts
22 Michigan
23 Minnesota
24 Mississippi
25 Missouri
26 Montana
27 Nebraska
28 Nevada
29 New Hampshire
30 New Jersey
31 New Mexico
32 New York
33 North Carolina
34 North Dakota
35 Ohio
36 Oklahoma
37 Oregon
38 Pennsylvania
39 Rhode Island
40 South Carolina
41 South Dakota
42 Tennessee
43 Texas
44 Utah
45 Vermont
46 Virginia
47 Washington
48 West Virginia
26
49 Wisconsin
50 Wyoming
51 District of Columbia
27
Loading...